|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
19.08.2015, 13:41 | #1 | |
LISP. Как определить ошибочные поля (####) в AutoCAD?
Регистрация: 20.03.2008
Сообщений: 2,653
|
||
Просмотров: 15663
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Объект есть поле, если его FieldCode не совпадает с TextString. Разбивать не надо - лишнее.
По ID необязательно удастся найти объект, я бы на него ставку не делал: вполне возможна ситуация, когда ObjectID равен, к примеру, 185, а хранимое в поле значение - нечто типа "8565989456". Маркировка - как угодно. Я бы, наверное, создавал отдельное описание блока, который помещал бы в центр текста, содержащего ошибочное поле (понятно, что слой отдельный и непечатаемый).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Так я и не хотел разбивать поля, я хочу воспользоваться кусками кода, которые лишь "собирают" их. (Коды пока не анализировал, но думаю, решение по сбору полей в них быть должно). Я вот тоже сомневаюсь, но думаю, стоит попробовать. Правда в х32 и х64 версиях принципы формирования ID различны, но было решение (от Александра Ривилиса, функция называется get-objectid-x86-x64), вроде, оно снимало эту проблему. В общем, нужно пробовать. Последний раз редактировалось skkkk, 26.11.2015 в 16:12. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
У выноски (и мультивыноски, кстати, тоже) надо получать объект аннотации и парсить уже его )
Они еще и от версии зависят: http://autolisp.ru/2014/09/16/objectid_x32x64_cad2015/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Код:
Ну раз уж ты и это уже знаешь, что еще тогда по-твоему может помешать получить объект по его ID? Ну да ладно - не советуешь, значит не буду копать этот "айди"... Тогда другой вопрос. Вот получил я программно код поля, но поскольку по нему невозможно понять, цело ли оно, нужно анализировать строку, которую оно формирует. Как программно же получить значение этого кода поля, вычислить его? Чтобы потом анализировать эту строку. Хотелось бы все же отсеять решетки как таковые, а помечать объекты только с решетками в полях. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Если объект - обычная выноска, то vla-get-annotation возвратит указатель на ее аннотацию. Для мультивыноски сработает и vla-get-textstring (если contenttype = 2, насколько я помню).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Да, но он вернет не указатель на аннотацию, а строку, в которой нет ни малейшего намека на присутствие поля.
Стоп, я что-то не понял. FieldCode вернет код поля со всеми потрохами, по-моему, они в принципе не могут быть равными с текстовой строкой, в которую это поле вычисляется. А, понял: если поля нет, то вернется строка, хотя лучше бы (логичнее) вернулось бы nil - я так думаю, но не суть. Да, так проще. И даже, думаю, что при обработке текста я так и сделаю, но как быть с мультивыносками? Неужели взрывать? Почему, интересно, FieldCode не прикрутили к выноске? Забыли? И как быть с блоками лучше всего? Анализировать подобным образом каждый текстовый объект блока с полем по тому же принципу? Полагаю, такая обработка чертежа займет уйму времени и ресурсов, но другого варианта я не вижу. Разве только взорвать все блоки, собрать координаты нужных текстов и вернуть блоки обратно... Оно конечно, проще в написании на первый взгляд, но уж больно как-то топорно, да и времени на обработку, полагаю, будет занимать еще больше. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Что за "текстовые объекты блока"? Атрибуты, что ли? Так их можно получить совсем просто.
Сорри, но сегодня времени нет и не будет совсем на проработку кода. Предоставь файл, который хочешь обработать - я попробую что-нибудь нарисовать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 28.01.2013
Минск
Сообщений: 379
|
Не сильно знаком со спецификой чертежей смежников (сам я конструктор), но мне кажется, что символ "#" нигде не используется и появиться может в чертеже только как нерабочая ссылка на поле. Так почему бы и не искать просто среди объектов у которых есть текстовые элементы символы решетки? Если нашли, обвели красной рамкой, нет - идем дальше. И никакой чехарды с ObjectID. Алгоритм не очень то оптимальный, но при современных мощностях компьютера, время выполнения скорей всего будет все равно ничтожно малым (нужно тестировать конечно) + эта программа явно не для очень частого использования, а для контроля, скажем, перед печатью.
|
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Атрибуты - да, но не только. И тексты, и мтексты попадаются. Не знаю, может, это не совсем правильно, но когда мне нужно, чтобы какие-то графы, например, основной надписи, были одинаковы для всех листов, я вместо атрибута использую текст. Не вопрос. Удалил оттуда все ненужное (и секретное ), внешние ссылки тоже не стал прикладывать, а то заказчик заругает, если увидит, но для понимания картины должно хватить. Удалил также и кое-что нужное, так что поля уже некоторые послетали. Поля там присутствуют в: 1. Атрибутах блоков. (и однострочных и многострочных) 2. В тексте внутри блока (знаю, что не туда поставил, просто для примера). Блок рамки был давным-давно найден тут на форуме. Где и чье, к сожалению, не помню. 3. В текстах, в основном, мульти. Однострочниками почти не пользуемся. 4. В мультивыносках. Выносками обычными не пользуемся. 5. В таблицах. Полагаю тут будет самая сложная обработка, и думаю, обойтись без нее. Таблиц не так много и можно быстро пробежать по ним глазами. (проще было написать во всех текстовых объектах, вроде все перечислил ) Затеяли мы это все с целью более удобного внесения изменений, которых сто пудов будет вагон, однако, как только файлы пошли "по рукам", я об этом уже тыщу раз пожалел. Да и сам пару раз случайно нужные вещи посносил. Может и зря, предпочел этот способ старому доброму "файнду" (_find). Таких проектов с полсотни (это один из самых маленьких), и многие типовые, нужно просто в текстах-источниках (сверху, в рамке) поменять номер дома, с 33 на 25, например. Поиском такое провернуть было бы затруднительней. Он может поменять бог весть что еще, а по одному анализировать что-то не радует... Последний раз редактировалось skkkk, 20.10.2020 в 14:32. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Проверяй. Нарисовано "по-быстрому".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Спасибо огромное, Алексей, проверил, я так понял, ты обрабатывал только тексты - всё с ними пучком: находит, метит. Хотя вроде по коду происходить бы должна и обработка блоков (судя по (vlax-for blk_def (vla-get-blocks adoc)...), но "битые" поля в текстах блоков не находит.
В планах есть доработать функцию, чтоб обрабатывала все поля, заодно хочу добавить реактор на удаление объектов источников. Ты не возражаешь, если я подвергну безжалостной препарации твой код? Поскольку наглеть и злоупотреблять твоей добротой совершенно не хочется. Почти уверен, что вопросы у меня еще возникнут. Только вот меня смущает, что не совсем все же это все по теме текущего топика, может, лучше в теме "подготовка подосновы"? До жути не люблю плодить темы, всегда цепляюсь за малейшую ниточку, за хотя бы отдаленную связь вопроса с той или иной темой, может, зря. Как считаешь? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Черт, я про атрибуты забыл... Да и таблицы тоже не проработал. Сегодня не уверен, что смогу "добить" - скорее всего, завтра днем.
Код открыт - делай что угодно. Только потом предоставь результат Реактор не советую: тормоза при удалении любого объекта практически гарантированы. Ну или придется вешать дополнительный реактор на команды _.field, _.text, _.dtext, _.tableedit, _attedit и т.п. Оно надо? Тему вечером отделю, если не забуду ))) Тут уже до дому пора выдвигаться через пару-тройку минут ----- добавлено через ~3 мин. ----- Тему отделил.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Тээкс, получилась забавная штуковина Я совсем забыл про особенности таблиц. Немного подправленный вариант - во вложении. Теоретически обрабатывает блоки с атрибутами, таблицы, мультивыноски. Проверяй работу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Цитата:
Это само собой - даже не обсуждается. Цитата:
Цитата:
Дай Бог тебе здоровья! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
В #15 я положил подправленный вариант. Насчет словаря полей не думал - наверное, можно попытаться поиграться с ним, но я не уверен в рентабельности такого решения. Придется использовать ename-представления и копаться в DXF-кодах. Мне лениво
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Аха, спасибо, Алексей, потестировал, результат во вложении. Мультивыноски - полет нормальный, таблицы - тоже, а вот атрибуты и тексты в блоках не задело почему-то. Код анализировать сил уже нет. Да и не так пока это важно. Ты не представляешь, как, и главное, как вовремя, ты меня выручил! К четвергу сдавать. Сейчас я быстренько все файлы проверю.!!! Правда, вынужден заметить, что не очень наглядно такие блоки показывают ситуацию. Вот сам посмотри. Почему тебе не понравилась простая рамка по границам примитива? Но это уж я сдюжу легко.
Копаться - мое второе имя. Главное, сначала лопату от дерьма всякого очистить. Развивать программку имею большое желание. Мечтаю протолкнуть ее в BG-TOOLS. Надеюсь, дойдут руки... |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Я обнаружил, что перед запуском программы надо вручную обновить все поля (программное изменение FIELDEVAL и последующая принудительная - программная же - регенерация чертежа ситуацию не изменяет). Возможно, надо было заняться поиском: на форуме, кажется, поднималась тема по программному обновлению полей, но в час ночи у меня уже силенок на это не было.
Поэтому можно попробовать вручную установить FIELDEVAL в 31, выполнить _.regenall и потом уже запускать CheckFields. P.S. ФАйл гляну, но чуть позже: сейчас работенки накидали, надо разгрести.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Очередная пересборка
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
AutoCAD 2008, Функция "Последние Файлы" никак не хочет работать | Fredyk | AutoCAD | 4 | 05.07.2012 08:35 |
Свежие книги по AutoCAD. Какая лучше? | Marsikus | Поиск литературы, чертежей, моделей и прочих материалов | 10 | 28.01.2012 16:55 |
Правило формирование записей в реестре об установленных обновлениях для AutoCAD и его вертикальных решений. | hwd | Программирование | 8 | 30.09.2010 15:07 |
Где в реестре хранится информация о том, что в системе когда-то был установлен AutoCAD? | Archeo | AutoCAD | 12 | 14.10.2009 15:24 |
Что нового в AutoCAD 2005 | ilka_t | AutoCAD | 40 | 19.05.2004 16:48 |