Region -> closed polyline
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Region -> closed polyline

Region -> closed polyline

Ответ
Поиск в этой теме
Непрочитано 21.11.2005, 19:19 #1
Region -> closed polyline
asys
 
архитектор
 
Ростов-на-Дону
Регистрация: 10.08.2005
Сообщений: 5,345

Есть солид с него командой SECTION получен срез (region), и вопрос как минимальными действиями сделать из него замкнутую полилинию или несклоько полилиний, если регион с дырками?
Просмотров: 10054
 
Непрочитано 21.11.2005, 19:29
#2
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,763
Отправить сообщение для Огурец с помощью Skype™


Уважаемый Asys!
Самое простое, что приходит на ум - explode=> edit polyline(join).
Огурец вне форума  
 
Непрочитано 21.11.2005, 19:30
#3
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


А регионы бывают с дырками?
Apelsinov вне форума  
 
Непрочитано 21.11.2005, 19:53
#4
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,763
Отправить сообщение для Огурец с помощью Skype™


Уважаемый Апельсинов!
Да, бывают :cry:
[ATTACH]1132592035.dwg[/ATTACH]
Огурец вне форума  
 
Автор темы   Непрочитано 21.11.2005, 20:00
#5
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


Цитата:
Сообщение от Огурец
Уважаемый Asys!
Самое простое, что приходит на ум - explode=> edit polyline(join).
:cry: это я то и делаю, но я и завел тему чтобы совместно придумать как проще. Там еще и ПСК надо выставить, чтоб полилиния замкнулась. Я думаю может макрос на кнопарь написать?
asys вне форума  
 
Непрочитано 21.11.2005, 20:11
#6
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,763
Отправить сообщение для Огурец с помощью Skype™


Уважаемый Asys!
Цитата:
Там еще и ПСК надо выставить
- Object UCS, и все дела...
Огурец вне форума  
 
Непрочитано 21.11.2005, 20:15
#7
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Огурец
Мда, бывают...


Asys
А чем тебе команда boundary не подходит? Там даже и с дырками можно. Только если в регионе сплайн - не получится полилинии, но это не твой случай.
Apelsinov вне форума  
 
Непрочитано 21.11.2005, 20:30
#8
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,763
Отправить сообщение для Огурец с помощью Skype™


Уважаемый Апельсинов!
А с boundary и вправду неплохо! и регион остаётся, и полилинии как новенькие!
Огурец вне форума  
 
Автор темы   Непрочитано 22.11.2005, 09:43
#9
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


Вы все правильно говорите, господа, но есть куча камней...
1. Надо кучу операций производить, а потом в исходнуюю возвращать как вид, так и ПСК - напрягает, когда много раз надо эту операцию делать
2. про boundary - при большом количестве граней солида - boundary сходит с ума.
asys вне форума  
 
Непрочитано 22.11.2005, 10:23
#10
Кулик Алексей aka kpblc
Moderator

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


Тихо подозреваю, что это на самом деле надо для построения видов и сечений. Если это так, то не очень понимаю, почему не используются _.solview и _.soldraw. Если забыть про их работу с xref'ами и еще некоторые тонкости, то имхо самое то.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.11.2005, 10:25
#11
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,763
Отправить сообщение для Огурец с помощью Skype™


Уважаемый Asys!
А чем ПСК напрягает? В трёхмерке с ними уже через пару недель работаешь на подсознательном уровне...
Огурец вне форума  
 
Непрочитано 22.11.2005, 10:35 Region -> closed polyline
#12
VPUD56

архитектор
 
Регистрация: 23.05.2005
Сообщений: 123


Так boundary Надо делать не с солида а с региона (он же получен). Это ком-да им-но для этого и предназначена -быстро создавать полилинию. Вопрос наверное в другом: как быстро получить нужное сечение - регион. Для этого удобно пользоваться .xy, задавая по одной прямой 3 точки, но перед введением 3-й нажать .xy и потом ввести координату z любую.(e 2-х других она будет 0)
__________________
vpud
VPUD56 вне форума  
 
Автор темы   Непрочитано 22.11.2005, 11:26
#13
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


