乐筑天下

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

[编程交流] 沿直线移动直线/多段线

[复制链接]

8

主题

29

帖子

21

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 10:38:00 | 显示全部楼层 |阅读模式
大家好,
 
我该怎么做?
将直线/多段线沿直线(y)移动以接触多段线
 
 
 
 
我是一个起草人,而不是你可能已经猜到的程序员。
 
谢谢你的时间。
113803fvxuq5v5eq6e0aj7.jpg
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:59:45 | 显示全部楼层
这很有趣。然而,你应该学会自己编码。
 
  1. (defun c:MLTC (/ #SS #Curve #Int1 #Int2 #Pnt)
  2. ;; Move Lines to Curve; Alan J. Thompson, 03.16.10
  3. (vl-load-com)
  4. (cond
  5.    ((and (princ "\nSelect Line object(s) to move: ")
  6.          (setq #SS (ssget "_:L" '((0 . "LINE,LWPOLYLINE"))))
  7.          (setq #Curve (car (entsel "\nSelect curve to move text to: ")))
  8.          (or (vl-position (cdr (assoc 0 (entget #Curve))) '("LWPOLYLINE" "LINE" "ARC"))
  9.              (alert "Invalid selected object!")
  10.          ) ;_ or
  11.          (setq #Curve (vlax-ename->vla-object #Curve))
  12.     ) ;_ and
  13.     (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  14.     (vlax-for x (setq #SS (vla-get-activeselectionset *AcadDoc*))
  15.       (and (not (eq (vla-get-objectid x) (vla-get-objectid #Curve)))
  16.            (setq #Int1 (vla-intersectwith x #Curve acextendthisentity))
  17.            (setq #Int2 (vlax-safearray->list (vlax-variant-value #Int1)))
  18.            (eq 3 (length #Int2))
  19.            (setq #Pnt (car (vl-sort (list (vlax-curve-getstartpoint x) (vlax-curve-getendpoint x))
  20.                                     '(lambda (a b) (< (distance a #Int2) (distance b #Int2)))
  21.                            ) ;_ vl-sort
  22.                       ) ;_ car
  23.            ) ;_ setq
  24.            (vla-move x (vlax-3d-point #Pnt) #Int1)
  25.       ) ;_ and
  26.     ) ;_ vlax-for
  27.     (vla-delete #SS)
  28.    )
  29. ) ;_ cond
  30. (princ)
  31. ) ;_ defun
回复

使用道具 举报

8

主题

29

帖子

21

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 11:08:45 | 显示全部楼层
非常好,谢谢你,艾伦。
 
我学到了更多。。。(我有很多东西要学)
 
谢谢你的时间。
 
帕斯卡
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:24:03 | 显示全部楼层
 
不客气。我很好奇我是否能做到。学习编码为我节省了很多时间和头痛眨眼:
回复

使用道具 举报

6

主题

30

帖子

24

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 11:36:15 | 显示全部楼层
非常好,非常感谢
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:41:43 | 显示全部楼层
功能稍好一些。。。
 
  1. (defun c:MLTC (/ ss obj int)
  2. ;; Move Lines to Curve
  3. ;; Required Subroutines: AT:GetSel
  4. ;; Alan J. Thompson, 03.16.10 / 08.02.10
  5. (vl-load-com)
  6. (if (and (princ "\nSelect line object(s) to move: ")
  7.           (setq ss (ssget "_:L" '((0 . "LINE,LWPOLYLINE"))))
  8.           (AT:GetSel entsel
  9.                      "\nSelect curve to move line(s) to: "
  10.                      (lambda (x)
  11.                        (if (wcmatch (cdr (assoc 0 (entget (car x)))) "ARC,LINE,*POLYLINE,SPLINE")
  12.                          (setq obj (vlax-ename->vla-object (car x)))
  13.                        )
  14.                      )
  15.           )
  16.      )
  17.    ((lambda (id)
  18.       (vlax-for x (setq
  19.                     ss (vla-get-activeselectionset
  20.                          (cond (*AcadDoc*)
  21.                                ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  22.                          )
  23.                        )
  24.                   )
  25.         (if (and (/= id (vla-get-objectid x))
  26.                  (eq 3 (length (setq int (vlax-invoke x 'IntersectWith obj acExtendThisEntity))))
  27.             )
  28.           (vl-catch-all-apply
  29.             (function vla-move)
  30.             (list x
  31.                   (vlax-3d-point
  32.                     (car (vl-sort (list (vlax-curve-getStartPoint x) (vlax-curve-getEndPoint x))
  33.                                   (function (lambda (a b) (< (distance a int) (distance b int))))
  34.                          )
  35.                     )
  36.                   )
  37.                   (vlax-3d-point int)
  38.             )
  39.           )
  40.         )
  41.       )
  42.       (vla-delete ss)
  43.     )
  44.      (vla-get-objectid obj)
  45.    )
  46. )
  47. (princ)
  48. )
  49. (defun AT:GetSel (meth msg fnc / ent good)
  50. ;; meth - selection method (entsel, nentsel, nentselp)
  51. ;; msg - message to display (nil for default)
  52. ;; fnc - optional function to apply to selected object
  53. ;; Ex: (AT:GetSel entsel "\nSelect arc: " (lambda (x) (eq (cdr (assoc 0 (entget (car x)))) "ARC")))
  54. ;; Alan J. Thompson, 05.25.10
  55. (setvar 'errno 0)
  56. (while (not good)
  57.    (setq ent (meth (cond (msg)
  58.                          ("\nSelect object: ")
  59.                    )
  60.              )
  61.    )
  62.    (cond
  63.      ((vl-consp ent)
  64.       (setq good (if (or (not fnc) (fnc ent))
  65.                    ent
  66.                    (prompt "\nInvalid object!")
  67.                  )
  68.       )
  69.      )
  70.      ((eq (type ent) 'STR) (setq good ent))
  71.      ((setq good (eq 52 (getvar 'errno))) nil)
  72.      ((eq 7 (getvar 'errno)) (setq good (prompt "\nMissed, try again.")))
  73.    )
  74. )
  75. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 16:55 , Processed in 0.523105 second(s), 67 queries .

© 2020-2025 乐筑天下

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