mstg007 发表于 2022-7-5 15:58:08

圆角最佳拟合-3边

我正在寻找一种方法,要么使用Circle TTR命令,要么使用Fillet命令,从而获得浓密的白光。这基本上是停车位。我想把停车位弄到一个半径为1的岛上。
 
 
我不知道我是否可以圆角的3边,然后半径将创建的飞行。
 
 
希望这有意义。再次感谢你。

marko_ribar 发表于 2022-7-5 16:19:23

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/fit-arc-lisp-not-working-in-2017/m-p/7403604/highlight/true#M359164
 
HTH。,M、 R。

Grrr 发表于 2022-7-5 16:43:02

以下是我的尝试:
 
(
(lambda ( / e enx o p1 p2 p3 p4 a d r )
   (cond
   ( (not (setq e (car (entsel "\nPick circle: ")))) )
   ( (/= "CIRCLE" (cdr (assoc 0 (setq enx (entget e))))) )
   ( (not (setq p2 (getpoint (setq p1 (vlax-get (setq o (vlax-ename->vla-object e)) 'Center)) "\nSpecify direction: "))) )
   (
       (mapcar '(lambda (x) (set (car x) (eval (cadr x))))
         '( (a (angle p1 p2)) (d (distance p1 p2)) (r (vlax-get o 'Radius))
         (p3 (polar p1 (+ a (/ PI 2.)) r)) (p4 (polar p1 (- a (/ PI 2.)) r))
         )
       ); mapcar
       (and
         (setq e
         (entmakex
             (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (90 . 4) (70 . 0))
               (list (assoc 8 enx)) '((43 . 0.0) (38 . 0.0) (39 . 0.0))
               (list (cons 10 (polar p3 a d))) '((40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0))
               (list (cons 10 p3)) '((40 . 0.0) (41 . 0.0) (42 . 1.0) (91 . 0))
               (list (cons 10 p4)) '((40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0))
               (list (cons 10 (polar p4 a d))) '((40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0 1.0))
             )
         )
         ); setq e
         (setq o (vlax-ename->vla-object e)) (vlax-invoke o 'Move p1 (polar p1 a r))
       ); and
   )
   ); cond
)
)

BIGAL 发表于 2022-7-5 16:49:36

简单的方法是拾取一条红线拾取终点线询问半径或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) ""pt3ptl1 "")
(setvar 'osmode oldsnap)
)
(c:F3L)

 
还要考虑到直线可能不是真正垂直的,所以圆角将失败。第2版,半径必须接触顶线。
 
如果你想得到任何解背后的理论,它被称为圆心和圆心,因此可以得到非平行解。

mstg007 发表于 2022-7-5 17:02:26

谢谢你们的帮助!两种解决方案都很有效!谢谢分享!
页: [1]
查看完整版本: 圆角最佳拟合-3边