|
  |
Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани |
|
|
Гость_Supermax_*
|
30.10.2007, 19:46
|
Guest Forum

|
Так, вот имена (vla-get-name ...) ("*U2" "Отвод Ст 159х4.5-1-ППУ-ПЭ" "*Paper_Space0" "*Paper_Space" "*Model_Space") Ты сечешь, у меня файл и в нем один единственный динамический блок Я его вскрываю Код (defun _kpblc-get-all-AcDbBlockLookupActionEntity-with-Blocks ( / ) (vl-load-com) (setq res3 nil) (vlax-for blk_def ;(vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object))) (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) ;(if ;(= (vlax-get-property blk_def 'ObjectName) "AcDbBody") ;(= (vla-get-objectname blk_def) "AcDbBody") (setq res3 (cons (vla-get-name blk_def) res3));) );_ end of vlax-for );_ end of defun. В переменной res3 - результат в виде списка vla-объектов Ну тут на все случаи жизни и получаю в данный момент 5 таблиц где name следующие ("*U2" "Отвод Ст 159х4.5-1-ППУ-ПЭ" "*Paper_Space0" "*Paper_Space" "*Model_Space") Обрати внимание на звездочки перед именами
|
|
|
|
Гость_Supermax_*
|
30.10.2007, 20:11
|
Guest Forum

|
И что это за "*Paper_Space0"?
|
|
|
|
|
31.10.2007, 10:09
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну извини, но рассказывать то, что есть у Полещука, я не считаю верным. А чего тебя зведочки так напрягли? Думаю, более интересным будет вариант Код (defun test (/) (mapcar '(lambda (x) (princ (strcat "\n" (vla-get-objectname x) " : " (vla-get-name x) (if (and (equal (vla-get-hasextensiondictionary x) :vlax-true) (> (vla-get-count (vla-getextensiondictionary x)) 0) );_ end of and " : has dict **" "" );_ end of if "**" );_ end of strcat );_ end of princ );_ end of lambda ((lambda (/ lst) (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (setq lst (cons blk lst)) );_ end of vlax-for );_ end of lambda ) );_ end of mapcar (princ) );_ end of defun Обрати внимание на словарные записи (точнее, их наличие)
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 10:58
|
Guest Forum

|
Совершенно случайно, рывшись на форуме AutoDesk-a http://discussion.autodesk.com/thread.jspa?messageID=5069675Я нашел вот это: Перевел автоматическим переводчиком и ахнул. Цитата 1) Нет никакого выставленного программного ИНТЕРФЕЙСА приложения для создания динамичных блоков. Я имею как минимум двух клиентов, которые имеют большие библиотеки блоков, которые представляют их ассортимент изделий. Эти компании могли извлечь выгоду очень из использования динамичных блоков. Однако, не экономично для них вручную добавить надлежащих параметров к свыше 15,000 блоков. Логика для дополнения 'Parametrics' могла программироваться но нет никакого программного ИНТЕРФЕЙСА приложения , чтобы сделать так. Я предполагаю, что один мог написать сценарий процесса (хотя я буду держать пари, я нарвался бы на некоторые главные мертвые концы для некоторых вещей, которые только имеют интерфейсы диалога 2) Почему - там предел (из 1) к числу параметров видимости? Мне нужно быть способным проецировать многоразовые параметры видимости на различные выборы продукта. Этот один означает, что я не могу рекомендовать динамичные блоки к моим клиентам, которым нужно это функциональность  Кто-либо кроме разочаровал с динамичными блоками от перспективы API? В случае, если вы не сунули нос в чужие дела acdb16.dll за 2006, здесь есть короткий список того, что мы пропускаем: AcDbBlock1PtParameter AcDbBlock1PtParameterEntity AcDbBlock2PtParameter AcDbBlock2PtParameterEntity AcDbBlockAction AcDbBlockActionEntity AcDbBlockActionEntityWithBasePt AcDbBlockActionWithBasePt AcDbBlockAlignmentGrip AcDbBlockAlignmentGripEntity AcDbBlockAlignmentParame t er AcDbBlockAlignmentParameterEntity AcDbBlockArrayAction AcDbBlockArrayActionEntity AcDbBlockBasepointParameter AcDbBlockBasepointParameterEnti t y AcDbBlockElement AcDbBlockElementEntity AcDbBlockElementEntityMgr AcDbBlockFlipAction AcDbBlockFlipActionEntity AcDbBlockFlipGrip AcDbBlockFlipGripEntity AcDbBlockFlipParameter AcDbBlockFlipParameterEntity AcDbBlockGrip AcDbBlockGripEntity AcDbBlockLinearGrip AcDbBlockLinearGripEntity AcDbBlockLinearParameter AcDbBlockLinearParameterEntity AcDbBlockLookupAction AcDbBlockLookupActionEntity AcDbBlockLookupGrip AcDbBlockLookupGripEntity AcDbBlockLookupParameter AcDbBlockLookupParameterEntity AcDbBlockMoveAction AcDbBlockMoveActionEntity AcDbBlockParamValueSet AcDbBlockParameter AcDbBlockParameterEntity AcDbBlockPointParameter AcDbBlockPointParameterEntity AcDbBlockPolarGrip AcDbBlockPolarGripEntity AcDbBlockPolarParameter AcDbBlockPolarParameterEntity AcDbBlockPolarStretchAction AcDbBlockPolarStretchActionEntity AcDbBlockRotateAction AcDbBlockRotateActionEntity AcDbBlockRotationGrip AcDbBlockRotationGripEntity AcDbBlockRotationParameter AcDbBlockRotationParameterEntity AcDbBlockScaleAction AcDbBlockScaleActionEntity AcDbBlockStretchAction AcDbBlockStretchActionEntity AcDbBlockVisibilityGrip AcDbBlockVisibilityGripEntity AcDbBlockVisibilityParameter AcDbBlockVisibilityParameterEntity AcDbBlockXYGrip AcDbBlockXYGripEntity AcDbBlockXYParameter AcDbBlockXYParameterEntity Best regards, Byron Blattel CADwerx--Applications for AutoCAD Autodesk Registered Developer Contact Info @ http://www.cadwerx.netCustom Programming Services - ObjectARX/C++/MFC/ASP/STL/ATL/ISAPI... Короче, не я один оказывается такой вумный. И это датировано прошлым годом.
Сообщение отредактировал Supermax - 31.10.2007, 11:07
|
|
|
|
|
31.10.2007, 11:06
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну и? Через API, тем более с использованием .NET, добраться до состава параметра типа lookup, по-моему, невозможно. Даже на предмет прочитать. Лиспом - возможно, хотя и через пятую точку.
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 11:24
|
Guest Forum

|
Дык, я что не понимаю? Читать мы уже читаем, а чтобы сформировать новое значение или скопировать вла-объект в другой блок - только через эмуляцию действий руками. Во всяком случае - это верняк, что получится. И ты заметь, скользкий ты наш, что идея создания виртуальных изделий на основе динамических блоков летает в воздухе уже с начала 2006 года. Kpblc, попробуй взять блок и найти в нем все его составляющие вплоть до линий и текста. Не найдутся ли при этом эти чертовы объекты? Если найдутся, то нельзя ли их тупо скопировать в другой блок, лежащий в этом же файле? И потом, я, чтобы облегчить себе жизнь не копировал свойства из блока в блок, а копировал графику в блок со свойствами, который потом переименовывал. Подумай, нельзя ли сделать это конвейером? К стати окна в блоке можно создавать программно через Command и префикс "-" Работает.
Еще вопрос (вдруг знаешь) Можно ли конкретное окно (c lookup-oм) установить жестко на конкретную позицию пространства экрана? Оно сейчас перетаскивается туда-сюда. А, помню, есть переменная AutoCAD-a которая отвечает за это.
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 11:34
|
Guest Forum

|
Да, к сожалению нет такого метода, как добавление вла-объекта, а то можно было бы. Есть вторичные свойства, а есть первичные. Ничего нам не даст изменение вторичных свойств. Надо пытаться изменить первичные. И помоему мы просто слепы. Кроме пространства модели и лэйаутов есть наверное пространство блока. Только его не так обозначили и vlax-dump-object его не видит. Методы дают нам возможность вставлять в блок примитивы, но мы по прежнему пространство самого блока не видим. Иначе бы мы могли через vlax-for увидить список элементов каждого блока. Или я совсем сошел с ума.
|
|
|
|
|
31.10.2007, 11:34
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну ёпырысыты... Да не в объектах дело, а в словарях! Получить-то объекты - запросто! Код (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 секунд создам (но не динамический  )
Сообщение отредактировал kpblc - 31.10.2007, 11:43
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 12:13
|
Guest Forum

|
Ну и что я говорил? - Нету в списке этих объектов! Вот как должен выглядеть в списке объект Код #<VLA-OBJECT IAcadBlockLookupActionEntity 05a97ebc> Не нашел твой лисп этот эелемент. Все нашел, до последней точки и черточки, а эти - не видит в упор. Поскольку нет их в коллекциях Blocks и ModelSpaceПро позиционирование окна - разобрался. Теперь можно и мышку сэмулировать и тыкать в ячейки программно. Не морщись, мы ведь Русские, не получается "по человечески" сделаем "по Русски" с помощью зубила и какой-то матери. Надо корефея в Delphi найти, чтоб помог значит. Если удасться всковырнуть всетаки мозг дин блокам - сделаем программно. А пока - где мое зубило и молоток?
Сообщение отредактировал Supermax - 31.10.2007, 12:34
|
|
|
|
|
31.10.2007, 12:32
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну ты что, издеваешься? Есть несколько видов объектов: графические (отрезки, полилинии, точки, тексты, атрибуты блоков) и неграфические (словари, расширенные данные, свойства файла). Поведение динамического блока обуславливается наличием в его описании словарей - неграфических данных, которые в своем составе, судя по всему, содержат указатели на обрабатываемые примитивы. Для доступа к словарям описания блока надо использовать код, аналогичный приведенному в #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_*
|
31.10.2007, 13:27
|
Guest Forum

|
Ага, это уже что-то. Я чуток поковырял твою письменность Код (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 - 31.10.2007, 14:14
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 14:21
|
Guest Forum

|
Вот так, лучше не делать! Код (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_*
|
31.10.2007, 14:34
|
Guest Forum

|
Во всех элементах лежит один и тот же словарь (0 . "BLOCKVISIBILITYPARAMETER") В нем очень большой список и (330 . <Entity name: 7ef83198>) (0 . "ACAD_EVALUATION_GRAPH") в нем (0 . "DICTIONARY") и ссылка вверх по словарю. В общем дальше не интересно. Щас попробую создать объект по DXF кодам.
Сообщение отредактировал Supermax - 31.10.2007, 14:41
|
|
|
|
|
31.10.2007, 14:39
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> #555 : интересно, почему? Ну получишь длиннющий список, и ладно - расковыривай его до посинения  > #556 : неправда ваша. Как же я получил разные имена словарей в #553?
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 14:52
|
Guest Forum

|
#556 Наоборот, это они лежат в этом словаре и в них ссылка на него. Считай 360-х кодов больше нет. а по ззо-ым я прошел до упора. Но это уже не главное. Есть набор DXF-кодов динамического элемента и можно попробовать его по ним создать.
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 15:09
|
Guest Forum

|
Увы Код (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_*
|
31.10.2007, 15:31
|
Guest Forum

|
Кстати, (entget (car (entsel))) на динамических свойсвах дает только один код (-1 . ...) и все. Что говорит о том, что создать или отредактировать такой объект через Entmod или entmake или entmakex не получится. Давай зубилом, а? Ну что ты в самом деле уперся? Не ты один бьешся лбом об эту стену, о кстати и смайлик такой есть  . Хочешь стать таким  ? Умный в гору не пойдет, умный гору обойдет. Или: Умный в гору не пойдет, он в ней сделает проход, или умный в гору не пойдет, он и так на ней живет (это про грузин), или: умный в гору не пойдет, умный гору подорвет (это про американцев), или: умный в гору не пойдет, он других туда пошлет (это про хохлов). Все иссяк.
|
|
|
|
|
31.10.2007, 15:34
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
ИМХО (поскольку работы немеряно, коды рисовать не получается): надо разбирать словарь полностью, вплоть до примитивов, на которые он указывает. Возможно, придется постоянно выполнять преобразования vla<->ename. Создание словарей должно быть привязано именно к ним.
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 15:39
|
Guest Forum

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

|
Может, и болтается где-то инсталл. А что?
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 16:00
|
Guest Forum

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

|
Я в нем последний раз работал года 3 назад
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 16:22
|
Guest Forum

|
Так ничего и не надо, кроме первой колонки
Прикрепленные файлы
Lookup.rar ( 53,27 килобайт )
Кол-во скачиваний: 62
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 17:39
|
Guest Forum

|
По закону подлости, то, что я искал и ты тоже, было в самом конце. Разбирая элемент 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_*
|
31.10.2007, 17:59
|
Guest Forum

|
А вот так выглядит 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 - 31.10.2007, 18:10
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 18:09
|
Guest Forum

|
А вот я привязал эти две строки еще и 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_*
|
31.10.2007, 18:27
|
Guest Forum

|
Тоже самое, только доступ к 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_*
|
31.10.2007, 18:35
|
Guest Forum

|
Да, как все оказалось просто. Тупая таблица. 301 кодом начинается (маркер) 303 кончается. 302 код - значение ячеек в столбцах. Название столбцов, их ширина ниже. Идет банальное перечисление слева направо значений ячеек. Закончилась строка - следующая пошла.
Вот сейчас ширину столбца первого изменю.
|
|
|
|
Гость_Supermax_*
|
31.10.2007, 18:46
|
Guest Forum

|
Вот что получилось: Поменял ширину первого столбца, примерно в два раза больше сделал. Код ( (-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_*
|
31.10.2007, 18:55
|
Guest Forum

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