明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: print1985

[源码] 图层控制-源码,VL函数,非command,非修改组码

    [复制链接]
 楼主| 发表于 2012-6-10 19:53 | 显示全部楼层
本帖最后由 print1985 于 2012-6-10 20:10 编辑

先试试 暂时没加颜色隐藏
  1. ;[隐藏物体]
  2. (defun c:yc (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay lay-tn)
  3. (setq AcadObject (vlax-get-acad-object)
  4.               AcadDocument (vla-get-ActiveDocument AcadObject)
  5.               LayersObj (vla-get-layers AcadDocument)
  6. );end setq
  7. (princ "\n请选择需要隐藏的物体" )
  8. (if (setq ss (ssget))
  9.                (progn
  10.                       (setq n (sslength ss))
  11.                       (setq i (- n 1))
  12.                       (repeat n
  13.                              (setq ent (ssname ss i)
  14.                                     ob (vlax-ename->vla-object ent)
  15.                                     lay (vla-get-layer ob)
  16.                                     vlay (vla-item LayersObj lay)
  17.                             );end setq
  18.                              (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true);如果图层锁定
  19.                                     (vla-put-lock vlay :vlax-false);先解锁图层
  20.                             );end if
  21.                              (vla-put-visible ob :vlax-false)
  22.                              (if (= lay-tn :vlax-true)
  23.                                     (vla-put-lock vlay :vlax-true);再锁定图层,恢复图层状态
  24.                             );end if
  25.                              (setq i (1- i))
  26.                      );end repeat
  27.                       (princ "\n已隐藏选择物体" )
  28. ));end if
  29. (princ)
  30. );end defun
  31. ;[恢复隐藏]
  32. (defun c:xs (/ AcadObject AcadDocument LayersObj ss n i ent ob lay vlay lay-tn)
  33. (setq AcadObject (vlax-get-acad-object)
  34.               AcadDocument (vla-get-ActiveDocument AcadObject)
  35.               LayersObj (vla-get-layers AcadDocument)
  36. );end setq
  37. (if (setq ss (ssget "x" '((60 . 1))))
  38.                (progn
  39.                       (setq n (sslength ss))
  40.                       (setq i (- n 1))
  41.                       (repeat n
  42.                              (setq ent (ssname ss i)
  43.                                     ob (vlax-ename->vla-object ent)
  44.                                     lay (vla-get-layer ob)
  45.                                     vlay (vla-item LayersObj lay)
  46.                             );end setq
  47.                              (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true)
  48.                                     (vla-put-lock vlay :vlax-false)
  49.                             );end if
  50.                              (vla-put-visible ob :vlax-true)
  51.                              (if (= lay-tn :vlax-true)
  52.                                     (vla-put-lock vlay :vlax-true)
  53.                             );end if
  54.                              (setq i (1- i))
  55.                      );end repeat
  56.                       (princ "\n已显示隐藏物体" )
  57.               );end progn
  58.                (princ "\n本图无隐藏物体" )
  59. );end if
  60. ;(vla-regen AcadDocument AcAllViewPorts) 图形较大有时需要重生成才显示 可把这句加上
  61. (princ)
  62. );end defun
  63. ;[隐藏物体(反)]
  64. (defun c:yf (/ AcadObject AcadDocument LayersObj ssObj ss ob n i ent ob ss2 ss3 lay vlay lay-tn)
  65. (setq AcadObject (vlax-get-acad-object)
  66.               AcadDocument (vla-get-ActiveDocument AcadObject)
  67.               LayersObj (vla-get-layers AcadDocument)
  68. );end setq
  69. (princ "\n请选择不需要隐藏的物体" )
  70. (if (setq ss (ssget))
  71.                (progn
  72.                       (setq ss2 (ssget "x" ))
  73.                       (setq n (sslength ss))
  74.                       (setq i (- n 1))
  75.                       (repeat n
  76.                              (setq ent (ssname ss i))
  77.                              (if (setq ss3 (ssdel ent ss2))
  78.                                     (setq ss2 ss3)
  79.                             );end if
  80.                              (setq i (1- i))
  81.                      );end repeat
  82.                       (sssetfirst nil ss2)
  83.                       (setq ssObj (vla-get-ActiveSelectionSet AcadDocument))
  84.                       (vlax-for ob ssObj
  85.                              (setq lay (vla-get-layer ob)
  86.                                     vlay (vla-item LayersObj lay)
  87.                             );end setq
  88.                              (if (= (setq lay-tn (vla-get-lock vlay)) :vlax-true)
  89.                                     (vla-put-lock vlay :vlax-false)
  90.                             );end if
  91.                              (vla-put-visible ob :vlax-false)
  92.                              (if (= lay-tn :vlax-true)
  93.                                     (vla-put-lock vlay :vlax-true)
  94.                             );end if
  95.                      );end vlax-for
  96.                       (princ "\n已隐藏非选择物体" )
  97. ));end if
  98. (sssetfirst nil nil)
  99. (princ)
  100. );end defun
  101. (princ "\n[隐藏物体-yc]/[恢复隐藏-xs]/[隐藏物体(反)-yf]" )


发表于 2012-6-10 20:30 | 显示全部楼层
简短的
(defun ObjHidden ( / ssobj ent) ;隐藏对象物体
  (if (setq ssobj (ssget))
      (progn
        (setq ssobj (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
        (vlax-for ent ssobj (vla-put-Visible ent :vlax-false))
      )
  )
  (princ)
)
(defun RHidden ( / ssobj ent) ;恢复隐藏物体
  (if (and (ssget "X" (list (cons 60 1) (cons 410 (getvar "CTAB"))))
           (setq ssobj (ssget "X" (list (cons 410 (getvar "CTAB")))))
      )
      (progn
         (setq ssobj (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
         (vlax-for ent ssobj (vla-put-Visible ent :vlax-true))
         (prompt "\n显示所有物件!")
      )
      (prompt "\n无隐藏物件!")
  )
  (princ)
)
 楼主| 发表于 2012-6-10 20:42 | 显示全部楼层
gzxl 发表于 2012-6-10 20:30
简短的
(defun ObjHidden ( / ssobj ent) ;隐藏对象物体
  (if (setq ssobj (ssget))

你把图层锁定了试试,简短是要付出代价的
代码原理基本是相同的,我的代码增加了对锁定图层的处理
 楼主| 发表于 2012-6-10 20:50 | 显示全部楼层
请大家测试下,是否对某些特殊情况会出错,如果没问题了再加到主程序里面
发表于 2012-6-10 21:05 | 显示全部楼层
print1985 发表于 2012-6-10 20:42
你把图层锁定了试试,简短是要付出代价的
代码原理基本是相同的,我的代码增加了对锁定图层的处理

不然怎么叫简短
发表于 2012-6-10 21:14 | 显示全部楼层
学习一下,谢谢楼主。
发表于 2012-6-10 22:20 | 显示全部楼层
关于隐藏物体的代码论坛已经比较多了,但有个缺点就是对隐藏物体的显示都是全显。。。
如果可以预览所隐藏的物体是不是更简便易用,更加人性化呢?希望楼主能先搞出来
发表于 2012-6-11 08:45 | 显示全部楼层
好。支持源码.
 楼主| 发表于 2012-6-11 09:22 | 显示全部楼层
yjr111 发表于 2012-6-10 22:20
关于隐藏物体的代码论坛已经比较多了,但有个缺点就是对隐藏物体的显示都是全显。。。
如果可以预览所隐藏 ...

预览?高级货啊,又是第一次听说,太孤陋寡闻了
详细说说呢,要达到什么样的预览效果,预览之后又需要些神马操作呢?
发表于 2012-6-11 09:24 | 显示全部楼层
print1985 发表于 2012-6-10 19:53
先试试 暂时没加颜色隐藏

在2008下,出现错误,

命令: YC ; 错误: no function definition: VLAX-GET-ACAD-OBJECT



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

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

GMT+8, 2024-3-29 14:49 , Processed in 0.203318 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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