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

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

Помогите найти контура

Ответ
Поиск в этой теме
Непрочитано 23.08.2012, 10:21 #1
Помогите найти контура
iskatel111
 
Регистрация: 13.06.2012
Сообщений: 98

в плоской модели есть замкнутые контуры, образованные линиями. мне нужно их найти, и обрисовать полилинией. в голову приходит только простой перебор - т.е. берем первую линию, смотрим координаты концов, перебираем остальные в поиске совпадающих координат и т.д. пока контур не замкнется.

но вот есть команда BOUNDARY, которая делает то что нужно, только вручную нужно внутрь контура ткнуть. может есть возможность както автоматически определить все замкнутые контуры?
Просмотров: 3242
 
Непрочитано 23.08.2012, 12:39
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Самое простое - находите центр прямоугольника, в который вписывается одна из полилиний, входящая в контур (с помощью GetBoundingBox), и программно "тыкайте" в него. Впрочем, смотря какие полилинии. Если изолинии с зигзагами - может не помочь. Чертеж бы посмотреть...
А Вам неплохо бы посмотреть в сторону верт. решений типа Civil, приложений типа GeoniCS или спец. софта типа Mapinfo

Последний раз редактировалось kp+, 23.08.2012 в 12:51.
kp+ вне форума  
 
Автор темы   Непрочитано 23.08.2012, 12:49
#3
iskatel111


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


там просто линии, например прямоугольник, нарисованный четырьмя линиями. GetBoundingBox для любой из линий даст просто линию
iskatel111 вне форума  
 
Непрочитано 23.08.2012, 13:14
#4
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 22,997
<phrase 1=


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
контура
Ведь в следующей строке это слово написано правильно....
Солидворкер вне форума  
 
Непрочитано 23.08.2012, 13:54
#5
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
там просто линии, например прямоугольник, нарисованный четырьмя линиями.
С этим отлично справится pltools, команда PL-JOIN. Может, этого будет и достаточно. Да и стандартную опцию join команды pline никто не отменял.
Потом, если не все найдется - можно продолжить искать контураы с помощью функции (boundary)
PS пример чертежа секретный?

Последний раз редактировалось kp+, 23.08.2012 в 14:00.
kp+ вне форума  
 
Непрочитано 23.08.2012, 15:03
#6
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
может есть возможность както автоматически определить все замкнутые контуры?
Определи указатель в документе на последний объект entlast:
Код:
[Выделить все]
(setq mark (entlast))
затем выдели с помощью:
Код:
[Выделить все]
(setvar "peditaccept" 1)
(command ".pedit" "_m" (ssget '((0 . "LINE"))) "" "J" "" "" "")
(while (setq next (entnext mark))
(setq joined_plines (cons (entlast) joined_plines))
(setq mark next)
)
далее циклом
Код:
[Выделить все]
(foreach pline joined_plines
;; ищем точку внутри
;; выполняем команду BOUNDARY, "которая делает то что нужно"
;; взрываем контур или оставляем как есть
)
(setvar "peditaccept" 0)
Проверь синтаксис, пишу прямо здесь

~'o'~
Олег (jr.) вне форума  
 
Непрочитано 23.08.2012, 18:00
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
может есть возможность както автоматически определить все замкнутые контуры?
Сайт
Цитата:
Today I post a Lisp in theswamp.org: to find each closed boundary of selected object
Сам код
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.08.2012, 19:02
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Можно проще
Код:
[Выделить все]
;; FIND BOUNDARY
;;http://forum.dwg.ru/showpost.php?p=962437&postcount=7

;;; writed by Gian Paolo Cattaneo
(defun Point-in-ClosedCurve-p (l pt / ang p1 p2 n r at)
  (setq ang 0.0)
  (while (and (cadr l) (not at))
    (setq p1 (car l)
	  p2 (cadr l)
	  l  (cdr l)
	  an1 (- (angle pt p2) (angle pt p1))
    )    
    (if	(< an1 (- pi))
      (setq an1 (+ an1 pi pi))
      (if (> an1 pi)
	(setq an1 (- an1 pi pi))
      )
    )
    (if	(equal (abs an1) pi 1e-14)
      (setq at T)
    )
    (setq ang (+ ang an1))
  )
  ;;deal widding number  
  (if at
    0
    (progn
      (setq n (/ ang 2. pi))
      (if (and (> n 0) (equal (1+ (fix n)) n 1e-2))
 ;_Change Acc 1e-4 to 1e-2 for correct 2012-8-3
	(setq n (1+ (fix n)))
	(if (and (< n 0) (equal (1- (fix n)) n 1e-2))
 ;_Change Acc 1e-4 to 1e-2 for correct 2012-8-3
	  (setq n (1- (fix n)))
	  (setq n (fix n))
	)
      )
      (if (= (rem n 2) 0)
	-1
	1
      )
    )
  )
)

(defun C:ltop(/ joined_plines lst mark next pt pts x)
  (setq pts nil)
  (while (setq pt (getpoint "\nУкажи точку внутри контура или Enter для завершения: "))
    (setq pts (cons pt pts)))
(setq mark(entlast))
(setvar "peditaccept" 1)
(command "_pedit" "_m" (ssget '((0 . "LINE"))) "" "J" "" "" "")
(while (setq next (entnext mark))
(setq joined_plines (cons next joined_plines))
(setq mark next)
)
(foreach pline joined_plines
  (setq lst (vl-remove-if 'not(mapcar '(lambda(x)(if (eq 10 (car x)) (cdr x)))(entget pline))))
  (foreach pt pts
    
    (if (Point-in-ClosedCurve-p lst pt)
      
  (command "_chprop" pline "" "_color" 1 "")  
  )
      )
  )
(setvar "peditaccept" 0)
(princ)
  )
~'o'~
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите найти контура

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продавливание. Как найти момент сопротиления контура бетона расчетного сечения плиты ? Olga12 Железобетонные конструкции 35 03.08.2021 08:34
Помогите найти прогоны длиной 6000мм, сечением 180х600мм Toxel Поиск литературы, чертежей, моделей и прочих материалов 3 22.01.2011 07:28
Помогите найти СП 31-115-2008 Открытые физкультурно-спортивные сооружения. Часть 4. Экстремальные виды спорта Aragorn Поиск литературы, чертежей, моделей и прочих материалов 2 02.12.2010 06:58
СНиП 11-10-75. Технология укладки асфальтовой смеси. Помогите найти! Maxim-t Поиск литературы, чертежей, моделей и прочих материалов 5 23.09.2010 00:11
Помогите найти чертежи православных храмов leonbka Поиск литературы, чертежей, моделей и прочих материалов 5 12.03.2010 11:31