乐筑天下

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

[编程交流] 循环浏览来自的图层名称

[复制链接]

2

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:44:44 | 显示全部楼层 |阅读模式
你好
 
 
一、 我是Autolisp世界的新手。我想知道是否有人能帮我做一个项目。我有一个AutoCAD项目,其中各层相互堆叠。
我正在寻找lisp代码,该代码将循环通过选定对象的层名称,并将这些对象(层)分开,并排放置在35英寸的距离。
 
 
欢迎任何帮助。
 
 
谢谢
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:53:33 | 显示全部楼层
这应该给你一个开始:
  1. (defun C:test ( / i cmd ld ln Layers SS SSS n )
  2. (initget (+ 1 2))
  3. (if (setq i (getint "\nSpecify spacing increment: "))
  4.    (progn
  5.      (setq cmd (getvar 'cmdecho))
  6.      (setvar 'cmdecho 0)
  7.      (while (setq ld (tblnext "LAYER" (not ld)))
  8.        (and
  9.          (/= 4 (logand 4 (cdr (assoc 70 (entget (tblobjname "LAYER" (setq ln (cdr (assoc 2 ld)))))))))
  10.          (setq Layers (cons ln Layers))
  11.        ); and
  12.      ); while
  13.      (foreach x Layers
  14.        (setq SS (ssget "_X" (list (cons 8 x))))
  15.        (setq SSS (cons SS SSS))
  16.      )
  17.      (foreach s SSS
  18.        (command "_.MOVE" s "" "_non" '(0. 0. 0.) "_non" (list 0. (setq n (cond (n (+ n i)) (0))) 0.))
  19.      )
  20.      (and cmd (setvar 'cmdecho cmd))
  21.    ); progn
  22. ); if
  23. (princ)
  24. ); defun

对不起,我们不使用英制。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:56:10 | 显示全部楼层
这是一个奇怪的要求。
[列表]
  • 是否希望所有层实体分布在X轴上?
  • 如果边界框大于空间增量怎么办?
  • 如果实体实际上是嵌套的呢?
    [/列表]
     
     
     
    Grrr:
     
    我认为这些是一样的?
     
    1. (/= 4 (logand 4 (cdr (assoc 70 (entget (tblobjname "LAYER" (setq ln (cdr (assoc 2 ld)))))))))
    2. (/= 4 (logand 4 (cdr (assoc 70 ld))))

     
    -大卫
  • 回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

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

    铜币
    325
    发表于 2022-7-5 17:05:36 | 显示全部楼层
     
    是的,我是“以防万一”走那条路的。从此线程发布#12和#13。
    不记得LM信息中的这个重要片段:
     
    谢谢你刷新我的记忆!
    回复

    使用道具 举报

    2

    主题

    6

    帖子

    4

    银币

    初来乍到

    Rank: 1

    铜币
    10
    发表于 2022-7-5 17:08:27 | 显示全部楼层
    非常感谢你的帮助。对我来说,这是一个奇怪的要求。
    在AutoCAD中,丝绸印刷电路的几层是堆叠的(银墨水、碳墨水、电介质墨水…)。
    然后,我们的想法是让这些层沿着X轴分布,这样就可以单独选择并转移到生产中。
    边界框(帧)的大小与沿X轴的空间增量相同。实体不嵌套。
     
     
    David Bethel在15分钟内提供代码方面做得很好,哇!他的代码将层分开,不管它们是开的还是关的。
    我只希望选定的层沿X轴分布。此外,需要沿增量复制其中一个层:
    我解释说,假设我有“银”、“碳”、“电介质”和“框架”层。前三层将沿X轴分布,层“框架”将与这些层中的每一层一起复制。
     
     
    再次感谢你们的帮助。
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

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

    铜币
    325
    发表于 2022-7-5 17:14:57 | 显示全部楼层
    1. ; Spacing selection set by layer
    2. (defun C:test ( / lnm SS b L p acDoc Lyrs ln d ln ll ur pl )
    3. (setq lnm "frame") ; <- Adjust the layer name here, to copy along the spacing
    4. (cond
    5.    ( (not (and (setq SS (ssget "_:L-I")) (princ "\nSelect objects to space by their layer: ")))
    6.      (princ "\nNothing selected.")
    7.    )
    8.    (
    9.      (not
    10.        (progn
    11.          (vlax-for o (setq SS (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
    12.            (if (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-GetBoundingBox (list o 'll 'ur))))
    13.              (setq b (append b (mapcar 'vlax-safearray->list (list ll ur))))
    14.            )
    15.            (setq L (cons (list (vla-get-Layer o) o) L))
    16.          ); vlax-for
    17.          (vla-Delete SS)
    18.          (and
    19.            (or
    20.              (and b (setq b (mapcar '(lambda (a b) (/ (+ a b) 2.)) (apply 'mapcar (cons 'min b)) (apply 'mapcar (cons 'max b)))))
    21.              (setq b (getpoint "\nSpecify base point: "))
    22.            )
    23.            (setq p (getpoint b "\nSpecify direction and spacing: "))
    24.          )
    25.        ); progn
    26.      ); not
    27.      (princ "\nSpacing not specified.")
    28.    )
    29.    (p
    30.      (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
    31.      (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)
    32.      (mapcar '(lambda (x) (cond ((member x Lyrs)) ((setq Lyrs (cons x Lyrs))))) (mapcar 'car L))
    33.      (
    34.        (lambda ( x )
    35.          (and acDoc (tblsearch "LAYER" x) (member lnm Lyrs) (eq (vla-get-Lock (vla-item (vla-get-Layers acDoc) x)) :vlax-false) (setq ln x) )
    36.        )
    37.        lnm
    38.      )  
    39.      (mapcar
    40.        '(lambda (x)
    41.          (cond
    42.            (d (setq d (+ d (distance b p))) )
    43.            ( (setq d (distance b p)) )
    44.          )
    45.          (mapcar
    46.            '(lambda (o)
    47.              (if (= x (car o))
    48.                (progn
    49.                  (apply 'vla-Move (append (list (cadr o)) (setq pl (mapcar 'vlax-3D-point (list '(0. 0. 0.) (polar '(0. 0. 0.) (angle b p) d))))))
    50.                  (if ln (mapcar '(lambda (fr / c) (if (= (car fr) ln) (progn (setq c (vla-Copy (cadr fr))) (apply 'vla-Move (append (list c) pl))))) L))
    51.                )
    52.              )
    53.            )
    54.            L
    55.          )
    56.        )
    57.        (vl-remove ln (acad_strlsort Lyrs))
    58.      )
    59.      (vla-EndUndoMark acDoc)
    60.    )
    61. ); cond
    62. (princ)
    63. ); defun   
    64. (vl-load-com) (princ)     
    回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-5 17:21:41 | 显示全部楼层
    哈哈,对不起,我没有把任何代码归功于Grrr
    回复

    使用道具 举报

    2

    主题

    6

    帖子

    4

    银币

    初来乍到

    Rank: 1

    铜币
    10
    发表于 2022-7-5 17:26:59 | 显示全部楼层
    Oups!我的错,对不起,Grrr,你是那个拥有所有代码的人。我测试了你的上一个帖子,代码很好用,谢谢!
    我知道我问了很多问题,但是有没有一种方法可以将一个层(我们称之为“框架”)复制到其他层上?
    最终的结果是所有层沿X轴分布(就像你的代码那样),每个层都有一个相同“帧”层的副本。
    在现实生活中,该框架表示在每个框架内具有分离层(电路印刷油墨)的印刷丝绸尺寸。
     
     
    再次感谢Grrr,我相信你为我节省了几年的工作!
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

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

    铜币
    325
    发表于 2022-7-5 17:33:22 | 显示全部楼层
    我已经修改了第#6篇中的代码,请在此处调整您的图层名称:
    [code](setq lnm“帧”);
    回复

    使用道具 举报

    2

    主题

    6

    帖子

    4

    银币

    初来乍到

    Rank: 1

    铜币
    10
    发表于 2022-7-5 17:35:39 | 显示全部楼层
    代码工作得很好,非常感谢!
    我不敢相信它是在24小时内完成的。很高兴我加入了这个论坛。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-13 14:22 , Processed in 0.600663 second(s), 83 queries .

    © 2020-2025 乐筑天下

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