Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Создание спецификации автоматически (Дубль2)
Диалог специалистов АВОК > ФАЙЛОТЕКА СПЕЦИАЛИСТА > Программы, расчеты
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
kpblc
Ну ёпырысыты... Да не в объектах дело, а в словарях! Получить-то объекты - запросто!
Код
(defun getcont (/ blk res)
  (vl-load-com)
  (if
    (and
      (= (type (setq
                 ent (vl-catch-all-apply
                       '(lambda () (car (entsel "\nУкажи дин.блок <Отмена> : ")))
                       );_ end of vl-catch-all-apply
                 );_ end of setq
               );_ end of type
         'ename
         );_ end of =
      (= (cdr (assoc 0 (entget ent))) "INSERT")
      (equal (vla-get-isdynamicblock (setq ent (vlax-ename->vla-object ent)))
             :vlax-true
             );_ end of equal
      );_ end of and
     (progn
       (vlax-for subent
                 (vla-item (vla-get-blocks
                             (vla-get-activedocument (vlax-get-acad-object))
                             );_ end of vla-get-blocks
                           (vla-get-effectivename ent)
                           );_ end of vla-item
         (setq res (cons subent res))
         );_ end of vlax-for
       );_ end of progn
     );_ end of if
  res
  );_ end of defun

А словари лежат в описании блока, и не привязаны к примитивам блока.
---
Добавлено:
> #549 : Как спозиционировать окно в строго определенном месте - не знаю, единственное что могу порекомендовать - смотреть реестр, окна хранят информацию о своем состоянии там. Конкретная ветка - не знаю, но искать надо в HKEY_CURRENT_USER\Software, а там, скорее всего, в \Autodesk\AutoCAD<бла-бла-бла>\Profiles\<Current profile>\Dialogs, либо в Microsoft где-то. Надо шерстить RegShot'ом.
> #550 : Да ну??? А чем же тебя vla-addline BlockDefinition не устраивает? Я тебе блок в 5 секунд создам (но не динамический wink.gif)
Supermax
Ну и что я говорил? - Нету в списке этих объектов!
Вот как должен выглядеть в списке объект
Код
#<VLA-OBJECT IAcadBlockLookupActionEntity 05a97ebc>

Не нашел твой лисп этот эелемент.

Все нашел, до последней точки и черточки, а эти - не видит в упор.
Поскольку нет их в коллекциях Blocks и ModelSpace

