如何修剪圆弧与圆弧之间的直线
你好在我们公司的一些项目中,我们需要显示弧来表示不接触的交叉导线。当前我们合并它的方法是创建和绘制圆弧,将其复制到所有交叉线,然后修剪该线。我想做的是创建弧,然后通过复制它,它会自动修剪两端之间的线。我不知道这是否令人困惑,我希望不会。有人能帮我想一想如何实现这一点,或者有更好的解决方案吗。
谢谢
Leos98 我相信过去有人询问过这个问题,并提供了一个涉及使用lisp例程的解决方案。你可能想查看下面列出的类似帖子,或者搜索这个网站。
如果你把弧看成一个块,我认为李·麦克有一个例程,它会打断插入块的一条线。看看这个:http://lee-mac.com/autoblockbreak.html 交叉弧的半径是一致的还是不同的(需要用户输入)? 如果您不担心弧半径,那么lisp很容易获取点1获取点2打断1 2弧1 E R=(1/2距离1-2)
如果半径是固定的,那么你需要选择要断开的线,然后选择交叉线,这样你就可以计算出半径中心的INTERS。
喜欢renderman请提供更多信息。 您可以使用多段线来执行此操作,而无需返回并修剪任何内容。点击pl,然后通过单击起点和希望弧开始的位置绘制直线部分,然后再次点击“a”,然后点击“a”,输入180,然后点击希望弧停止的位置。点击“L”,继续绘制电路。如果从右向左绘制,圆弧的圆角部分将向上。从左向右绘制,圆形部分将向下。这看起来需要很多步骤,可能需要一些练习,但我认为一旦你掌握了窍门,你就会喜欢这样做。你会看到我在下面的图片:
谢谢你们的帮助。
我看了Mac Lee的解决方案,但看起来你必须使用块。在这种情况下,我想使用规则圆弧。我们只需要修剪在端点与弧相交的线,而不是在其他任何地方。弧不必具有相同的半径,我希望用户绘制任何弧,然后开始复制它。
谢谢 快速。。。
(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.")))
)
)
) 你可以从这里修改李的mac程序。
页:
[1]