绘制平分线
亲爱的大家。
选择2条线(可能是2段pline)、水平线或角度线
输入“平分线数”
绘制平分线
有什么建议吗?对不起,我的英语,我需要一些几何形状或代码。。。。 您可以使用特殊的LISP程序或使用AutoCAD的参数化功能来实现。
这是一种使用参数的方法。
白线之间的角度为ANG1。最右边的白线和左边下一条红线之间的角度为ANG2=ANG1/3。3可以根据需要更改为其他数字。其他尺寸设置为ANG2。
此处ANG2=ANG1/4
你可以对水平线做类似的事情。 对于两条线,我将使用这种方法注意角度差异,手动连接端点,然后进行3除,然后使用节点绘制捕捉线。Lisp程序也可以这样做,我想它已经存在了。
尊敬的lrm:
但低版本无参数 比格尔,你概述的方法没有将角度分成3等分。
下面是使用您的方法得到的结果示例。
事实上,使用几何构造技术是不可能完成的任务。
https://en.wikipedia.org/wiki/Angle_trisection
用户可以标注两条线之间的角度,将该值除以3,然后使用该角度构建三等分线。 你可以画一条弧,然后用除法。可能需要一点Lisp程序的工作。。。
https://www.cadtutor.net/forum/attachment.php?attachmentid=61340&cid=1&stc=1 BKT,那会有用的。干得好 谢谢,Irm! Lrm我在看平行线而不是角度问题,很明显,两条非平行线将是下一个两端间距相等的问题。 有趣的项目,
更新了一些错误捕获
(defun c:bisect (/ e1 ss e2 d1 p10 p11 d2 p20 p21 tl p30 p31
a ad q a1 s1 p1 a2 s2 p2
vp sa ea ia i an)
(defun gc:clockwise-p (p1 p2 p3);;;GILE
(< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14))
(redraw)
(while (not e1)
(and (princ "\nSelect 2 LINEs...")
(setq ss (ssget (list (cons 0 "LINE"))))
(= (sslength ss) 2)
(setq e1 (ssname ss 0)
e2 (ssname ss 1))))
(redraw e1 3)
(redraw e2 3)
(setq d1 (entget e1)
p10 (cdr (assoc 10 d1))
p11 (cdr (assoc 11 d1)))
(setq d2 (entget e2)
p20 (cdr (assoc 10 d2))
p21 (cdr (assoc 11 d2)))
(foreach p '(p10 p11 p20 p21)
(if (not (member (eval p) tl))
(setq tl (cons (eval p) tl))))
(cond ((= (length tl) 2)
(alert "Overlaying LINEs Cannot Be Bisected"))
((or (< (distance p10 p11) 1e-8)
(< (distance p20 p21) 1e-8))
(alert "Both LINEs Must Have Length"))
((and (inters p10 p11 p20 p21)
(= (length tl) 4))
(alert "Crossing LINEs Cannot Be Bisected"))
((not (inters p10 p11 p20 p21 nil))
(setq a "Linear")
(alert "Parrellel LINEs Must Be Linear"))
(T (if (= (length tl) 3)
(setq ad "Angular")
(setq ad "Linear"))
(initget "Angular Linear")
(setq a (getkword (strcat "\nBisector Type - Angular/Linear <" ad ">: ")))
(or a (setq a ad))))
(if a
(progn
(initget 7)
(setq q (getint "\nNumber Of Bisector Lines: "))
(cond ((= a "Linear")
(if (inters p10 p20 p11 p21)
(setq p30 p21
p31 p20)
(setq p30 p20
p31 p21))
(setq a1 (angle p10 p30)
s1 (/ (distance p10 p30) (+ q 1))
p1 (polar p10 a1 s1))
(setq a2 (angle p11 p31)
s2 (/ (distance p11 p31) (+ q 1))
p2 (polar p11 a2 s2))
(grdraw p10 p10 2)
(grdraw p11 p11 3)
(repeat q
(entmake (list (cons 0 "LINE")(cons 62 1)(cons 10 p1)(cons 11 p2)))
(setq p1 (polar p1 a1 s1)
p2 (polar p2 a2 s2))))
((= a "Angular")
(cond ((equal p10 p20 1e-8) (setq vp p10 p1 p11 p2 p21))
((equal p10 p21 1e-8) (setq vp p10 p1 p11 p2 p20))
((equal p11 p20 1e-8) (setq vp p11 p1 p10 p2 p21))
((equal p11 p21 1e-8) (setq vp p11 p1 p10 p2 p20))
(T
(setq vp (inters p10 p11 p20 p21 nil))
(setq p1 (if (< (distance vp p10) (distance vp p11)) p11))
(setq p2 (if (< (distance vp p20) (distance vp p21)) p21))))
(if (gc:clockwise-p p1 vp p2)
(setq sa (angle vp p1)
ea (angle vp p2))
(setq ea (angle vp p1)
sa (angle vp p2)))
(setq ia (if (> sa ea)
(+ (- (* 2 pi) sa) ea)
(- ea sa))
an (/ ia (1+ q))
i 1)
(repeat q
(entmake (list (cons 0 "LINE")(cons 62 1)
(cons 10 vp)
(cons 11 (polar vp (+ sa (* an i))
(* 0.5 (+ (distance vp p2)
(distance vp p1)))))))
(setq i (1+ i)))))))
(prin1))
没有经过彻底测试,但似乎做得很好
您需要将首选项添加到层、线型等的(entmake)调用中
-大卫
gc:顺时针-p:credit Gile@沼泽
页:
[1]
2