乐筑天下

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

[编程交流] LISP例程选择linewei

[复制链接]

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 16:55:39 | 显示全部楼层 |阅读模式
你好
 
 
我是新来的论坛,我想一些帮助与Lisp程序例行程序。
 
 
我需要例行程序来执行以下操作:
1.选择图纸中的所有项目,并按5的比例放大。
2.选择线宽为“0.50mm”的所有项目,将颜色更改为“按层”,并将其放置在“0existing”层上。
3.选择“第1层”上的所有项目,并将其放置到“0”层。
 
 
希望有人能帮上忙,这听起来不算多,但会节省我很多时间!
 
 
谢谢
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:59:29 | 显示全部楼层
首先:
  1. (defun C:test ( / SSX i e enx )
  2. (vlax-map-collection (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) '(lambda (x) (vla-put-Lock x :vlax-false)))
  3. (if (setq SSX (ssget "_X" (list (cons 410 (getvar 'ctab)))))
  4.         (progn
  5.                 (command "_.SCALE" SSX "" '(0. 0. 0.) 5)
  6.                 (repeat (setq i (sslength SSX))
  7.                         (setq e (ssname SSX (setq i (1- i))))
  8.                         (setq enx (entget e))
  9.                         (if (= "Layer1" (cdr (assoc 8 enx)))
  10.                                 (entupd (cdr (assoc -1 (entmod (setq enx (subst (cons 8 "0") (assoc 8 enx) enx))))))
  11.                         )
  12.                         (if (and (assoc 370 enx) (= 50 (cdr (assoc 370 enx))))
  13.                                 (progn
  14.                                         (setq enx (vl-remove-if '(lambda (x) (member (car x) '(62 420))) enx))
  15.                                         (setq enx (subst (cons 8 "0") (assoc 8 enx) enx))
  16.                                         (entupd (cdr (assoc -1 (entmod enx))))
  17.                                 )
  18.                         )               
  19.                 )
  20.                 (vla-ZoomExtents (vlax-get-acad-object))
  21.         )
  22. )
  23. (princ)
  24. );| defun |; (vl-load-com) (princ)
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:04:14 | 显示全部楼层
欢迎来到CADDutor andy_06。
 
你的个人资料上说你正在使用LT?
如果使用LT,lisp将无法工作。
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 17:05:39 | 显示全部楼层
非常感谢,这几乎是我正在寻找的,这是伟大的!
 
此时,它将我的地图缩放到正确的大小,并将0.50mm线宽放置到正确的图层上。
唯一似乎不起作用的部分是0.50mm线宽保持为红色,但如果可能的话,我需要将其更改为“按层”?
第三阶段,我需要“第1层”上的所有内容在最后转移到“0”层。
 
当我使用它的时候,我可能会想到更多的事情,但这是一个很好的开始,所以非常感谢。
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 17:09:19 | 显示全部楼层
 
嗨,Dadgad,
 
很抱歉,我已经更新了我的个人资料!
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:13:30 | 显示全部楼层
 
似乎我在“第1层”上打错了字——我写的是“第1层”,
此外,实体似乎不会通过从其elist中删除GC 62来更改其颜色ByLayer。。让我们试试subst GC 62到(62.256):
 
  1. (defun C:test ( / lyr1 lyr0 acDoc emakeLay SSX i e enx )
  2. (setq lyr1 "Layer 1");<- type your layername here
  3. (setq lyr0 "0existing");<- type your layername for lineweight 0.50mm
  4. (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  5. (vlax-map-collection (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) '(lambda (x) (vla-put-Lock x :vlax-false)))
  6. (defun emakeLay (nm)
  7.         (or (tblsearch "LAYER" nm)
  8.                 (progn
  9.                         (alert (strcat "\nLayer "" nm "" does not exist, creating it!"))
  10.                         (entmakex (list (cons 0 "LAYER")(cons 100 "AcDbSymbolTableRecord")(cons 100 "AcDbLayerTableRecord")(cons 2 nm)(cons 70 0)))
  11.                 )
  12.         )
  13.         (princ)
  14. ); defun emakeLay
  15. (mapcar 'emakeLay (list lyr0 lyr1))
  16. (if (setq SSX (ssget "_X" (list (cons 410 (getvar 'ctab)))))
  17.         (progn
  18.                 (command "_.SCALE" SSX "" '(0. 0. 0.) 5)
  19.                 (repeat (setq i (sslength SSX))
  20.                         (setq e (ssname SSX (setq i (1- i))))
  21.                         (setq enx (entget e))
  22.                         (if (= lyr1 (cdr (assoc 8 enx)))
  23.                                 (entupd (cdr (assoc -1 (entmod (setq enx (subst (cons 8 "0") (assoc 8 enx) enx))))))
  24.                         )
  25.                         (if (and (assoc 370 enx) (= 50 (cdr (assoc 370 enx))))
  26.                                 (progn
  27.                                         (setq enx (vl-remove-if '(lambda (x) (= (car x) 420)) enx))
  28.                                         (if (assoc 62 enx) (setq enx (subst (cons 62 256) (assoc 62 enx) enx)))
  29.                                         (setq enx (subst (cons 8 lyr0) (assoc 8 enx) enx))
  30.                                         (entupd (cdr (assoc -1 (entmod enx))))
  31.                                 )
  32.                         )               
  33.                 )
  34.                 (vla-Regen acDoc acActiveViewport)
  35.                 (vla-ZoomExtents (vlax-get-acad-object))
  36.         )
  37. )
  38. (princ)
  39. );| defun |; (vl-load-com) (princ)
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 17:14:52 | 显示全部楼层
谢谢你的代码Grrr!
代码中替换线型的部分似乎工作正常。
Tho。。。它检查块内容的部分并不是什么都没有。但doenst给出了错误消息。
它只是不改变块内的线型。
 
希望可以解决此问题。:-)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:18:08 | 显示全部楼层
 
嗯,我似乎找不到问题,编辑代码以重新生成所有视口(红色文本)。如果仍然不起作用,我将尝试用visual lisp重新编写块迭代。
回复

使用道具 举报

9

主题

36

帖子

30

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 17:23:35 | 显示全部楼层
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:26:38 | 显示全部楼层
Your request starts to spin my head, however try this:

[code](defun C:test ( / lyr1 lyr0 acDoc emakeLay SSX i e enx ce )(setq lyr1 "Layer 1");
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:11 , Processed in 0.493287 second(s), 72 queries .

© 2020-2025 乐筑天下

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