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

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

Создание контура вокруг нескольких штриховок

Ответ
Поиск в этой теме
Непрочитано 09.04.2014, 16:20 #1
Создание контура вокруг нескольких штриховок
Блондинка в автокаде
 
Регистрация: 20.01.2010
Сообщений: 6

Здравствуйте, уважаемые программисты!
Обращаюсь к вам за помощью: помогите, если не трудно, сваяйте мне небольшой макрос на автолиспе.

Проблема: в пространстве модели сложный контур поделён на части и залит штриховкой по этим частям. Видимо, у предыдущего чертёжника залить весь контур единой штриховкой не получилось. Простите, не штриховкой, а заливкой solid. Но это неважно.
Все штриховки плотно примыкают друг к другу.

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

Помогите, пожалуйста, уже задолбалась ручками отрисовывать эти общие контуры.
Заранее благодарю.

p.s. Забыла: контуры штриховок содержат не только полилинии и отрезки, там ещё есть и дуги.
p.p.s работаю в AutoCAD-2010

Вложения
Тип файла: dwg
DWG 2007
общий_контур.dwg (78.2 Кб, 1154 просмотров)


Последний раз редактировалось Блондинка в автокаде, 09.04.2014 в 17:33.
Просмотров: 8053
 
Непрочитано 09.04.2014, 21:27
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Эээээ... а _boundary не поможет?
Boxa вне форума  
 
Непрочитано 09.04.2014, 22:40
#3
Олег (jr.)

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


Попробуй для такого типа штриховок,
если я правильно понял, сделал навскидку,
можешь потом контур удалить
Код:
[Выделить все]
;; tested in A2007 only
(defun C:HO  (/ cop csh hlst loop outl sh)
  (vl-load-com)

  (if
    (setq sh (ssget "_:L" (list (cons 0 "HATCH"))))
     (progn
       (setq hlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex sh))))
       (foreach	en  hlst
	 (command "_-HATCHEDIT" en "_B" "_P" "_Y");; recreate a boundary as closed polyline
	 (setq cop (cons (vlax-ename->vla-object en) cop))
	 )

       (setq csh (ssadd))
       (setvar "delobj" 0)
       (foreach	hobj  cop
	 (vla-getloopat hobj 0 'loop)
	 (if
	   (not	(vl-catch-all-error-p
		  (setq	outl (vl-catch-all-apply
			       'vlax-safearray->list
			       (list loop)
			       )
			)
		  )
		)

	    (progn

	      (command "_.region" (vlax-vla-object->ename (car outl)) "")
	      (ssadd (entlast) csh)))
	 )
       (command "_.union" csh "")
       (command "_chprop" (entlast) "" "_C" "cyan" "_LW" 50 "")
       (alert
	 (rtos (vlax-get (vlax-ename->vla-object (entlast)) 'area)))

       )
     )
  (princ)
  )
Олег (jr.) вне форума  
 
Непрочитано 10.04.2014, 00:51
#4
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 188
Отправить сообщение для nolte с помощью Skype™


и это тоже должно работать
Код:
[Выделить все]
 
(defun c:33 (/ h_set i lst_h lst num_v)
(setq h_set (ssget "_X" (list (cons 0 "HATCH"))))
(setq i -1)
(repeat (sslength h_set)
	(setq lst_h (cons (ssname h_set (setq i (1+ i))) lst_h))
)
(mapcar '(lambda (a)
					(setq lst (cdr (reverse (cdr (reverse
						(vl-remove-if-not '(lambda (x) (or (= (car x) 10) (= (car x) 42))) (entget a))))))
					)
					(setq num_v (length (vl-remove-if-not '(lambda (x) (= (car x) 10)) lst)))
					(entmakex
						(append
							(list '(0 . "LWPOLYLINE")
								'(100 . "AcDbEntity")
								'(100 . "AcDbPolyline")
								(cons 90 num_v)
								(cons 70 1)
							)	 
							lst	
						)
					)
				)
		lst_h
)
(princ)
)
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Автор темы   Непрочитано 12.04.2014, 08:14
#5
Блондинка в автокаде


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


_boundary не работает, как мне надо, не создает общий контур, а создаёт новые контуры вокруг каждой штриховки.

defun C:HO работает как надо, большое спасибо.

defun c:33 не работает, то есть вообще не определяется автокадом, как макрос. (Ну, может, у меня руки кривые, не знаю).

Всем большое спасибо за помощь!
Блондинка в автокаде вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание контура вокруг нескольких штриховок

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Создание поверхности из нескольких поверхностей для картограммы Civil 3D 2013 AlexeySh Вертикальные решения на базе AutoCAD 11 26.06.2018 16:13
Создание внешнего контура на основе выделенного набора примитивов Shaft Программирование 26 13.02.2017 16:55
Rotate нескольких объектов вокруг своей оси Silavsale AutoCAD 21 11.06.2013 11:59
Создание нескольких границ обрезки к одному линковонному чертежу hwd AutoCAD 1 22.01.2010 19:40