Тема: Как разбить блоки?

Хочется разбить блоки в чертеже, чтоб потом его передавать заказщикам. Попытался сделать просто -
(command "explode" "all" "") запустить n раз, но эта команда не разбивает все блоки почему то?

Re: Как разбить блоки?

Короче, сам разобрался

(setq I 0.0)
(setq ss (ssget "_X" '((0 . "INSERT"))))
(if (not(null ss))(progn
(repeat (sslength SS)
(command "._EXPLODE" (ssname SS I))
(setq I (1+ I))
)
;еще раз (для вложенных)
  (if (not(null ss))(progn
  (setq I 0.0 ss nil)
(setq ss (ssget "_X" '((0 . "INSERT"))))
(repeat (sslength SS)
(command "._EXPLODE" (ssname SS I))             
(setq I (1+ I))
));end if end progn
  ));end if end progn
)
;Солиды:
(setq I 0.0)
(setq ss (ssget "_X" '((0 . "3DSolid"))))
(if (not(null ss))(progn
(repeat (sslength SS)
(command "._EXPLODE" (ssname SS I))
(setq I (1+ I))
  ));end if end progn

Re: Как разбить блоки?

Когда расколотишь solidы, у тебя вместо них, по-моему, получатся 3dface. Вопрос - а на фига? Потом же они просто место занимают...
Кстати, вложений может быть и не 2...
Это я так, люблю, знаешь ли, задавать неудобные вопросы...
---
Сугубо имхо.

Re: Как разбить блоки?

> dvim
Тут как раз не помешала бы рекурсия или цикл с проверкой было ли что-то вообще расчленено или нет.

Re: Как разбить блоки?

> Александр Ривилис
Вот вариант окончательного расчленения с любой степенью вложенности, но только на незаблокированных слоях...

(setq f t NAMES nil)
(while (setq t1 (tblnext "Layer" f))
(setq f nil)
(if (= (cdr (assoc 70 t1)) 0)
(if NAMES
(setq NAMES (strcat (cdr (assoc 2 t1)) "," NAMES))
(setq NAMES (cdr (assoc 2 t1))))))
(while (setq sset (ssget "_x" (list '(0 . "INSERT") (cons 8 NAMES))))
(foreach a1 (mapcar (function vlax-ename->vla-object)
(vl-remove-if (function listp) (mapcar (function cadr) (ssnamex sset))))
(vla-explode a1)(vla-delete a1)(vlax-release-object a1)))

Re: Как разбить блоки?

> Евгений Елпанов
Оно! smile

Re: Как разбить блоки?

Предложение(поправка)
Взрывать explode это конечно класно. Только я бы советовал использовать для этих целей burst из Express. burst не только взрывает, но и сохраняет все визуальные свойства (цвет, тип линий, толщина) вложенных объектов блока после взрывания.
Я бы делал так
1) запоминал состояние слоёв в переменную
2) включил бы все слои
3) выбирал и взрывал (burst) все блоки пока они не закончатся.
4) вернул в исходноё состояния слои.
5) пуржил
Этот алгоритм мало чем отличается от предложенных выше.
А вообще не парился бы и перегнал бы чертежи в формат DWF или даже в PDF. Заказчикам дал бы ссылку на бесплатный просмотрщик DWF, а если у них есть акад то пускай устанавливают с диска.

Re: Как разбить блоки?

Тут просто задача сильно проще smile)
Есть чертежи, делаемые по стандартам- тамм более 2 включений нет. (Ну сделаю 3...)
Чтобы Солиды раскалывались - "прямое требование заказчика", что тут еще сказать.
Интересно, на форуме обсуждалось создание неразбиваемых блоков, как бы написать скрипт для переработки всех блоков чертежа в неразбиваемые.

Re: Как разбить блоки?

"А вообще не парился бы и перегнал бы чертежи в формат DWF или даже в PDF. Заказчикам дал бы ссылку на бесплатный просмотрщик DWF, а если у них есть акад то пускай устанавливают с диска"
Уровень тех, кто должен работать несопоставим с такими сложностями. (Я бы и сам потребовал dwg, мало ли что )

Re: Как разбить блоки?

> dvim
Попробуй _minsert (уж точно не разобьешь с наскоку, по крайней мере, мне не удалось).
А так - обратись к Эдуарду, если он еще тут вообще обретается, у него были программки на такое дело.

Re: Как разбить блоки?

dvim пишет:

Уровень тех, кто должен работать несопоставим с такими сложностями

Много ума не надо. Два раза кликнуть на файл, открывается просмотрщик, и потом распечатать. А если уровень тех несопоставим с такими сложностями то тогда точно не напартачат в твоих чертежах и не обвинят тебя в лаже.

(Я бы и сам потребовал dwg, мало ли что )

И после того, как некий Иванов Иван(совпадение имён случайное), подправит и тебе даст на подпись - твои действия. А как же защита авторских прав.