Тема: Работа с таблицей через LISP

Как вставлять в существующую таблицу (таблица AutoCad) значения. Как выбирать ячейки? Подскажите пожалуйста.

Re: Работа с таблицей через LISP

> Юрий
Я бы советовал открыть эту разделе AutoCAD.
Вопрос не совсем понятен. О каких таблицах идёт речь. Таблицы  AutoCAD 2006 или?

Re: Работа с таблицей через LISP

Именно они, я так полагаю. На самом деле ничего страшного нет. См.в справке метод (AddTable), некоторые методы:

      (vla-setcellgridlineweight
        table
        row_counter
        col_counter
        (+ acleftmask acrightmask)
        aclnwt050
        ) ;_ end of vla-SetCellGridLineWeight

Это установка весов линий границ ячеек таблицы в 0,5 (слева и справа). Или вот,

(vla-mergecells table min_row max_row min_col max_col)

Объединение ячеек диапазона по строкам и столбцам. Аналогичным образом можно добираться и до текстовых значений в таблицах.

Re: Работа с таблицей через LISP

vla-gettext,vla-settext
Ряды и столбцы имеют нумерацию от 0.
Если значения в ячейке нет возвращаемое значение пустая строка то же самое происходит при попытке считать ячейку с несуществующим адресом.(при попытке записать значение в несуществующую ячейку конечно ошибка)
Поэтому при работе необходимо отслеживать количество рядов и столбцов , указанных в свойствах таблицы.
(vla-settext <таблица> 0 0 "proverka")

Re: Работа с таблицей через LISP

Уважаемый kpbIc (или кто-нибудь другой)!
Подскажите как в ячейку таблицы (элемент автокада "_-table") вставить блок (элемент автокада "_.block")??
Если это метод

SetBlockTableRecordId

(object.SetBlockTableRecordId(row, col, blkId, bAutoFit)), то что-то такое blkId? Где его взять? И что это за тип данных такой Long_PTR?
Или все-таки каким-то другим методом??
Использую AutoCAD Architecture 2008 (профиль AutoCAD).

Re: Работа с таблицей через LISP

(setq ent   (vlax-ename->vla-object (car (entsel "\nВыбрать таблицу : ")))
      blkid (vlax-ename->vla-object (car (entsel "\nУказать блок : ")))
      ) ;_ end of setq
(vla-setblocktablerecordid
  ent
  3
  2
  (vla-get-objectid
    (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name blkid))
    ) ;_ end of vla-get-objectid
  :vlax-false
  ) ;_ end of vla-SetBlockTableRecordId

Примерно так...

Re: Работа с таблицей через LISP

О как все замудрЁнно! Но все получилось! Спасибо.

Re: Работа с таблицей через LISP

Command: _appload Копия копия1.lsp successfully loaded.
Command:
Выбрать таблицу : ; error: no function definition: VLAX-ENAME->VLA-OBJECT
т.е по таблице я щелкнула далее сбой ACAD 2010
vla-gettext,vla-settext пишет нет таких функций.

Кто прокомментирует?

Re: Работа с таблицей через LISP

Владимир пишет:

Command: _appload Копия копия1.lsp successfully loaded.
Command:
Выбрать таблицу : ; error: no function definition: VLAX-ENAME->VLA-OBJECT
т.е по таблице я щелкнула далее сбой ACAD 2010
vla-gettext,vla-settext пишет нет таких функций.

Кто прокомментирует?

Обычно не хватает такой строки в начале программы:

(vl-load-com)

которая подгружает библиотеки ActiveX
позволяющие работать с VLA-функциями

~'J'~

Re: Работа с таблицей через LISP

А можно ли программно редактировать атрибуты блока, вставленного в ячейку таблицы?