leos98 发表于 2022-7-6 09:50:18

如何修剪圆弧与圆弧之间的直线

你好
在我们公司的一些项目中,我们需要显示弧来表示不接触的交叉导线。当前我们合并它的方法是创建和绘制圆弧,将其复制到所有交叉线,然后修剪该线。我想做的是创建弧,然后通过复制它,它会自动修剪两端之间的线。我不知道这是否令人困惑,我希望不会。有人能帮我想一想如何实现这一点,或者有更好的解决方案吗。
 
谢谢
 
Leos98

ReMark 发表于 2022-7-6 10:06:50

我相信过去有人询问过这个问题,并提供了一个涉及使用lisp例程的解决方案。你可能想查看下面列出的类似帖子,或者搜索这个网站。
 
如果你把弧看成一个块,我认为李·麦克有一个例程,它会打断插入块的一条线。看看这个:http://lee-mac.com/autoblockbreak.html

BlackBox 发表于 2022-7-6 10:13:32

交叉弧的半径是一致的还是不同的(需要用户输入)?

BIGAL 发表于 2022-7-6 10:22:20

如果您不担心弧半径,那么lisp很容易获取点1获取点2打断1 2弧1 E R=(1/2距离1-2)
 
如果半径是固定的,那么你需要选择要断开的线,然后选择交叉线,这样你就可以计算出半径中心的INTERS。
 
喜欢renderman请提供更多信息。

Jack_O'nei 发表于 2022-7-6 10:30:42

您可以使用多段线来执行此操作,而无需返回并修剪任何内容。点击pl,然后通过单击起点和希望弧开始的位置绘制直线部分,然后再次点击“a”,然后点击“a”,输入180,然后点击希望弧停止的位置。点击“L”,继续绘制电路。如果从右向左绘制,圆弧的圆角部分将向上。从左向右绘制,圆形部分将向下。这看起来需要很多步骤,可能需要一些练习,但我认为一旦你掌握了窍门,你就会喜欢这样做。你会看到我在下面的图片:

leos98 发表于 2022-7-6 10:33:23

谢谢你们的帮助。
我看了Mac Lee的解决方案,但看起来你必须使用块。在这种情况下,我想使用规则圆弧。我们只需要修剪在端点与弧相交的线,而不是在其他任何地方。弧不必具有相同的半径,我希望用户绘制任何弧,然后开始复制它。
 
谢谢

alanjt 发表于 2022-7-6 10:49:08

快速。。。
 
(defun c:TEst (/ _dist obj compare base point temp line)
;; http://www.cadtutor.net/forum/showthread.php?56505-How-to-trim-line-between-arc-or-semicircle

;; Alan J. Thompson, 02.02.11

(vl-load-com)

(defun _dist (a b) (distance (list (car a) (cadr a)) (list (car b) (cadr b))))

(if (and (setq compare (cadr (AT:GetSel entsel
                                       "\nSelect arc for copying (basepoint is closest end point): "
                                       (lambda (x)
                                           (if (eq "ARC" (cdr (assoc 0 (entget (car x)))))
                                             (setq obj (vlax-ename->vla-object (car x)))
                                           )
                                       )
                              )
                        )
          )
          (setq base
               (car (vl-sort
                        (list (vlax-curve-getStartPoint obj) (vlax-curve-getEndPoint obj))
                        (function
                        (lambda (a b) (< (_dist a (trans compare 1 0)) (_dist b (trans compare 1 0))))
                        )
                      )
               )
          )
   )
   (while (setq point (acet-ss-drag-move
                        (ssadd (vlax-vla-object->ename obj))
                        (trans base 0 1)
                        "\nSpecify placement point on line: "
                        T
                      )
          )
   (if (vl-catch-all-error-p
         (setq line (vl-catch-all-apply
                        (function (lambda (/)
                                    (ssname (ssget point '((0 . "LINE,*POLYLINE"))) 0)
                                  )
                        )
                      )
         )
         )
       (princ "\nPoint must be on Line or Polyline!")
       (progn (vla-move (setq temp (vla-copy obj))
                        (vlax-3d-point base)
                        (vlax-3d-point (trans point 1 0))
            )
            (vl-cmdf "_.break"
                     line
                     "_F"
                     "_non"
                     (trans (vlax-curve-getStartPoint temp) 0 1)
                     "_non"
                     (trans (vlax-curve-getEndPoint temp) 0 1)
            )
       )
   )
   )
)
(princ)
)



(defun AT:GetSel (meth msg fnc / ent good)
;; meth - selection method (entsel, nentsel, nentselp)
;; msg - message to display (nil for default)
;; fnc - optional function to apply to selected object
;; Ex: (AT:GetSel entsel "\nSelect arc: " (lambda (x) (eq (cdr (assoc 0 (entget (car x)))) "ARC")))
;; Alan J. Thompson, 05.25.10
(setvar 'errno 0)
(while (not good)
   (setq ent (meth (cond (msg)
                         ("\nSelect object: ")
                   )
             )
   )
   (cond
   ((vl-consp ent)
      (setq good (cond ((or (not fnc) (fnc ent)) ent)
                     ((prompt "\nInvalid object!"))
               )
      )
   )
   ((eq (type ent) 'STR) (setq good ent))
   ((setq good (eq 52 (getvar 'errno))) nil)
   ((eq 7 (getvar 'errno)) (setq good (prompt "\nMissed, try again.")))
   )
)
)

m4rdy 发表于 2022-7-6 10:55:48

你可以从这里修改李的mac程序。
页: [1]
查看完整版本: 如何修剪圆弧与圆弧之间的直线