乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 67|回复: 7

[编程交流] 如何修剪圆弧与圆弧之间的直线

[复制链接]

4

主题

22

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 09:50:18 | 显示全部楼层 |阅读模式
你好
在我们公司的一些项目中,我们需要显示弧来表示不接触的交叉导线。当前我们合并它的方法是创建和绘制圆弧,将其复制到所有交叉线,然后修剪该线。我想做的是创建弧,然后通过复制它,它会自动修剪两端之间的线。我不知道这是否令人困惑,我希望不会。有人能帮我想一想如何实现这一点,或者有更好的解决方案吗。
 
谢谢
 
Leos98
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:06:50 | 显示全部楼层
我相信过去有人询问过这个问题,并提供了一个涉及使用lisp例程的解决方案。你可能想查看下面列出的类似帖子,或者搜索这个网站。
 
如果你把弧看成一个块,我认为李·麦克有一个例程,它会打断插入块的一条线。看看这个:http://lee-mac.com/autoblockbreak.html
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:13:32 | 显示全部楼层
交叉弧的半径是一致的还是不同的(需要用户输入)?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 10:22:20 | 显示全部楼层
如果您不担心弧半径,那么lisp很容易获取点1获取点2打断1 2弧1 E R=(1/2距离1-2)
 
如果半径是固定的,那么你需要选择要断开的线,然后选择交叉线,这样你就可以计算出半径中心的INTERS。
 
喜欢renderman请提供更多信息。
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

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

使用道具 举报

4

主题

22

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:33:23 | 显示全部楼层
谢谢你们的帮助。
我看了Mac Lee的解决方案,但看起来你必须使用块。在这种情况下,我想使用规则圆弧。我们只需要修剪在端点与弧相交的线,而不是在其他任何地方。弧不必具有相同的半径,我希望用户绘制任何弧,然后开始复制它。
 
谢谢
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:49:08 | 显示全部楼层
快速。。。
 
  1. (defun c:TEst (/ _dist obj compare base point temp line)
  2. ;; http://www.cadtutor.net/forum/showthread.php?56505-How-to-trim-line-between-arc-or-semicircle
  3. ;; Alan J. Thompson, 02.02.11
  4. (vl-load-com)
  5. (defun _dist (a b) (distance (list (car a) (cadr a)) (list (car b) (cadr b))))
  6. (if (and (setq compare (cadr (AT:GetSel entsel
  7.                                          "\nSelect arc for copying (basepoint is closest end point): "
  8.                                          (lambda (x)
  9.                                            (if (eq "ARC" (cdr (assoc 0 (entget (car x)))))
  10.                                              (setq obj (vlax-ename->vla-object (car x)))
  11.                                            )
  12.                                          )
  13.                               )
  14.                         )
  15.           )
  16.           (setq base
  17.                  (car (vl-sort
  18.                         (list (vlax-curve-getStartPoint obj) (vlax-curve-getEndPoint obj))
  19.                         (function
  20.                           (lambda (a b) (< (_dist a (trans compare 1 0)) (_dist b (trans compare 1 0))))
  21.                         )
  22.                       )
  23.                  )
  24.           )
  25.      )
  26.    (while (setq point (acet-ss-drag-move
  27.                         (ssadd (vlax-vla-object->ename obj))
  28.                         (trans base 0 1)
  29.                         "\nSpecify placement point on line: "
  30.                         T
  31.                       )
  32.           )
  33.      (if (vl-catch-all-error-p
  34.            (setq line (vl-catch-all-apply
  35.                         (function (lambda (/)
  36.                                     (ssname (ssget point '((0 . "LINE,*POLYLINE"))) 0)
  37.                                   )
  38.                         )
  39.                       )
  40.            )
  41.          )
  42.        (princ "\nPoint must be on Line or Polyline!")
  43.        (progn (vla-move (setq temp (vla-copy obj))
  44.                         (vlax-3d-point base)
  45.                         (vlax-3d-point (trans point 1 0))
  46.               )
  47.               (vl-cmdf "_.break"
  48.                        line
  49.                        "_F"
  50.                        "_non"
  51.                        (trans (vlax-curve-getStartPoint temp) 0 1)
  52.                        "_non"
  53.                        (trans (vlax-curve-getEndPoint temp) 0 1)
  54.               )
  55.        )
  56.      )
  57.    )
  58. )
  59. (princ)
  60. )
  61. (defun AT:GetSel (meth msg fnc / ent good)
  62. ;; meth - selection method (entsel, nentsel, nentselp)
  63. ;; msg - message to display (nil for default)
  64. ;; fnc - optional function to apply to selected object
  65. ;; Ex: (AT:GetSel entsel "\nSelect arc: " (lambda (x) (eq (cdr (assoc 0 (entget (car x)))) "ARC")))
  66. ;; Alan J. Thompson, 05.25.10
  67. (setvar 'errno 0)
  68. (while (not good)
  69.    (setq ent (meth (cond (msg)
  70.                          ("\nSelect object: ")
  71.                    )
  72.              )
  73.    )
  74.    (cond
  75.      ((vl-consp ent)
  76.       (setq good (cond ((or (not fnc) (fnc ent)) ent)
  77.                        ((prompt "\nInvalid object!"))
  78.                  )
  79.       )
  80.      )
  81.      ((eq (type ent) 'STR) (setq good ent))
  82.      ((setq good (eq 52 (getvar 'errno))) nil)
  83.      ((eq 7 (getvar 'errno)) (setq good (prompt "\nMissed, try again.")))
  84.    )
  85. )
  86. )
回复

使用道具 举报

4

主题

21

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:55:48 | 显示全部楼层
你可以从这里修改李的mac程序。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 10:47 , Processed in 1.221831 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表