(entmake)3点弧
灵感来源于这条线索:http://www.cadtutor.net/forum/showthread.php?75821-简单的lisp如何删除不必要的步骤单击
试图用3个已知点(形成)一条弧
P1和p2是终点
p3始终位于夹角内的弧上。角度50和51的顺序不对
(defun mid_point (s e)
(mapcar '(lambda (a b) (* (+ a b) 0.5)) s e))
(defun c:test ()
(initget 1)
(setq p1 (getpoint "\nArrow Point: "))
(initget 1)
(setq p2 (getpoint p1 "\nText CENter Point: "))
(grdraw p1 p2 4 3)
(setq p6 (mid_point p1 p2))
(initget 1)
(setq p3 (getpoint p6 "\nARC Direction Point: "))
(setq p4 (mid_point p1 p3)
p5 (mid_point p2 p3)
ce (inters p4 (polar p4 (+ (angle p1 p3) (* pi 0.5)) 1)
p5 (polar p5 (+ (angle p2 p3) (* pi 0.5)) 1) nil)
ra (distance ce p1))
(grdraw ce p1 1 3)
(grdraw ce p2 2 3)
(grdraw ce p3 3 3)
(prin1))
(entmake (list (cons 0 "ARC")
(cons 10 ce)
(cons 40 ra)
(cons 50 (angle ce p1))
(cons 51 (angle ce p2))
))
从命令行可以很简单
(command "_.ARC" "_non" p1 "_non" p3 "_non" p2)
有什么建议吗?大卫 这可能有助于:
http://lee-mac.com/3pointarccircle.html 看起来不错。我认为你的p2在LM:3中总是在p1和p3之间,谢谢-大卫
提供的点可以是任何顺序,但是,产生的弧扫掠的角度将取决于点的排列;为了演示,这里有一个快速示例:
不客气! 好的,我理解(我想)
我的场景是定义端点,第三个点始终在弧上。我倾向于简单的(命令“_.ARC”)没有那么优雅,但很实用。谢谢!-大卫
在这种情况下,如果将端点作为“p1”和“p3”参数传递给我的LM:3PArc函数,并将第三个点作为“p2”参数,您应该会收到所需的结果,因为圆弧的计算将始终确保提供的点“p2”位于端点“p1”和“p3”之间。
页:
[1]