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 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Region -> closed polyline