乐筑天下

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

[编程交流] 外部参照操作-更改la

[复制链接]

4

主题

22

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 16:33:48 | 显示全部楼层 |阅读模式
首先,以下代码归功于Mike。佩里@http://forums.augi.com/showthread.php?5547-将块图元颜色更改为bylayer&p=32836&viewfull=1#post32836和T.Willey@http://forums.augi.com/showthread.php?62996-更改外部参照层颜色&p=719686&viewfull=1#post719686
 
使用上述两个代码,我编写了以下lisp以满足我的需要=1。允许多个选定的外部参照受到影响2。冻结所有选定外部参照3中的图层集列表。将所有层颜色都设置为15,除了少数@颜色13和4。将选定外部参照中的所有图元更改为“颜色随层”,但特别是忽略了几个嵌套的外部参照(剖切、栅格)。
 
  1. (defun c:xr-elec (/ sset ctr xr2 xr3 xr4 xr5 xr6 tx1 xclr ocmd llist temp1 layfzn)
  2. ; Change all the layers of an xref to specified color.
  3. (vl-load-com)
  4. (setq ocmd (getvar "cmdecho"))
  5. (setvar "cmdecho" 0)
  6. (command "_.undo" "_end")
  7. (command "_.undo" "_group")
  8. (prompt "\nSelect xref(s) to convert to ELEC: ")
  9. (if (setq sset (ssget))
  10.    (progn
  11.      (setq ctr 0)
  12.      (repeat (sslength sset)
  13.        (setq xr1 (ssname sset ctr))
  14.        (if xr1
  15.          (progn
  16.            (setq xr2 (entget xr1))
  17.            (setq tx1 (cdr (assoc 0 xr2)))
  18.            (if
  19.              (and
  20.                (= tx1 "INSERT")
  21.                 (setq xr3 (cdr (assoc 2 xr2)))
  22.                     (setq xr4 (tblsearch "block" xr3))
  23.                       (setq xr5 (cdr (assoc 1 xr4)))
  24.                   )
  25.              (progn
  26.                (setq xclr 15) ;;SET LAYER COLOR
  27.                (if (assoc 62 xr2)
  28.                  (entmod (subst (cons 62 xclr) (assoc 62 xr2) xr2))
  29.                  (entmod (append xr2 (list (cons 62 xclr))))
  30.                )
  31.                (setq xr6 (strcat xr3 "|"))
  32.                (setq llist (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  33.                (vlax-for item llist
  34.                  (if (vl-string-search xr6 (vlax-get item 'Name))
  35.                    (progn
  36.                      (setq temp1 (vlax-get item 'TrueColor))
  37.                      (vlax-put temp1 'ColorIndex (rtos xclr 2 0))
  38.               (vlax-put item 'TrueColor temp1)
  39.                    )
  40.                  )
  41.                 )
  42.         ;change all entities within xrefs to color bylayer, omitting <section,grid> nested xrefs
  43.         (command "_.xref" "unload" "section*,grid")
  44.                (blocksbylayer xr1)
  45.         (command "_.xref" "reload" "section*,grid")
  46.              )
  47.            (prompt "\nNot an xref"))
  48.          )
  49.        )
  50.      (setq ctr (1+ ctr)))
  51.    ) (princ)
  52. )
  53. (command "_.undo" "_end")
  54. ;freeze list of layers
  55. (setq layfzn "0,*|AREA,*|DIM*,*|DOOR TAG*,*|KEY NOTES,*|LINE-CENTER,*|NO PLOT,
  56.      *|POCHE-FLOOR*,*|SYMBOL-*,*|SYMBOL_*,*|SYMBOL *,*|TEXT*,*|WINDOW TAG*,*|SECTION CUTS-96,
  57.      *|GRID-96")
  58. (command "_.layer" "freeze" layfzn "")
  59. ;change a few specific layer colors
  60. (command "_.layer" "color" 13 "*|wall_shade,*|poche-roof*" "")
  61. (setvar "cmdecho" ocmd)
  62. (princ)
  63. )
  64. (defun blocksbylayer (xr1 / ELST ENAM ESEL BNAM FLST)
  65. (setq ELST (entget xr1)
  66.        BNAM (cdr (assoc 2 ELST))
  67. FLST nil
  68. )
  69. (fix1 BNAM)
  70. (vl-cmdf "regen")
  71. (princ)
  72. )
  73. (defun FIX1 (BNAM / BENAM)
  74. (if (not (member BNAM FLST))
  75.    (progn
  76.      (setq FLST  (cons BNAM FLST)
  77.     BENAM (tblobjname "block" BNAM))
  78.      (while
  79. (setq BENAM (entnext BENAM))
  80.         ;(print (entget BENAM))
  81.        (if (= (cdr (assoc 0 (entget BENAM))) "INSERT")
  82.          (fix1 (cdr (assoc 2 (entget BENAM))))
  83.          (vla-put-color (vlax-ename->vla-object BENAM) 256)
  84.        )
  85.      )
  86.    )
  87. )
  88. )

 
这是我的问题——将实体(块)更改为逐层颜色的代码,两者都是Mike发布的原始代码。Perry和我的lisp(defun blocksbylayer)中修改过的代码--做他们想要做的事--直到关闭并重新打开我正在处理的文件,此时所有更改为“颜色bylayer”的实体都返回到强制颜色。。。。我对原因感到困惑。
 
我显然不擅长编写代码,但我想学习,讨厌盲目寻求帮助——因此采用了黑客和合并的方法,但我在这个项目中已经达到了一个地步,我真的没有想法了,所以欢迎任何和所有的建议。谢谢
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 16:51:59 | 显示全部楼层
你好!
 
我时不时地寻找没有答案的线索,并试图帮助解决问题。他们说迟做总比不做好。
 
 
在我看来,系统变量visretain设置为0,需要将其设置为1。Visretain控制x-ref相关图层的lt、颜色、lw、可见性和打印样式。如果visretain设置为0,则任何更改将仅保留在当前会话中。重新打开容器dwg将从外部参照重新加载图层设置。如果visretain设置为1,则对x-ref相关图层的图层设置所做的任何更改都将保存在容器图形中,如果关闭并重新打开,则这些更改将持续存在。
 
我希望这有帮助。
回复

使用道具 举报

4

主题

22

帖子

18

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:15:19 | 显示全部楼层
嘿,杰夫,谢谢你的回复。
 
在这篇文章以及更多挖掘之后,使用代码强制外部参照中的实体按层着色只会持续到外部参照通过关闭和重新打开或在外部参照管理器中手动重新加载为止。没办法。
 
也就是说,autocad有一个新的(er)系统变量XREFOVERRIDE,它强制所有外部参照中的所有图元按层着色。如果只希望特定图元或特定外部参照按颜色层显示,则该选项不太有用。
 
我很高兴被纠正,但据我所知,至少目前没有办法。再次感谢您的回复。
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 17:33:40 | 显示全部楼层
我目前在2015年,没有XREFOVERRIDE变量。但是如果它是一个可以改变的变量,对吗?
 
我要尝试的是,在容器绘图中,
关闭外部参照覆盖
将VISRETAIN设置为1
对外部参照相关图层进行更改
保存容器图形。
 
关闭并重新打开容器图形后,在依赖外部参照的图层上进行的所有替代都应保留在容器图形中。
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:47:25 | 显示全部楼层
 
+1对我来说,这听起来是个好方法。
 
如果不解决您的问题,您可能还想使用SYSVDLG命令访问XREFOVERRIDE的所有相关变量选项,可能还有一些其他选项可用。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 15:46 , Processed in 1.369231 second(s), 62 queries .

© 2020-2025 乐筑天下

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