乐筑天下

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

[编程交流] 移动线,对齐边缘

[复制链接]

57

主题

243

帖子

190

银币

后起之秀

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

铜币
285
发表于 2022-7-6 08:54:44 | 显示全部楼层 |阅读模式
尊敬的masters Autolisp:
我们需要帮助我。我需要一个例程,允许移动选定的线,使其边缘与特定的对齐基础对齐。它将类似于扩展/围栏功能,但仅具有移动的结果。不应更改要移动的线的长度。
应该有一个选项将给定的对齐方式与左、右、顶部和底部对齐。
如果可以选择对齐基准的角度,它将更加通用,但就目前而言,仅对我而言,移动是垂直于对齐的。
我附上一张图片,以便更好地理解其意图。
 
095448e66fo3p6kyu68536.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:02:07 | 显示全部楼层
从这里开始。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:05:55 | 显示全部楼层
 
我在为OP写一个伪代码,显然他知道如何写代码。但我想你发布的链接可能会更有帮助。
 
干杯,李
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:11:04 | 显示全部楼层
【YodaVoice】
 
... 我感觉到原力的扰动。
 
lee mac上的新“动态实体对齐”功能。我们必须创造com。
 
[/YodaVoice]
 

                               
登录/注册后可看大图

 
林奇
回复

使用道具 举报

57

主题

243

帖子

190

银币

后起之秀

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

铜币
285
发表于 2022-7-6 09:18:12 | 显示全部楼层
我对AutoLISP的了解是基本的。谢谢你的链接,我已经知道了。
如果没有你的帮助,两年后就可以发展。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:21:12 | 显示全部楼层
我发誓我在大约1-2年前为这里的某个人做了这件事。
回复

使用道具 举报

8

主题

29

帖子

