乐筑天下

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

[编程交流] 将对象移动到新层

[复制链接]

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 11:53:38 | 显示全部楼层 |阅读模式
我有一个lisp,我拼凑在一起,得到一个dxf输出,并将其重新排列到一组标准层上。
 
我得到了一个错误,但我想知道是否有人可以写得更有效??
 
谢谢
 
  1. (defun c:DoerVer(/)
  2. (command "_.-layer" "_N" "CCC_DOER_LA0001" "_M" "CCC_DOER_LA0001" "_C" "253" "CCC_DOER_LA0001" "_LW" "0.3" "CCC_DOER_LA0001" "" )
  3. (command "_.-layer" "_N" "CCC_DOER_LA0002" "_M" "CCC_DOER_LA0002" "_C" "7" "CCC_DOER_LA0002" "_LW" "0.3" "CCC_DOER_LA0002" "" )
  4. (command "_.-layer" "_N" "CCC_DOER_LA0003" "_M" "CCC_DOER_LA0003" "_C" "84" "CCC_DOER_LA0003" "_LW" "0.3" "CCC_DOER_LA0003" "" )
  5. (command "_.-layer" "_N" "CCC_DOER_LA0004" "_M" "CCC_DOER_LA0004" "_C" "1" "CCC_DOER_LA0004" "_LW" "0.3" "CCC_DOER_LA0004" "" )
  6. (command "_.-layer" "_N" "CCC_DOER_LA0005" "_M" "CCC_DOER_LA0005" "_C" "2" "CCC_DOER_LA0005" "_LW" "0.3" "CCC_DOER_LA0005" "" )
  7. (command "_.-layer" "_N" "CCC_DOER_LA0006" "_M" "CCC_DOER_LA0006" "_C" "7" "CCC_DOER_LA0006" "_LW" "0.3" "CCC_DOER_LA0006" "" )
  8. (command "_change" "all" ""  "p" "layer" "CCC_DOER_LA0006" "" )
  9. (setq blue(ssget "x" '((62 . 5))))
  10. (command "_change" blue ""  "p" "layer" "CCC_DOER_LA0001" "color" "bylayer" "")
  11. (setq magenta(ssget "x" '((62 . 6))))
  12. (command "_change" magenta ""  "p" "layer" "CCC_DOER_LA0002" "color" "bylayer" "")
  13. (setq green(ssget "x" '((62 . 3))))
  14. (command "_change" green ""  "p" "layer" "CCC_DOER_LA0003" "color" "bylayer" "")
  15. (setq red(ssget "x" '((62 . 1))))
  16. (command "_change" red ""  "p" "layer" "CCC_DOER_LA0004" "color" "bylayer" "")
  17. (setq yellow(ssget "x" '((62 . 2))))
  18. (command "_change" yellow ""  "p" "layer" "CCC_DOER_LA0005" "color" "bylayer" "")
  19. (setq text1(ssget "x" '((8 . "TEXT"))))
  20. (command "_change" text1 ""  "p"  "color" "bylayer" "")
  21. (princ)
  22. )   
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:02:43 | 显示全部楼层
不确定这是否是将数据制成表格的最佳方式,但它应该比您使用的更快。
 
  1. (defun c:DoerVer (/ *error* Make_Layer Layers obj ss tag)
  2. (vl-load-com)
  3. (setq Layers
  4.      ; Old Color    ; New Layer     ; Layer Color ; Layer Lineweight
  5.         '((5   . ("CCC_DOER_LA0001"     253          "030"))
  6.           (6   . ("CCC_DOER_LA0002"       7          "030"))
  7.           (3   . ("CCC_DOER_LA0003"      84          "030"))
  8.           (1   . ("CCC_DOER_LA0004"       1          "030"))
  9.           (2   . ("CCC_DOER_LA0005"       2          "030"))
  10.           (nil . ("CCC_DOER_LA0006"       7          "030")))
  11. )
  12. (setq *doc* (cond (*doc*) ((vla-get-ActiveDocument
  13.                               (vlax-get-acad-object)))))
  14. (defun *error* (msg)
  15.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  16.        (princ (strcat "\n** Error: " msg " **")))
  17.    (princ))  
  18. (defun Make_Layer (lay Col LnW)
  19.    (cond (  (tblsearch "LAYER" lay))
  20.          
  21.          (  (setq lObj (vla-add (vla-get-Layers *doc*) lay))
  22.             (vla-put-color lObj Col)
  23.             (vla-put-lineweight lObj
  24.               (eval (read (strcat "acLnWt" LnW)))))))
  25. (mapcar
  26.    (function
  27.      (lambda (x) (apply (function Make_Layer) (cdr x)))) Layers)
  28. (if (ssget "_X")
  29.    (progn
  30.      (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *doc*))
  31.       
  32.        (if (setq tag (assoc (vla-get-color obj) Layers))
  33.          (mapcar
  34.            (function
  35.              (lambda (x y) (vlax-put-property obj x y))) '(color layer)
  36.            (list acByLayer (cadr tag))))
  37.        (if (eq "TEXT" (vla-get-layer obj))
  38.          (vla-put-color obj acByLayer)))
  39.      (vla-delete ss)))
  40. (princ))
  41.          
  42.             
  43.          
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 12:18:48 | 显示全部楼层
谢谢你,李。这很管用。另一件事,我正在应用lisp的输出文件的一部分创建了两条垂直间距始终为2.25个单位的绿线。我包括dxf以了解我的意思。它们都是相同的颜色。是否可以选择较低的线并将其移动到层CCC\u DOER\u LA0005。这是一个很长的部分。
 
我还为一组横截面运行了此lisp的修改版本。每个横截面也包含两条绿线。是否可以扫描图形并将较低的绿线移动到要关闭的单独图层??
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:25:57 | 显示全部楼层
 
您必须使用线的某些特征创建ssget过滤器-无论它始终处于某个高程,或者y坐标始终相同,或者它具有已知长度。
 
但是,在没有任何定义特征的情况下自动选择一行是一场噩梦。。。
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 12:28:11 | 显示全部楼层
好啊
 
无论如何谢谢李。值得一试。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:43:06 | 显示全部楼层
 
好吧,我并不是说这是不可能的-但这条线有任何“定义”的特点,把它从其他线,你不想选择?
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 12:48:15 | 显示全部楼层
谢谢李,但他们是同一行只有2.25分开。没有任何区别。别担心。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:55:10 | 显示全部楼层
 
.. 好啊
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:30 , Processed in 0.330806 second(s), 68 queries .

© 2020-2025 乐筑天下

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