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

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

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

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

Добрый день!
На чертеже есть множество замкнутых полилиний. Почти все они залиты штриховкой. Можно ли каким-то способом выделить замкнутые полилинии, не залитые штриховкой? Общее число полилиний больше 1000. Не залитые штриховкой полилинии могут быть очень маленькими по площади и визуально определить их очень затруднительно.
Просмотров: 848
 
Непрочитано 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,941


Если штриховки ассоциативные, ещё можно было бы.
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 > Как выделить замкнутые полилиний, не залитые штриховкой?

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сместить или уменьшить замкнутые объекты из полилиний по ровну со всех сторон за раз? 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