21

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 09:28:18 | 显示全部楼层
作者:Alan J.Thompson
 
  1. (defun c:MLTC2 (/ 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. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:31:54 | 显示全部楼层
轻微调整。。。(如果你找到了我发布的地方,你应该发布链接,而不是代码)
 
  1. (defun c:MCTC (/ _1st AT:GetSel ss obj int)
  2. (vl-load-com)
  3. (defun _1st (lst)
  4.    (if lst
  5.      (list (car lst) (cadr lst) (caddr lst))
  6.    )
  7. )
  8. (defun AT:GetSel (meth msg fnc / ent)
  9.    ;; meth - selection method (entsel, nentsel, nentselp)
  10.    ;; msg - message to display (nil for default)
  11.    ;; fnc - optional function to apply to selected object
  12.    ;; Ex: (AT:GetSel entsel "\nSelect arc: " (lambda (x) (eq (cdr (assoc 0 (entget (car x)))) "ARC")))
  13.    ;; Alan J. Thompson, 05.25.10
  14.    (setvar 'ERRNO 0)
  15.    (while
  16.      (progn (setq ent (meth (cond (msg)
  17.                                   ("\nSelect object: ")
  18.                             )
  19.                       )
  20.             )
  21.             (cond ((eq (getvar 'ERRNO) 7) (princ "\nMissed, try again."))
  22.                   ((eq (type (car ent)) 'ENAME)
  23.                    (if (and fnc (not (fnc ent)))
  24.                      (princ "\nInvalid object!")
  25.                    )
  26.                   )
  27.             )
  28.      )
  29.    )
  30.    ent
  31. )
  32. (princ "\nSelect curve object(s) to move: ")
  33. (if (and (setq ss (ssget "_:L" '((0 . "LINE,LWPOLYLINE"))))
  34.           (AT:GetSel entsel
  35.                      "\nSelect curve to move selected curve(s) to: "
  36.                      (lambda (x)
  37.                        (if (wcmatch (cdr (assoc 0 (entget (car x)))) "ARC,LINE,*POLYLINE,SPLINE")
  38.                          (setq obj (vlax-ename->vla-object (car x)))
  39.                        )
  40.                      )
  41.           )
  42.      )
  43.    ((lambda (id)
  44.       (vlax-for x (setq ss (vla-get-activeselectionset
  45.                              (cond (*AcadDoc*)
  46.                                    ((setq *AcadDoc* (vla-get-activedocument
  47.                                                       (vlax-get-acad-object)
  48.                                                     )
  49.                                     )
  50.                                    )
  51.                              )
  52.                            )
  53.                   )
  54.         (if (and (/= (vla-get-objectid x) id)
  55.                  (setq int (_1st (vlax-invoke x 'IntersectWith obj acExtendThisEntity)))
  56.             )
  57.           (vla-move x
  58.                     (vlax-3d-point
  59.                       (car (vl-sort (list (vlax-curve-getStartPoint x) (vlax-curve-getEndPoint x))
  60.                                     (function (lambda (a b) (< (distance a int) (distance b int))))
  61.                            )
  62.                       )
  63.                     )
  64.                     (vlax-3d-point int)
  65.           )
  66.         )
  67.       )
  68.       (vla-delete ss)
  69.     )
  70.      (vla-get-objectid obj)
  71.    )
  72. )
  73. (princ)
  74. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:37:34 | 显示全部楼层
写这篇文章很有趣:
 
  1. ;; Example program by Lee Mac 2011  -  www.lee-mac.com
  2. (defun c:MoveLines2Line ( / en in ip p1 p2 p3 p4 ss )
  3.    (if
  4.        (and
  5.            (princ "\nSelect Line to Move Lines to...")
  6.            (setq en (ssget "_+.:E:S" '((0 . "LINE"))))
  7.            (princ "\nSelect Lines to Move...")
  8.            (setq ss (ssget "_:L" '((0 . "LINE"))))
  9.        )
  10.        (progn
  11.            (setq en (entget (ssname en 0))
  12.                  p1 (cdr (assoc 10 en))
  13.                  p2 (cdr (assoc 11 en))
  14.            )
  15.            (repeat (setq in (sslength ss))
  16.                (setq en (entget (ssname ss (setq in (1- in))))
  17.                      p3 (cdr (assoc 10 en))
  18.                      p4 (cdr (assoc 11 en))
  19.                )
  20.                (if (setq ip (inters p1 p2 p3 p4 nil))
  21.                    (entmod
  22.                        (cons (assoc -1 en)
  23.                            (if (< (distance ip p4) (distance ip p3))
  24.                                (list
  25.                                    (cons 11 ip)
  26.                                    (cons 10 (mapcar '+ ip (mapcar '- p3 p4)))
  27.                                )
  28.                                (list
  29.                                    (cons 10 ip)
  30.                                    (cons 11 (mapcar '+ ip (mapcar '- p4 p3)))
  31.                                )
  32.                            )
  33.                        )
  34.                    )
  35.                )
  36.            )
  37.        )
  38.    )
  39.    (princ)
  40. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:40:30 | 显示全部楼层
我平庸的尝试:
 
  1. (defun c:LinesTo ( / M o v e to edge)
  2. (defun _errorMsg  (lst / NilVal)
  3.       (while (eval (setq NilVal (car (car lst))))
  4.             (setq lst (cdr lst)))
  5.       (if lst
  6.             (alert (cadr (assoc NilVal lst))))
  7.       )
  8. (prompt "\nSelect objects to move: ")
  9.      (cond ((and
  10.      (setq M (ssget ":L" '((0 . "LINE"))))
  11.      (setq o (car (entsel "\nSelect Edge: ")))
  12.      (setq o (vlax-ename->vla-object o))
  13.      (repeat (sslength M)
  14.            (setq v (ssname M 0))
  15. (setq edge (mapcar 'cdr (vl-remove-if-not '(lambda (y)
  16.                                (member (car y) '(10 11))) (entget v))))
  17.             (setq e (vlax-invoke (vlax-ename->vla-object v) 'IntersectWith  o acExtendThisEntity))
  18.             (if e (progn
  19.                 (if (> (distance e (cadr edge))
  20.                        (distance e (car edge)))
  21.                      (setq to (car edge))
  22.                  (setq to (cadr edge))
  23.                     )
  24.              (vla-move (vlax-ename->vla-object v)
  25.                       (vlax-3d-point to)(vlax-3d-point e))
  26.                        )
  27.                    (progn
  28.                    (princ "\rNo Intersection Found for ")(prin1 ent) ))
  29.             (ssdel v M))
  30.        )
  31.             )
  32.            )
  33.      (_errorMsg
  34.       (list '(m "Failed to select Object")
  35.             '(o "Edge Not Found")
  36.                        ))
  37. (princ)
  38.      )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 06:13 , Processed in 0.945578 second(s), 75 queries .

© 2020-2025 乐筑天下

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