Про позиционирование окна - разобрался. Теперь можно и мышку сэмулировать и тыкать в ячейки программно.
Не морщись, мы ведь Русские, не получается "по человечески" сделаем "по Русски" с помощью зубила и какой-то матери.
Надо корефея в Delphi найти, чтоб помог значит. Если удасться всковырнуть всетаки мозг дин блокам - сделаем программно. А пока - где мое зубило и молоток?
kpblc
Ну ты что, издеваешься?
Есть несколько видов объектов: графические (отрезки, полилинии, точки, тексты, атрибуты блоков) и неграфические (словари, расширенные данные, свойства файла). Поведение динамического блока обуславливается наличием в его описании словарей - неграфических данных, которые в своем составе, судя по всему, содержат указатели на обрабатываемые примитивы. Для доступа к словарям описания блока надо использовать код, аналогичный приведенному в #507.
Визуальное отображение Action обеспечивается несколькими arx-приложениями, работающими напрямую с графическим ядром acad.exe. Эти ручки, черточки и прочая лабуда - его в графических примитивах блоков нет!
Ты просил получить доступ к примитивам блока? Я сделал.
Тебе надо словари? Смотри #507. Или:
Код
_$ (setq lst (entget (TBLOBJNAME "block" (vla-get-EffectiveName (vlax-ename->vla-object (car (entsel))))) '("*")))
((-1 . <Имя объекта: 7edf9fb0>) (0 . "BLOCK") (330 . <Имя объекта: 7edf9f68>) (5 . "10E") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 5) (100 . "AcDbBlockBegin") (70 . 0) (10 0.0 0.0 0.0) (-2 . <Имя объекта: 7edd0430>) (2 . "Отвод Ст 159х4.5-1-ППУ-ПЭ") (1 . ""))
_$ (setq aa (cdr (assoc 330 lst)))
<Имя объекта: 7edf9f68>
_$ (entget aa)
((-1 . <Имя объекта: 7edf9f68>) (0 . "BLOCK_RECORD") (5 . "E5") (102 . "{ACAD_XDICTIONARY") (360 . <Имя объекта: 7edf5190>) (102 . "}") (330 . <Имя объекта: 7edf9c08>) (100 . "AcDbSymbolTableRecord") (100 . "AcDbBlockTableRecord") (2 . "Отвод Ст 159х4.5-1-ППУ-ПЭ") (360 . <Имя объекта: 7edf9fb0>) (340 . <Имя объекта: 0>)
(310 . "2800000020000000200000000100080000000000000400000000000000000000000000000000000000000000000080000080000000808000800000008000800080800000C0C0C000C0DCC000F0CAA6000020400000206000002080000020A0000020C0000020E00000400000004020000040400000406000004080000040A0")
(310 . "000040C0000040E00000600000006020000060400000606000006080000060A0000060C0000060E00000800000008020000080400000806000008080000080A0000080C0000080E00000A0000000A0200000A0400000A0600000A0800000A0A00000A0C00000A0E00000C0000000C0200000C0400000C0600000C0800000C0")
(310 . "A00000C0C00000C0E00000E0000000E0200000E0400000E0600000E0800000E0A00000E0C00000E0E00040000000400020004000400040006000400080004000A0004000C0004000E00040200000402020004020400040206000402080004020A0004020C0004020E000404000004040200040404000404060004040800040")
(310 . "40A0004040C0004040E00040600000406020004060400040606000406080004060A0004060C0004060E00040800000408020004080400040806000408080004080A0004080C0004080E00040A0000040A0200040A0400040A0600040A0800040A0A00040A0C00040A0E00040C0000040C0200040C0400040C0600040C08000")
(310 . "40C0A00040C0C00040C0E00040E0000040E0200040E0400040E0600040E0800040E0A00040E0C00040E0E00080000000800020008000400080006000800080008000A0008000C0008000E00080200000802020008020400080206000802080008020A0008020C0008020E00080400000804020008040400080406000804080")
(310 . "008040A0008040C0008040E00080600000806020008060400080606000806080008060A0008060C0008060E00080800000808020008080400080806000808080008080A0008080C0008080E00080A0000080A0200080A0400080A0600080A0800080A0A00080A0C00080A0E00080C0000080C0200080C0400080C0600080C0")
(310 . "800080C0A00080C0C00080C0E00080E0000080E0200080E0400080E0600080E0800080E0A00080E0C00080E0E000C0000000C0002000C0004000C0006000C0008000C000A000C000C000C000E000C0200000C0202000C0204000C0206000C0208000C020A000C020C000C020E000C0400000C0402000C0404000C0406000C0")
(310 . "408000C040A000C040C000C040E000C0600000C0602000C0604000C0606000C0608000C060A000C060C000C060E000C0800000C0802000C0804000C0806000C0808000C080A000C080C000C080E000C0A00000C0A02000C0A04000C0A06000C0A08000C0A0A000C0A0C000C0A0E000C0C00000C0C02000C0C04000C0C06000")
(310 . "C0C08000C0C0A000F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(310 . "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(310 . "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(310 . "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4A4A4FF00000000000000000000000000")
(310 . "000000000000000000000000000000A4A4A4FF00000000000000000000000000000000000000000000000000000000A4A4A4FF00000000000000000000000000000000000000000000000000000000A4A4A4FF00000000000000000000000000000000000000000000000000000000A4A4A4FF000000000000000000000000")
(310 . "00000000000000000000000000000000A4A4A4FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(310 . "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(310 . "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(310 . "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))
Вот aa и надо разбирать "по косточкам". Примерно так:
Код
_$ (entget (cdr (assoc 360 (entget aa))))
((-1 . <Имя объекта: 7edf5190>) (0 . "DICTIONARY") (330 . <Имя объекта: 7edf9f68>) (5 . "33EA") (100 . "AcDbDictionary") (280 . 1) (281 . 1) (3 . "ACAD_ENHANCEDBLOCK") (360 . <Имя объекта: 7edf5198>) (3 . "AcDbDynamicBlockRoundTripPurgePreventer") (360 . <Имя объекта: 7edf5458>))
И проходить по 360 группе.
Код
_$ (setq lst_dict (mapcar 'cdr (vl-remove-if-not '(lambda(x) (= (car x) 360)) (entget (cdr (assoc 360 (entget aa)))))))
(<Имя объекта: 7edf5198> <Имя объекта: 7edf5458>)
Попытки получить (entget) для каждого элемента моментально показывают наличие реакторов, завязанных на другие словари. в 360-й группе лежат действия на Visibility и Rotation - и Action, и Parameter:
Код
_$ (mapcar '(lambda(y) (mapcar '(lambda(z) (cdr(assoc 0 (entget (cdr z))))) (vl-remove-if-not '(lambda(x) (= (car x) 360)) (entget y)))) lst_dict)
(("BLOCKVISIBILITYPARAMETER" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION" "BLOCKROTATIONPARAMETER" "BLOCKROTATEACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLOOKUPPARAMETER" "BLOCKLOOKUPACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION" "BLOCKLINEARPARAMETER" "BLOCKSTRETCHACTION") nil)
Еще раз говорю - это неграфические данные! Но запутано там все конкретно для сторннего разработчика...
Supermax
Ага, это уже что-то. Я чуток поковырял твою письменность
Код
(mapcar '(lambda(y) (mapcar '(lambda(z) (entget (cdr z))) (vl-remove-if-not '(lambda(x) (= (car x) 360)) (entget y)))) lst_dict)


Вывалился офигенный список, из которго я нашел
Код
((-1 . <Entity name: 7ef83400>)
(0 . "BLOCKSTRETCHACTION")
(330 . <Entity name: 7ef83198>)
(5 . "3430")
(100 . "AcDbEvalExpr")
(90 . 180)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Стенка")
(98 . 25)
(99 . 76)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 1)
(330 . <Entity name: 7ef83180>)
(1010 1757.68 2828.87 0.0)
(100 . "AcDbBlockStretchAction")
(92 . 176)
(301 . "EndXDelta")
(93 . 176)
(302 . "EndYDelta")
(72 . 2)
(1011 1629.34 2847.83 0.0)
(1011 1326.06 3187.61 0.0)
(73 . 1)
(331 . <Entity name: 7ef83180>)
(74 . 1)
(94 . 1)
(75 . 0)
(140 . 1.0)
(141 . 0.0)
(280 . 0))


Там почти все лежат. Этот объект "Стенка" я знаю хорошо. И вот StretchAction к нему нашелся и его все свойства.
Kpblc - ты гений!
Supermax
Вот так, лучше не делать!
Код
(mapcar '(lambda(y) (mapcar '(lambda(z) (entget (cdr (assoc 330 (entget (cdr z)))))) (vl-remove-if-not '(lambda(x) (= (car x) 360)) (entget y)) )) lst_dict)
Supermax
Во всех элементах лежит один и тот же словарь (0 . "BLOCKVISIBILITYPARAMETER") В нем очень большой список и (330 . <Entity name: 7ef83198>) (0 . "ACAD_EVALUATION_GRAPH") в нем (0 . "DICTIONARY") и ссылка вверх по словарю. В общем дальше не интересно.
Щас попробую создать объект по DXF кодам.
kpblc
> #555 : интересно, почему? Ну получишь длиннющий список, и ладно - расковыривай его до посинения smile.gif
> #556 : неправда ваша. Как же я получил разные имена словарей в #553?
Supermax
#556 Наоборот, это они лежат в этом словаре и в них ссылка на него. Считай 360-х кодов больше нет. а по ззо-ым я прошел до упора. Но это уже не главное. Есть набор DXF-кодов динамического элемента и можно попробовать его по ним создать.
Supermax
Увы
Код
(entmake (cdr (car (reverse (car (mapcar '(lambda(y) (mapcar '(lambda(z) (entget (cdr z))) (vl-remove-if-not '(lambda(x) (= (car x) 360)) (entget y)))) lst_dict))))))


; error: bad DXF group: (1071 . 0)
Supermax
Кстати, (entget (car (entsel))) на динамических свойсвах дает только один код (-1 . ...) и все. Что говорит о том, что создать или отредактировать такой объект через Entmod или entmake или entmakex не получится.
Давай зубилом, а? Ну что ты в самом деле уперся? Не ты один бьешся лбом об эту стену, о кстати и смайлик такой есть bang.gif . Хочешь стать таким blink.gif ? Умный в гору не пойдет, умный гору обойдет. Или: Умный в гору не пойдет, он в ней сделает проход, или умный в гору не пойдет, он и так на ней живет (это про грузин), или: умный в гору не пойдет, умный гору подорвет (это про американцев), или: умный в гору не пойдет, он других туда пошлет (это про хохлов). Все иссяк.
kpblc
ИМХО (поскольку работы немеряно, коды рисовать не получается): надо разбирать словарь полностью, вплоть до примитивов, на которые он указывает. Возможно, придется постоянно выполнять преобразования vla<->ename. Создание словарей должно быть привязано именно к ним.
Supermax
У тебя MS Project есть?
kpblc
Может, и болтается где-то инсталл. А что?
Supermax
В нем очень круто можно дерево вложенности сделать, с заметками, в которых сохранить распечатку свойств каждого шага. Я уже начал сегодняшний результат разворачивать.
kpblc
Я в нем последний раз работал года 3 назад smile.gif
Supermax
Так ничего и не надо, кроме первой колонки
Supermax
По закону подлости, то, что я искал и ты тоже, было в самом конце. Разбирая элемент BLOCKLOOKUPACTION
В нем я создал две строки с наименованием значения "Первая надпись" и "Вторая надпись" и привязал к длинне в левой колонке "Первая надпись" к длинне 100мм. а "Вторая надпись" к длинне 200мм. Название этого Lookup-a "Второй".

Код
(nth 18 (car (mapcar '(lambda(y) (mapcar '(lambda(z) (entget (cdr z))) (vl-remove-if-not '(lambda(x) (= (car x) 360)) (entget y)))) lst_dict)))

(
(-1 . <Entity name: 7efa21b0>)
(0 . "BLOCKLOOKUPACTION")
(330 . <Entity name: 7efa2020>)
(5 . "126")
(100 . "AcDbEvalExpr")
(90 . 19)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Второй")
(98 . 25)
(99 . 76)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 0)
(1010 566.948 -247.188 0.0)
(100 . "AcDbBlockLookupAction")
(92 . 2)
(93 . 2)
(301 . "")
(302 . "100.0000000000000")
(302 . "Первая надпись")
(302 . "200.0000000000000")
(302 . "Вторая надпись")
(303 . "")
(94 . 5)
(95 . 40)
(96 . 2)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedDistance")
(303 . "")
(94 . 15)
(95 . 1)
(96 . 0)
(282 . 1)
(305 . "Custom")
(281 . 1)
(304 . "lookupString")
(280 . 1)
)


Вот они где зарыты эти строчки из Lookup-a!
Supermax
А вот так выглядит Lookup action если в него вставить привязку этих строк еще и к углу поворота объекта.
Код
(
(-1 . <Entity name: 7efa2750>)
(0 . "BLOCKLOOKUPACTION")
(330 . <Entity name: 7efa26b8>)
(5 . "1D2")
(100 . "AcDbEvalExpr")
(90 . 19)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Второй")
(98 . 25)
(99 . 76)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 0)
(1010 566.948 -247.188 0.0)
(100 . "AcDbBlockLookupAction")
(92 . 2)
(93 . 3)
(301 . "")
(302 . "100.0000000000000")
(302 . "0.3490658503988659")
(302 . "Первая надпись")
(302 . "200.0000000000000")
(302 . "0.6981317007977318")
(302 . "Вторая надпись")
(303 . "")
(94 . 5)
(95 . 40)
(96 . 2)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedDistance")
(303 . "")
(94 . 10)
(95 . 40)
(96 . 1)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedAngle")
(303 . "")
(94 . 15)
(95 . 1)
(96 . 0)
(282 . 1)
(305 . "Custom")
(281 . 0)
(304 . "lookupString")
(280 . 1)
)


Только вот я первую строку привязал к углу поворота 10 градусов, а вторую 20 градусов, а тут радианы чтоли?
Supermax
А вот я привязал эти две строки еще и VisibilityParametr-у то есть к окнам и поменял значение "только для чтения" к значению "для управления"
Код
(
(-1 . <Entity name: 7efa2aa0>)
(0 . "BLOCKLOOKUPACTION")
(330 . <Entity name: 7efa2a08>)
(5 . "234")
(100 . "AcDbEvalExpr")
(90 . 19)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Второй")
(98 . 25)
(99 . 76)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 0)
(1010 566.948 -247.188 0.0)
(100 . "AcDbBlockLookupAction")
(92 . 2)
(93 . 4)
(301 . "")
(302 . "100.0000000000000")
(302 . "0.3490658503988659")
(302 . "VisibilityState0")
(302 . "Первая надпись")
(302 . "200.0000000000000")
(302 . "0.6981317007977318")
(302 . "VisibilityState0")
(302 . "Вторая надпись")
(303 . "")
(94 . 5)
(95 . 40)
(96 . 2)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedDistance")
(303 . "")
(94 . 10)
(95 . 40)
(96 . 1)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedAngle")
(303 . "")
(94 . 1)
(95 . 1)
(96 . 0)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "VisibilityState")
(303 . "")
(94 . 15)
(95 . 1)
(96 . 0)
(282 . 1)
(305 . "Custom")
(281 . 1)
(304 . "lookupString")
(280 . 1)
)


Supermax
Тоже самое, только доступ к Lookup-У "только для чтения"
Код
(
(-1 . <Entity name: 7ebf5120>)
(0 . "BLOCKLOOKUPACTION")
(330 . <Entity name: 7ebf5088>)
(5 . "2F4")
(100 . "AcDbEvalExpr")
(90 . 19)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Второй")
(98 . 25)
(99 . 76)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 0)
(1010 566.948 -247.188 0.0)
(100 . "AcDbBlockLookupAction")
(92 . 2)
(93 . 4)
(301 . "")
(302 . "100.0000000000000")
(302 . "0.3490658503988659")
(302 . "VisibilityState0")
(302 . "Первая надпись")
(302 . "200.0000000000000")
(302 . "0.6981317007977318")
(302 . "VisibilityState0")
(302 . "Вторая надпись")
(303 . "")
(94 . 5)
(95 . 40)
(96 . 2)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedDistance")
(303 . "")
(94 . 10)
(95 . 40)
(96 . 1)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedAngle")
(303 . "")
(94 . 1)
(95 . 1)
(96 . 0)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "VisibilityState")
(303 . "")
(94 . 15)
(95 . 1)
(96 . 0)
(282 . 1)
(305 . "Custom")
(281 . 0)
(304 . "lookupString")
(280 . 1)
)


281 DXF-код:

0 - Read only; 1 - Allow reverse lookup
Supermax
Да, как все оказалось просто. Тупая таблица. 301 кодом начинается (маркер) 303 кончается. 302 код - значение ячеек в столбцах. Название столбцов, их ширина ниже.
Идет банальное перечисление слева направо значений ячеек. Закончилась строка - следующая пошла.

Вот сейчас ширину столбца первого изменю.
Supermax
Вот что получилось: Поменял ширину первого столбца, примерно в два раза больше сделал.
Код
(
(-1 . <Entity name: 7ebf55a0>)
(0 . "BLOCKLOOKUPACTION")
(330 . <Entity name: 7ebf5508>)
(5 . "37C")
(100 . "AcDbEvalExpr")
(90 . 19)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Второй")
(98 . 25)
(99 . 76)
(1071 . 0)
(100
. "AcDbBlockAction")
(70 . 0)
(71 . 0)
(1010 566.948 -247.188 0.0)
(100 . "AcDbBlockLookupAction")
(92 . 2)
(93 . 4)
(301 . "")
(302 . "100.0000000000000")
(302 . "0.3490658503988659")
(302 . "VisibilityState0")
(302 . "Первая надпись")
(302 . "200.0000000000000")
(302 . "0.6981317007977318")
(302 . "VisibilityState0")
(302 . "Вторая надпись")
(303 . "")
(94 . 5)
(95 . 40)
(96 . 2)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedDistance")
(303 . "")
(94 . 10)
(95 . 40)
(96 . 1)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedAngle")
(303 . "")
(94 . 1)
(95 . 1)
(96 . 0)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "VisibilityState")
(303 . "")
(94 . 15)
(95 . 1)
(96 . 0)
(282 . 1)
(305 . "Custom")
(281 . 0)
(304 . "lookupString")
(280 . 1)
)


Не, ширина колонок не здесь зарыта, а в описании окна, которое создается под диктовку этого объекта, но свойство окна прописаны там скорее всего.
Supermax
Добавил строк, но соответствия значениям динамических параметров не ставил и вот что получилось:

Код
(
(-1 . <Entity name: 7ebf58e8>)
(0 . "BLOCKLOOKUPACTION")
(330 . <Entity name: 7ebf5850>)
(5 . "3DD")
(100 . "AcDbEvalExpr")
(90 . 19)
(98 . 25)
(99 . 76)
(100 . "AcDbBlockElement")
(300 . "Второй")
(98 . 25)
(99 . 76)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 0)
(1010 566.948 -247.188 0.0)
(100 . "AcDbBlockLookupAction")
(92 . 6)
(93 . 4)
(301 . "")
(302 . "100.0000000000000")
(302 . "0.3490658503988659")
(302 . "VisibilityState0")
(302 . "Первая надпись")
(302 . "200.0000000000000")
(302 . "0.6981317007977318")
(302 . "VisibilityState0")
(302 . "Вторая надпись")
(302 . "")
(302 . "")
(302 . "")
(302 . "Третья надпись")
(302 . "")
(302 . "")
(302 . "")
(302 . "Четвертая надпись")
(302 . "")
(302 . "")
(302 . "")
(302 . "Пятая надпись")
(302 . "")
(302 . "")
(302 . "")
(302 . "И нигде не ставлю значений соответствия")
(303 . "")
(94 . 5)
(95 . 40)
(96 . 2)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedDistance")
(303 . "")
(94 . 10)
(95 . 40)
(96 . 1)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "UpdatedAngle")
(303 . "")
(94 . 1)
(95 . 1)
(96 . 0)
(282 . 0)
(305 . "Custom")
(281 . 0)
(304 . "VisibilityState")
(303 . "")
(94 . 15)
(95 . 1)
(96 . 0)
(282 . 1)
(305 . "Custom")
(281 . 0)
(304 . "lookupString")
(280 . 1)
)


Как видим, все равно надо вставлять пустые 302-е коды это очень важно.
Supermax
Вот я взял и выключил ручку у lookup-а стало:
Код
(("BLOCKVISIBILITYPARAMETER"
"BLOCKVISIBILITYGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKLINEARPARAMETER"
"BLOCKLINEARGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKSTRETCHACTION"
"BLOCKROTATIONPARAMETER"
"BLOCKROTATIONGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKROTATEACTION"
"BLOCKLOOKUPPARAMETER"
"BLOCKLOOKUPACTION") nil)


Включил ручку у lookup-a стало:

Код
(("BLOCKVISIBILITYPARAMETER"
"BLOCKVISIBILITYGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKLINEARPARAMETER"
"BLOCKLINEARGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKSTRETCHACTION"
"BLOCKROTATIONPARAMETER"
"BLOCKROTATIONGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKROTATEACTION"
"BLOCKLOOKUPPARAMETER"
"BLOCKLOOKUPACTION"
"BLOCKLOOKUPGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
) nil)


Вот эти
"BLOCKLOOKUPGRIP"
"BLOCKGRIPLOCATIONCOMPONENT"
"BLOCKGRIPLOCATIONCOMPONENT"
Определяют видимость ручки у Lookup-a. Последние два: Верхний положение по X, а нижний по Y.

Последовательность в точности совпадает с последовательностью создания самих элементов мною.
Supermax
А вот вообще все ручки выключил
Код
((
"BLOCKVISIBILITYPARAMETER"
"BLOCKLINEARPARAMETER"
"BLOCKSTRETCHACTION"
"BLOCKROTATIONPARAMETER"
"BLOCKROTATEACTION"
"BLOCKLOOKUPPARAMETER"
"BLOCKLOOKUPACTION"
) nil)
Supermax
Все, Entmod не работает и работать не будет, там в списке
(1010 566.948 -247.188 0.0)
и (1071 . 0)
Со вторым ничего страшного, а это, первое, толи код, толи 4 значения - entmod ругается и показывает это
; error: bad DXF group: (1010 566.948 -247.188 0.0)
Я удаляю из списка и то и другое - все равно показывает это.

Ну не буду редактировать, но все оказывается работает. Только надо убивать эти две заразы. Они потом сами восстанавливаются.
Supermax
Он даже сам себя модифицировать отказывается. То есть я беру список и без изменений пытаюсь его модифицировать - выбрасывает с начала, что ему не нравится (1071 . 0) потом эту фигню.
Вот она страничка с lookup-ом видишь? Все в ней есть, да песчинка машину сгубила. mad.gif
Supermax
Кстати у Полещука написано, что Entmod должен либо список выдавать в случае успешной модификации, либо nil в случае не возможности выполнения, а он ни то, ни другое не выдает. Он ругается и плюется корявыми списками. dry.gif
Supermax
Да-а-а-вай з-у-у-билом ее отрехтуем!!! mad.gif
Supermax
Попробовал Entmod прокачать на всю группу - прошло однако. Можно свойства местами переставлять при желании. Только там они в определенном порядке (да простят меня зрители)
Код
((-1 . <Entity name: 7ea26620>)
(0 . "ACAD_EVALUATION_GRAPH")
(5 . "56C")
(102 . "{ACAD_REACTORS")
(330 . <Entity name: 7ea26618>)
(102 . "}")
(330 . <Entity name: 7ea26618>)
(100 . "AcDbEvalGraph")
(96 . 22)
(97 . 22)
(91 . 0) (93 . 32) (95 . 1) (360 . <Entity name: 7ea26628>) (92 . -1) (92 . -1) (92 . 4) (92 . 4)
(91 . 1) (93 . 32) (95 . 5) (360 . <Entity name: 7ea26648>) (92 . -1) (92 . -1) (92 . 0) (92 . 2)
(91 . 2) (93 . 32) (95 . 9) (360 . <Entity name: 7ea26668>) (92 . 0) (92 . 0) (92 . -1) (92 . -1)
(91 . 3) (93 . 32) (95 . 10) (360 . <Entity name: 7ea26670>) (92 . -1) (92 . -1) (92 . 1) (92 . 3)
(91 . 4) (93 . 32) (95 . 14) (360 . <Entity name: 7ea26690>) (92 . 1) (92 . 1) (92 . -1) (92 . -1)
(91 . 5) (93 . 32) (95 . 15) (360 . <Entity name: 7ea26698>) (92 . 5) (92 . 5) (92 . -1) (92 . -1)
(91 . 6) (93 . 32) (95 . 19) (360 . <Entity name: 7ea266a0>) (92 . 2) (92 . 4) (92 . 5) (92 . 5)

(92 . 0) (93 . 0) (94 . 2) (91 . 1) (91 . 2) (92 . -1) (92 . -1) (92 . -1) (92 . 2) (92 . -1)
(92 . 1) (93 . 0) (94 . 3) (91 . 3) (91 . 4) (92 . -1) (92 . -1) (92 . -1) (92 . 3) (92 . -1)
(92 . 2) (93 . 0) (94 . 1) (91 . 1) (91 . 6) (92 . -1) (92 . 3) (92 . 0) (92 . -1) (92 . -1)
(92 . 3) (93 . 0) (94 . 1) (91 . 3) (91 . 6) (92 . 2) (92 . 4) (92 . 1) (92 . -1) (92 . -1)
(92 . 4) (93 . 0) (94 . 1) (91 . 0) (91 . 6) (92 . 3) (92 . -1) (92 . -1) (92 . -1) (92 . -1)
(92 . 5) (93 . 0) (94 . 1) (91 . 6) (91 . 5) (92 . -1) (92 . -1) (92 . -1) (92 . -1) (92 . -1)
)


Вот это я так полагаю надо двигать вместе.
Код
(91 . 0) (93 . 32) (95 . 1) (360 . <Entity name: 7ea26628>) (92 . -1) (92 . -1) (92 . 4) (92 . 4)


Все уже двигается http://dwg.ru/f/showthread.php?t=24597&page=9
kpblc
Ну ты наваял, пока я до машины добирался...
Последовательность хранения параметров равна последовательности их создания. То же самое и с обычными графическими примитивами. Блин, ко мне теща приехала, за машиной посидеть не удастся. Посему: 1071 - код, который entmod понимает как код расширенных данных (насколько я помню DXF Reference). Абзац. Не лечится.
Я сильно опасаюсь, что создать такой словарь в принципе лиспом невозможно. Хотел бы я ошибаться.
---
Добавлено: изменить имеющиеся записи по порядку, как это ты сделал, наверное, возможно. Но вот дополнить их?
---
Теперь почему я не хочу в принципе эмулировать работу с окном. Сейчас у тебя, к примеру, тема оформления Windows XP. Поставь классическую, увеличь размеры шрифта, размеры заголовков окна - в общем, приведи ее в "неклассический до упора" вид. Определи, где начинается контрол таблицы в окне параметров дин.блока!
Supermax
Вот до чего доводят эксперементы на живых людях.
Supermax
Эмулятор нажатия клавиш готов.
Надо запустить команду _.BLOOKUPTABLE в прозрачном режиме, чтобы макрос мог работать дальше не дожидаясь конца ее работы.
Kpblc, ты жив?
kpblc
Дело не только и не столько в этом. Лично у меня сейчас (ближайшие 2 недели точно) заняться вплотную вряд ли получится sad.gif И потому, ну разобрали блок до винтика, но создать-то новый как? Ты с Евгением вроде как до чего-то договорились, поэтому, как я понял, модифицировать имеющийся блок возможно. В том числе и добавить к нему новые события. Теперь мне надо все еще несколько раз прочитать и переосмыслить (честно говоря, просто вдумчиво за развитием событий не следил - работы навалили слишком много). Пауза sad.gif
Supermax
О! Вот это другое дело.
Вот сюда давай динамическую эпопею перенесем
http://dwg.ru/f/showthread.php?p=182362#post182362
А то это как-то не в эту тему.
Supermax
Вот сюда я выложил программу, которая заполняет Lookup-ы из Excel.
http://dwg.ru/f/showthread.php?t=8940&page=6

Пост №114
zvyagaaa
предлагаю вывод в спецификацию делать через мою программу. Реализация обсуждаемая.
Supermax
Спасибо за предложение, но есть одно но.
Надо сначала решить вопрос о создании набора. У меня в модели 10 копий одной и той же внешней ссылки. Я не секущей рамкой выбираю поле, в которое попадает две трети одной ссылки, половина ее копии и четверть ее копии. мне надо посчитать общее количество элементов. _-Refedit не работает. Как тогда считать? Брать координаты точки вставки, угла поворота и в отдельном окне пересчитывать сектор рамки, так она не поворачивается зараза! Значит надо менять в этом файле ПСК а как? bang.gif

Ну вот, длительное ударение головой об стену пошло на пользу. -refedit в 2009 так и не починили и поэтому делаем так:
Когда мы выбираем рамкой в пространстве модели, то создаем список внешних ссылок, которые зацепили рамкой, чтобы их по очереди открывать -refedit. Испльзуем эту команду только для работы с верхушкой дерева ссылок.
Попав в первую по списку ссылку, мы опять рамкой выделяем элементы и если в них попали внешнии ссылки, которые были вложены в эту внешнюю ссылку, мы записываем их имена в специальную таблицу в паре с именем текущей внешней ссылки. Далее мы переносим их в пространство модели и добавляем их имена в первый список ссылок модели.
Каждый раз, как мы открываем очередную ссылку из модели мы проделываем эту процедуру. И так до конца, пока ссылки не кончатся. Потом по списку, где лежат пары имен ссылок (что и откуда) мы восстанавливаем вложенность модели.

Ничего другого я не придумал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.