简单的方法是拾取一条红线拾取终点线询问半径或max如果max则半径是终点线距离的一半,拾取绘制的其他红线弧。我认为使用用户半径的更通用解决方案会更好。我们很少有一个完整的半径,通常端部有一个直线段。
确实发现了一件事,只需要放大一点,否则第二行修剪可能不起作用,可以添加额外的代码位,以确保拾取点在线。
- ; fillet using 3 lines with mid point on second line
- ; by Alan H Oct 2017
- ; Note may have to zoom in a little bit
- (defun c:F3L ( / tpp1 pt1 pt2 pt3 ang1 ang2 ang3 temp)
- (defun assoc_left_pt ( )
- (setq pt3 (cadr tp1))
- (setq tpp1 (entget (car tp1)))
- (setq pt1 (cdr (assoc 10 tpp1)))
- (setq pt2 (cdr (assoc 11 tpp1)))
- (setq d1 (distance pt1 pt3))
- (setq d2 (distance pt2 pt3))
- (if (> d1 d2)
- (progn
- (setq temp pt1)
- (setq pt1 pt2)
- (setq pt2 temp)
- )
- )
- )
- (setq oldsnap (getvar 'osmode))
- (setvar 'osmode 512)
- (setq tp1 (entsel "\nSelect middle line"))
- (assoc_left_pt)
- (setq ang2 (angle pt1 pt2))
- (setq dist (/ (distance pt1 pt2) 2.0))
- (setq midpt (polar pt1 ang2 dist ))
- (setq tp1 (entsel "\nSelect left side line near top end : "))
- (assoc_left_pt)
- (setq ptl1 pt3)
- (setq ang1 (angle pt1 pt2))
- (setq ptst1 (polar pt1 ang1 dist))
- (setq tp1 (entsel "\nSelect right side line near top end : "))
- (assoc_left_pt)
- (setq ang3 (angle pt1 pt2))
- (setq pt1 (polar pt1 ang3 dist))
- (command "arc" ptst1 midpt pt1)
- (command "trim" (entlast) "" pt3 ptl1 "")
- (setvar 'osmode oldsnap)
- )
- (c:F3L)
还要考虑到直线可能不是真正垂直的,所以圆角将失败。第2版,半径必须接触顶线。
如果你想得到任何解背后的理论,它被称为圆心和圆心,因此可以得到非平行解。 |