乐筑天下

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

[编程交流] 重新创建层

[复制链接]

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 14:22:38 | 显示全部楼层 |阅读模式
如果我已经创建了层,我的lisp基本上就没人听,它不会重新编写实体
我的许多同谋使用这些图层,但它们都设置为白色,只是改变了颜色,即黄色图层的红线和一个暗淡的“D”
(请不要评论同性恋阶层,我必须整天与他们合作)
  1. (defun C:lay (/ layerlist count nme col lt plt)
  2. (setvar "cmdecho" 0)
  3. (setq layerlist
  4. (list
  5.   (list "white" "7" "CONTINUOUS")
  6.   (list "red" "1" "CONTINUOUS")
  7.   (list "blue" "5" "CONTINUOUS")
  8.   (list "green" "4" "CONTINUOUS")
  9.   (list "grey" "8" "CONTINUOUS")
  10.   (list "magenta" "6" "CONTINUOUS")
  11.   (list "cyan" "4" "CONTINUOUS")
  12.   (list "dim" "4" "CONTINUOUS")
  13.   (list "hidden" "7" "hidden")
  14.   (list "center" "7" "center")
  15.   (list "Phantom" "8" "phantom")
  16.   (list "text" "2" "CONTINUOUS")
  17.   (list "noplot" "8" "phantom")
  18.   (list "yellow" "6" "CONTINUOUS")
  19. )
  20. )
  21. (setq count 0)
  22. (while (nth count layerlist)
  23. (setq nme (car (nth count layerlist)))
  24. (setq col (atoi (cadr (nth count layerlist))))
  25. (setq lt (caddr (nth count layerlist)))
  26. (setq count (1+ count))
  27.    (if (= nme "noplot")
  28.     (setq plt 0)
  29.     (setq plt 1)
  30. )
  31. (and (entmake
  32.      (list
  33.        (cons 0 "LAYER")
  34.        (cons 100 "AcDbSymbolTableRecord")
  35.        (cons 100 "AcDbLayerTableRecord")
  36.        (cons 2 Nme)
  37.        (cons 70 0)
  38.        (cons 62 Col)
  39.        (cons 6 Lt)
  40.        (cons 290 plt)
  41.        (cons 370 0)
  42.   )
  43. )
  44. )
  45. )
  46. (setvar "cmdecho" 1)
  47. (princ)
  48. )
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 14:27:52 | 显示全部楼层
一些建议。。。
 
首先,您可以编写一个lisp来获取具有特定属性(例如,颜色或线型)的所有直线/多段线,并将其更改为适当的图层。我在工作中使用这种技术,它非常有用,特别是当你需要冻结或隔离层时。用LISP编写也很容易。
 
其次,你的代码很好。如果您的问题是没有任何内容被过度编写,那么可以尝试在代码中添加一个代码,使用命令“laydel”在重新编写层之前去掉层。
 
如果你真的想多跑一英里,
  1. (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))

这应该让你开始。
 
希望这能有所帮助^。^
回复

使用道具 举报

NBC

4

主题

182

帖子

178

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:29:22 | 显示全部楼层
但是,使用LAYDEL时要非常小心,因为它还会删除使用LAYDEL的图层上的所有实体。
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:33:11 | 显示全部楼层
我知道它不是很干净,但试试这个。
 
  1. (defun C:lay (/ laylst laynm exlay nme)
  2. (setvar "cmdecho" 0)
  3. (setq exlay (list (cdr (assoc 2 (tblnext "Layer" t)))))
  4. (while (setq laynm (tblnext "Layer"))
  5.    (setq exlay (append (list (cdr (assoc 2 laynm)))exlay))
  6.    )
  7.    
  8. (setq laylst
  9.     (list
  10.       (list "white" 7 "CONTINUOUS")
  11.       (list "red" 1 "CONTINUOUS")
  12.       (list "blue" 5 "CONTINUOUS")
  13.       (list "green" 4 "CONTINUOUS")
  14.       (list "grey" 8 "CONTINUOUS")
  15.       (list "magenta" 6 "CONTINUOUS")
  16.       (list "cyan" 4 "CONTINUOUS")
  17.       (list "dim" 4 "CONTINUOUS")
  18.       (list "hidden" 7 "hidden")
  19.       (list "center" 7 "center")
  20.       (list "Phantom" 8 "phantom")
  21.       (list "text" 2 "CONTINUOUS")
  22.       (list "noplot" 8 "phantom")
  23.       (list "yellow" 6 "CONTINUOUS")
  24.       )
  25.    )
  26. ;***********************Borrowed from Lee Mac*************************
  27. (mapcar
  28.    '(lambda (z)
  29.       (if (not (tblsearch "LTYPE" (caddr z)))
  30.    (vla-load
  31.      (vla-get-Linetypes
  32.        (vla-get-ActiveDocument
  33.          (vlax-get-acad-object))) (caddr z) "acad.lin"))) laylst)
  34. ;*********************************************************************
  35. (mapcar
  36.    '(lambda (z)
  37.      (if (member (setq nme (car z)) exlay)
  38.    (progn
  39.      (vla-put-linetype (setq layen (vlax-ename->vla-object (tblobjname "Layer" nme))) (caddr z))
  40.      (vla-put-colorindex (vla-get-truecolor layen) (cadr z)))
  41.    (progn
  42.      (entmake
  43.        (list
  44.          (cons 0 "LAYER")
  45.          (cons 100 "AcDbSymbolTableRecord")
  46.          (cons 100 "AcDbLayerTableRecord")
  47.          (cons 2 Nme)
  48.          (cons 70 0)
  49.          (cons 62 (cadr z))
  50.          (cons 6 (caddr z))
  51.          (cons 290 1)
  52.          (cons 370 0)))))) laylst)
  53. (vla-put-plottable (vlax-ename->vla-object (tblobjname "Layer" "noplot")) :vlax-false)
  54. )

 
编辑:我使用了李·麦克的一些代码,我想在应该得到赞扬的地方给予赞扬。
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:38:07 | 显示全部楼层
 
好啊但为什么图层“绿色”是蓝色,图层“黄色”是洋红色?英雄联盟
 
没关系,我一般不会质疑别人的标准。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:40:32 | 显示全部楼层
你使用了这个线程中的代码吗?如果是这样,您可以将层创建保留为子程序,只需使用Mapcar调用它,请参见此处。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:44:44 | 显示全部楼层
 
谢谢你,比尔,你是为数不多的人之一
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:46:54 | 显示全部楼层
 
这是给我的吗?
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:51:05 | 显示全部楼层
 
随时可以,李!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:51:49 | 显示全部楼层
 
不,对不起,比尔,不是对你-我是指最初由Flowerrobot发布的代码,因为entmake层看起来非常相似。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:16 , Processed in 0.623789 second(s), 72 queries .

© 2020-2025 乐筑天下

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