明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 337|回复: 7

[源码] 不打印块检测

[复制链接]
发表于 前天 17:31 | 显示全部楼层 |阅读模式
本帖最后由 thriving 于 2025-9-2 08:20 编辑

以前做的一个功能,输出可能不太完善,大致可以满足如题功能,现源码上传;
输出对象是非打印的块,块内须有打印的图层

  1. (setq
  2.         ;;常用VLA对象、集合
  3.         *ACAD*  (vlax-get-acad-object)
  4.         *DOC*   (vla-get-ActiveDocument *ACAD*)
  5.         *DOCS*  (vla-get-Documents *ACAD*)
  6.         *MS*    (vla-get-modelSpace *DOC*)
  7.         *PS*    (vla-get-paperSpace *DOC*)
  8.         *BLKS*  (vla-get-Blocks *DOC*)
  9.         *LAYS*  (vla-get-Layers *DOC*)
  10.         *LTS*   (vla-get-Linetypes *DOC*)
  11.         *STS*   (vla-get-TextStyles *DOC*)
  12.         *GRPS*  (vla-get-groups *DOC*)
  13.         *DIMS*  (vla-get-DimStyles *DOC*)
  14.         *LOUTS* (vla-get-Layouts *DOC*)
  15.         *VPS*   (vla-get-Viewports *DOC*)
  16.         *VS*    (vla-get-Views *DOC*)
  17.         *DICS*  (vla-get-Dictionaries *DOC*)
  18.         *Layouts* (vla-get-Layouts *doc*)
  19. )


  20. ;;返回所有图层对应的对象名(大写)
  21. ;;返回:((图层名1 对象名1) (图层名2 对象名2)……)
  22. (defun try-Layer-obj-name (/ ob)
  23.         (vlax-for each (vla-get-Layers *DOC*)
  24.                 (setq ob(cons(list (vla-get-name each)each)  ob))
  25.         )
  26.         ob
  27. )


  28. ;;返回所有图层的名称(字符串表)
  29. (defun try-Layer-allname(/ out)
  30.         (vlax-for obj *LAYS*
  31.                 (setq out (cons (vlax-get-property obj 'Name) out))
  32.         )
  33.         (reverse out)
  34. )

  35. ;|
  36. 返回所有图层的信息
  37. (("层名" 状态 颜色 "线型")……)
  38. 状态:1冻结图层 2新视口冻结图层 4锁定…(其他看帮助)
  39. 颜色:负值为隐藏图层
  40. |;
  41. (defun try-Layer-Info (/ lst d e1 e2)
  42.         (while (setq d (tblnext "layer" (null d)))
  43.                 (setq   lst (cons (mapcar 'cdr (cdr d)) lst)    )
  44.         )
  45.         (vl-sort lst '(lambda (e1 e2) (< (car e1) (car e2))))
  46. )

  47. ;;获取指定图层的图元名
  48. ;;(try-Layer-ent "0") --> <图元名: -64cb388>
  49. (defun try-Layer-ent (name)(tblobjname "layer" name))


  50. ;;打开关闭图层
  51. ;;参数:图层名称表
  52. (defun try-Layer-On (LayList)
  53.         (setq LayList(mapcar 'strcase LayList))
  54.         (vlax-for each *LAYS*
  55.                 (if (member (strcase (vla-get-name each)) LayList)
  56.                         (if (vlax-write-enabled-p each)
  57.                                 (vla-put-LayerOn each :vlax-True)
  58.                         )
  59.                 )
  60.                 (vlax-release-object each)
  61.         )
  62. )


  63. ;;关闭图层
  64. ;;参数:图层名称表
  65. (defun try-Layer-Off (LayList)
  66.         (setq LayList(mapcar 'strcase LayList))
  67.         (vlax-for each *LAYS*
  68.                 (if (member (strcase (vla-get-name each)) LayList)
  69.                         (if (vlax-write-enabled-p each)
  70.                                 (vla-put-LayerOn each :vlax-False)
  71.                         )
  72.                 )
  73.                 (vlax-release-object each)
  74.         )
  75. )

  76. ;;设置指定图层(列表)不打印
  77. ;;参数1、图层列表
  78. ;;参数2、是否打印(T打印/nil不打印)
  79. (defun try-Layer-Plot (LayList On-Off)
  80.         (vlax-for each (vla-get-Layers *DOC*)
  81.                 (if (member (strcase (vla-get-name each)) (mapcar 'strcase LayList))
  82.                         (if (vlax-write-enabled-p each)
  83.                                 (if On-Off
  84.                                         (vla-put-Plottable each :vlax-True)
  85.                                         (vla-put-Plottable each :vlax-False)
  86.                                 )
  87.                         )
  88.                 )
  89.                 (vlax-release-object each)
  90.         )
  91. )
  92. ;;;创建一个图层
  93. ;;;参    数1:name:图层名称
  94. ;;;参    数2:colour:颜色默认nil(7)
  95. ;;;参    数3:xianxin:线型默认nil(Continuous)
  96. ;;;参    数4:n70:标志位,默认nil(0)(详见函数内注释)
  97. ;;;示    例: (try-make-layer "abc" nil nil nil)
  98. (defun try-layer-make (name colour xianxin n70)
  99.         (or n70 (setq n70 0))
  100.         ;标准标记(按位编码值):
  101.         ;1 = 冻结图层,否则解冻图层
  102.         ;2 = 默认情况下在新视口中冻结图层
  103.         ;4 = 锁定图层
  104.         ;16 = 如果设置了此位,则表条目外部依赖于外部参照
  105.         ;32 = 如果同时设置了此位和位 16,则表明已成功融入了外部依赖的外部参照
  106.         ;64 = 如果设置了此位,则表明在上次编辑图形时,图形中至少有一个图元参照了表条目。(此标志适用于 AutoCAD 命令。大多数读取 DXF 文件的程序都可以忽略它,并且无需由写入 DXF 文件的程序对其进行设置)
  107.         (or colour (setq colour 7))
  108.         (or xianxin (setq xianxin "Continuous"))
  109.         (entmakex
  110.                 (list
  111.                         '(0 . "LAYER")
  112.                         '(100 . "AcDbSymbolTableRecord")
  113.                         '(100 . "AcDbLayerTableRecord")
  114.                         (cons 2  name)
  115.                         (cons 70 n70)
  116.                         (cons 62  colour)
  117.                         (cons 6  xianxin)
  118.                 ))
  119. )


  120. (defun c:tcgg ()
  121.   (setvar "clayer" "0")
  122.   (vlax-for lyr  (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object)))
  123.     (if  (zerop (vlax-get lyr 'Plottable))
  124.       (vla-put-LayerOn lyr :vlax-false)
  125.     )
  126.   )
  127. )      


  128. (defun hbys(o / i n j)(while (< (1+ (setq i (if (not i) -1 (1+ i)))) (length o))(while (= j (setq j (nth (setq i (1+ i)) o))))(setq n (append n (list j))))(cons (car o) n))
  129. (defun c:tt ()
  130.   (princ "请选择复核区域~~")
  131.   (setq lst (list))
  132.   (setq jh_tc (list))
  133.   (setq ss (ssget (list (cons 0 "INSERT"))))
  134.   (setq n 0)
  135.   (while (< n (sslength ss))
  136.     (setq tc_w (cdr (assoc 8 (entget (ssname ss n)))))
  137.     (setq wz_bj (cdr (assoc 10 (entget (ssname ss n)))))
  138.     (setq bj_dy (cdr(assoc 290 (entget (tblobjname "LAYER" tc_w)))))
  139.     (if(= bj_dy 0)
  140.     (progn
  141.     (vlax-for obj
  142.               (vla-item        (vla-get-blocks
  143.                           (vla-get-ActiveDocument (vlax-get-acad-object))
  144.                         )
  145.                         (cdr (assoc 2 (entget (ssname ss n))))
  146.               )
  147.       (setq color   (vla-get-color obj)
  148.             layer   (vla-get-layer obj)
  149.             objname (vla-get-objectname obj)
  150.       )
  151.       (princ "\n对象名称 = ")
  152.       (princ objname)
  153.       (princ "\n对象图层 = ")
  154.       (princ layer)
  155.       (princ "\n对象颜色 = ")
  156.       (princ color)
  157.       ;;添加你的操作代码
  158.       ;;...
  159.      (setq jh_tc (append (list layer) jh_tc))

  160.     )(setq num 0)
  161.     (while(< num (length jh_tc))
  162.     (setq bj (cdr(assoc 290 (entget (tblobjname "LAYER" (nth num jh_tc))))))  
  163.     (if        (= bj 1)
  164.       (progn(setq lst (append (list (cdr (assoc 2 (entget (ssname ss n))))) lst))
  165.       (command "line" (list 0 0 0) wz_bj ""))
  166.     )(setq num (+ 1 num)))))
  167.     (setq n (+ n 1))
  168.   )
  169.   (princ)
  170.   (setq lst (hbys lst))
  171.   (setq nn (length lst))
  172.   (setq wztext "是否打印")
  173.   (setq n 0)
  174.   (while (< n (- nn 1))
  175.    (setq wztext (strcat (itoa n) "." (nth n lst) ">>>" wztext))
  176.    (setq n (+ 1 n))
  177.   )
  178.   (alert (strcat  "请注意以下图块块名\n" wztext))
  179. )



点评

如果为国标图框A2至A0及加长图框,直接用窗宽比判断即可哈  发表于 昨天 10:58
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 前天 20:46 | 显示全部楼层
这种做法意义不大吧?如果一个块分别在可打印图层和不可打印图层插入,那么就没有注意的意义。

最简单的直接把不打印图层冻结,可见即可得的可视化检索核查不比只知道个块名来注意快得多。
回复 支持 2 反对 0

使用道具 举报

发表于 前天 17:46 | 显示全部楼层
好的 收藏了
回复 支持 反对

使用道具 举报

发表于 前天 21:20 | 显示全部楼层
谢谢分享,下载收藏!!!!
回复 支持 反对

使用道具 举报

发表于 昨天 00:24 | 显示全部楼层
谢谢分享,下载收藏
回复 支持 反对

使用道具 举报

发表于 昨天 13:12 | 显示全部楼层
kozmosovia 发表于 2025-9-1 20:46
这种做法意义不大吧?如果一个块分别在可打印图层和不可打印图层插入,那么就没有注意的意义。

最简单的 ...

印前检查,很好的功能啊!
如果不小心放错了层,检测到了及时修改到位。
回复 支持 反对

使用道具 举报

发表于 昨天 17:30 | 显示全部楼层
;选中全图不打印对象,由73大佬指导
(defun C:bdy(/ la lay)
  (setq lay"")
  (while(setq la(cdr(assoc 2(tblnext"layer"(not la)))))
    (or(=(cdr(assoc 290(entget(TBLOBJNAME"layer"la))))1)
       (setq lay(strcat la","lay)))
        )
  (sssetfirst nil(ssget"X"(list(cons 8 lay))))
(princ "\n所有不打印图层的图元已高亮显示。注:不遍历块参照里面的图元,")
(princ)
)
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-9-3 07:33 , Processed in 0.187621 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表