|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
19.07.2014, 14:44 | #1 | |
Как быстро преобразовать в отрезки десятки тысяч полилиний при помощи LISP
Регистрация: 19.07.2014
Сообщений: 9
|
||
Просмотров: 5341
|
|
||||
Цитата:
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
Цитата:
----- добавлено через ~51 мин. ----- Не хочется связывться с недокументированными переменными, хотя, возможно, придется. В целом, надежда появилась.. Спасибо ! Все-таки пишут, что переменная введена еще на R11, кроме того, она очень широко описана на форумах, хотя во всех описаниях значений битов про ее влияние на explode не пишется. Но отмахнуться от нее уже, надеюсь, Автодеску не удасться. Кстати на ссылке http://mistressofthedorkness.blogspo...r-autocad.html дано значение еще одного бита: bit 7 (128) : accepts "screen picks" (point lists) via (command) function. Признаюсь, машинные переводчики мне не помогли понять этот текст. Я проверю ваш код, как только поставлю еще A2014 и A2002 (сам работаю на A2008). С вертикальными решениями связываться лень, мне кажется, что ядро обычного Автокада туда переносится без изменений, речь идет просто о дополнительных расширениях и общие соглашения должны соблюдаться везде. Т.е. возможно действие QAFLAGS там расширено, но врядли сужено. Как только все проверю - отпишусь. |
|||
|
||||
Я бы не игнорировал и initcommandversion. Правда, судя по описанию, появилось это в 2009
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
Проверка прошла успешно. Все теперь летает! Единственный нюанс - появлялось описанное ранее сообщение (вернее диалоговое окно):
Эта операция может занять длительное время. Чтобы существенно повысить производительность, система может игнорировать порядок прорисовки. Игнорировать порядок прорисовки для этой операции? Да Нет При ответе Нет прирост скорости невооруженным взглядом не заметен. На небольших тестовых примерах этого окна не было, а на реальном файле - есть. Работе программы оно на A2008 не помешало. Теперь буду тестировать на 2002 и 2014 Автокадах. Сразу по получению результата отпишусь. ----- добавлено через ~4 мин. ----- Цитата:
|
|||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
Попробую и отпишусь. Но там Диалоговое окно, а не сообщение.
----- добавлено через ~4 ч. ----- Цитата:
|
|||
|
||||
Можно обнулять переменную draworderctl - сообщения не будет. Но тогда не будет сохраняться исходный порядок отрисовки примтивов. Как-то я использовал такой способ как раз для подавления этого сообщения, а потом, после обработки, запускал команду _texttofront.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
Цитата:
Интересно, м.б она тогда согласится без Qaflags одним explode группу примитивов обрабатывать. Результат отпишу. |
|||
|
||||
Как раз таки они вылезают на передний план.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
В А2002 ее нет.. Нет и диалогового окна.. Т.е. придется проверять наличие переменной. Например через getvar - все равно старое значение возвращать после explode ...
В общем - на А2008 диалоговое окно устранилось, т.е. пользователям нагрузку от непонятного запроса удалось снять при помощи обнуления переменной draworderctl. На А2002 проверка должна исключать установку переменной; проверю и выставлю код общий для всех Автокадов, начиная с А2002 (без проверки на А2015 - его под рукой нет). Проблема решена с помощью уважаемых VVA и Do$. Окончательный отчет и текст фрагмента программы - за мной! |
|||
|
||||
У меня так работает для всех Автокадов
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
Итак, промежуточный итог - код:
(setQ nabor (ssget "X"(list(cons 0 “*POLYLINE”)))) (If nabor(progn (If (setq d-order(getVar "draworderctl"))(setVar "draworderctl" 0));if (setVar "qaflags"5) (command "_explode"nabor "") (setVar "qaflags"0) (If d-order(setVar "draworderctl" d-order));if );progn );if Работает и в А2002 и в А2008. Про А2014 допишу. Применение кода сократило общее время работы программы в ~4 раза. На А2002 программа работает почти в 2 раза быстрее чем на А2008. Совпадает с вариантом VVA, но возвращает начальное значение draworderctl, если переменная существует. Последний раз редактировалось Влад-и-мир, 21.07.2014 в 20:06. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
regenmode по ходу дела еще в 0 (с последующей принудительной перерисовкой) может еще ускорить работу.
А вообще говоря, нередко ActiveX (в отличие от командных методов или entmake[x]), в этом отношении может быть удобнее. Можешь проверить: Свой код: Код:
Код:
regenmode специально не менял
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 19.07.2014
Сообщений: 9
|
Твой вариант просит выбрать объекты и при пустом ответе ничего не делает. М.б. дело в (ssget "_:L" '((0 . "*POLYLINE"))) ?
----- добавлено через ~7 мин. ----- Прошу высказаться о надежности использования недокументированной системной переменной QAFLAGS: - С одной стороны она введена еще в прошлом веке и довольно широко рекомендуется на различных форумах для решения моей проблемы, что предполагает какую-то ответственность Автодеск де-факто; - С другой стороны - недокументированность предполагает отсутствие ответственности де-юре. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Правильно. Потому что далеко не факт что надо "разбивать" все и вся. Хочешь - замени _:L на _X, и добавь обработку блокированных и замороженных слоев.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Какой язык перспективен для инженера-конструктора с условием | The_Mercy_Seat | Программирование | 705 | 17.03.2021 14:19 |