明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1374|回复: 4

[讨论] 看Gu_xl版主程序,请教一个问题,谢谢!

[复制链接]
发表于 2013-8-2 18:40:41 | 显示全部楼层 |阅读模式
带着崇敬的心情拜读了Gu_xl版主程序,无奈有点看不懂,其中有 "隐藏对象"和 "隐藏对象数据",
很冒昧地问一下,能不能做到只"隐藏对象数据" 而不"隐藏对象" 谢谢!


;;隐藏对象
(defun c:Objhide  (/ ss n data) (vl-load-com)
  (setq ss (ssget ":L"))
  (if ss
    (progn
      (repeat (setq n (sslength ss))
        (vla-put-Visible
          (setq        obj (vlax-ename->vla-object
                      (ssname ss (setq n (1- n)))))
          :vlax-false)
        (setq data (cons (vla-get-Handle obj) data))
        )
      (VLAX-LDATA-PUT
        "隐藏对象"
        "隐藏对象数据"
        (append (VLAX-LDATA-get "隐藏对象" "隐藏对象数据") Data))
      )
    )
  (princ)
  )

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-8-2 22:54:41 | 显示全部楼层
没看懂你的问题!
解释一下代码:
...
(VLAX-LDATA-PUT
        "隐藏对象" ;_ 词典名称
        "隐藏对象数据" ;_ 词典关键字
        (append (VLAX-LDATA-get "隐藏对象" "隐藏对象数据") Data)) ;_ 存储到词典中的 LISP 数据
      )
....
 楼主| 发表于 2013-8-3 04:08:42 | 显示全部楼层
本帖最后由 xhq1954425 于 2013-8-3 05:02 编辑
Gu_xl 发表于 2013-8-2 22:54
没看懂你的问题!
解释一下代码:
...

不好意思,是我表达的不好。
首先非常感谢你的回复!
我经常做用lisp操控的三维立体移动、旋转……的演示程序,对象多时,演示效果显得不流畅(动作缓慢),如果把不参与动作的对象隐藏,参与动作的对象将会很流畅,但是隐藏对象又不是我想要的,看到你的程序后我有一个想法;
就是能不能在不隐藏对象的前提下,将不参与动作的图元对象“数据”  “ 冻结或隐藏”,实现提高运行速度(动作流畅)的目的。
你给我留下的印象那是无所不能,如果有别的方法可用,烦请指点一二。谢谢!
发表于 2013-8-3 20:52:23 | 显示全部楼层
试了下g版的隐藏对象,挺好的,redraw不显出来,有没有把隐藏的显示出来啊?求g版程序链接
 楼主| 发表于 2013-8-4 00:14:33 | 显示全部楼层
;;隐藏对象
(defun c:Objhide  (/ ss n data) (vl-load-com)
  (setq ss (ssget ":L"))
  (if ss
    (progn
      (repeat (setq n (sslength ss))
        (vla-put-Visible
          (setq        obj (vlax-ename->vla-object
                      (ssname ss (setq n (1- n)))))
          :vlax-false)
        (setq data (cons (vla-get-Handle obj) data))
        )
      (VLAX-LDATA-PUT
        "隐藏对象"
        "隐藏对象数据"
        (append (VLAX-LDATA-get "隐藏对象" "隐藏对象数据") Data))
      )
    )
  (princ)
  )
;;显示对象
(defun c:ObjShow  (/ data en LayerStaus layer layers)
  (vl-load-com)
  (setq data (VLAX-LDATA-get "隐藏对象" "隐藏对象数据"))
  (if data
    (progn
      (foreach hand  data
        (if (setq en (handent hand))
          (progn
            (setq layers (vla-get-layers
                           (vla-get-ActiveDocument
                             (vlax-get-acad-object))))
            (if        (or (= :vlax-true
                       (vla-get-Lock
                         (setq
                           layer (vla-item layers
                                           (vla-get-layer
                                             (setq obj
                                                    (vlax-ename->vla-object
                                                      en)))))))
                    (= :vlax-true (vla-get-Freeze layer))
                    )
              (progn
                (setq LayerStaus
                       (cons (list layer
                                   (vla-get-Lock layer)
                                   (vla-get-Freeze layer))
                             LayerStaus)) ;_ 保存图层状态
                (vla-put-lock layer :vlax-false) ;_ 解锁
                (vla-put-lock layer :vlax-false) ;_ 解冻
                )
              )

            (vla-put-Visible obj :vlax-true) ;_ 显示
            )
          )
        )
      (VLAX-LDATA-delete "隐藏对象" "隐藏对象数据")
      (if LayerStaus
        (foreach la  LayerStaus
          (vla-put-lock (car la) (cadr la))
          (vla-put-freeze (car la) (caddr la))
          )
        )
      )
    )
  (princ)
  )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 11:26 , Processed in 0.298428 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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