>kpblc
Это надо для построения другого солида на основе полученного региона, а уж потом (после всех построений ) и _.solview и _.soldraw берутся за дело
>Огурец
Цитата:
А чем ПСК напрягает? В трёхмерке с ними уже через пару недель работаешь на подсознательном уровне...
Так на этом же уровне и напрягает ее возвращать в исходное состояние. Когда на автомате идешь, лишний шаг отвлекает и разражает :cry:
>VPUD56
Ты абсолютно прав, но если есть регион и в его пересекают (в его плоскости) грани солида - они тоже учавствуют в просчете контура boundary.

>ALL
Беда состоит в следующем. Я получаю срез и мне его надо вывернуть наизнанку чтобы по нему построить еще солид и полученный солид вырезать из солида с которого я получаю срез. Но! т.к. солид нельзя потянуть за вершинку, как полилнию я его бомблю, весь хлам объединяю в полилинию, выворачиваю и выдавливаю.
Ниже картинка для наглядности.
Было бы здорово еслиб section сразу полилинией срез давал
[ATTACH]1132647966.jpg[/ATTACH]
asys вне форума  
 
Непрочитано 22.11.2005, 16:20
#14
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Чтобы не бомбить, не собирать осколки и не крутится как юла. Создаёт полилинию из региона без разворота UCS. Естествено если при его разбивании не получается сплайнов, эллипсов и окружностей.

