乐筑天下

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

[编程交流] 将所有块设置为ByLaye

[复制链接]

6

主题

21

帖子

15

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:04:35 | 显示全部楼层 |阅读模式
我搜索了一下,并没有真正找到我想要的结果。
 
我正在寻找一个Lisp,当调用它时,它会将DWG中的每个块更改为ByLayer颜色和线型。
 
我最近发现了一个有效的,但你必须选择每个区块。
 
这是我找到的Lisp程序。。
 
  1.     ;   File Name: FIXBLOCK.LSP
  2.    ;   Description: Puts all of a blocks sub-entities on layer 0 with color and
  3.    ;                                          linetype set to BYBLOCK. The block, itself, will remain on
  4.    ;                                          its' original layer.
  5.    ;
  6.    ;*******************************************************************************
  7. (defun d_FixBlock (/             eBlockSel ; Block selection
  8.                   lInsertData ; Entity data
  9.                   sBlockName ; Block name
  10.                   lBlockData ; Entity data
  11.                   eSubEntity ; Sub-entity name
  12.                   lSubData ; Sub-entity data
  13.                   iCount ; Counter
  14.                  )
  15. ;; Redefine error handler
  16. (setq
  17.    d_#error *error*
  18.    *error*  d_FB_Error
  19. ) ;_ end setq
  20. ;; Set up environment
  21. (setq #SYSVARS (#SaveSysVars (list "cmdecho")))
  22. (setvar "cmdecho" 0)
  23. (command "._undo" "_group")
  24. ;; Get block from user and make sure it's an INSERT type
  25. (if (setq eBlockSel (entsel "\nSelect block to change :"))
  26.    (progn
  27.      (if (setq lInsertData (entget (car eBlockSel)))
  28.        (if (= (cdr (assoc 0 lInsertData)) "INSERT")
  29.          (setq sBlockName (cdr (assoc 2 lInsertData)))
  30.          (progn
  31.            (alert "Entity selected is not a block!")
  32.            (exit)
  33.          ) ;_ end progn
  34.        ) ;_ end if
  35.        (progn
  36.          (alert "Invalid Block Selection!")
  37.          (exit)
  38.        ) ;_ end progn
  39.      ) ;_ end if
  40.      ;; Get block info from the block table
  41.      (setq
  42.        lBlockData (tblsearch "BLOCK" sBlockName)
  43.        eSubEntity (cdr (assoc -2 lBlockData))
  44.      ) ;_ end setq
  45.      ;; Make sure block is not an Xref
  46.      (if (not (assoc 1 lBlockData))
  47.        (progn
  48.          (princ "\nProcessing block: ")
  49.          (princ sBlockName)
  50.          (princ "\nUpdating blocks sub-entities. . .")
  51.          ;; Parse through all of the blocks sub-entities
  52.          (while eSubEntity
  53.            (princ " .")
  54.            (setq lSubData (entget eSubEntity))
  55.            ;; Update layer property
  56.            (if (assoc 8 lSubData)
  57.              (progn
  58.                (setq lSubData
  59.                       (subst
  60.                         (cons 8 "0")
  61.                         (assoc 8 lSubData)
  62.                         lSubData
  63.                       ) ;_ end subst
  64.                ) ;_ end setq
  65.                (entmod lSubData)
  66.              ) ;_ end progn
  67.            ) ;_ end if
  68.            ;; Update the linetype property
  69.            (if (assoc 6 lSubData)
  70.              (progn
  71.                (setq lSubData
  72.                       (subst
  73.                         (cons 6 "BYBLOCK")
  74.                         (assoc 6 lSubData)
  75.                         lSubData
  76.                       ) ;_ end subst
  77.                ) ;_ end setq
  78.                (entmod lSubData)
  79.              ) ;_ end progn
  80.              (entmod (append lSubData (list (cons 6 "BYBLOCK"))))
  81.            ) ;_ end if
  82.            ;; Update the color property
  83.            (if (assoc 62 lSubData)
  84.              (progn
  85.                (setq lSubData
  86.                       (subst
  87.                         (cons 62 0)
  88.                         (assoc 62 lSubData)
  89.                         lSubData
  90.                       ) ;_ end subst
  91.                ) ;_ end setq
  92.                (entmod lSubData)
  93.              ) ;_ end progn
  94.              (entmod (append lSubData (list (cons 62 0))))
  95.            ) ;_ end if
  96.            (setq eSubEntity (entnext eSubEntity))
  97.    ; get next sub entity
  98.          ) ; end while
  99.          ;; Update attributes
  100.          (idc_FB_UpdAttribs)
  101.        ) ; end progn
  102.        (alert "XREF selected. Not updated!")
  103.      ) ; end if
  104.    ) ; end progn
  105.    (alert "Nothing selected.")
  106. ) ; end if
  107. ;;; Pop error stack and reset environment
  108. (idc_RestoreSysVars)
  109. (princ "\nDone!")
  110. (setq *error* d_#error)
  111. (princ)
  112. )   ; end defun
  113.    ;*******************************************************************************
  114.    ; Function to update block attributes
  115.    ;*******************************************************************************
  116. (defun idc_FB_UpdAttribs ()
  117. ;; Update any attribute definitions
  118. (setq iCount 0)
  119. (princ "\nUpdating attributes. . .")
  120. (if (setq ssInserts (ssget "x"
  121.                             (list (cons 0 "INSERT")
  122.                                   (cons 66 1)
  123.                                   (cons 2 sBlockName)
  124.                             ) ;_ end list
  125.                      ) ;_ end ssget
  126.      ) ;_ end setq
  127.    (repeat (sslength ssInserts)
  128.      (setq eBlockName (ssname ssInserts iCount))
  129.      (if (setq eSubEntity (entnext eBlockName))
  130.        (setq
  131.          lSubData (entget eSubEntity)
  132.          eSubType (cdr (assoc 0 lSubData))
  133.        ) ;_ end setq
  134.      ) ;_ end if
  135.      (while (or (= eSubType "ATTRIB") (= eSubType "SEQEND"))
  136.        ;; Update layer property
  137.        (if (assoc 8 lSubData)
  138.          (progn
  139.            (setq lSubData
  140.                   (subst
  141.                     (cons 8 "0")
  142.                     (assoc 8 lSubData)
  143.                     lSubData
  144.                   ) ;_ end subst
  145.            ) ;_ end setq
  146.            (entmod lSubData)
  147.          ) ;_ end progn
  148.        ) ;_ end if
  149.        ;; Update the linetype property
  150.        (if (assoc 6 lSubData)
  151.          (progn
  152.            (setq lSubData
  153.                   (subst
  154.                     (cons 6 "BYBLOCK")
  155.                     (assoc 6 lSubData)
  156.                     lSubData
  157.                   ) ;_ end subst
  158.            ) ;_ end setq
  159.            (entmod lSubData)
  160.          ) ;_ end progn
  161.          (entmod (append lSubData (list (cons 6 "BYBLOCK"))))
  162.        ) ;_ end if
  163.        ;; Update the color property
  164.        (if (assoc 62 lSubData)
  165.          (progn
  166.            (setq lSubData
  167.                   (subst
  168.                     (cons 62 0)
  169.                     (assoc 62 lSubData)
  170.                     lSubData
  171.                   ) ;_ end subst
  172.            ) ;_ end setq
  173.            (entmod lSubData)
  174.          ) ;_ end progn
  175.          (entmod (append lSubData (list (cons 62 0))))
  176.        ) ;_ end if
  177.        (if (setq eSubEntity (entnext eSubEntity))
  178.          (setq
  179.            lSubData (entget eSubEntity)
  180.            eSubType (cdr (assoc 0 lSubData))
  181.          ) ;_ end setq
  182.          (setq eSubType nil)
  183.        ) ;_ end if
  184.      ) ; end while
  185.      (setq iCount (1+ iCount))
  186.    ) ; end repeat
  187. ) ; end if
  188. (command "regen")
  189. )   ; end defun
  190.    ;*******************************************************************************
  191.    ; Function to save a list of system variables
  192.    ;*******************************************************************************
  193. (defun #SaveSysVars (lVarList / sSystemVar)
  194. (mapcar
  195.    '(lambda (sSystemVar)
  196.       (setq lSystemVars
  197.              (append lSystemVars
  198.                      (list (list sSystemVar (getvar sSystemVar)))
  199.              ) ;_ end append
  200.       ) ;_ end setq
  201.     ) ;_ end lambda
  202.    lVarList
  203. ) ;_ end mapcar
  204. lSystemVars
  205. ) ;_ end defun
  206.    ;*******************************************************************************
  207.    ; Function to restore a list of system variables
  208.    ;*******************************************************************************
  209. (defun idc_RestoreSysVars ()
  210. (mapcar
  211.    '(lambda (sSystemVar)
  212.       (setvar (car sSystemVar) (cadr sSystemVar))
  213.     ) ;_ end lambda
  214.    #SYSVARS
  215. ) ;_ end mapcar
  216. ) ;_ end defun
  217.    ;*******************************************************************************
  218.    ; Error Handler
  219.    ;*******************************************************************************
  220. (defun d_FB_Error (msg)
  221. (princ "\nError occurred in the Fix Block routine...")
  222. (princ "\nError: ")
  223. (princ msg)
  224. (setq *error* d_#error)
  225. (if *error*
  226.    (*error* msg)
  227. ) ;_ end if
  228. (command)
  229. (if (/= msg "quit / exit abort")
  230.    (progn
  231.      (command "._undo" "_end")
  232.      (command "._u")
  233.    ) ;_ end progn
  234. ) ;_ end if
  235. (idc_RestoreSysVars)
  236. (princ)
  237. ) ;_ end defun
  238.    ;*******************************************************************************
  239. (defun FB () (d_FixBlock))
  240. (fb)
  241. (princ)

 
 
此外,如果每次需要时都不进行加载,我无法使这个lisp正常工作。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:10:24 | 显示全部楼层
为什么不直接使用SETBYLAYER命令?
回复

使用道具 举报

6

主题

21

帖子

15

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:11:42 | 显示全部楼层
因为我忘了那个命令。。英雄联盟
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:18:27 | 显示全部楼层
 
lmfao公司
 
... 很乐意帮忙!:眨眼:
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:20:46 | 显示全部楼层
 
我也是,每次伦德曼用他珍贵的话语提醒我,我总是忘记。
 
我的例行程序已经准备好交付,但这个命令持有我的能量LOL。。。。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:23:30 | 显示全部楼层
老实说,我对setbyblock了解不多,但这也应该提供一些灵活性
 
 
  1. [b][color=BLACK]([/color][/b]defun c:blk2def [b][color=FUCHSIA]([/color][/b]/ bl tdef fe fd[b][color=FUCHSIA])[/color][/b]
  2. [color=#8b4513];;;GROUP LIST Group_Number Sysvar_Name New_Value[/color]
  3. [b][color=FUCHSIA]([/color][/b]setq bl '[b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b] 8 [color=#2f4f4f]"CLAYER"[/color]      [color=#2f4f4f]"0"[/color][b][color=MAROON])[/color][/b]
  4.             [b][color=MAROON]([/color][/b] 6 [color=#2f4f4f]"CELTYPE"[/color]     [color=#2f4f4f]"BYLAYER"[/color][b][color=MAROON])[/color][/b]
  5.             [b][color=MAROON]([/color][/b]39 [color=#2f4f4f]"THICKNESS"[/color]    0.0[b][color=MAROON])[/color][/b]
  6.             [b][color=MAROON]([/color][/b]48 [color=#2f4f4f]"CELTSCALE"[/color]    1[b][color=MAROON])[/color][/b]
  7.             [b][color=MAROON]([/color][/b]62 [color=#2f4f4f]"CECOLOR"[/color]      256[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq tdef [b][color=MAROON]([/color][/b]tblnext [color=#2f4f4f]"BLOCK"[/color] [b][color=GREEN]([/color][/b]not tdef[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.         [b][color=NAVY]([/color][/b]setq fe [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc -2 tdef[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]princ [b][color=MAROON]([/color][/b]strcat [color=#2f4f4f]"\n"[/color] [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 2 tdef[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  11.         [b][color=NAVY]([/color][/b]entmake tdef[b][color=NAVY])[/color][/b]
  12.         [b][color=NAVY]([/color][/b]while fe
  13.           [b][color=MAROON]([/color][/b]setq fd [b][color=GREEN]([/color][/b]entget fe[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  14.           [b][color=MAROON]([/color][/b]foreach g bl
  15.              [b][color=GREEN]([/color][/b]cond [b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]not [b][color=PURPLE]([/color][/b]getvar [b][color=TEAL]([/color][/b]nth 1 g[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  16.                    [b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]assoc [b][color=PURPLE]([/color][/b]nth 0 g[b][color=PURPLE])[/color][/b] fd[b][color=RED])[/color][/b]
  17.                     [b][color=RED]([/color][/b]setq fd [b][color=PURPLE]([/color][/b]subst [b][color=TEAL]([/color][/b]cons [b][color=OLIVE]([/color][/b]nth 0 g[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]nth 2 g[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b]
  18.                                     [b][color=TEAL]([/color][/b]assoc [b][color=OLIVE]([/color][/b]nth 0 g[b][color=OLIVE])[/color][/b] fd[b][color=TEAL])[/color][/b] fd[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  19.                    [b][color=BLUE]([/color][/b]T
  20.                     [b][color=RED]([/color][/b]setq fd [b][color=PURPLE]([/color][/b]append fd [b][color=TEAL]([/color][/b]list [b][color=OLIVE]([/color][/b]cons [b][color=GRAY]([/color][/b]nth 0 g[b][color=GRAY])[/color][/b] [b][color=GRAY]([/color][/b]nth 2 g[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  21.           [b][color=MAROON]([/color][/b]entmake fd[b][color=MAROON])[/color][/b]
  22.           [b][color=MAROON]([/color][/b]setq fe [b][color=GREEN]([/color][/b]entnext fe[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  23.         [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=GREEN])[/color][/b][b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  24. [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.REGENALL"[/color][b][color=FUCHSIA])[/color][/b]
  25. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
您可以根据需要操作列表bl。
[列表]
  • SN有效层名称
  • 线型必须在调用之前存在,才能正常工作。
  • 颜色0-256
    [/列表]
     
    它不处理现有属性。
     
     
    -大卫
  • 回复

    使用道具 举报

    6

    主题

    21

    帖子

    15

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 09:29:11 | 显示全部楼层
    啊。。。现在我想起来了。。我希望块中的线条移动到第0层,以及其他所有内容的“bylayer”。。
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 09:32:11 | 显示全部楼层
    尝试一下:
     
    1. (defun c:test ( / acdoc )
    2.    ;;-----------------------------------------------------------
    3.    ;; All block objects to Layer "0", Color/Linetype ByLayer
    4.    ;; Lee Mac 2011  -  www.lee-mac.com
    5.    ;;-----------------------------------------------------------
    6.    (vlax-for block
    7.        (vla-get-blocks
    8.            (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
    9.        )
    10.        (if
    11.            (and
    12.                (eq :vlax-false (vla-get-islayout block))
    13.                (eq :vlax-false (vla-get-isxref block))
    14.            )
    15.            (vlax-for object block
    16.                (mapcar
    17.                    (function
    18.                        (lambda ( property value )
    19.                            (vl-catch-all-apply 'vlax-put-property (list object property value))
    20.                        )
    21.                    )
    22.                   '(layer color linetype)
    23.                    (list "0" acbylayer "BYLAYER")
    24.                )
    25.            )
    26.        )
    27.    )
    28.    (vla-regen acdoc acallviewports)
    29.    (princ)
    30. )
    31. (vl-load-com) (princ)
    回复

    使用道具 举报

    6

    主题

    21

    帖子

    15

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-6 09:33:26 | 显示全部楼层
    李,
     
    你会杀了我的。这很好,我将使用lisp。。有没有办法使用另一个lisp(或此lisp中的选项)将块的对象放置到插入块的层?
    回复

    使用道具 举报

    44

    主题

    3166

    帖子

    2803

    银币

    中流砥柱

    Rank: 25

    铜币
    557
    发表于 2022-7-6 09:39:29 | 显示全部楼层
     
    考虑替换此行:
     
    1. (list [color=red]"0"[/color] acbylayer "BYLAYER")

     
    ... 有了这个:
     
    1. (list [color=red](vla-get-layer object)[/color] acbylayer "BYLAYER")
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-7-4 13:48 , Processed in 0.625985 second(s), 73 queries .

    © 2020-2025 乐筑天下

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