|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Типа
(setq AddToEname (car (entsel "укажите MTEXT или ATTRIB или ATTDEF"))) (setq LinkObj (vlax-ename->vla-object (car (entsel)))) (setq PropName "length") Так? Последний раз редактировалось Supermax, 14.12.2007 в 11:52. |
||||
![]() |
|
||||
А это что? (vlax-get LinkObj PropName)
Нет такой функции у меня vlax-get . Может у него библиотека подгружена своя? вот vlax-get-propery есть. Но все равно не работает. Последний раз редактировалось Supermax, 14.12.2007 в 12:06. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426
|
vlax-get - недокументированный способ получения определенного свойства activex-представления объекта. Официально не поддерживается и дальнейшая его судьба неизвестна (по информации, полученной от Полещука Н.Н. еще с год назад, если не больше).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
(vlax-get LinkObj "Length") это тоже, что и (vla-get-length Linkobj)
У меня тоже не работает. Буду разбираться почему, но позже. Там же выложил еще парочку набросков своих ф-ций и примеров их использования DEMO1 - сносит все поля в тексте DEMO2 - сносит поля AcVar (ссылающиеся на переменные) DEMO3 втавляет поле с текущей датой в текст
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Вскрыл я мозг тексту. Четыре словаря, вложенных друг в друга
Код:
В этом словаре далее идут указатели на словари первого поля и второго поля и в них уже указатели на объекты и заказнные в них свойства. Для скорости Цитата:
Последний раз редактировалось Supermax, 14.12.2007 в 13:42. |
||||
![]() |
|
||||
Пересмотрел принцип передачи аргументов функции из mtext. Найдя mtext и выявив в нем имя функции, макрос запускает эту функцию и передает ей -1 код с именем самого mtext-a. Переменную, куда стартовый макрос записывает -1 код для этой функции надо именовать также как и саму функцию с префиксом, скажем, @. Стартовых макросов может быть много и разных производителей. Метки тоже естественно будут разные. А вот имя переменной должно быть не зависимым от производителя стартового макроса. Поэтому я и предлагаю ее называть точно также как и саму функцию, только с префиксом @.
Чтобы не было написано дальше в теле mtext-a значения не имеет. Если функция требует или принимает целые лисп выражения в теле аргументов к ней, так она и прочитает, то, что ей нужно, а если ей много не надо, то значит и наворотов по распознавани. вложенных в аргументы подфункций не будет. Кому какие аргументы надо, тот и функцию пишет так, как хочет. Короче, в стартовом макросе не будет процедуры анализа текста с целью поиска указателей на объекты, нахождения гороха в мешке с гречкой и т.п. Нашли mtext по метке в начале строки, прочли имя функции, создали переменную с тем-же именем и сохранив в нее -1 код данного mtexta запустили функцию. |
||||
![]() |
|
||||
У меня такая радость, такая радость -заказчик приболел,
![]() что я, даже пофлудю немного. Я на свежую голову, перечитал всю тему с нуля и понял, что простому смертному в том, а что же тут делают не разобраться. Поэтому воскрешу и немного приукрашу суть затеи, ради которой открыта эта тема. Все знают, надеюсь, что такое макросы. Все знают, что ими можно чертить, считать, вычислять и управлять элементами чертежа. Правда, если макрос написан не под конкретные элементы и не имеет такой фишки, как "укажите на такой-то элемент", то он не может найти среди всех элементов вашего чертежа те, которые вы хотите с его помощью обработать. Он либо все элементы корежит, на которые заточен, либо вам надо вручную эти элементы выделять (правда это уже и есть эта фишка). Если элементов очень много, вы обречены постоянно выделять те элементы, которые надо этим макросом обрабатывать, или надо под этот, конкретный чертеж писать свой макрос, либо все элементы этого чертежа загружать в базу, с которой будет работать макрос. Задница, короче. Как простому юзеру привязать нужный элемент к нужному макросу при этом, не потеряв своей юзерской девственности? Вот так: Создаете mtext, в котром в начале пишете $Kpblc или другое ключевое слово, по которому стартовый макрос найдет данный mtext, пробел, открываете скобку, имя макроса, и дальше то, что от вас попросит создатель макроса. Это могут быть и просто цифровые или буквенные выражения и естественно поля. Какие поля с формулами или без вам тоже скажет создатель макроса. Например, зайдя в библиотеку макросов вы видете, что некий чел написал макрос, который изменяет параметр дин. блока в зависимости от длинны выбранной вами линии. В хелпе к этому макросу написано, что его имя (в смысле, макроса) например Lendh->Distance и после имени макроса надо указать полем на линию, затем пробел, затем полем на нужный блок и выбрать в нем нужное свойство, которое должно быть дистанцией. получится типа $Kpblc (Lendh->Distance 12345 91045) Я специально выбрал цвет, чтобы было понятно, что это поля. Вы помещаете этот mtext на край рабочего пространства, чтобы в чертеже не появился и дальше: Стартовый макрос - это такая программка, которую скоро можно будет от сюда скачать, которая находит эти специальные mtext-ы и запускает из конкретной папки, где вы храните макросы тот макрос, который вы хотите использовать по отношению к выбранным вами элементам. Стартовый макрос выносится на кнопку и выполняет функцию типа регенерации чертежа. Приводит в соответствие, так сказать, существующее с требуемым. Если что не понятно - спрашивайте. Последний раз редактировалось Supermax, 15.12.2007 в 16:11. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
На досуге немного "напрограммировал". Очень сырой примерчик установки длины отрезка(ов). Источником длины служат дуга, отрезок или круг, ссылки на которые прописаны в поле.
На запрос "Укажи текст-источник примитива" выбираем любой красный текст, на запрос "Укажи текст-приемник свойства" синий текст. Синий и фиолетовый отрезок "равняются" по длинне объекта, на который ссылается поле текста-источника. Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Так заказчики пока только у тебя болеют
![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Ну, во первых ты не молоток, ты отбойный молоток!
Наконец-то хоть один человек просек, о чем я базарю. Только пару поправок: Во-первых надо все поля писать в одном mtext-e. Именно этим они и связываются в группу. Первое поле - ведущее, остальные - ведомые. Ну да ладно, надо все по человечески сделать. Главное наглядный пример, что все пашет, уже есть. Во-вторых - ты линии по длине только в 2D делаешь, а надо 3D. Но все равно, молодец, молодец, молодец! Постоянное "укажи то", да "укажи се" не катит никак. Тексты должны опознаваться автоматически, а значит, в них должна быть какая-то метка. Вот в строке в 2-ом dxf коде есть такая метка - это сочетание _%<\\ для опознания, что дальше идет имя объекта поля, а >%, то, что дальше описания поля нет. У нас я предлагал такую метку сделать как $Kpblc это типа подарка ему на день рождения. Но как тщательнее подумал, понял, что меток надо много, поскольку не всегда удобно корректировать все сразу. Поэтому возник вопрос, а где их держать? Вот ко мне пришел чужой чертеж, а там чужие метки. Сколько их и какие они я не знаю. По доллару в начале строки можно догадаться, что это метка. Может и два доллара надо ставить. А вот остальное надо по моему, хранить прямо в чертеже. Метки должны быть доступны к редактированию, дополнению и удалению. Вопрос открытый и я до конца его не доковырял. Второй вопрос - это последовательность запуска отдельных меченных mtext-ов. Предлагаю сразу за меткой ставить число, соответствующее очередности запуска данного связующего mtext-a. Оно не обязательно и его можно не ставить, если очередность не имет значения. типа $Kpblc 123 (имя функции ..... Если попались два одинаковых номера, то надо, либо останавливать работу, подсвечивать ручками оба mtext-а и выбрасывать сообщение, что они бракованные. Либо надо выбрать тот, кто был создан первый и запускать по приоритету старшинства. Кстати имя элемента несет в себе порядковый номер создания. Вопрос также - открытый. Третье - эти mtext-ы надо включать и выключать. В смысле видимости. Тогда их можно будет располагать рядом с элементами чертежа, что удобно для пользования. Ну это чистой воды сервис. Четыре - я передумал передавать функции -1 код текста. Надо взять строку типа: Код:
Код:
Именно функция уже и будет разбираться с этим словарем. Формула там, или объект - без разницы. Вот такой вот план. Последний раз редактировалось Supermax, 19.12.2007 в 11:59. |
||||
![]() |
|
||||
Добавлю:
Если взять простой текст и посмотреть на его свойства, то в них вы 360 пары не найдете. Но, как только вы перед текстом вставите %<\ а после >% с нажатием процентов весь текст превратится в поле, а в свойствах появится словарь. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
1. Все пишестя в 1 (м)тексте
2. Пока в 2D 3. Пока команда XX_TEST, а не ф-ция 3. Нужные тексты помечаются расширенными данными (далее РД) для выбора и дальнейшей обработки. Структура имени РД маска $DwgRu далее случайные уникальные числа. Команды для маркировки/демаркировки XX_Mark, XX_Del, XX_SEL присвоенное РД записывается в гиперссылку текста. Команда XX_TEST проходится по маркированным текстам, берет из них поля, причем первое поле - ведущее (берется примитив и его свойство), остальные - ведомые (берутся имена примитивов и пытаемся установить им св-во ведущего примитива). В прилагаемом примере после применения команда XX_TEST синий и зеленый отрезок уравняют длину с красным (источник - Текст1), и синий отрезок поменяет цвет на фиолетовый (источник Текст2)
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 20.12.2007 в 10:41. Причина: Добавлена ф-ция mip-conv-to-str |
|||
![]() |
|
||||
VVA, у меня ощущение, что я стал миллиардером, но сижу на раскаленной сковородке.
Почему ты не дискутируя по поводу метки, взял и ее впихнул в текст, да еще и в расширенные данные? Теперь, чтобы понять, кто меченый, а кто нет, надо постоянно подсвечивать твоей командой тексты. У меня задумка была "продлить" лисп. Сделать текст, или мтекст продолжением макроса, чтобы можно было писать лиспы сложной конфигурации, но чтобы в теле программы были поля. Для этого я и изголялся по поводу обработки строк с указателями на поля. Какой бы ты текст не написал (тра-ля-ля ...поле1 полеN (тра-ля-ля ... полеn)) все сведется к нормальному выражению, которое можно будет слизав из текста запустить в работу. Не губи перспективу!!! Умоляю!!! А так, круто и весьма впечатляет. Еще больше впечатлит, если текст начнет изменять длину (а не наоборот, как раньше) Можно даже текст в конце предложения сделать ведущим, только точку в разделителе вместо запятой надо автоматом подставлять. Сразу скажу, что если написать просто (функция - поля), то это для любого юзера понятно, но мне надо больше чем простым юзерам, да и многим тоже. От постановки задачи зависит все. Чуть в сторону и уже не тот результат. Юзеры будут использовать этот микроскоп как молоток, а мы как положено (как антураж великих умов). |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сквозная нумерация чертежей | Alxd | Прочее. Архитектура и строительство | 26 | 19.06.2024 09:01 |
Нумерация в МТекст | Bull | AutoCAD | 36 | 01.12.2022 14:24 |
Нумерация листов в AutoCad | Sergk | AutoCAD | 21 | 11.03.2022 05:21 |
Автоматическая нумерация текстов | dorofei | Программирование | 8 | 18.01.2007 09:31 |
Нумерация страниц в файлах | Димас | AutoCAD | 1 | 22.12.2005 10:31 |