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


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

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

АВОК в соц. сетях
ИНН: 7714824045 | erid: 2VtzqwzKQiU
20 страниц V  < 1 2 3 4 5 > »   
Добавить ответ в эту темуОткрыть тему
> Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани
Гость_Supermax_*
сообщение 24.4.2007, 14:47
Сообщение #61





Guest Forum






Ребята, я случайно не тот файл положил. У меня была старая версия и новая, в разных папках, вот я и перепутал. Сори огромное.
Файл поменял. ( на предидущей странице) Чтобы сгладить свою оплошность выкладываю лисп от Полищука Н.Н. Надеюсь он меня не заругает.
Раскрытие свойсв динамического блока (к стати этого самого).
; по данным Лазебного А.В., 22.04.07
(vl-load-com)
(setq es (car (entsel)))
(setq ve (vlax-ename->vla-object es))
(vlax-dump-object ve T)
;#<VLA-OBJECT IAcadBlockReference 0e84068c>
; IAcadBlockReference: Интерфейс AutoCAD для работы с вхождениями блоков.
; Значения свойств:
; Application (RO) = #<VLA-OBJECT IAcadApplication 00d73d3c>
; Document (RO) = #<VLA-OBJECT IAcadDocument 014bb7a8>
; EffectiveName (RO) = "Труба ППУ Д-159"
; Handle (RO) = "940"
; HasAttributes (RO) = -1
; HasExtensionDictionary (RO) = -1
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 111a9304>
; InsertionPoint = (1751.35 1182.81 0.0)
; InsUnits (RO) = "Миллиметры"
; InsUnitsFactor (RO) = 1.0
; IsDynamicBlock (RO) = -1
; Layer = "0"
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "*U41"
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 2130600192
; ObjectName (RO) = "AcDbBlockReference"
; OwnerID (RO) = 2130644216
; PlotStyleName = "ByLayer"
; Rotation = 0.0
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 11135c60>
; Visible = -1
; XEffectiveScaleFactor = 1.0
; XScaleFactor = 1.0
; YEffectiveScaleFactor = 1.0
; YScaleFactor = 1.0
; ZEffectiveScaleFactor = 1.0
; ZScaleFactor = 1.0
; Поддерживаемые методы:
; ArrayPolar (3)
; ArrayRectangular (6)
; ConvertToAnonymousBlock ()
; ConvertToStaticBlock (1)
; Copy ()
; Delete ()
; Explode ()
; GetAttributes ()
; GetBoundingBox (2)
; GetConstantAttributes ()
; GetDynamicBlockProperties ()
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; Mirror (2)
; Mirror3D (3)
; Move (2)
; ResetBlock ()
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetXData (2)
; TransformBy (1)
; Update ()

; Получаем семейство дианмических свойств
(setq DynPrs (vla-GetDynamicBlockProperties ve))

(setq props (vlax-variant-value DynPrs))
(setq lprs (vlax-safearray->list props))
;(#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4a64>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4644>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4804>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f47e4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f41c4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f46a4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f45a4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4684>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4904>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4844>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 11190164>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1c64>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1c84>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1ca4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1cc4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1ce4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d04>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d24>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d44>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d64>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d84>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1da4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1dc4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1de4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e04>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e24>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e44>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e64>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e84>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1ea4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1f84>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1fa4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1fc4>
;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1fe4>)

; количество свойств
(setq countPrs (length lprs))

; Проверяем первое
(setq pr0 (nth 0 lprs))
(vlax-dump-object pr0)
#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4a64>
; IAcadDynamicBlockReferenceProperty: Интерфейс AutoCAD для свойств динамического блока
; Значения свойств:
; AllowedValues (RO) = ("Ст 159х4,5-1-ППУ-ПЭ" "Ст 159х5-1-ППУ-ПЭ" "Ст 159х5,5-1-ППУ-ПЭ" "Ст 159х6-1-ППУ-ПЭ" "Ст 159х7-1-ППУ-ПЭ" "Ст 159х8-1-ППУ-ПЭ" ... )
; Description (RO) = ""
; PropertyName (RO) = "Visibility"
; ReadOnly (RO) = 0
; Show (RO) = 0
; UnitsType (RO) = 0
; Value = "Ст 159х8-1-ППУ-ПЭ"


; Возможные значения 0-го свойства
(setq AlVals0 (vla-get-AllowedValues pr0))
(setq lVals (vlax-safearray->list (vlax-variant-value AlVals0)))
;(#<variant 8 Ст 159х4,5-1-ППУ-ПЭ> #<variant 8 Ст 159х5-1-ППУ-ПЭ>
;#<variant 8 Ст 159х5,5-1-ППУ-ПЭ> #<variant 8 Ст 159х6-1-ППУ-ПЭ>
;#<variant 8 Ст 159х7-1-ППУ-ПЭ> #<variant 8 Ст 159х8-1-ППУ-ПЭ>
;#<variant 8 Ст 159х4,5-2-ППУ-ПЭ> #<variant 8 Ст 159х5-2-ППУ-ПЭ>
;#<variant 8 Ст 159х5,5-2-ППУ-ПЭ> #<variant 8 Ст 159х6-2-ППУ-ПЭ>
;#<variant 8 Ст 159х7-2-ППУ-ПЭ> #<variant 8 Ст 159х8-2-ППУ-ПЭ>
;#<variant 8 Ст 159х4,5-1-ППУ-М> #<variant 8 Ст 159х5-1-ППУ-М>
;#<variant 8 Ст 159х5,5-1-ППУ-М> #<variant 8 Ст 159х6-1-ППУ-М>
;#<variant 8 Ст 159х7-1-ППУ-М> #<variant 8 Ст 159х8-1-ППУ-М>
;#<variant 8 ООО "Виртуальные Строительные Технологии">)

; Список возможных значений всех свойств дин. блока

(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)))
)

