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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как выделить замкнутые полилиний, не залитые штриховкой?

Как выделить замкнутые полилиний, не залитые штриховкой?

Ответ
Поиск в этой теме
Непрочитано 23.04.2024, 14:34 #1
Как выделить замкнутые полилиний, не залитые штриховкой?
Йинегве
 
Регистрация: 10.11.2017
Сообщений: 8

Добрый день!
На чертеже есть множество замкнутых полилиний. Почти все они залиты штриховкой. Можно ли каким-то способом выделить замкнутые полилинии, не залитые штриховкой? Общее число полилиний больше 1000. Не залитые штриховкой полилинии могут быть очень маленькими по площади и визуально определить их очень затруднительно.
Просмотров: 850
 
Непрочитано 23.04.2024, 16:31
#2
Sanmart


 
Регистрация: 05.05.2009
СПб
Сообщений: 423


Скорее всего, никак. Можно только по Closed=No.
Sanmart вне форума  
 
Непрочитано 23.04.2024, 16:59
#3
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,943


Если штриховки ассоциативные, ещё можно было бы.
engngr вне форума  
 
Непрочитано 24.04.2024, 09:37
#4
name02


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


Написал такую программку - проверка совпадение полилиний и штриховок выполняется по совпадению координат X и Y:
Код:
[Выделить все]
 (defun c:SELP (/ verteces_lst ss i ent hatch_lst pline_lst ss1)

  ;;составление списка координат вершин штриховки или полилинии
  (defun verteces_lst (ent /)
    ;;в зависимости от типа объекта берем нужную точечную пару

    (cond
      ((member '(0 . "HATCH") (entget ent))
       ;;удаляем из списка все кроме координат вершин (пары 11)
       (mapcar '(lambda	(x)
		  (list (cadr x) (caddr x))
		) ;_ end of lambda
	       (vl-remove-if-not
		 '(lambda (a)
		    (= (car a) 11)
		  ) ;_ end of lambda
		 (entget ent)
	       ) ;_ end of vl-remove-if-not

       ) ;_ end of mapcar
      )
      ((member '(0 . "LWPOLYLINE") (entget ent))
       ;;удаляем из списка все кроме координат вершин (пары 10)
       (mapcar 'cdr
	       (vl-remove-if-not
		 '(lambda (a)
		    (= (car a) 10)
		  ) ;_ end of lambda
		 (entget ent)
	       ) ;_ end of vl-remove-if-not
       ) ;_ end of mapcar
      ) ;_ end of cond
    ) ;_ end of setq


  ) ;_ end of defun


  (setq ss (ssget '((0 . "HATCH,LWPOLYLINE"))))

  ;;из общего набора выделяем отдельно штриховки и полилинии
  (repeat (setq i (sslength ss))
    (setq ent (ssname ss (setq i (1- i))))

    (cond
      ((wcmatch (cdr (assoc 0 (entget ent))) "HATCH")
       (setq hatch_lst (cons ent hatch_lst))
      )
      ((wcmatch (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
       (setq pline_lst (cons ent pline_lst))
      )
      (T nil)
    ) ;_ end of cond
  ) ;_ end of repeat

  ;;набор для хранения итоговых полилиний
  (setq ss1 (ssadd))

  ;;проходим список полилиний и сравниваем координаты вершин с вершинами штриховок
  (mapcar '(lambda (x / pline_vert_lst i flag)
	     ;;определяем вершины координат полилинии
	     (setq pline_vert_lst (verteces_lst x))

	     ;;проходим все штриховки поочереди и определяем их координаты
	     ;;проверяем совпадение вершин штриховки и полилинии
	     (repeat (setq i (length hatch_lst))

	       (setq flag T)

	       ;;определяем вершины штриховки
	       (setq hatch_vert_lst (verteces_lst (nth (setq i (1- i)) hatch_lst)))

	       ;;если все вершины полилинии есть в списке вершин штриховки
	       (mapcar '(lambda	(b)
			  (if (null (member b hatch_vert_lst))
			    (setq flag nil)
			  ) ;_ end of if

			) ;_ end of lambda
		       pline_vert_lst
	       ) ;_ end of mapcar

	       ;;если после проверки - истина, то помещаем данную полилинию в список

	       (if (= flag T)
		 (ssadd x ss1)
	       ) ;_ end of if

	     ) ;_ end of while
	   ) ;_ end of lambda

	  pline_lst

  ) ;_ end of mapcar

  ;;если в итоге есть набор
  (sssetfirst nil ss1)

  (princ)

) ;_ end of defun
SELP.lsp
name02 вне форума  
 
Автор темы   Непрочитано 24.04.2024, 11:41
#5
Йинегве


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


Цитата:
Сообщение от engngr Посмотреть сообщение
Если штриховки ассоциативные, ещё можно было бы.
Да, штриховки ассоциативные

----- добавлено через 52 сек. -----
Цитата:
Сообщение от name02 Посмотреть сообщение
Написал такую программку - проверка совпадение полилиний и штриховок выполняется по совпадению координат X и Y:
Код:
[Выделить все]
 (defun c:SELP (/ verteces_lst ss i ent hatch_lst pline_lst ss1)

  ;;составление списка координат вершин штриховки или полилинии
  (defun verteces_lst (ent /)
    ;;в зависимости от типа объекта берем нужную точечную пару

    (cond
      ((member '(0 . "HATCH") (entget ent))
       ;;удаляем из списка все кроме координат вершин (пары 11)
       (mapcar '(lambda	(x)
		  (list (cadr x) (caddr x))
		) ;_ end of lambda
	       (vl-remove-if-not
		 '(lambda (a)
		    (= (car a) 11)
		  ) ;_ end of lambda
		 (entget ent)
	       ) ;_ end of vl-remove-if-not

       ) ;_ end of mapcar
      )
      ((member '(0 . "LWPOLYLINE") (entget ent))
       ;;удаляем из списка все кроме координат вершин (пары 10)
       (mapcar 'cdr
	       (vl-remove-if-not
		 '(lambda (a)
		    (= (car a) 10)
		  ) ;_ end of lambda
		 (entget ent)
	       ) ;_ end of vl-remove-if-not
       ) ;_ end of mapcar
      ) ;_ end of cond
    ) ;_ end of setq


  ) ;_ end of defun


  (setq ss (ssget '((0 . "HATCH,LWPOLYLINE"))))

  ;;из общего набора выделяем отдельно штриховки и полилинии
  (repeat (setq i (sslength ss))
    (setq ent (ssname ss (setq i (1- i))))

    (cond
      ((wcmatch (cdr (assoc 0 (entget ent))) "HATCH")
       (setq hatch_lst (cons ent hatch_lst))
      )
      ((wcmatch (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
       (setq pline_lst (cons ent pline_lst))
      )
      (T nil)
    ) ;_ end of cond
  ) ;_ end of repeat

  ;;набор для хранения итоговых полилиний
  (setq ss1 (ssadd))

  ;;проходим список полилиний и сравниваем координаты вершин с вершинами штриховок
  (mapcar '(lambda (x / pline_vert_lst i flag)
	     ;;определяем вершины координат полилинии
	     (setq pline_vert_lst (verteces_lst x))

	     ;;проходим все штриховки поочереди и определяем их координаты
	     ;;проверяем совпадение вершин штриховки и полилинии
	     (repeat (setq i (length hatch_lst))

	       (setq flag T)

	       ;;определяем вершины штриховки
	       (setq hatch_vert_lst (verteces_lst (nth (setq i (1- i)) hatch_lst)))

	       ;;если все вершины полилинии есть в списке вершин штриховки
	       (mapcar '(lambda	(b)
			  (if (null (member b hatch_vert_lst))
			    (setq flag nil)
			  ) ;_ end of if

			) ;_ end of lambda
		       pline_vert_lst
	       ) ;_ end of mapcar

	       ;;если после проверки - истина, то помещаем данную полилинию в список

	       (if (= flag T)
		 (ssadd x ss1)
	       ) ;_ end of if

	     ) ;_ end of while
	   ) ;_ end of lambda

	  pline_lst

  ) ;_ end of mapcar

  ;;если в итоге есть набор
  (sssetfirst nil ss1)

  (princ)

) ;_ end of defun
Вложение 262803
Спасибо, попробую
Йинегве вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как выделить замкнутые полилиний, не залитые штриховкой?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сместить или уменьшить замкнутые объекты из полилиний по ровну со всех сторон за раз? rezak AutoCAD 37 30.05.2022 16:07
Нужна помощь в написании autolisp. Autocad2021 Суммы длин и площадей полилиний в тексты по слоям inatsvin Поиск исполнителей 0 10.02.2022 10:21
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Макрос VBA Excel для извлечения таблиц из линий, полилиний, текста из DWG файлов в Excel с помощью NanoCAD/AutoCAD JZY Готовые программы 8 14.07.2016 06:31
Можно ли при извлечении данных полилиний задать порядок, исходя из координат? Scorpio_Music AutoCAD 14 16.06.2014 12:12