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

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

Помогите разобраться с мультивыноской

Ответ
Поиск в этой теме
Непрочитано 25.03.2021, 22:33 #1
Помогите разобраться с мультивыноской
Publipor
 
Регистрация: 02.03.2021
Сообщений: 49

Добрый день.
Подскажите пожалуйста как сделать данную мультивыноску. А именно, при добавлении новой выноски, она добавлялась уже с другой вершины.
Заранее спасибо.

Вложения
Тип файла: dwg
DWG 2018
выноска.dwg (35.2 Кб, 15 просмотров)

Просмотров: 885
 
Непрочитано 26.03.2021, 09:14
#2
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


возможно так
Код:
[Выделить все]
 (defun c:ml-cont ( / obj)
	(setq obj (car (entsel)))
	(if 
		(and
			(not (null obj))
			(= (vla-get-ObjectName (vlax-ename->vla-object obj)) "AcDbMLeader")
		)
		(if (ml-continous  (vlax-ename->vla-object obj)) t (princ "Break"))
		(princ "\nIncorrect input") 
	)
	(princ)
)

(defun ml-continous (mlObj  / temp newLead mlBasePt newLead newIndex fl) ;|двигаем выноску
	*аргумент - vla-object мультивыноски
	*возвращет - vla-object мультивыноски или nil при нажатии esc
	|;
	(defun 3ptVariant (pt1 pt2 pt3 /  ) 
	;;;input - 2 points
	;;;output - vla-variant
		(vlax-make-variant
			(vlax-safearray-fill 
				(vlax-make-safearray 
					vlax-vbDouble 
					'(0 . 8) 
				) 
				(append pt1 pt2 pt3)
			) 	
		) 
	)
	(setq 
		temp (vlax-safearray->list (vlax-variant-value (vla-GetLeaderLineVertices mlObj 0)))
		mlBasePt (list (car temp) (cadr temp) (caddr temp))
		fl t
		newLead (vla-AddLeaderLine mlObj 0 (3ptVariant '(0 0 0) '(1 1 1) mlBasePt)  )
		newIndex (last (vlax-safearray->list (vlax-variant-value (vla-GetLeaderLineIndexes mlObj 0))))
	)
	(while fl
		(if (vl-catch-all-error-p (setq temp (vl-catch-all-apply 'grread '(t 12 0))))
			(progn ;;ESC
				(vla-RemoveLeaderLine mlObj newIndex)
				(setq fl nil mlObj nil)
			) 
			(progn 
				(if (or (= (car temp) 5) (= (car temp) 3)) 
					(progn
						(setq 
							pt1 (trans (cadr temp) 1 0)
							pt2 (sad-get-intersect-line mlBasePt (polar mlBasePt 0 100) pt1 (polar pt1 (* pi -0.75) 100))
						)
						(vla-SetLeaderLineVertices mlObj newIndex (3ptVariant pt1 pt2 mlBasePt))
				))
				(if (or (= (car temp) 3) (= (car temp) 25)) (setq fl nil))
			)
		)
	) ;;while
	mlObj
)

(defun sad-get-intersect-line (pt1 pt2 pt3 pt4 / ) ;|точка пересечения двух отрезков определенных точками
	Intput 4 point determed 2 line
	Return intesect point or nil if lines is parralel
	|;
	(defun fun-line (p1 p2 / )  ;;return list ( A В C ) Ax+Bx+C=0
		(list  
			(- (cadr p1) (cadr p2))
			(- (car p2) (car p1))
			(- (* (car p1) (cadr p2)) (* (car p2) (cadr p1)))
		)
	)
	(defun intersect-line ( ABC1 ABC2 / pt x) ;;return Point
	;;A1 not zero! horizontal line
		(if (zerop (car ABC1)) 	(setq pt ABC1 ABC1 ABC2 ABC2 pt pt nil) )
		(if (or
				(and (= (car ABC1) (car ABC2)) (= (cadr ABC1) (cadr ABC2)))
				(and (= (car ABC1) (- 0 (car ABC2))) (= (cadr ABC1) (- 0 (cadr ABC2))))	
			)
			(progn (princ "\nLine iz not intersect ") nil)
			(progn
				(setq 
					y (/(- (/ (* (car ABC2) (caddr ABC1)) (car ABC1)) (caddr ABC2)) (- (cadr ABC2) (/ (* (car ABC2) (cadr ABC1)) (car ABC1))))
					x (/ (- 0 (* (cadr ABC1) y) (caddr ABC1)) (car ABC1) )
					pt (list x y 0)
				)
			)
		)
	)	
	(intersect-line (fun-line pt1 pt2) (fun-line pt3 pt4))
)
Работать будет только в горизонтальном положении (как в примере), коли надо, другие углы сами дописывайте.
Offtop: Что угодно, лишь бы не работать...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Помогите разобраться с мультивыноской

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрически изменяемая система (SCAD) MaximZ SCAD 572 02.06.2025 08:51
Помогите разобраться в п. 11.51* СП 31.13330.2012 ТА-2020 Водоснабжение и водоотведение 2 09.06.2020 10:57
Помогите разобраться с расчетом п/п как элементов висячей системы при прогрессирующем обрушении AAVik Железобетонные конструкции 0 09.02.2019 15:13
Ребят, помогите разобраться с нахождением усилий по линиям влияния belan_es Прочее. Архитектура и строительство 5 31.05.2015 12:28
Помогите разобраться с эвакуацией людей TatiTati Прочее. Архитектура и строительство 10 09.11.2011 17:05