|
  |
Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани |
|
|
|
30.10.2007, 9:28
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
"Реактор на двойной клик" в AutoCAD'e, скорее всего, выбьет твой кад в аут после N (в ADT N=max20) вызовов. Можешь мне поверить, я на этом уже погорел. Я тебе там в личке ответил, повторюсь здесь: ИМХО будет удобнее, проще и в результате устойчивее расковырять потроха дин.блоков и словарей, с ними связанных, и научиться их модифицировать. Ведь никто не будет пытаться поменять текущий слой вызывая окно менеджера слоев? Проще сделать (setvar "clayer" <...>) или vla-put-activelayer. Здесь ситуация аналогична.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 13:35
|
Guest Forum

|
Да кто против ковыряний? Я за двумя руками! Уже второй день всю работу динамлю, все ковыряю и ковыряю. А толку то - 0 (пока). Гляжу в думп - есть метод copy, запускаю его - не работает. Рядом любую линию - зпросто, а эти хреновины нивкакую. И в матрицу преобразовать тоже не получится, по той же причине. Какие 20 раз? Запустили макрос - просит открыть lookup (это раз) один раз кликнули - поставили курсор в позицию и дважды по этой позиции кликнули (это два) - запустили распечатку во все ячейки, что ниже этой позиции. А ты про 20 говоришь Чего ты так этого боишься? Постановка задачи вообще универсальная и благородная - эмулировать нажатие клавиш из под лиспа. Что в этом плохого? Почему в delphi можно эмулировать, а в лиспе нельзя?
|
|
|
|
|
30.10.2007, 13:44
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Наверное, потому нельзя, что autolisp не для этого вообще-то предназначен. Сможешь на Delphi в одну строку уместить код ? Код (cdr (assoc 2 (mapcar 'cons '(1 2 3) '(4 5 6)))) ; или (assoc 2 (mapcar '(lambda(a b c) (list a (* b 10.) (/ c 16.))) '(1 2 3) '(4 5 6) '(7 8 9))) Не думаю. Я еще раз говорю - надо пробовать менять словарь, напрямую, через entmod. Но, поскольку структура записи неясна совершенно, у меня пока не получилось качественного результата добиться. А то, что было, уже стер.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 16:18
|
Guest Forum

|
Запарился я с этими lookup-ами! Чисто мое мнение: Есть свойства блока, а есть свойства элементов, входящих в этот блок. Каким-то образом свойства некоторых элементов, к котрым относятся: AcDbBlockLookupActionEntity AcDbBlockLookupParameterEntity AcDbBlockStretchActionEntity AcDbBlockLinearParameterEntity AcDbBlockRotateActionEntity AcDbBlockRotationParameterEntity AcDbBlockVisibilityParameterEntity Ну и еще с десяток из инструментов свойств блока. Транслируют свои свойства в свойства блока. Код (vl-load-com) (setq es (car (entsel))) (setq ve (vlax-ename->vla-object es)) (setq DynPrs (vla-GetDynamicBlockProperties ve)) (setq props (vlax-variant-value DynPrs)) (setq lprs (vlax-safearray->list props))
; Список возможных значений всех свойств дин. блока
(setq all-lVals '() k -1) (repeat countPrs (setq k (1+ k) pr-k (nth k lprs)) (setq AlVals-k (vla-get-AllowedValues pr-k)) (setq val-k (vlax-variant-value AlVals-k)) ; проверка правильности индексов массива (м.б. пустой массив) (if (>= (vlax-safearray-get-u-bound val-k 1) (vlax-safearray-get-l-bound val-k 1)) (setq lVals (vlax-safearray->list val-k)) (setq lVals nil) ) (setq all-lVals (append all-lVals (list lVals))) ) Кроме этих объектов, других объектов, транслирующих свои свойства в свойства блока нет. Что бы ты не нарисовал, ни одна линия, или текст не отдадут свои значения свойств - блоку. Мы пытаемся изменить свойства блоку, а надо пытаться изменить свойства этим объектам.Но вот беда, описание этих объектов - тайна за 7-ю печатями. Даже у Полещука в AutoLispe и Visual Lispe в среде AutoCAD в таблице 6.1 стр. 318 таких объектов нет. Более того, если делать им vla-dump-object с префиксом Т и смотреть на применимые к ним методы, как выяснилось, не хотят некоторые методы работать с ними, хотя думп показывает, что должны. Copy в частности. Ты говоришь снес свойства кому? Блоку? или им? Я вполне допускаю, что в словарь могут попасть свойства от этих элементов и ты можешь стереть эти записи, но как их туда вставить? Вставлять ведь надо в соответствии с данными этих элементов (чтоб им пусто было) А то будет не правильная запись, что может быть расценено аудитом как ошибка и исправлено. Самое печальное, что большинство функций autolisp-a не знают таких объектов и отказываются с ними работать.
|
|
|
|
|
30.10.2007, 16:29
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
И я тебе про то же самое и говорю. Мутное это дело - дин.блоки программно создавать или менять. Дальше чистая логика, ничего более (хотя она подтверждена кодом в #507): дин.блоки работают через какой-то свой arx. Учитывая, что arx практически не умеет оперировать activex-представлением (основываюсь на высказывании А.Ривилиса в форуме autocad.ru), то логично предположить, что все данные хранятся в dxf-представлении. Соответственно с ним и работать надо. по поводу отсутствия метода Copy. Этот метод допускает копирование графических примитивов, насколько я знаю. И не больше. Посмотри его описание. Если повезет, сработает CopyObjects, но я б на это не рассчитывал.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 16:31
|
Guest Forum

|
Я думаю, что разработчики AutoCAD-a хотят, чтобы динамические блоки остались преимущественно только в AutoCAD-e и поэтому не дают программно с ними работать, что может открыть доступ к архитектуре динамических блоков.
|
|
|
|
|
30.10.2007, 16:33
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Я не знаю, чего они там хотят или не хотят. Но попробовать поиграться со словарями можно - мой вариант доступа "на чтение" есть, элементарный entget для объекта словаря покажет все его потроха. Думаешь, как я 507 нарисовал? Именно так и было.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 16:42
|
Guest Forum

|
Да я тебе о чем? Я о том, что метод vla-dump-object дает Код Command: (vlax-dump-object (vlax-ename->vla-object (car (entsel))) T) Select object:; IAcadBlockLookupActionEntity: IAcadBlockLookupActionEntity Interface ; Property values: ; ActionType (RO) = "Lookup" ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c> ; Document (RO) = #<VLA-OBJECT IAcadDocument 01dfc3b0> ; Handle (RO) = "406D" ; HasExtensionDictionary (RO) = 0 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0b631af4> ; Layer = "0" ; Linetype = "ByLayer" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Material = "ByLayer" ; Name = "Lookup19" ; ObjectID (RO) = 2126869160 ; ObjectName (RO) = "AcDbBlockLookupActionEntity" ; OwnerID (RO) = 2130439416 ; PlotStyleName = "ByLayer" ; Position = (-1470.17 759.448 0.0) ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 06b8e288> ; Visible = -1 ; Methods supported: ; ArrayPolar (3) ; ArrayRectangular (6) ; Copy () ; Delete () ; GetBoundingBox (2) ; GetExtensionDictionary () ; GetXData (3) ; Highlight (1) ; IntersectWith (2) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetXData (2) ; TransformBy (1) ; Update () T А на деле Copy не работает. Не было бы ее в думпе - кто-б что-б говорил?
Сообщение отредактировал Supermax - 30.10.2007, 16:43
|
|
|
|
|
30.10.2007, 16:52
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Кхек... Ты ж указываешь на ручку Action, так? А я шел от описания блока, без вскрытия его. У меня - только словарь, у тебя - интерфейс доступа к нему. Интерфейс имеет графическое отображение, и поэтому имеет методы графических примитивов. А вот то, что они не определены для работы с ними программно - это уже отдельная песня. Кстати, как ты выполнял vla-copy?
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 16:56
|
Guest Forum

|
И всетаки я не понял, что ты ищешь в словаре? Вот мы нарисовали линию. Все, больше ничего в файле нет. Что лежит в словаре - толщина, цвет, тип, а X, Y, Z начала и конца линии разве в словаре лежат? Это свойства самой линии. Как ты их изменишь ковыряясь в словаре? Есть свойства которые в словарях лежат, а есть свойства, которые лежат в описании объекта. Читать мы их можем, а изменить не зная архитектуру объекта и не имея инструмента для работы с этой архитектурой - нет. Эти объекты создают в словаре, в той части, где лежит описание блока дополнительные сведения, которые и создают в свойствах блока то, что мы видим. Ну это я так предполагаю, конечно. Вот до них добраться теоритически можно, но что это дает? Испортить разве что.
|
|
|
|
|
30.10.2007, 16:58
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата Вот до них добраться теоритически можно, но что это дает? Как что? Если ты до них добрался, то и поменять можно (теоретически). Только с умом надо менять, расковыряв до "винтика" не один и не два блока.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 16:58
|
Guest Forum

|
(vla-Delete (vlax-ename->vla-object (car (entsel)))) работает (vla-Copy (vlax-ename->vla-object (car (entsel)))) не работает
|
|
|
|
|
30.10.2007, 16:59
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Код (vla-copy <Object> <Начальная точка копирования> <Конечная точка копирования>)
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 17:08
|
Guest Forum

|
Да я только предполагаю, что в словаре как и с толщинами и с типом линий и принадлежностью слою появляется еще дополнительная графа-словарь Custom К стати, а где лежат General; 3D Visualization; Geometry и Misc? А?
Но предположение - это предположение и не больше.
Точки в каком виде?
|
|
|
|
|
30.10.2007, 17:16
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
(vlax-3d-point '(0. 0. 0.))
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 17:20
|
Guest Forum

|
Код (setq qq1 (vla-Copy (vlax-ename->vla-object (car (entsel))) (vlax-3d-point '(0. 0. 0.)) (vlax-3d-point '(10. 10. 10.)))) Select object: ; error: Too many actual parameters
Сообщение отредактировал Supermax - 30.10.2007, 17:22
|
|
|
|
|
30.10.2007, 17:29
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну извини. Справку посмотрел, там просто выполняется дублирование примитива. Так что последовательность примерно такая: Код _$ (setq ent (vlax-ename->vla-object (car(entsel)))) #<VLA-OBJECT IAcadLine 0fe60d94> _$ (setq start (getpoint "\nНачальная точка ") end (getpoint start "\nКонечная точка ")) (364.428 37.4352 0.0) _$ (mapcar '(lambda(x) (vlax-safearray->list (vlax-variant-value (vlax-get-property ent x)))) '("startpoint""endpoint")) ((193.906 66.3907 0.0) (288.687 187.176 0.0)) _$ (setq ent2 (vla-copy ent)) #<VLA-OBJECT IAcadLine 0fe61394> _$ (vla-move ent2 (vlax-3d-point start) (vlax-3d-point end)) nil _$ (mapcar '(lambda(x) (vlax-safearray->list (vlax-variant-value (vlax-get-property ent2 x)))) '("startpoint""endpoint")) ((331.731 34.5397 0.0) (426.511 155.325 0.0)) _$ Но это сделано с обычным графическим примитивом - отрезком. Ты же пытаешься работать с тем, "чего нет". --- Добавлено: И какой смысл копировать Action, если тебе надо внутри Action'a модифицировать данные?
Сообщение отредактировал kpblc - 30.10.2007, 17:30
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 17:38
|
Guest Forum

|
Так с простым элементом и просто (vla-Copy (vlax-ename->vla-object (car (entsel)))) работает на ура. Вот в блоке тыкаю в плоскость - дает vla-объект тыкаю в lookup - сам понимаешь - не дает. Хотя Copy () есть в допустимых методах. Хорошо, начнем с элементарного: Где описаны закладки свойств элемента? Ну свойства открой и названия почитай.
|
|
|
|
|
30.10.2007, 17:41
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Вопроса напрочь не понял.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 17:43
|
Guest Forum

|
Код (mapcar '(lambda(x) (vlax-safearray->list (vlax-variant-value (vlax-get-property ent x)))) ;Пропустил одну скобку ) И эта строчка сразу выдает: ; error: too few arguments По поводу вопроса: Все свойства в блоках классифицированы на разные группы: General 3D Visualization Geometry Misk и добаляется еще в дин блоках Custom Вопрос: Где лежат эти пакеты? Я так понимаю, что часть свойств в этих группах - описание из словарей, часть из свойств элемента. Скорее всего есть такое место, куда попадает выборка свойств и скорее всего это таблица.
Сообщение отредактировал Supermax - 30.10.2007, 17:49
|
|
|
|
|
30.10.2007, 17:47
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата(Supermax @ 30.10.2007, 18:43) [snapback]183163[/snapback] Код (mapcar '(lambda(x) (vlax-safearray->list (vlax-variant-value (vlax-get-property ent x)))) ;Пропустил одну скобку ) И эта строчка сразу выдает: ; error: too few arguments Да ничего я не пропустил, там код на 2 строки раскинут - обрати внимание! Код (mapcar '(lambda(x) (vlax-safearray->list (vlax-variant-value (vlax-get-property ent2 x)))) '("startpoint""endpoint")) и Код (mapcar '(lambda(x) (vlax-safearray->list (vlax-variant-value (vlax-get-property ent2 x)))) '("startpoint""endpoint")) Разница есть? Не-а...
Сообщение отредактировал kpblc - 30.10.2007, 17:49
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 17:54
|
Guest Forum

|
Теперь выдает: ; error: ActiveX Server returned the error: unknown name: startpoint
|
|
|
|
|
30.10.2007, 17:56
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Покажи, чего вернет (vla-get-objectname ent2) (подозреваю, что ты сразу последний вариант применяешь)
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 18:03
|
Guest Forum

|
Код (setq ent2 (vla-copy ent)) Возвращает в случае с lookup-ом ; error: Automation Error. Description was not provided. В случае с простым примитивом Код #<VLA-OBJECT IAcadEntity 01f4ecac> А просто (vla-get-objectname ent) Выдает "AcDbBlockLookupActionEntity" в случае с lookup-ом и "AcDbBody" хрень какая-то от графики блока.
Сообщение отредактировал Supermax - 30.10.2007, 18:07
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 18:14
|
Guest Forum

|
Во, вспомнил, я когда воевал с внешними ссылками все время путался с таблицами, у которых тоже название влаобъекта, что и у самой ссылки. Может поискать одноименные таблицы к этим элементам блока?
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 18:25
|
Guest Forum

|
Про копирование Action-а: Да не надо мне его копировать, просто наткнулся на такую беду и думаю, а не зарыто ли тут зерно истины? Ниточку ищу, за которую надо потянуть. Вот нашел, потянул, а она оборвалась, зараза.
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 19:12
|
Guest Forum

|
Так, знаменитой vlax-for взломал файл. В Моделспейс - ("AcDbBlockReference") в Блокс - ("AcDbBlockTableRecord" "AcDbBlockTableRecord" "AcDbBlockTableRecord" "AcDbBlockTableRecord" "AcDbBlockTableRecord") Пять таблиц которые принадлежат: Код (#<VLA-OBJECT IAcadBlock2 0b768794> #<VLA-OBJECT IAcadBlock2 0b768744> #<VLA-OBJECT IAcadBlock2 0b7686f4> #<VLA-OBJECT IAcadPaperSpace2 0b7686a4> #<VLA-OBJECT IAcadModelSpace2 0b7683d4>) На один несчастный блок аж три таблицы. С чем?
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 19:29
|
Guest Forum

|
Так, три это два лэйаута и модель один *U2 и один таблица к существующему блоку
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 19:35
|
Guest Forum

|
Kpblc, смотрю, уже домой добрался, да? Как таблицы прочесть?
|
|
|
|
|
30.10.2007, 19:40
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Стоп, ты на чем исследования-то проводишь? Образец пришли, попробую посмотреть (боюсь, только завтра).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума
|