圆角平行线
问候语!我需要做一个例程,添加一个弧段来连接两条平行线
基于:
[列表]
[*]选取2条平行线-线的基本误差捕捉
[*]创建一条半径为直线前端点距离1\2的弧
[*]使弧在直线端点之间居中
[*]将直线端点修剪到圆弧的起点/终点
[/列表]
由于ACAD不会对2条平行线进行圆角处理,因此要使其像_x一样工作有点困难。Fillet命令
由于结果不一致,我不得不添加旋转弧查询。找到起点和终点的角度似乎很简单,但并不那么容易
我展示了我使用过的一些构造/计算温度线
绿线-中点=弧的中心点
黄色和红色-毛前至线条端点
蓝色和青色-弧中心到弧端点
我现在拥有的是一个非常非常庞大的群体。如果您有任何想法,我们将不胜感激!
(defun c:fend (/ l1 l2 s1 s2
p10 p11 p20 p21 e1 e2 p1 p2 em1 em2 la
sp ep sa ea mp ra pt1 pt2 pp1 pp2 zl pe1 pe2
)
(princ "\nSelect 2 Parallel Lines")
(while (not l1)
(while (not s1)
(setq s1 (entsel "\nSelect 1st Line: ")))
(setq p1 (nth 1 s1)
ep (car s1))
(if (= "LINE" (cdr (assoc 0 (entget ep))))
(setq l1 ep)))
(setq pe1 (osnap p1 "end"))
(redraw l1 3)
(while (not l2)
(while (not s2)
(setq s2 (entsel "\nSelect 2nd Line: ")))
(setq p2 (nth 1 s2)
ep (car s2))
(if (= "LINE" (cdr (assoc 0 (entget ep))))
(setq l2 ep)))
(setq pe2 (osnap p2 "end"))
(redraw l2 3)
(setq e1 (entget l1)
e2 (entget l2)
p10 (cdr (assoc 10 e1))
p11 (cdr (assoc 11 e1))
p20 (cdr (assoc 10 e2))
p21 (cdr (assoc 11 e2)))
;;;COMPARE LINE ANGLES
(if (not (or (equal (angle p10 p11) (angle p20 p21) 1e-
(equal (angle p10 p11) (angle p21 p20) 1e-))
(progn
(alert "Lines Are Not Parallel")
(exit)))
;;;COMPARE LINE ELEVATIONS
(setq zl (mapcar 'caddr (list p10 p11 p20 p21)))
(if (apply '/= zl)
(progn
(alert "Lines Are Not Equal Elevation")
(exit)))
;;;COMPARE LINE UCS
(if (not (equal (cdr (assoc 210 e1)) (cdr (assoc 210 e2)) 1e-)
(alert "Lines Are Not Same UCS - Be Careful"))
;;;CLOSEST ENDS TO 1ST PICK POINT
(if (< (distance p10 p1) (distance p11 p1))
(setq pt1 p10 em1 10 la (angle p11 p10))
(setq pt1 p11 em1 11 la (angle p10 p11)))
(if (< (distance p20 pt1) (distance p21 pt1))
(setq pt2 p20 em2 10)
(setq pt2 p21 em2 11))
(grdraw pt1 pt2 3 0)
;;;PERPINDICULAR POINTS
(setq pp1 (inters p10 p11 pt2 (polar pt2 (+ (angle p10 p11) (* pi 0.5)) 1) nil))
(setq pp2 (inters p20 p21 pt1 (polar pt1 (+ (angle p10 p11) (* pi 0.5)) 1) nil))
(grdraw pt1 pp2 1 0)
(grdraw pt2 pp1 2 0)
(setq mp (mapcar '(lambda (a b) (* (+ a b) 0.5)) pt1 pt2)
ra (* (distance pt1 pp2) 0.5)
sa (angle pt1 pp2) ;;;!!!Here is the problem child
ea (+ sa pi)
sp (polar mp sa ra)
ep (polar mp ea ra))
(entmake (list (cons 0 "ARC")
(assoc 8 e1)
(cons 10 mp)
(cons6 (if (assoc6 e1) (cdr (assoc6 e1)) "BYLAYER"))
(cons 39 (if (assoc 39 e1) (cdr (assoc 39 e1)) 0))
(cons 62 (if (assoc 62 e1) (cdr (assoc 62 e1)) 256))
(cons 40 ra)
(cons 50 sa)
(cons 51 ea)))
(grdraw sp mp 4 0)
(grdraw ep mp 5 0)
;;;TRIM THE LINES
(entmod (subst (cons em1 ep) (assoc em1 e1) e1))
(entmod (subst (cons em2 sp) (assoc em2 e2) e2))
;;FIX THEN BUG
(initget "Yes No")
(if (= "Yes" (getkword "\nRotate The ARC 180 Degrees? <N>: "))
(command "_.ROTATE" (entlast) "" mp 180.0))
(redraw)
(prin1))
-大卫 此任务允许Visual LISP吗David? 我不知道你用的是哪个版本的大卫,但2010年圆角平行线。。。使用半径为零,它会立即弹出
编辑——检查了我2007年的机器,它做到了,Bricscad也做到了。
我一直用那种方法画槽。 您可以在r13中圆角平行线(这要追溯到我的手册了!) 哇!
我没想过要查看更新的版本。R12做不到。R13+可以做到。我想这是我会发现有价值的一个特性。所以我必须用我的(普通autolisp)谢谢-David 嗨,大卫,我试着用你的rountine,但它总是在步骤中停止选择第1行,所以。。。
它寻找的是一条简单的线,而不是多段线。可能这就是问题所在。 哦,对了^你为什么不过滤一下以避免遗漏呢^^
谢谢,很好
总是更改圆角半径有点麻烦。
另一种方法是在发出fillet命令后按住SHIFT键对这些讨厌的平行线进行圆角。
史蒂夫
实际上,你甚至不必这么做。我忘了,但在平行线上,半径将暂时调整,无论它设置在什么位置。旧习难改。我在绘制新的拉伸时使用了很多圆角,它们总是在变化,所以我一点也不想改变它们。
页:
[1]
2