根据得到的2条线画垂直线
如附件中的图片所示:根据用户输入得到2条有夹角的线,怎样求出红色垂直的线(线条3=线条2)?
因为输入的时候,2条线会有各种角度及方向,不知道怎么去算,初学没有多久,请各位给点提示。
1、选择线条1,获得线条1的角度。
2、选择线条2,获得线条2的角度、长度。
3、获得线条1、2的交点。
4。求红线的另外端点(polar 交点 线条2长度 求出的角度),若线条2在线条1的顺时针方向,红线的角度是线条1角度减90度,否则变为线条1角度加90度。
5. 端点和交点的连线即为红线。 (defun C:cx(/ xEntPick entName pickPt pt1 pt2 en1 cz)
(vl-load-com)
(setvar 'osmode 0)
(while (not (and (setq xEntPick (entsel "\n选择线: ")))))
(setq entName (car xEntPick))
(setq pickPt (cadr xEntPick))
(setq pt1 (osnap pickpt "_nea"))
(setq pt2 (getpoint "\n另一点"))
(command ".line" pt2 (osnap pt1 "_per") "")
(setq en1 (entlast))
(setq pt1 (osnap pt1 "end"))
(setq cz (vlax-curve-getClosestPointTo entname pt2 T))
(command "_move" en1 "" cz pt1)
(princ)
) 好像没有规律只能一条一条的选了。 819534890 发表于 2015-7-13 15:46 static/image/common/back.gif
1、选择线条1,获得线条1的角度。
2、选择线条2,获得线条2的角度、长度。
3、获得线条1、2的交点。
听您这么一说,大概思路出来了,但还有个问题:
若线条2在线条1的顺时针方向 ,这个有没有好的判断方法,或者函数? fan_zh 发表于 2015-7-13 16:04 static/image/common/back.gif
(defun C:cx(/ xEntPick entName pickPt pt1 pt2 en1 cz)
(vl-load-com)
(setvar 'osmode 0)
谢谢了,对象捕捉也是一个方法,之前没有想到。 ;;;计算cp到p1 p2的垂足点
(defun PerToLine(cp p1 p2 / norm)
(setq norm (mapcar '- p2 p1)
p1 (trans p1 0 norm)
cp (trans cp 0 norm)
)
(trans (list (car p1) (cadr p1) (caddr cp)) norm 0)
)
;;;by edata@mjtd 2015-7-14
(defun sk_dxf(ent code)(cdr (assoc code(entget ent))))
(defun sk_type(ent str)(=(sk_dxf ent 0) str))
(defun c:tt(/ cpt e1 e2 elist ipt p1 p2 p3 p4 p5 p6)
(if(and (setq e1(car(entsel "\n选择直线1:")))
(sk_type e1 "LINE")
(setq e2(car(entsel "\n选择直线2:")))
(sk_type e2 "LINE")
)
(progn
(setq p1(sk_dxf e1 10)
p2(sk_dxf e1 11)
p3(sk_dxf e2 10)
p4(sk_dxf e2 11))
(setq ipt(inters p1 p2 p3 p4 nil))
(if(>(distance p3 ipt)(distance p4 ipt))
(setq p5 p3)
(setq p5 p4)
)
(setq cpt(PerToLine p5 p1 p2))
(setq p6(polar ipt (angle cpt p5)(distance p3 p4)))
(setq elist(entget e2))
(setq elist(subst(cons 10 ipt)(assoc 10 elist)elist)
elist(subst(cons 11 p6)(assoc 11 elist)elist)
)
(entmake elist)
)
(princ "\n请选择直线.")
)
(princ)
)
edata 发表于 2015-7-14 11:02 static/image/common/back.gif
膜拜啊,对比了自己的代码,这差距太大了。
页:
[1]