; Результат
;((#<variant 8 Ст 159х4,5-1-ППУ-ПЭ> #<variant 8 Ст 159х5-1-ППУ-ПЭ>
; #<variant 8 Ст 159х5,5-1-ППУ-ПЭ> #<variant 8 Ст 159х6-1-ППУ-ПЭ>
; #<variant 8 Ст 159х7-1-ППУ-ПЭ> #<variant 8 Ст 159х8-1-ППУ-ПЭ>
; #<variant 8 Ст 159х4,5-2-ППУ-ПЭ> #<variant 8 Ст 159х5-2-ППУ-ПЭ>
; #<variant 8 Ст 159х5,5-2-ППУ-ПЭ> #<variant 8 Ст 159х6-2-ППУ-ПЭ>
; #<variant 8 Ст 159х7-2-ППУ-ПЭ> #<variant 8 Ст 159х8-2-ППУ-ПЭ>
; #<variant 8 Ст 159х4,5-1-ППУ-М> #<variant 8 Ст 159х5-1-ППУ-М>
; #<variant 8 Ст 159х5,5-1-ППУ-М> #<variant 8 Ст 159х6-1-ППУ-М>
; #<variant 8 Ст 159х7-1-ППУ-М> #<variant 8 Ст 159х8-1-ППУ-М>
; #<variant 8 ООО "Виртуальные Строительные Технологии">)
; (#<variant 8 Теплоизолированная стальная труба Д-159 в полиэтиленовой оболочке ...>
; #<variant 8 Теплоизолированная стальная труба Д-159 в оболочке из оцинкованной стали ...>
; #<variant 8 Custom>) (#<variant 8 Ст 159х4,5-1-ППУ-ПЭ> #<variant 8 Ст 159х5-1-ППУ-ПЭ>
; #<variant 8 Ст 159х5,5-1-ППУ-ПЭ> #<variant 8 Ст 159х6-1-ППУ-ПЭ>
; #<variant 8 Ст 159х7-1-ППУ-ПЭ> #<variant 8 Ст 159х8-1-ППУ-ПЭ>
; #<variant 8 Ст 159х4,5-2-ППУ-ПЭ> #<variant 8 Ст 159х5-2-ППУ-ПЭ>
; #<variant 8 Ст 159х5,5-2ППУ-ПЭ> #<variant 8 Ст 159х6-2-ППУ-ПЭ>
; #<variant 8 Ст 159х7-2-ППУ-ПЭ> #<variant 8 Ст 159х8-2-ППУ-ПЭ>
; #<variant 8 Ст 159х4,5-1-ППУ-М> #<variant 8 Ст 159х5-1-ППУ-М>
; #<variant 8 Ст 159х5,5-1-ППУ-М> #<variant 8 Ст 159х6-1-ППУ-М>
; #<variant 8 Ст 159х7-1-ППУ-М> #<variant 8 Ст 159х8-1-ППУ-М> #<variant 8 Custom>)
; (#<variant 8 ОКП 493600; ТУ 400-24 578-92> #<variant 8 Custom>)
; (#<variant 8 ЗАО "Мосфлоулайн"> #<variant 8 Custom>)
; (#<variant 8 4,5мм.> #<variant 8 5мм.> #<variant 8 5,5мм.> #<variant 8 6мм.>
; #<variant 8 7мм.> #<variant 8 8мм.>)
; (#<variant 8 4,5мм.> #<variant 8 5мм.> #<variant 8 5,5мм.> #<variant 8 6мм.>
; #<variant 8 7мм.> #<variant 8 8мм.> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)>
; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)>
; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)>
; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)>
; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)>
; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)>
; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)>)
; (#<variant 8 4,5мм.> #<variant 8 5мм.> #<variant 8 5,5мм.> #<variant 8 6мм.>
; #<variant 8 7мм.> #<variant 8 8мм.> #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>)
; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)>)
; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 Custom>)
; (#<variant 8 Пенополиуретан> #<variant 8 Custom>)
; (#<variant 8 Шт.> #<variant 8 Custom>)
; (#<variant 8 22.391 (кг.)> #<variant 8 24.231 (кг.)> #<variant 8 26.061 (кг.)>
; #<variant 8 27.881 (кг.)> #<variant 8 31.481 (кг.)> #<variant 8 35.031 (кг.)>
; #<variant 8 24.122 (кг.)> #<variant 8 25.962 (кг.)> #<variant 8 27.792 (кг.)>
; #<variant 8 29.612 (кг.)> #<variant 8 33.212 (кг.)> #<variant 8 36.762 (кг.)>
; #<variant 8 26.91 (кг.)> #<variant 8 28.75 (кг.)> #<variant 8 30.58 (кг.)>
; #<variant 8 32.4 (кг.)> #<variant 8 36.0 (кг.)> #<variant 8 39.55 (кг.)>
; #<variant 8 Custom>) (#<variant 8 22.391 х L (кг.)> #<variant 8 24.231 х L (кг.)>
; #<variant 8 26.061 х L (кг.)> #<variant 8 27.881 х L (кг.)>
; #<variant 8 31.481 х L (кг.)> #<variant 8 35.031 х L (кг.)>
; #<variant 8 24.122 х L (кг.)> #<variant 8 25.962х L (кг.)>
; #<variant 8 27.792 х L (кг.)> #<variant 8 29.612 х L (кг.)>
; #<variant 8 33.212 х L (кг.)> #<variant 8 36.762 х L (кг.)>
; #<variant 8 26.91 х L (кг.)> #<variant 8 28.75 х L (кг.)>
; #<variant 8 30.58 х L (кг.)> #<variant 8 32.4 х L (кг.)>
; #<variant 8 36.0 х L (кг.)> #<variant 8 39.55 х L (кг.)> #<variant 8 Custom>)
; nil
; nil
; (#<variant 8 www.mosflowline.ru> #<variant 8 Custom>))

Сообщение отредактировал Supermax - 24.4.2007, 14:53
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 25.4.2007, 16:44
Сообщение #62





Guest Forum






Решил я задачку по «встряске» свежевставленного динамического блока.
Дело в том, что в AutoCAD-e есть один глюк. Когда меняешь динамические свойства блока, он переименовывается со значения EffectiveName на *U… , а когда возвращаешь старое значение этих свойств, он на значение EffectiveName не возвращается. Если в это время вставить в чертеж еще один такой же блок, то в чертеже будут два абсолютно одинаковые по всем параметрам (кроме DXF пары 2) блока. У одного имя будет, как и EffectiveName, а у другого *U…
Задача была как-нибудь воздействовать на свежевставленный блок, чтобы он в DXF точечной паре 2 сравнялся с существующим *U…
Все оказалось очень просто:

(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 pr0 (nth 0 lprs))
(setq val (vlax-variant-value (vlax-get-property pr0 'value)))
(vlax-put-property pr0 'value val)

Получилось нечто вроде ATTSYNC только наверное это NAMESYNC
Читаем значение свойства value и записываем его же ему же.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
VorN
сообщение 26.4.2007, 11:36
Сообщение #63





Группа: New
Сообщений: 1
Регистрация: 26.4.2007
Пользователь №: 7390



На мой взгляд, процесс создания спецификации, а особенно создания выносок с позициями – самая утомительная часть проектирования. И если этот процесс автоматизировать, сэкономленными окажутся как время, так и нервы.

В ходе обдумывания этих вопросов пришел к следующему выводу:
У меня есть блоки (нединамические). Как правило, блок состоит из самого устройства, так и из сопутствующего фитинга: фланцев или муфт, например. В этих блоках-устройствах есть атрибуты –«Наименование», «№ опросного документа», «Код», в-общем, все графы, которые присутствуют в стандартной 9-графке.
Программой я вытаскиваю значения атрибутов и заполняю в template 9-графку. Таким образом в ГОСТовскую спецификацию записывается только «основное оборудование».
В excel экспортируются имена блоков, получается ведомость материалов со всеми фланцами, отводами и т.д. Особой программкой считаю рисую и считаю пустотелые трубы, которые потом вручную вбиваю в ведомость.

К сожалению, насос Grundfos я оспецифицировать (извиняюсь за неологизм) не смог.

Короче, выкладываю LISPы для спецификации, шаблон 9графки и пример участка трубопровода. Для работы нужно прописать в Lispах нужные пути.
Предупреждаю, программа еще находится в стадии написания, так что сильно не ругайтесь.

Может, быть совместными усилиями что-нибудь сваяем...
Прикрепленные файлы
Прикрепленный файл  specif.rar ( 1,05 мегабайт ) Кол-во скачиваний: 161
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 4.5.2007, 14:56
Сообщение #64





Guest Forum






Ну, наконец-то!
У меня тоже до некоторых пор все блоки были простые, 9-ти графку заполнял после обработки модели (подсчета) макросом, размещенным в начале темы. Блоки состоят только из элементов, которые принадлежат изделию, болты, гйки, фланцы и прочее постоянно таскаемое вслед за этими изделиями сделано своими блоками и поэтому тоже считается.
НО!
После изготовления мною динамического блока трубы ППУ, а также после обсуждения проблемы источника информации об изделии (которая должна быть только от производителя, без копирайта), я наконец-то изготовил первое "виртуальное изделие". Нет, вы не подумайте, что я куда-то перехожу, я и по именам подсчет оставлю. В блоках динамических, есть одна особенность, динамические атрибуты при их изменении влияют на подсчет количества, а простые атрибуты на подсчет количества не влияют. Все, чисто технические характеристики, которые определяют "лицо" изделия выполняются динамическими атрибутами, а сопутствующая информация (маркировка по схеме, раздел проекта и т.п.) простыми атрибутами.
Вашу прогу испытаю, как только освобожусь.
Сделал второй проект прокладки теплотрассы в ППУ дин. трубами - просто ураган так быстро!
Длины подсчитал старой считалкой, даже *U не смутило. Клацаешь по трубе и в свойствах видишь ее длинну - это же здорово!
К стати, у тебя старый насос стоит, ты скачай мой новый, с дин. атрибутами.
Да и мой теплопункт тоже будет тебе весьма полезен "на запчасти".

Сообщение отредактировал Supermax - 4.5.2007, 15:00
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Евгений97_*
сообщение 4.5.2007, 15:23
Сообщение #65





Guest Forum






дык есть спдс графикс вроде?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 4.5.2007, 20:53
Сообщение #66





Guest Forum






Для Vorn-a

Сваять совместно можно, только если после этого мы не подеремся. Я ведь для бесплатного распостранения ее делаю. Не подумайте, что с ума сшедший, интерес есть, да еще какой! А так - не против. Первым делом решаем вопрос: надо всю модель с начала проверить на "коректность", или при подсчете проверять в порядке поступления? Потом решаем, что считать корректным. Потом решаем как будем выбирать группу элементов для подсчета и т.д.
Представь себе (ничего, что на ты?) модель 100-этажного небоскреба со всеми подробностями вплоть до гаек и болтов. Ясен пень, что это не один файл, а целая куча со ссылками. Ясно также, что модель эту делает не один человек и даже не одна организация. Также понятно, что детали там от всяких разных производителей и из разных стран. Проектировщики, понятно, тоже понатырили друг у друга, да и сами наваяли много всякого несуразного. Вот такую модель и надо не только просчитать, а еще связать с MS Project-ом или другими программами для планирования. Также не плохо (и даже просто необходимо) раз уж есть указание на сайты и номера в каталогах попытаться скачать что возможно из прайсов на этих сйтах. Тот кто будет выкладывать на сайты свою продукцию в виртуальном виде об этом позаботится.
Ну как задачка?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 14.6.2007, 14:44
Сообщение #67





Guest Forum






Написал обработчики виртуальных деталей, разобрался с динамическими блоками и написал все опции по их обработке, написал входную часть с формированием выбора по разделам проекта и вообще по всему, что только можно было и осталось только все это связать друг с другом
.
Задачу поставил создать набор секущей, или не секущей рамкой из элементов "корня" модели и элементов внешних ссылок, попавших в эту рамку.
.
Тактика следующая:
Создаем первый набор (ss1), в который входят все попадающие в рамку элементы и внешние ссылки, если их зацепило.
.
(command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C)
(setq ss1 (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2)))
.
Как видите, не просто создается набор, а еще и сохранены в переменных nnn1 и nnn2 координаты точек вставки рамки. В зависимости от их значений определяется тип рамки (секущая, или нет).
.
Далее, находим в этом наборе внешние ссылки и создаем из низ новый набор, а в исходном убиваем.
Далее, включаем ручки у первой внешней ссылки и запускаем комманду _-refedit.
Далее в открытой внешней ссылке добавляем в набор ss1 элементы набора ss2 созданного в открытой внешней ссылке. Да, элементы «корня» модели видны и выбираются, но при добавлении в ss1 не включаются, поскольку дубликаты.
(setq ss2 (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2)))
Далее закрываем внешнюю ссылку. Открыть следующую, и т.д.
.
Команда _-refedit отличная команда, работает в текущих координатах и имея в памяти координаты рамки легко создается автоматически набор из ее элементов,
.
Если написать внешнюю программу, например на С++, реагирующую на изменение системной переменной и эмулирующая перемещение курсора и нажатие левой кнопки мыши, то можно будет из AutoLisp-a не особо задумываясь управлять любыми окнами, любых программ, включая элементы меню "Пуск".

Сообщение отредактировал Supermax - 16.6.2007, 12:41
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 14.6.2007, 22:50
Сообщение #68


CAD Developer


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



Ээээ... Я попробовал въехать в смысл, получилось не очень, каюсь. Можно высказаться немного по общим вопросам?
Дело в том, что в ADT, например, при создании спецификаций производится запрос области, по которой выполнять подсчет. Но! Если в нее попадают внешние ссылки, то подсчет производится по всему содержимому внешней ссылки, невзирая на то, попали или нет "подсчитываемые объекты" в область выбора. Может, так более правильно? Если да, то сейчас попробую наваять код. Если получится - выложу.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 15.6.2007, 10:19
Сообщение #69





Guest Forum






И правильно и нет. Если писать что-то стоящее (я не про ADT), то нужен как локальный, так и глобальный выбор. У меня с начала идет диалог, предлагающий выбрать способ выбора, а затем уж отрабатывать элементы этого выбора.
Пример: Модель здания 17 этажей, из них 10 типовых, вставленных как внещние ссылки. То есть файл один, только вставлен 10 раз с разными координатами. Идет процесс создания спецификации. Помимо прочего вставлена внешняя ссылка со стояками канализации, водопровода и пр. Это уже другая внешняя ссылка, только "по вериткали" , на весь дом одна. Надо подсчитать количество элементов на этаже. Можно конечно наделать во внешних ссылках кучу слоев, но автор умер и сделать это некому.
А так - обвел, и на тебе.

Сообщение отредактировал Supermax - 16.6.2007, 12:18
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 15.6.2007, 13:38
Сообщение #70


CAD Developer


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



Стоп, погоди. Если в активный набор попала одна и та же внешняя ссылка, например, 2 раза, то надо(по моей логике) пройти по всему составу первой внешней ссылки, потом - по второй. То есть количество блоков попросту умножается на 2. Фильтровать набор лично мне было лениво, проще рекурсию написать wink.gif
Зачем делать там "кучу слоев", я не очень догоняю.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 16.6.2007, 12:02
Сообщение #71





Guest Forum






Если в набор попало 2 внешних ссылки, например 1-й и втрой типовые этажи, то иэлементы обеих копий этой ссылки, попавшие в сектор рамки пополняют набор. Естественно это происходит при поочередном открытии командой _-refedit этих ссылок. Имена элементов в копиях разные, поэтому копий нет.
Про слои я написал в негативном смысле, дескать так можно, но нет гарантии, что этот подвиг будут совершать все и всегда.
А рекурсия - естественно! Ссылки ведь не только в "ширь" идут, а еще и "влубь". Про умножение - забудь. Я хочу знать объем материалов на правое крыло здания, а у меня ссылки на ЦЕЛЫЕ этажи, да еще и общие коммуникации в высь простираются, а мне надо участок всего этого! Проблемы текущего финансирования знаешь?

Сообщение отредактировал Supermax - 16.6.2007, 12:29
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 16.6.2007, 14:25
Сообщение #72





Guest Forum






Последние изыскания в области открытия внешних ссылок автоматически:
С целью (надеюсь) указания мне на недостатки, или альтернативные, еще не использованные мною способы, выкладываю "нутро".

; создаем адреса рамки выбора nnn1 и nnn2
(command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C)
;
; загружаем функцию _owp, которая должна по имени берущимся из переменной as включать ручки у ссылки и ее открывать.
; Затем предполагалось запускать в ней функцию f_ss, которая будет далее. и закрывать ссылку.
; Все работает кроме см. ниже
;
(defun _owp (as / ); переменная as - это одно из начений списка из имен ссылок см. далее mapcar
(ssdel as ss1); удаляем из корневого набора текущую ссылку
(setq nssn (ssadd))
(sssetfirst nil (ssadd as nssn))
(command "_-refedit" "O" "All" "N")
;(f_ss); не работает рекурсия
; сюда надо будет мне добавить создание набора
;
(setq nab nil ns 0)
(command "REFCLOSE" "D")); конец функции _owp
;
; создаем указатель на лист и устанавливаем счетчик наборов, он же вхождений в 0.
(setq u_obj (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq n_ss 0 ns 0)
;
; Загружаем функцию f_ss
(defun f_ss ( / ) (setq n_ss (1+ n_ss)); сразу прибавляем 1, так что все наборы начинаются с **1
;
(set (read (strcat "ss" (itoa n_ss))) (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2)))
; конец формирования набора с порядковым номером и именем начинающимся с ss*
;
(mapcar '_owp; далее идет формирование списка из имен ссылок
(set (read (strcat "sp" (itoa n_ss))) (progn
(while (setq _ewa (ssname (vl-symbol-value (read (strcat "ss" (itoa n_ss)))) ns))
(setq _ew (assoc 2 (entget _ewa)))
(if (and (vl-symbol-value '_ew) (= (vla-get-IsXRef (vla-Item u_obj (cdr _ew))) :vlax-true))
(setq nab (append nab (list (ssname (vl-symbol-value (read (strcat "ss" (itoa n_ss)))) ns)))))
(setq ns (1+ ns)))
(setq nab nab))
); конец формирования списка ссылок с порядковым номером
); конец функции mapcar
;
(setq nab nil ns 0); это так, на всякий случай лишний раз обнулил счетчики
;
); конец функции f_ss

В функции _owp я пока не вставил создание набора из элементов внешней ссылки, поскольку не был уверен, что именно в нее надо вставлять эту прелесть. Если бы можно было выполнить рекурсию, то выбор элементов должен был бы вставлен в функцию f_ss.

А теперь главная новость. _-refedit нельзя запустить в нутри открытой внешней ссылки. По краеней мере напрямую. Есть вариант создания копии команды, но под другим именем, вопрос изучается. Рекурсия накрылась медным тазом. Пока можно добавлять в "корневой" набор только элементы первого уровня вложенности во внешнюю ссылку, а открыть ссылки дальше - нет. Но и то не плохо.

Сообщение отредактировал Supermax - 16.6.2007, 16:22
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 16.6.2007, 15:02
Сообщение #73





Guest Forum






Так, у меня есть файл с детальками, я назвал его "исходный". Его я вставил ссылкой в файл, который назвал "1-ое вложение". В следующий файл я ссылкой вставил "1-ое вложение" и назвал его "2-ое вложение". В следующий файл я ссылкой вставил "2-ое вложение" и назвал его "3-ее вложение".
Запуская _-refedit я могу выбрать любое вложение и войти. Осталось только выбрав "корневую" ссылку узнать перечень всех ссылок в нутри нее и поочереди из "корня" их refedit-ом перебрать.
Затык. Как указать refedit-у на нужное вложение из лиспа?
Что ответить в письменном виде на запрос refedit - Select reference: ???????
Сразу скажу - наименование ссылки не катит, тем более, что копии ссылки в файле имеют одинаковые имена. Да и refedit ругается:
*Invalid selection*
Expects a single object.
; error: Function cancelled
Думаю попробовать ручки включить у внутренней ссылки.

Сообщение отредактировал Supermax - 16.6.2007, 15:14
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 16.6.2007, 16:06
Сообщение #74





Guest Forum






Эх, как быстро летит мысль. Все! придумал, и очень оказывается просто.
Я как сейчас действую?
1. Создаю корневой набор
2. Нахожу в нем ссылки и записываю их имена отдельным списком
3. Удаляю из набора эти элементы
4. По очереди открываю каждую и ее элементы вкидываю в корневой набор

а далее я буду делать так:

5. У меня в корневом наборе появятся ссылки из внешних ссылок
6. Я из них опять создам список
7. И опять поочереди все открою.

И так до тех пор, пока в корневом наборе не останется внешних ссылок
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 16.6.2007, 19:42
Сообщение #75





Guest Forum






Все, опять стоп. Имена взятые из набора и являющиеся элементами внешней ссылки из корня модели не читаются, а значит не подсвечиваются и значит не открываются. Если я читаю имя элемента из корня модели, то я его и подсвечиваю, да и вообще, делаю с ним что угодно.

(entget (nth 0 (nth 0 (reverse (setq rezultat (nentsel "Укажи блок:"))))))

Если я взял и включил элемент в набор из открытой ссылки, то выйдя из нее я с этим элементом по его имени ничего сделать не могу, даже entget!
В наборе куча имен, а добраться до внутренностей этих элементов нельзя. Более того, при следующем вхождении в эту же ссылку имена, которые получаются из набора функцией ssname уже другие. Вот засада....!

Сообщение отредактировал Supermax - 16.6.2007, 19:44
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 16.6.2007, 22:05
Сообщение #76


CAD Developer


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



Так, ты меня совсем запутал. Я тебе расскажу свое видение твоей проблемы, ладно? Только не бушуй.
Примерная схема, по которой строится "Исходный", я вижу такой (см.аттач).
Соответственно в зависимости от того, на какую секцию ты кликнул, находясь в "Исходном", определит, какую часть проекта считать (кстати,в ADT именно по такой логике и делается проект, я оттуда идею спер).
Код, который проходит по всем внешним ссылкам независимо от уровня их вложенности, я показать не смогу (связан обязательствами), но компилированный (если правообладатель даст добро) выложить смогу.
А с выбором и подсчетом "внутри него" ИМХО ты зря заморочился.
Прикрепленные файлы
Прикрепленный файл  Visio_Drawing1.pdf ( 25,14 килобайт ) Кол-во скачиваний: 98
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 18.6.2007, 12:35
Сообщение #77





Guest Forum






Смотри, есть простанство модели, в котором стоит модель дома. Модель эта состоит из элементов, находящихся в этом пространстве. Под элементами я подразумеваю все примитивы и блоки. К ссылкам это не относится. Также, частью модели дома являются внешние ссылки. Хоть они и родственны блокам, но всеж не блоки.
И так, перед нами модель.
Она разбита на огромное количество слоев. В список которых включены еще слои из внешних ссылок.
Часть элементов модели объединена в группы.
Есть еще и внешние ссылки, которые тоже нечто вроде объединенных груп.
Ссылки не отображают какой либо этап строительства или раздел проекта, они создаются как модель части здания.
Могут быть (а на самом деле уже есть) части здания, такие как вентиляционные, электрические и сантехнические стояки и шахты лифтов. Это цельный кусок модели и он тоже представлен ссылкой.

Основной концепцией моего подхода являлась и является догма, что информацию о принадлежности элемента к разделу проекта, этапу строительства, системе, группе материалов и пр. должна нести сама деталь или лейбл, который оперирует элементами (примитивами) как источником сведений о длине, объеме, площади.
Для редактирования например позиции "этап строительства" надо выделить в модели группу элементов и специальной подсобной прогой поголовно всем из этой группы поменять данные в этой графе атрибутов.
А элементы (некоторые) могут лежать во внешней ссылке. Ведь шахту лифта нельзя построить одним этапом. Ее по кусочкам строят на разных этапах. А проектируют ее цельно, а то упаси бог на 10 см. где нибудь не попасть. А к какому этапу строительства будет относится данный фрагмент, на этапе проектирования проектировщики знать не могут. Это узнается только после того, когда определен принцип финансирования (с накоплений или поступлений).

В общем о злободневном:
Я могу (пока) включать ручки у любых элементов в нутри ссылок, на каких бы они уровнях не залегали. Но только по одиночке, указывая их курсором мыши. После чего я с ними могу делать что хочу. Даже синхронизирую имя блоков (старая тема). Для того, чтобы мне открыть нужную ссылку _refedit-ом мне надо знать полный перечень ссылок и их (-1 . <Entity name: 7ef820a8>), чтобы этим ссылкам ручки включать. Refedit автоматом входит в ссылку, только если ей включить ручки (точнее одну единственную).
При входе в редактор ссылок "вручную" я имею возможность выбора нужной мне ссылки, а вот программно сделать этот выбор не так просто, как оказывается.

Сообщение отредактировал Supermax - 18.6.2007, 13:16
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 18.6.2007, 23:03
Сообщение #78





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



Готов присоединиться к проэкту.
Если надо написать чего на лиспе, ну там функцию какуюнибудь то не стесняйтесь обращайтесь, сделаем.


А вот с Крысом спорить не надо. Он дело говорит. Почитайте "САПР на базе...." там очень весело и подробно описано кто будет пользователем ваших программ если вы будете их криво делать.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 18.6.2007, 23:33
Сообщение #79


CAD Developer


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



Слегка оффтопа:
Поперше всего, mmax, приветствую smile.gif Ты хочешь задание? Их есть у меня smile.gif А если нет, то придумаю laugh.gif
Во-вторых, заказчик сказал примерно следующее: "сделай мне подсчет для неоткрытого файла, и компилированный код можешь выкладывать" (правда, так загадочно улыбнулся, что у меня мурашки по спине побежали). Блин, я не ожидал, что ObjectDBX столько проблем породит... Без него-то для активного документа уже сделан код (проход целиком по файлу; проход по списку объектов; проход по выбору).
Теперь о деле.
> Supermax : я попробую по пунктам, ок? А то я вроде как запутываюсь...
Цитата
Под элементами я подразумеваю все примитивы и блоки. К ссылкам это не относится. Также, частью модели дома являются внешние ссылки. Хоть они и родственны блокам, но всеж не блоки.

Ну вообще-то если на них посмотреть (хоть через (entget), хоть через (vla-get-objectname)) то у них вся разница в свойстве Path, IsXref и XRefDatabase (последние 2 для описания блока). А доступ к их составу абсолютно одинаков.
Цитата
Она разбита на огромное количество слоев. В список которых включены еще слои из внешних ссылок.
Часть элементов модели объединена в группы.

Ээээ... А зачем это знать при подсчете элементов? Или... Стоп! Ты что, хочешь еще и логистику сюда подключить? И полное планирование выполнять? Это называется БКК (Большая Красная Кнопка - нажал и получай деньги). Нереал ИМХО.
Я ставил задачу попроще - получить полный список блоков (и не только блоков - вообще примитивов, отвечающих определенным требованиям, например, имеющих ldata моего приложения) как минимум по активному документу. С указанием количества. А потом выводить полученные данные в любое место - хоть в многострочный текст, хоть в таблицу, хоть во внешний файл.
---
Еще раз говорю - если проходить целиком по внешним ссылкам, не фильтруя их состав, то получить список вида
Код
'((("name" . <ИмяБлока1>) ("dynprop1" . <ЗначениеДинСвойства1>) ("dynprop2" . <ЗначениеДинСвойства2>) ... ("dynpropN" . <ЗначениеДинСвойстваN>) ("Атрибут1" . <ЗначениеАтрибута1>) ("Атрибут2" . <ЗначениеАтрибута2>) ... ("АтрибутN" . <ЗначениеАтрибутаN>) ("Кол" . <КоличествоВхождений>)
(("name" . <ИмяБлока2>) ("dynprop1" . <ЗначениеДинСвойства1>) ("dynprop2" . <ЗначениеДинСвойства2>) ... ("dynpropN" . <ЗначениеДинСвойстваN>) ("Атрибут1" . <ЗначениеАтрибута1>) ("Атрибут2" . <ЗначениеАтрибута2>) ... ("АтрибутN" . <ЗначениеАтрибутаN>) ("Кол" . <КоличествоВхождений>)))
с учетом внешних ссылок любого уровня вложенности особых проблем не составляет. Для активного (текущего) документа wink.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 19.6.2007, 2:05
Сообщение #80


CAD Developer


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



В обчем так. Кое-что получилось. Правда, немного через пятую точку, но по другому я не дотумкал как сделать. Во вложении - fas-файл + readme. Там все написано smile.gif Тестируйте.
Заархивировано WinRAR 3.50.
---
Добавлено: lsp файл (Если он включен в архив) нерабочий!!! Гарантированного результата не дает!
---
<Приложенный файл удален. В постах #145 и #146 лежит исправленный рабочий (по крайней мере надеюсь на это) вариант.>

Сообщение отредактировал kpblc - 28.6.2007, 11:40
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 19.6.2007, 6:45
Сообщение #81





Guest Forum






Mmax-у от SuperMax-a.
Ты можешь включить ручку (поскольку она одна) у внешней ссылки, лежащей внутри внешней ссылки?
Интересный каламбур получился однако.
Сразу скажу что есть - подсвеченная внешняя ссылка (в смысле ручка включена, DXF пара с кодом -1, да и вообще все DXF коды через функцию ssget полученные), в которой надо покапаться.

Кpblc-у Ну ты горазд ваять! Осталось только получить указатель на вхождение блока ent.
Вообще, я покапаюсь. Поскольку другого выхода не вижу. Начну с сокращения лиспа за счет убиения лишних переменных начинающихся с kpblc... Далее выброшу функции (но только очень аккуратно, чтобы не повредить другие функции) считающие блоки и прочие меня не интересующие. Понятно дело, исходный файл я оставлю (вдруг когда-нибудь пригодится). Вообще-то не дело, если человек просит стакан воды, выливать на него целое ведро. Я вроде русским языком выражаюсь НАДО ВКЛЮЧАТЬ РУЧКИ У ССЫЛОК! Прямого ответа получить не могу. Я понимаю, проверяющий (ежели такой имеется) глянув на открытый код main.lsp должен очень сильно напрячься чтобы понять, сообщил ты мне государственную тайну или нет. Сообщаю: если и сообщил, то до адресата она не дошла (пока). Вот если маленький редми к ней написать, тогда может и дойдет.

Сообщение отредактировал Supermax - 19.6.2007, 13:41
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 19.6.2007, 15:31
Сообщение #82





Guest Forum






В хелпе к каду в описании VBA есть и структура внешних ссылок, и вся структура объектной модели и методы даны как с ней работать, но что касается лиспа - очень жиденько и не внятно. Буду ручки включать через VBA. Маразм? - Знаю!, но другого выхода у меня нет.
Миф о всемогуществе AutoLispa и Visual Lispa тает у меня в мозгу, как снег в костре.
Все методы содраны из ActiveX тобишь С++. Доступ к примитивам просто кашмарный! Все что и так сделать можно - на поверхности и вызывает серьезные сомнения в преимуществе. То что быстрее - так ведь к С++ ближе, а на нем весь кад сделан, не заслуга это самого языка, а сворованное качество! А вот качества в частности и не видно, ни в сервисе написания диалоговых окон, ни в описании функций ни в чем. Такое впечатление, что разработки AutoCAD-a просто для себя ваяли функции, а заодно и подзаработать решили. Зачем добру пропадать! Полещук Н.Н. так прямо и пишет в Разработке приложений и адаптации, что дескать не охотно авторы идут на описание функций доступа к примитивам, а те что и описывают, так очень уж сильно поверхностно. Редактор лиспа в каде просто кошмарный. Я им пользуюсь только по праздникам, да и то, после долго руки мою. В простом блокноте куда более удобно работать.
Да, к стати, никто часом не знает как в редакторе лиспа шрифтец поменять? А то он такой убогий, жирно-грязный, что смотреть на него - сил нету. В Экселе скобки разного цвета - по парам, нет чтобы и здесь такое сделать, так нет же - функцию сварганили для проверки парности - полная шизофрения!
AutoCAD идет по пути Windows. Развитие этой программы более не возможно без развития программных продуктов с ней связанных. Качество этих продуктов на прямую определяет и спрос на сам AutoCAD. Не за горами тот день, когда проектирование претерпит очень серьезные изменения (я про переход к моделированию объектов как главного требования к проекту). А качество сопутствующих программ целиком и полностью зависит от открытости и дружелюбности как самой объектной модели, так и средств работы с ней. А тут какие-то тайны Мадридского двора, понимаешь!
Ссылку найти в документе не могу. БЛИН!

Сообщение отредактировал Supermax - 19.6.2007, 16:01
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 19.6.2007, 15:33
Сообщение #83


CAD Developer


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



Блин, main.lsp нерабочая версия, там лишнего полно, и некоторых вещей не хватало. Случайно подчепилось. Так что ее можешь и не смотреть. Все остальные лиспы у меня в CADWare открытым кодом лежат.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 19.6.2007, 15:41
Сообщение #84


CAD Developer


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



P.S. А вот теперь скажи тупому, на фига включать ручки, если можно программно сделать все что ты хотишь (и даже больше)? Подсветить примитив можно хоть через VBA, хоть через lisp : метод Highlight и аргумент True / False (о сопутствующих проблемах пока забудем). Включить ручки ты сможешь только через (sssetfirst), передав 2 раза одинаковые наборы примитивов. Оно надо, учитывая, что (sssetfirst) из-под лиспа (и VBA) корректно работает только в текущем документе, и может вызывать падение када (либо отказ от дальнейшей работы) в пространстве блока / внешней ссылки, даже открытой командными методами?
Ох, как хочется поспорить насчет ком.методов и расписать их проблемы... Бум такое делать?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 19.6.2007, 16:23
Сообщение #85





Guest Forum






Во первых, ссылка - тоже "человек", от прочих элементов, в плане доступа отличаться не должна. В блок ведь лазить приходиться. Во вторых, подсветить примитив программно - его надо еще найти, а он бедолага в ссылке лежит, и только ручками (в смысле человеческими) его можно ткнуть и засветить (даже в ссылках на самом дне). Почему в VBA все как два пальца.. а тут такая ......! Спорить надо, только вот с предметом спора пока неувязочка. Я подозреваю, что все не спроста. Почему скажи AttachExternalReference есть, а прочесть то, что сваял - немоги? Все завязано на создание, поскольку это не раскрывает сущности, а вот редактирование - это уже надо сущность показывать, а тут конкуренция ...ее и связывание рук в плане изменения всяких разных составляющих.
За кад не беспокойся. Я VBA-шный макрос загружу заранее, он системную переменную (скорее несколько) будет "сторожить" и как только в ней появится признак срабатывания - посмотрит какие ссылки с включенными ручками и поголовно включит ручки всем ссылкам в нутри этих ссылок. Далее в другой системной переменной мне признак готовности скинет, и я из всех засвеченных элементов создам набор. Когда макрос VBA мне станет не нужен, я ему скину признак "выкл". Вся операция займет мгновение и она ведь один раз только делается. А набор распотрошить, думаю ты и сам знаешь как. После этого поочереди буду входить в ссылки и делать обработку элементов прямо там. Чтобы с именами не заморачиваться. Когда придумаю как на лиспе ссылки найти - переделаю.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 19.6.2007, 16:42
Сообщение #86





Guest Forum






"метод Highlight и аргумент True / False (о сопутствующих проблемах пока забудем). Включить ручки ты сможешь только через (sssetfirst), "
В кинофильме про трех мушкетеров (с Боярским в гл. роли) есть такой эпизод: Фанат миледи говорит (с акцентом) "Имя! Скажи мне имя!" Вот и я говорю DXF код -1 и я тебе включу что хочешь! Только он может быть вставлен в набор, и только после этого этот набор можно "включить".
Занавес!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 19.6.2007, 21:12
Сообщение #87


CAD Developer


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



Цитата
Во первых, ссылка - тоже "человек", от прочих элементов, в плане доступа отличаться не должна.

Теоретически - да. Практически - некоторые отличия есть.
Цитата
Во вторых, подсветить примитив программно
Ты так и не ответил, зачем тебе подсвечивать примитив. Да еще и ручками. Лично я в этом не вижу никакого смысла.
Цитата
Почему скажи AttachExternalReference есть, а прочесть то, что сваял - немоги?

А справку посмотреть внимательно?
Цитата
Signature
RetVal = object.AttachExternalReference (PathName, Name, InsertionPoint, XScale, YScale, ZScale, Rotation, bOverlay [, Password])
Ну и где ты тут видишь "невозможность получить что наваял"? Предваряя вопрос "а как в лиспе": да легко!
Код
(setq
  xref (vla-attachexternalreference
         (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
         "c:\\temp\\temp.dwg"
         "temp.dwg"
         (vlax-3d-point '(0. 0. 0.))
         1.
         1.
         1.
         0.
         :vlax-false
         );_ end of vla-attachexternalreference
  );_ end of setq
Ну или наподобие того. И работай со своей xref как душе угодно.
Цитата
VBA-шный макрос загружу заранее, он системную переменную (скорее несколько) будет "сторожить"
Реактор на системные переменные на VBA писать собираешься? Не слишком ли круто? ИМХО - лишнее. Или командный реактор? Или реактор документа? Помрешь писавши, потом отлаживавши, потом отказываясь от его применения, поскольку все ситуации все равно не уследишь. Можешь мне поверить, я знаю, про что говорю (у меня используется реактор на двойной клик мыши, казалось бы, все учел, ан нет, сегодня выдали - не все!)
Цитата
В кинофильме про трех мушкетеров (с Боярским в гл. роли) есть такой эпизод: Фанат миледи говорит (с акцентом) "Имя! Скажи мне имя!"
Ну, я не фанат, да и acad не миледи, хотя мозги парит изрядно.
Слушай, давай договоримся - имя есть у блока, у его описания, у ссылки, наконец. У отрезка имени нет. Есть его хендл, есть указатель на него. Но не имя!
Проверни следующее:
Код
(defun c:tt (/ ent)
  (vl-load-com)
  (setq ent
         (entmakex
           (list (cons 0 "LINE") (cons 10 '(0. 0. 0.)) (cons 11 '(10. 100. 0.)))
           );_ end of entmakex
        );_ end of setq
  (princ (strcat "\nent-указатель : " (vl-princ-to-string ent)))
  (princ (strcat "\nHandle by ent: \"" (cdr (assoc 5 (entget ent))) "\""))
  (princ
    (strcat "\nDXF -1 : "
            (vl-princ-to-string (setq ent_pointer (cdr (assoc -1 (entget ent)))))
            );_ end of strcat
    );_ end of princ
  (princ (strcat "\nvla-указатель : "
                 (vl-princ-to-string (setq ent (vlax-ename->vla-object ent)))
                 );_ end of strcat
         );_ end of princ
  (princ (strcat "\nHandle by vla : \"" (vla-get-handle ent) "\""))
  (princ (strcat "\nvla->ename by handle : "
                 (vl-princ-to-string (handent (vla-get-handle ent)))
                 );_ end of strcat
         );_ end of princ
  (princ (strcat "\nvlax-vla-object->ename : "
                 (vl-princ-to-string (vlax-vla-object->ename ent))
                 );_ end of strcat
         );_ end of princ
  (textscr)
  (princ)
  );_ end of defun

И проанализируй полученные результаты. Примитив один и тот же, а добраться до него сколькими способами можно?
---
И все равно, объясни, чего ты хочешь от подсвечивания добиться. На фига оно надо? В глобальной, так сказать, задаче?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
mmax
сообщение 19.6.2007, 22:25
Сообщение #88





Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568



Имеются 3 файла 1 2 3 dwg
В 2 вложен 1
В 3 вложен 2

Мне удалось программно получить указатель на объект 1 в активном документе 3 и подсветить его и сохранить в переменной eobj.
Но
Чтото сделать с этим объектом при неактивной(закрытой) _refedit ничего не получается. Функция (entget eobj) возрашает nil. При этом команда !eobj возращает <Имя объекта: 7ef980a8>.
С VLA-add-get-put не баловался, но думаю что будет тоже самое. Хотя во время редактирования, по моему мнению, можно делать все что угодно и не только со ссылкой, имеется ввиду программно, например нарисовать окружность в другом space. Ограничений на запуск лисппрограмм нет.

Вывод:
Внешняя ссылка для вашей программы не подходит. Применять ее можно только как подложку или наглядное пособие не более.
Если пользователю захотелось проспецифицировать отдельные детали ссылки, то пускай он их внедряет. Тоесть делает их блоками итп.

Если желаете то могу написать корректный код? но что он вам даст?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Гость_Supermax_*
сообщение 20.6.2007, 11:02
Сообщение #89





Guest Forum






Начну с Kpbls-a
Команда _-refedit - единственное средство зайти во внешнюю ссылку не потеряв пространственного расположения элементов в "корневой" системе координат.
.
Сразу договоримся, "корень" модели - это то пространство, которое ты видишь при открытии файла в закладке Модель.
Это пространство имеет свои X, Y, Z которые и есть текущаяя система координат.
В этом пространсве расположена внешняя ссылка. Она может быть вставлена в это пространство со смещением и поворотом по этим осям. Я уже молчу, что может быть многократно скопирована в разные места пространства.
.
Ссылку можно открыть в своем окне (тобишь файле) или "по месту" командой _-refedit. При открытии командой _-refedit все элементы внешней ссылки становятся доступны но их расположение соответствует "корневой" системе координат, то есть они расположены так, как мы их видим из "корня".
При открытии ссылки в своем окне, элементы располагаются в "родной" системе координат, то есть той, которые были на момент создания файла ссылки.
.
Если мы хотим обработать сектор этой ссылки, но координаты этого сектора мы получили из "корня", то либо надо открыв внешнюю ссылку в своем окне, пересчитать координаты рамки выбора (включая и угол поворота), для чего надо знать координаты и угол поворота ссылки при вставке, для чего надо залезть в ее свойства в том пространстве, где она вставлена, а она вставлена в другую ссылку, а та вставлена в третью тоже со сдвигом и поворотом...
Не находите господа, что это через чур геморроидально?
.
Другой способ посчитать сектор, это открыть ссылку "по месту" _-refedit.
Но для того, чтобы это сделать автоматически, надо, либо знать наверняка X и Y точки, попадающей на какой-либо элемент этой ссылки, либо, включить ручки у этой ссылки и запустить _-refedit. Она в таком случае запрашивать уазания объекта не будет.
.
В случае указания точки, вы откроете только "верхнюю" ссылку. Глубже вам залезть не получится.
В случае включения ручки - надо знать DXF код (-1 . .............) с APP: имя примитива (изменяется в каждом сеансе редактирования рисунка) (см. лист 851 "AutoLisp и Visual Lisp в среде AutoCAD"). Причем то имя, которое приписано к этому элементу в "корневом" пространстве модели.
.
Если командой _-refedit зайти в ссылку, то там и имена свои и метки и vla-объекты. Работать с ними можно только не выходя из нее. Но если в пространстве созданном _-refedit есть еще и своя внешняя ссылка, то войти в нее увы вы не сможете. Войти в эту ссылку можно только из "корня" включив ей ручку.
.
Внешняя ссылка располагается в той же таблице, что и блоки, только она "безтелесна", то есть не имеет своего видимого тела, поэтому выбрать ее "методом тыка" не получается. Вот блок - другое дело!
.
Включив ручки у всех ссылок мы командой (ssget "I") создаем набор из элементов отмеченных ручками. Далее командой (ssname 0) поочередно, начиная с 0 читаем имя этого элемента соответствующее текущему пространству "корня". Далее это имя командой (ssadd ......) включаем в новый набор (из одного элемента) и командой (sssetfirst ......) включаем ручку у этой ссылки.
Далее мы запускаем _-refedit и входи в ссылку, делаем там шурум-бурум и выходим.
.
Для mmax-a Ручку у ссылки включил? - запусти (command "_.-refedit" "O" "All" "N")
.
Как только это у тебя получится - сигналь!
P.S. Мне ничего с объектом делать не надо, мне надо в него войти.

Сообщение отредактировал Supermax - 20.6.2007, 11:08
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kpblc
сообщение 20.6.2007, 12:06
Сообщение #90


CAD Developer


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



Ну, начнем с того, что лично я согласен с mmax - если надо считать "кусок" внешней ссылки, то либо внедрять ее, либо использовать более мелкую "разбивку".
Цитата
Не находите господа, что это через чур геморроидально?

Не-а. Рекурсия с последующей фильтрацией результатов и преобразованием точек - вот оно, решение smile.gif
Дальше.
Цитата
В твоих примерах Kpbls я не увидел обратной процедуры

Ну, во-первых, она "спрятана" в fas. Во-вторых, ну не так мой ник-то пишется smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

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

 

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




Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU

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

Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума






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