Команда "EXPLODE"
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда "EXPLODE"

Команда "EXPLODE"

Ответ
Поиск в этой теме
Непрочитано 24.04.2008, 09:45 #1
Команда "EXPLODE"
Mazai
 
Москва
Регистрация: 04.04.2008
Сообщений: 97

Здраствуйте!
Помогите понять Автокад!
Есть программка, котороя должна разбивать все полилинии на слоей на примитивы. Для этого с помощью набора формируеться выбор нужных объектов, и командой "EXPLODE" через командную строку происходит разбиение. Нужно что бы разбиение происходило тогда, когда это указано, а по сути оно начинает выполняться только после того, как было выполнено всё тело подпрограммы. Правда иногда случаеться, что всё происходит как надо - последовательно, но при этом я программу не трогаю. Хотелось бы разобраться - почему так может происходить? И что можно предпринять, что бы команда работала наверняка. Может есть другой способ добиться разбиения всех полилиний?

Вот код этой программки:

Код:
[Выделить все]
;;; Выделяет все полилинии на слое и разбивает их на объекты
;;; Слой, на котором следует выбрать все полилинии выбирает пользователь
;;; путём выбора любого объекта на этом слое

(defun c:Raz (/ Target Spisok_Tar Nabor)
  (setq Target (entsel "\n***Выберите объект лежащий на слое: "))
  (setq Spisok_Tar (entget (car Target)))
  (if
    (setq Nabor	(ssget "_X"
		       (list '(0 . "LWPOLYLINE") (assoc 8 Spisok_Tar))))
     (progn
       (sssetfirst nil Nabor)
       (command "_explode")
     ) ;_ end progn
  ) ;_ end if
  (Print_String Spisok_Tar)
  (princ)
)

(defun Print_String (Spisok_Tar / Nabor)
  (setq Nabor	(ssget "_X"
		       (list '(0 . "LINE") (assoc 8 Spisok_Tar))))
  (sssetfirst nil Nabor)
  (alert "Разбиение уже должно было произойти!")
  (princ)
  )
Просмотров: 3312
 
Непрочитано 24.04.2008, 10:39
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Код:
[Выделить все]
(defun c:raz2 (/ adoc *error* ent selset _dwgru-conv-pickset-to-list)

;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * _dwgru-conv-pickset-to-list
;;; *
;;; * 03/12/2007 Версия 0001. 
;;; ************************************************************************

  (defun _dwgru-conv-pickset-to-list (value / lst item)
;;; Назначение:
;;; Преобразовывает набор (pickset) в обычный список имен примитивов (ename)
;;; Низкоуровневая функция. Контроль соответствия типов не производится

;;; Параметры: 
;;; value - набор (pickset) или nil если пустой набор
;;; Возврат:
;;;   - список примитивов (Ename)
;;;; Пример
    ;|
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0))))
(_dwgru-conv-pickset-to-list (ssget "_L")) ;_(<Имя объекта: 7ef85e00>)
(_dwgru-conv-pickset-to-list (ssadd)) ;_nil
  |;
    (repeat (setq item (sslength value)) ;_ end setq
      (setq lst (cons (ssname value (setq item (1- item))) lst))
      ) ;_ end repeat
    lst
    ) ;_ end of defun

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (= (type (setq
		 ent (vl-catch-all-apply
		       '(lambda	()
			  (car (entsel "\n***Выберите объект лежащий на слое: "))
			  ) ;_ end of lambda
		       ) ;_ end of vl-catch-all-apply
		 ) ;_ end of setq
	       ) ;_ end of type
	 'ename
	 ) ;_ end of =
      (setq
	selset (ssget "_X" (list '(0 . "LWPOLYLINE") (assoc 8 (entget ent))))
	) ;_ end of setq
      ) ;_ end of and
     (foreach item (mapcar 'vlax-ename->vla-object
			   (_dwgru-conv-pickset-to-list selset)
			   ) ;_ end of mapcar
       (vl-catch-all-apply '(lambda () (vla-explode item) (vla-erase item)))
       ) ;_ end of foreach
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Вроде работает...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда "EXPLODE"



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
DwgRuLispLib: Команда. Загрузка lisp файлов из указанной папки VVA Библиотека функций 7 15.02.2018 10:10
Преобразование полей в текст YuraVel AutoCAD 17 14.04.2015 14:30
Команда, чтобы заимствовать свойства (обратная MATCHPROP)? I.Van AutoCAD 2 05.08.2007 21:09
ACAD-2002. Глюк начальной загрузки ЛИСП? ===AAA=== LISP 27 31.08.2005 07:58