Реклама / ООО «ИЗОЛПРОЕКТ» / ИНН: 7725566484 | ERID: 2Vtzqx6kV7S
IPB IPB
Проектирование, монтаж, наладка, сервис


Здравствуйте, гость ( Вход | Регистрация )

- Стандарт НП «АВОК» 7.11-2024
«Рекомендации по проектированию инженерных систем
дошкольных образовательных организаций»

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
20 страниц V  « < 17 18 19 20 >  
Добавить ответ в эту темуОткрыть тему
> Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани
kpblc
сообщение 30.10.2007, 9:28
Сообщение #514


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
Сообщение #515





Guest Forum






Да кто против ковыряний? Я за двумя руками! Уже второй день всю работу динамлю, все ковыряю и ковыряю. А толку то - 0 (пока). Гляжу в думп - есть метод copy, запускаю его - не работает. Рядом любую линию - зпросто, а эти хреновины нивкакую. И в матрицу преобразовать тоже не получится, по той же причине.
Какие 20 раз? Запустили макрос - просит открыть lookup (это раз) один раз кликнули - поставили курсор в позицию и дважды по этой позиции кликнули (это два) - запустили распечатку во все ячейки, что ниже этой позиции. А ты про 20 говоришь blink.gif
Чего ты так этого боишься? Постановка задачи вообще универсальная и благородная - эмулировать нажатие клавиш из под лиспа. Что в этом плохого? Почему в delphi можно эмулировать, а в лиспе нельзя?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 13:44
Сообщение #516


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
Сообщение #517





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 не знают таких объектов и отказываются с ними работать.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 16:29
Сообщение #518


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



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





Guest Forum






Я думаю, что разработчики AutoCAD-a хотят, чтобы динамические блоки остались преимущественно только в AutoCAD-e и поэтому не дают программно с ними работать, что может открыть доступ к архитектуре динамических блоков.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 16:33
Сообщение #520


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



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





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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 16:52
Сообщение #522


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



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





Guest Forum






И всетаки я не понял, что ты ищешь в словаре?
Вот мы нарисовали линию. Все, больше ничего в файле нет. Что лежит в словаре - толщина, цвет, тип, а X, Y, Z начала и конца линии разве в словаре лежат? Это свойства самой линии. Как ты их изменишь ковыряясь в словаре? Есть свойства которые в словарях лежат, а есть свойства, которые лежат в описании объекта. Читать мы их можем, а изменить не зная архитектуру объекта и не имея инструмента для работы с этой архитектурой - нет.
Эти объекты создают в словаре, в той части, где лежит описание блока дополнительные сведения, которые и создают в свойствах блока то, что мы видим.
Ну это я так предполагаю, конечно.
Вот до них добраться теоритически можно, но что это дает? Испортить разве что.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 16:58
Сообщение #524


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Цитата
Вот до них добраться теоритически можно, но что это дает?

Как что? Если ты до них добрался, то и поменять можно (теоретически). Только с умом надо менять, расковыряв до "винтика" не один и не два блока.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 30.10.2007, 16:58
Сообщение #525





Guest Forum






(vla-Delete (vlax-ename->vla-object (car (entsel)))) работает
(vla-Copy (vlax-ename->vla-object (car (entsel)))) не работает
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 16:59
Сообщение #526


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Код
(vla-copy <Object> <Начальная точка копирования> <Конечная точка копирования>)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 30.10.2007, 17:08
Сообщение #527





Guest Forum






Да я только предполагаю, что в словаре как и с толщинами и с типом линий и принадлежностью слою появляется еще дополнительная графа-словарь Custom
К стати, а где лежат General; 3D Visualization; Geometry и Misc? А?

Но предположение - это предположение и не больше.

Точки в каком виде?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 17:16
Сообщение #528


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



(vlax-3d-point '(0. 0. 0.))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 30.10.2007, 17:20
Сообщение #529





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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 17:29
Сообщение #530


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
Сообщение #531





Guest Forum






Так с простым элементом и просто (vla-Copy (vlax-ename->vla-object (car (entsel)))) работает на ура.
Вот в блоке тыкаю в плоскость - дает vla-объект тыкаю в lookup - сам понимаешь - не дает.
Хотя Copy () есть в допустимых методах. huh.gif

Хорошо, начнем с элементарного: Где описаны закладки свойств элемента? Ну свойства открой и названия почитай.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 17:41
Сообщение #532


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Вопроса напрочь не понял.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 30.10.2007, 17:43
Сообщение #533





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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 17:47
Сообщение #534


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
Сообщение #535





Guest Forum






Теперь выдает:
; error: ActiveX Server returned the error: unknown name: startpoint
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 17:56
Сообщение #536


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Покажи, чего вернет (vla-get-objectname ent2) (подозреваю, что ты сразу последний вариант применяешь)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 30.10.2007, 18:03
Сообщение #537





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
Сообщение #538





Guest Forum






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





Guest Forum






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





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
Сообщение #541





Guest Forum






Так, три это два лэйаута и модель один *U2 и один таблица к существующему блоку
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 30.10.2007, 19:35
Сообщение #542





Guest Forum






Kpblc, смотрю, уже домой добрался, да? Как таблицы прочесть?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 30.10.2007, 19:40
Сообщение #543


CAD Developer


Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062



Стоп, ты на чем исследования-то проводишь? Образец пришли, попробую посмотреть (боюсь, только завтра).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

20 страниц V  « < 17 18 19 20 >
Добавить ответ в эту темуОткрыть тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Реклама
ООО «Арктика групп» ИНН: 7713634274



ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8


ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi

Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx

Последние сообщения Форума






RSS Текстовая версия Сейчас: 31.7.2025, 23:58
Политика ООО ИИП «АВОК-ПРЕСС» в отношении обработки персональных данных