乐筑天下

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

[编程交流] 如何在l周围创建间隙

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:26:08 | 显示全部楼层 |阅读模式
有没有办法创建lips程序或vba宏来偏移两侧的一条线,保留源,然后修剪两条偏移线之间的所有内容并删除它们。
 
或者有没有办法在多重引线周围创建相同的效果?
 
类似于所附图片上描述的内容
 
072611ds27qa2csqzkaq00.jpg
072613ipw8phprllehjpav.jpg
072614aofs5ziuric6r52d.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:30:51 | 显示全部楼层
欢迎来到CadTutor
 
尝试此代码。。。
 
  1. (defun c:test (/ *error* dxf s ss of obj in nm lst p)
  2. ;;--- Tharwat 19. April. 2013 ---;;
  3. (defun *error* (x)
  4.    (setvar 'cmdecho 1)
  5.    (princ (strcat "\n Error ... " x))
  6. )
  7. (defun dxf (n o) (cdr (assoc n (entget o))))
  8. (if (and (progn (princ "\n Select single line ... >> ")
  9.                  (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
  10.           )
  11.           (setq ss (ssget "_X" '((0 . "LINE"))))
  12.           (setq of (getdist "\n Specify offset distance :"))
  13.      )
  14.    (progn
  15.      (setq obj (vlax-ename->vla-object (ssname s 0)))
  16.      (repeat (setq in (sslength ss))
  17.        (if
  18.          (not
  19.            (eq 4
  20.                (logand
  21.                  4
  22.                  (cdr
  23.                    (assoc
  24.                      70
  25.                      (entget
  26.                        (tblobjname
  27.                          "LAYER"
  28.                          (dxf 8 (setq nm (ssname ss (setq in (1- in)))))
  29.                        )
  30.                      )
  31.                    )
  32.                  )
  33.                )
  34.            )
  35.          )
  36.           (setq lst (cons nm lst))
  37.        )
  38.      )
  39.      (setvar 'cmdecho 0)
  40.      (foreach e lst
  41.        (if (and (setq p (vlax-invoke
  42.                           obj
  43.                           'IntersectWith
  44.                           (vlax-ename->vla-object e)
  45.                           acExtendNone
  46.                         )
  47.                 )
  48.                 (> (distance (dxf 10 e) (dxf 11 e)) (* of 2.))
  49.            )
  50.          (command "_.break"
  51.                   e
  52.                   "_none"
  53.                   (vlax-curve-getclosestpointto
  54.                     e
  55.                     (polar p (angle (dxf 10 e) (dxf 11 e)) of)
  56.                   )
  57.                   "_none"
  58.                   (vlax-curve-getclosestpointto
  59.                     e
  60.                     (polar p (angle (dxf 11 e) (dxf 10 e)) of)
  61.                   )
  62.          )
  63.        )
  64.      )
  65.      (setvar 'cmdecho 1)
  66.    )
  67. )
  68. (princ "\n Written by Tharwat Al Shoufi")
  69. (princ)
  70. )
  71. (vl-load-com)
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 06:38:12 | 显示全部楼层
  1. (defun c:demo (/ s ss space  pntlst TempL p p1 p2)
  2. (vl-load-com)
  3. (setq space (vlax-get
  4.                (vla-get-ActiveLayout
  5.                  (vla-get-activedocument
  6.                    (vlax-get-acad-object)
  7.                  )
  8.                )
  9.                'Block
  10.              )
  11. )
  12. (if (and (setq s (ssget "_+.:S:L" '((0 . "[b]MULTILEADER[/b]"))))
  13.           (setq s (vlax-ename->vla-object (ssname s 0)))         
  14.         (setq width (cond
  15.         ((getdist (strcat "\nEnter width "
  16.          (if width (strcat " <" (rtos width) ">: ") ": ")
  17.                     )))(width))
  18.         )
  19.           (setq w (* 0.5 width))
  20.      )
  21.    (progn
  22.      (setq pntlst (vlax-invoke
  23.                     s 'GetLeaderLineVertices  0
  24.                   )
  25.            zv     (nth 2 pntlst)
  26.      )
  27.      (setq TempL
  28.             (vlax-invoke
  29.               space
  30.               'AddLightweightPolyline
  31.               (vl-remove-if '(lambda (l) (= zv l)) pntlst)
  32.             ))
  33.      (setq ss (ssget "_:L"))
  34.        (repeat (setq i (sslength ss))
  35.          (if (setq p (vlax-invoke
  36.                        TempL
  37.                        'IntersectWith
  38.                        (setq
  39.                          e (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  40.                        )
  41.                        acExtendNone
  42.                      )
  43.              )
  44.            (progn
  45.              (setq p1 (vlax-curve-getpointatDist
  46.                         e (- (vlax-curve-getDistAtPoint e p) w))
  47.                    p2 (vlax-curve-getpointatDist  e
  48.                         (+ (vlax-curve-getDistAtPoint e p) w)
  49.                       )
  50.              )
  51.              (command "_break" (ssname ss i) "_non" p1 "_non" p2)
  52.            )
  53.          )
  54.        )
  55.      (vla-delete TempL)
  56.    )
  57. )(princ)
  58. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 06:44:16 | 显示全部楼层
更详细一点,剪切倍数表示跟随一条pline,非常简单,在两个方向上偏移pline记住这些对象,然后修剪obj1 obj2“F”拾取原始pline全部完成擦除obj1 obj2。lisp使这变得简单而透明。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 06:49:12 | 显示全部楼层
这就是我之前的想法,直到我看到“刀刃”是一个多重引线:
 
随便。线路的快速连接
 
  1. (defun c:test ( / s ss width)
  2. (if (and (setq s (ssget "_+.:S:L" '((0 . "LINE"))))
  3.           (setq s  (vlax-ename->vla-object (ssname s 0))
  4.                 ss (ssadd)
  5.           )
  6.           (setq width (getdist "\nEnter width: "))
  7.      )
  8.    (progn
  9.      (vlax-invoke s 'offset (- (* 0.5 width)))
  10.      (ssadd (entlast) ss)
  11.      (vlax-invoke s 'offset (* 0.5 width))
  12.      (ssadd (entlast) ss)
  13.      (command "_trim" ss
  14.               ""  "_Fence"  "_non"
  15.               (vlax-get s 'StartPoint)
  16.               "_non" (vlax-get s 'EndPoint)
  17.               ""
  18.      )
  19.      (command "_erase" ss "" "")
  20.    )
  21. )(
  22.    princ)
  23. )
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 06:50:54 | 显示全部楼层
DWG不幸。。。有了消灭,就不会被肢解。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 06:57:57 | 显示全部楼层
 
我不知道那是什么意思
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:58:53 | 显示全部楼层
@pBe。
 
你帖子的最后一个paren#5用完了代码标签。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:06:22 | 显示全部楼层
 
它是如何到达那里的。令人不快的错误的括号。。。
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 07:08:24 | 显示全部楼层
 
我的意思是,如果你只是用抹布覆盖它们,也许你不需要切割所有的物体。
记住将“帧”设置为“关”
 
 
 
  1. (defun c:demo (/ s s1 ss space pntlst w pntlst zv TempL TempL1 TempL2 Lv L1v L2v )
  2.    (vl-load-com)
  3.    (setq space (vlax-get
  4.                (vla-get-ActiveLayout
  5.                  (vla-get-activedocument
  6.                    (vlax-get-acad-object)
  7.                  )
  8.                )
  9.                'Block
  10.              )
  11. )
  12. (if (and
  13.          (princ "\nSelect MLeader")
  14.          (setq s (ssget "_+.:S:L" '((0 . "MULTILEADER"))))
  15.          (setq s (vlax-ename->vla-object (setq s1 (ssname s 0))))     
  16.          (setq width (cond
  17. ((getdist (strcat "\nEnter width "
  18.   (if width (strcat " <" (rtos width) ">: ") ": ")
  19.              )))(width))
  20. )
  21.           (setq w (* 0.5 width))
  22.      )
  23.      (progn
  24.          (setq pntlst (vlax-invoke
  25.                           s 'GetLeaderLineVertices  0
  26.                       )
  27.                zv     (nth 2 pntlst)
  28.          )
  29.          (setq TempL
  30.                   (vlax-invoke
  31.                       space
  32.                       'AddLightweightPolyline
  33.                       (vl-remove-if '(lambda (l) (= zv l)) pntlst)
  34.                   )
  35.          )
  36.          (vlax-invoke TempL 'offset (- (* 0.5 width)))
  37.          (setq TempL1 (entlast))
  38.          (vlax-invoke TempL 'offset (* 0.5 width))
  39.          (setq TempL2 (entlast))
  40.          (setq
  41.              Lv1 (coo TempL1)
  42.              Lv2 (coo TempL2)
  43.              Lv (append Lv1 (reverse Lv2))
  44.           )
  45.          (setq os (getvar 'osmode))
  46.          (setvar 'osmode 0)
  47.          (command "_.wipeout")
  48.          (apply 'command Lv)
  49.          (command "")
  50.          (setvar 'osmode os)
  51.          (command "_.draworder" s1 "" "_F")
  52.          (vla-delete TempL)
  53.          (entdel TempL1)
  54.          (entdel TempL2)
  55.      )
  56. )      
  57. )
  58. (defun Coo ( a / coor)              
  59.    (mapcar '(lambda (x)
  60.                 (if (eq (car x) 10)
  61.                     (setq coor (cons (list (cadr x) (caddr x)) coor))
  62.                 )
  63.             )
  64.             (entget a)
  65.     )
  66.    coor
  67. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:26 , Processed in 0.413782 second(s), 75 queries .

© 2020-2025 乐筑天下

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