Код:
[Выделить все]
(defun c:retopl(/ *error* oldEcho Ent curSet newObj
		curObj ObjArr curMemb errFlag)
  (vl-load-com)

  (defun *error* (msg)
    (vla-EndUndoMark actDoc)
    (setvar "CMDECHO" oldEcho)
    (princ msg)
    (princ)
    ); end of *error*
      
  (setq oldEcho(getvar "CMDECHO")
	actDoc
	 (vla-get-ActiveDocument
	   (vlax-get-acad-object))
	); end setq
  (vla-StartUndoMark actDoc)
  (setvar "CMDECHO" 0)
  (if
    (and
      (setq Ent(entsel "\Select region > "))
      (= "REGION"(cdr(assoc 0(entget(car Ent)))))
      ); end and
    (progn
       (setq curSet (ssadd) 
       curObj (vlax-ename->vla-object(car Ent))
       newObj(vla-Copy curObj)
       ObjArr (vlax-safearray->list 
               (vlax-variant-value 
                (vla-Explode newObj)))) 
 (foreach memb ObjArr 
  (setq curSet
	 (ssadd
	   (setq curMemb
		  (vlax-vla-object->ename memb))CurSet))
   (if
     (not
       (member
	 (cdr(assoc 0(entget curMemb))) '("LINE" "ARC")))
     (setq errFlag T)
     ); end if
 ); end foreach 
 (if(null errFlag)
   (progn
 (command "_.ucs" "ob" (ssname curSet 0))
 (command "_.pedit" (ssname curSet 0) "_y" "_j" CurSet "" "")
 (command "_.ucs" "_p")
 (vla-delete curObj)
 (princ "\n<<< Polyline created:) >>>")
  ); end progn
   (progn
   (command "_.erase" curSet "")
   (vla-EndUndoMark actDoc)
   (alert "Can't transform this Region to Polyline!")
   ); end progn
   ); end if
); end progn
  (princ "\nThis isn't region! ")
  ); end if
  (setvar "CMDECHO" oldEcho)
  (vla-EndUndoMark actDoc)
  (princ)
  ); end of c:retopl
Сразу предупреждаю, что от "дырок" в регионах не защищает, вернее защищает, но только если они не из линий и арок.

Если кто-то успел скопировать код, скопируйте снова он был изменён. И еще отсутствует защита от заблокированного слоя, так что надо быть внимательным.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 23.11.2005, 13:16
#15
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


>{Smirnoff}

Спасибо милчеловек уже легше. Жаль сплайны и окружности не ест. Но все равно спасибо
asys вне форума  
 
Непрочитано 23.11.2005, 13:25
#16
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Эллипсы и окружности сделать можно, они и будут при преобразовании из региона сами собой. А вот со сплайнами ничего не получится, поскольку сплайн в принципе нельзя представить в виде полилинии, потому что математика там другая. Можно апроксимировать его полилинию с большим количеством прямых сегментов, однако солид выдавленный по такой форме будет занимать огромный объем из за своей сложности. Да и не то это совсем...
{Smirnoff} вне форума  
 
Непрочитано 23.11.2005, 17:24
#17
005

инж-конструктор
 
Регистрация: 04.10.2005
Москва
Сообщений: 173


Отправляйся на радиорынок в Митино, купи там примочку к автокаду
называемую TOOLPACK. Там так
TOOLPACK ---> Convert ---> Regions to Polylines
там же можно конвертнуть сплайны в полилинии, объединить
3D полилинии и многое другое
005 вне форума  
 
Автор темы   Непрочитано 23.11.2005, 17:40
#18
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


>005
Спасибо мне до Митино 1500 км слишком я в Ростове-на-Дону живу. А тулпак у меня есть, я бьюсь за сокращение процесса, чем меньше команд тем лучше. А тратить время на конверт - ну если очень надо
asys вне форума  
 
Непрочитано 09.03.2009, 19:45
#19
Den_Den


 
Регистрация: 12.11.2008
Сообщений: 79


Цитата:
Сообщение от {Smirnoff} Посмотреть сообщение
Чтобы не бомбить, не собирать осколки и не крутится как юла. Создаёт полилинию из региона без разворота UCS. Естествено если при его разбивании не получается сплайнов, эллипсов и окружностей.

Код:
[Выделить все]
(defun c:retopl(/ *error* oldEcho Ent curSet newObj
		curObj ObjArr curMemb errFlag)
  (vl-load-com)

  (defun *error* (msg)
    (vla-EndUndoMark actDoc)
    (setvar "CMDECHO" oldEcho)
    (princ msg)
    (princ)
    ); end of *error*
      
  (setq oldEcho(getvar "CMDECHO")
	actDoc
	 (vla-get-ActiveDocument
	   (vlax-get-acad-object))
	); end setq
  (vla-StartUndoMark actDoc)
  (setvar "CMDECHO" 0)
  (if
    (and
      (setq Ent(entsel "\Select region > "))
      (= "REGION"(cdr(assoc 0(entget(car Ent)))))
      ); end and
    (progn
       (setq curSet (ssadd) 
       curObj (vlax-ename->vla-object(car Ent))
       newObj(vla-Copy curObj)
       ObjArr (vlax-safearray->list 
               (vlax-variant-value 
                (vla-Explode newObj)))) 
 (foreach memb ObjArr 
  (setq curSet
	 (ssadd
	   (setq curMemb
		  (vlax-vla-object->ename memb))CurSet))
   (if
     (not
       (member
	 (cdr(assoc 0(entget curMemb))) '("LINE" "ARC")))
     (setq errFlag T)
     ); end if
 ); end foreach 
 (if(null errFlag)
   (progn
 (command "_.ucs" "ob" (ssname curSet 0))
 (command "_.pedit" (ssname curSet 0) "_y" "_j" CurSet "" "")
 (command "_.ucs" "_p")
 (vla-delete curObj)
 (princ "\n<<< Polyline created:) >>>")
  ); end progn
   (progn
   (command "_.erase" curSet "")
   (vla-EndUndoMark actDoc)
   (alert "Can't transform this Region to Polyline!")
   ); end progn
   ); end if
); end progn
  (princ "\nThis isn't region! ")
  ); end if
  (setvar "CMDECHO" oldEcho)
  (vla-EndUndoMark actDoc)
  (princ)
  ); end of c:retopl
Сразу предупреждаю, что от "дырок" в регионах не защищает, вернее защищает, но только если они не из линий и арок.

Если кто-то успел скопировать код, скопируйте снова он был изменён. И еще отсутствует защита от заблокированного слоя, так что надо быть внимательным.
Уважаемые господа, а нельзя ли изменить эту программу, чтобы она выбирала все имеющиеся на чертеже регионы, а не спрашивала по одному....???
Den_Den вне форума  
 
Непрочитано 09.03.2009, 20:02
#20
Кулик Алексей aka kpblc
Moderator

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


Den_Den, так что, твою тему удалять?
P.S. Видишь, как полезно сначала заниматься поиском, и только потом создавать темы?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.03.2009, 21:55
#21
Den_Den


 
Регистрация: 12.11.2008
Сообщений: 79


Сорри.... не сразу нашел...
Den_Den вне форума  
 
Непрочитано 10.03.2009, 10:22
#22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Пробуй. Особо не проверял.
Код:
[Выделить все]
(defun c:retopl1 (/	   *error*  oldEcho  Ent      curSet   newObj
		  curObj   ObjArr   curMemb  errFlag  actDoc   item
		  ss
		 )
  (vl-load-com)

  (defun *error* (msg)
    (vla-EndUndoMark actDoc)
    (setvar "CMDECHO" oldEcho)
    (princ msg)
    (princ)
  ) ;_ end of *error*

  (setq	oldEcho	(getvar "CMDECHO")
	actDoc
		(vla-get-ActiveDocument
		  (vlax-get-acad-object)
		)
  ) ;_ end setq
  (vla-StartUndoMark actDoc)
  (setvar "CMDECHO" 0)
  (setvar "UCSFOLLOW" 0)
  (if (setq ss (ssget "_X"
		      (list '(0 . "REGION")
			    (cons 410 (getvar "CTAB"))
		      )
	       )
      )
    (repeat (setq item (sslength ss))
      (setq Ent	   (ssname ss (setq item (1- item)))
	    curObj (vlax-ename->vla-object Ent)
      )
      (if (vlax-write-enabled-p curObj)
	(progn
	  (setq	curSet nil
		curSet (ssadd)
		newObj (vla-Copy curObj)
		ObjArr (vlax-safearray->list
			 (vlax-variant-value
			   (vla-Explode newObj)
			 )
		       )
	  )
	  (foreach memb	ObjArr
	    (setq memb (vlax-vla-object->ename memb))
	    (if	(member
		  (cdr (assoc 0 (entget Memb)))
		  '("LINE" "ARC" "LWPOLYLINE")
		)
	      (setq curSet (ssadd Memb CurSet))
	    ) ;_ end if
	  ) ;_ end foreach 
	  (if (> (sslength curSet) 0)
	    (progn
	      (command "_.ucs" "_ob" (ssname curSet 0))
	      (if (and (getvar "PEDITACCEPT")
		       (= (getvar "PEDITACCEPT") 1)
		  )
		(command "_.pedit" (ssname curSet 0) "_j" CurSet "" "")
		(command "_.pedit"
			 (ssname curSet 0)
			 "_y"
			 "_j"
			 CurSet
			 ""
			 ""
		)
	      )
	      (while (> (getvar "CMDACTIVE") 0) (command ""))
	      (command "_.ucs" "_p")
	      (vla-delete curObj)
	      (princ "\n<<< Polyline created:) >>>")
	    ) ;_ end progn
	    (progn
	      (command "_.erase" curSet "")
	      (vla-EndUndoMark actDoc)
	      (alert "Can't transform this Region to Polyline!")
	    ) ;_ end progn
	  ) ;_ end if
	) ;_ end progn
      ) ;_ end if
    ) ;_ end repeat
  )
  (setvar "CMDECHO" oldEcho)
  (vla-EndUndoMark actDoc)
  (princ)
) ;_ end of c:retopl
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.04.2011, 02:21
#23
Павел Котелевец

проектирование
 
Регистрация: 02.08.2006
Ухта
Сообщений: 32


Роскошный лисп!
Взялся за допил.

Результат:
  • Предлагает выбор
  • Обработал все тестовые регионы (простой/с вычетом/суммарный/суммарный с вычетом/ тот же набор, но с содержанием сплайнов) за один вызов команды.
  • Все осколки, способные объединятся, объединяет в полилинии.
  • Удаляет исходные регионы.
  • PEDITACCEPT ставит 1. (В 0 не нашёл смысла)

Название рабочее =)

Код:
[Выделить все]
 (defun c:r2 (/	   *error*  oldEcho  Ent      curSet   ;2:04 07.04.2011 Retopl mod by 1D
		  curObj   ObjArr   curMemb  errFlag  actDoc   item
		  ss MT i MT1 ss1
		 )
  (vl-load-com)

  (defun *error* (msg)
    (vla-EndUndoMark actDoc)
    (setvar "CMDECHO" oldEcho)
    (princ msg)
    (princ)
  ) ;_ end of *error*

(defun r2plc (ss / );

(setq i 0); chesk curSet selset for empty entries
(repeat (sslength ss)
             (if
             (not (vlax-ename->vla-object (ssname ss i)))
             (setq ss (ssdel (ssname ss i) ss)))
		(setq i (1+ i))
);repeat

(setq Ent (ssname ss (setq item (1- item))));___ entity
(setq curObj (vlax-ename->vla-object Ent)); ___VLA entity
  
(if (vlax-write-enabled-p curObj)
(progn
	  (setq	curSet nil
		curSet (ssadd)
		ObjArr (vlax-safearray->list
			 (vlax-variant-value
			   (vla-Explode curObj)
			 )
		       )
	  )
		(vla-delete curObj); ___explode to ObjArr


	  (foreach memb	ObjArr
	    (setq memb (vlax-vla-object->ename memb))
	    (if	(member
		  (cdr (assoc 0 (entget Memb)))
		  '("LINE" "ARC" "LWPOLYLINE")
		)
	      (setq curSet (ssadd Memb CurSet));___Curset from linearc chunks
	    ) ;_ end if


(if (member
 (cdr (assoc 0 (entget Memb)))
 '("REGION")
 )
   (progn 	      
   (setq ss1 (ssadd Memb ss1));___ss1 from Reg
   )
);if

	  ) ;_ end foreach 

(if (> (sslength ss1) 0)
(setq i 0); chesk ss1 selset for empty entries
(repeat (sslength ss1)
             (if
             (not (vlax-ename->vla-object (ssname ss1 i)))
             (setq ss1 (ssdel (ssname ss1 i) ss1)))
             (setq i (1+ i))
             ));___clean ss1

(if (> (sslength curSet) 0)
(setq i 0); chesk curSet selset for empty entries
(repeat (sslength curSet)
             (if
             (not (vlax-ename->vla-object (ssname curSet i)))
             (setq curSet (ssdel (ssname curSet i) curSet)))
		(setq i (1+ i))
             ));___clean curset


(if (> (sslength curSet) 0)
	    (progn
		(command "_.ucs" "_ob" (ssname curSet 0))
		(command "_.pedit" (ssname curSet 0) "_j" CurSet "" "")
	      (while (> (getvar "CMDACTIVE") 0) (command ""))
	      (command "_.ucs" "_p")


		(setq MT curSet i 0)
(repeat (sslength MT)
(setq MT1 (ssname MT i))
(setq i (1+ i)
VSS (ssadd MT1 VSS))
)

;;(command "_.chprop" MT "" "_C" 12 "")

(princ "\n<<< Polyline created: >>>")
) ;_ end progn
);if
	  
) ;_ end progn
);if
);defun r2plc

; MAIN PART

(setq oldEcho (getvar "CMDECHO") actDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-StartUndoMark actDoc)
(setvar "CMDECHO" 0)
(setvar "PEDITACCEPT" 1)
(setvar "UCSFOLLOW" 0)
(setq VSS nil VSS (ssadd)); lines/arc chunks collector
(setq ss1 nil ss1 (ssadd)); complex region's chunks collector
(princ "select regions")

(if (setq ss (ssget 
;"_X"
    (list '(0 . "REGION") (cons 410 (getvar "CTAB")))));setq
(progn
        (repeat (setq item (sslength ss))
        (r2plc ss));repeat
        
        (if (> (sslength ss1) 0)
            (progn
            (princ "\nAddictive Regions:")
            (princ (sslength ss1))
                 (repeat (setq item (sslength ss1))
                 (r2plc ss1));repeat
            ) ;_ end progn
        );if

);progn
);if

(setq i 0); chesk VSS selset for empty entries and joining chunks
(repeat (sslength VSS)
             (if
             (vlax-ename->vla-object (ssname VSS i))
             (vl-cmdf "_PEDIT" "_M" VSS "" "_J" "_J" "_B" 0 "")
             )
             (setq i (1+ i))
);repeat

(princ "\nComplete")
  (setvar "CMDECHO" oldEcho)
  (vla-EndUndoMark actDoc)
  (princ)
) ;_ end of c:r2pl
Павел Котелевец вне форума  
 
Непрочитано 05.11.2012, 18:30
1 | #24
Павел Котелевец

проектирование
 
Регистрация: 02.08.2006
Ухта
Сообщений: 32


В результате: объединение полилиний:
Код:
[Выделить все]
 (defun C:R11 (/; convert to reg bylayer and union
ss MT MTL i MT1
)
(princ "\nObj for reg")

(setq ss (ssget 
'((-4 . "<OR")(0 . "*POLYLINE") (0 . "*REGION") (0 . "*CIRCLE")(-4 . "OR>"))
))
(setq i 0 vs (ssadd))
(repeat (sslength ss)
(setq MT (ssname ss i))
(if (member (cdr (assoc 0 (entget MT))) '("POLYLINE" "LWPOLYLINE" "CIRCLE")  )
(progn
(setq MTL (cdr (assoc 8 (entget MT))))
(setvar "CLAYER" MTL)
(command "_REGION" MT "")
(setq MT1 (entlast))
(if (and (= (cdr (assoc 0 (entget MT1))) "REGION") (not (ssmemb MT1 vs)))
(setq vs (ssadd MT1 vs))
))
(setq vs (ssadd MT vs))
)
(setq i (1+ i))
(princ i)
)
(command "_UNION" vs "")
(sssetfirst vs vs)
(C:R2)
(princ))
(princ "\n R11        _loaded: Convert to REGION bylayer and JOIN")
(setq MT (1+ MT))
Вычитание полилиний:
Код:
[Выделить все]
 (defun C:R22 (/; convert to reg bylayer and SUBTRACT
ss MT MTL i MT1 OSM MTE
)
(princ "\nTEST_VERSION !!")

(princ "\nSubtract FROM:")
(setq vs (ssget 
'((-4 . "<OR")(0 . "*POLYLINE") (0 . "*REGION")(-4 . "OR>"))
))
(princ "\nSubtract by THIS:")
(setq ss (ssget 
'((-4 . "<OR")(0 . "*POLYLINE") (0 . "*REGION")(-4 . "OR>"))
))

(setq MTE (entlast) vsss (ssadd))

(setq OSM (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "_COPY" ss "" "@" "@")
(setvar "OSMODE" OSM)


(while MTE 
(setq MTE (entnext MTE))
(if MTE (setq vsss (ssadd MTE vsss)))
)

(setq i 0)
(repeat (sslength vs)
(setq MT (ssname vs i))
(if (member (cdr (assoc 0 (entget MT))) '("POLYLINE" "LWPOLYLINE")  )
(progn
(setq MTL (cdr (assoc 8 (entget MT))))
(setvar "CLAYER" MTL)
(command "_REGION" MT "")
(setq MT1 (entlast))
(if (and (= (cdr (assoc 0 (entget MT1))) "REGION") (not (ssmemb MT1 vs)))
(setq vs (ssadd MT1 vs))
))
(setq vs (ssadd MT vs))
)
(setq i (1+ i))
(princ i)
)


(setq i 0 vss (ssadd))
(repeat (sslength ss)
(setq MT (ssname ss i))
(if (member (cdr (assoc 0 (entget MT))) '("POLYLINE" "LWPOLYLINE")  )
(progn
(setq MTL (cdr (assoc 8 (entget MT))))
(setvar "CLAYER" MTL)
(command "_REGION" MT "")
(setq MT1 (entlast))
(if (and (= (cdr (assoc 0 (entget MT1))) "REGION") (not (ssmemb MT1 vss)))
(setq vss (ssadd MT1 vss))
))
(setq vss (ssadd MT vss))
)
(setq i (1+ i))
(princ i)
)

(command "_SUBTRACT" vs "" vss "")
(sssetfirst vs vs)
(C:R2)
(setq vss vsss)
(sssetfirst vss vss)
(princ)


(setq i (getstring "\n Delete?"))
(command "_ERASE" vss "")

)
(princ "\n R22        _loaded: Convert to REGION bylayer and cut SUTRACT")
Павел Котелевец вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Region -> closed polyline