|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как разбить все объекты автокада (СПДСа и VetCADа) одним действием при помощи лиспа
Регистрация: 03.12.2009
Сообщений: 87
|
||
Просмотров: 8505
|
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
А полилинию, которая уже является примитивом автокада тоже "расчленять" на отрезки? Если нужно "расчленить" все, что расчленяется, то попробуй так:
(defun Explode_All( / nbr obj i len) (vl-load-com) (setq nbr (ssget "_X")) (if nbr (progn (setq len (sslength nbr)) (setq i 0) (while (< i len) (setq obj (vlax-ename->vla-object (ssname nbr i))) (if (vlax-method-applicable-p obj 'Explode) (vla-Explode obj) ) (setq i (1+ i)) ) ) ) ) Последний раз редактировалось TararykovDG, 03.08.2010 в 13:22. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
TararykovDG, ты не проходишь по составу блоков. А также забыл про зарегистрированные приложения. Ну а про неграфические записи (читай - словари) я молчу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Алексей, абсолютно согласен с недоработкой по поповоду состава блока, а вот словари и приложения - это же, как Вы сами сказали, не графические объекты, а я так понял автору темы нужно "расчленять" лишь то что он видить на чертеже.
megabeton, загрузил лисп, в командной строке ACada введи (Explode_All) или в лиспе исправь: (defun Explode_All( / nbr obj i len) на (defun c:Explode_All( / nbr obj i len) и в командной строке ACada введи Explode_All (т. е. уже без скобок) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Оба-на, меня опять размножили
![]() Мне кажется, что автору как раз надо полностью очистить файл от следов СПДС / VetCAD. Хотя лично я рекомендовал бы открывать файлы в новом профиле с demandload = 2 или 1, а там уже запускать ExplodeAllProxy и RemoveAllProxy (за авторством А.Ривилиса). Это будет наиболее просто, мне так кажется.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
TararykovDG, все так и сделал (исправил, загрузил, написал Explode_All), пишет:
; ошибка: Ошибка Automation. Неверный ввод Кулик Алексей aka kpblc, от следов спдса и веткада я избавляюсь средствами самого спдса и веткада примерно так: (defun C:ъ () (command "spEXPLODEALL" "" "") (command "BURST_VC" "в" "") (command "ОЧИСТИТЬ" "в" "*" "н") (princ) ) мне впринципе хватает, хотя ExplodeAllProxy и RemoveAllProxy тоже не плохо. Хотелось бы дополнить сей лисп глобальным расчленением всего автокадовского |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
У Vetcad'a нет своих объектов. Все делается штатными Автокадовскими примитивами. Поэтому наверное для СПДС - ExplodeProxy с Demandload, VetCAD - explode. Еще два замечания
1.- Explode убъет атрибуты. 2. Если блок подрезан, можно получить неожиданный редультат С блоками попробуй BGBLEXP - Взрывает блок и все блоки, входящие в него, превращая видимые атрибуты в текст Описание там же в #19
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
Цитата:
Но это все лирика... Вопрос то - "Как расчленить объекты автокада", а предложенный TararykovDG вариант не работает |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
megabeton, Попробуй этот, код. Во-первых, должен “расчленять” все составные части блоков до самого конца, а во-вторых, лучше (vl-cmdf "_.explode" obj "") чем (vla-Explode obj), так как (vla-Explode obj) оставляет за собой исходный (расчленяемый) объект. У меня работает (ACad 2008), если не заработает, ну попробуй в Редакторе VisualLisp в пошаговом режиме и тогда скажи на какой именно строке происходит ошибка. Данный код не учтет те, замечания, что сделал VVA относительно атрибутов и подрезанных блоков!!!
(defun c:Explode_All( / nbr obj a_obj i len flag_stop) (vl-load-com) (setq flag_stop nil) (while (not flag_stop) (setq nbr (ssget "_X")) (if nbr (progn (setq flag_stop T) (setq len (sslength nbr)) (setq i 0) (while (< i len) (setq obj (ssname nbr i)) (setq a_obj (vlax-ename->vla-object obj)) (if (vlax-method-applicable-p a_obj 'Explode) (progn (vl-cmdf "_.explode" obj "") (setq flag_stop nil) ) ) (setq i (1+ i)) ) ) (setq flag_stop T) ) ) ) |
|||
![]() |
|
||||
Регистрация: 03.12.2009
Сообщений: 87
|
Гранд мерси за оперативность, пробую!!!
VVA и TararykovDG, спасибо - оба кода работают, VVA, я так понял лисп разбивает все что перечислено - "INSERT,*POLYLINE,REGION,MTEXT,HATCH" и если еще захочу размеры разбить, то надо просто дописать к перечисленному что то вроде "димлайнер" TararykovDG, лисп игнорирует штриховки, текст и размеры. Все равно спасибо БОЛЬШОЕ что откликнулись В обоих случаях, правда, автокад (2010 русский) изрядно подвисает при больших файлах и заканчивают действие после нажатия эскейпа (при небольших файлах все отлично). И еще. Извиняюсь за наглость, а нельзя ли соединить действия: "ExplodeAllProxy и RemoveAllProxy" , "BURST_VC или что либо адекватное по разбиению блоков веткада" и "расчленить все автокадовское" в один лисп (и желательно сохранить последовательность) Заранее благодарен ![]() Так как никто не откликается сделал следующее: (defun C:Explode_All ( / ss i) (command "spEXPLODEALL" "" "") (command "BURST_VC" "в" "") (vl-load-com) (setq i 0) (while (setq ss nil ss (ssget "_X" (list '(0 . "INSERT,*POLYLINE,REGION,MTEXT")(cons 410 (getvar "CTAB"))))) (foreach item (vl-remove-if 'listp (mapcar 'cadr(ssnamex ss))) (grtext -2 (strcat "Обрабатываю " (itoa (setq i (1+ i))) " элемент")) (if (vlax-write-enabled-p (vlax-ename->vla-object item)) (vl-cmdf "_.Explode" item) ) ) ) (princ) ) Все работает - меня устраивает ![]() Спасибо всем откликнувшимся Последний раз редактировалось megabeton, 04.08.2010 в 15:44. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Как оптом сохранить все чертежи в формате 14-го автокада? | Соня | AutoCAD | 26 | 20.03.2011 14:59 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |
БРЕД СИВОЙ КОБЫЛЫ | Kryaker | Разное | 1876 | 29.12.2006 23:41 |