masterlong 发表于 2015-1-12 18:11:21

DCL对话框下实时控制图层状态,有什么好的方法

本帖最后由 masterlong 于 2015-1-12 18:12 编辑

commnd方式
(command "layer" "off" layname "")
对话框中不能用


entmod方式
(setq layst (entget (tblobjname "layer" layname)))
(setq co (assoc 62 layst))
(entmod (subst (cons 62 (* -1 (cdr co))) co layst))
要结束对话框才能起效


vla方式
(setq *doc* (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq *layers* (vla-get-Layers *doc*))
(vlax-for x *layers*
(if (= (strcase (vla-get-name x)) (strcase layname))
(vla-put-layeron x :vlax-false)
)
)
(vla-regen *doc* 1)
可以实时显示
但是必须要有最后一句
regen对于稍大一点的dwg那是慢死人


有没有更好的解决办法
就像“图层转换器”那样直接、快速???

鱼与熊掌 发表于 2015-1-12 18:29:18

用while.~~~~~~~~~~~~~~~~~~~~~~~~~~~~
然后读取控件的值.

masterlong 发表于 2015-1-12 18:47:03

大哥回帖以前先看帖好吗?

masterlong 发表于 2015-1-12 21:58:26

Z版啊
我的标题写的很清楚啊
是在DCL“实时控制图层状态”
退出DCL再进去的方式
真的不是我要的

masterlong 发表于 2015-1-13 10:36:44

图层转换器里不是啊
设置里选中显示图层内容

masterlong 发表于 2015-1-13 10:58:31

图层管理器对话框是居中显示
它本身是否即时显示意义不大

对话框激活时即时显示
正如首贴所述我能做到
只是速度太慢了

退出dcl再打开
影响操作的流畅性
这是最后一招



鱼与熊掌 发表于 2015-1-13 17:36:13

非模态DCL 能做到>?? 可以去搜索.看看.

masterlong 发表于 2015-1-13 18:19:59

是的
我的程序的odcl版已经完成
现在在制作dcl版

masterlong 发表于 2015-1-13 19:00:55

ODCL毕竟不是CAD本身自带的
所以有些东西很难处理
当然也可能是我水平不够

一个可停靠窗口(control bar)
与CAD自带的特性对话框比较
你在命令行执行一个命令copy
任何时候你的鼠标都可以进入特性窗
做它允许的事情例如改变当前层
鼠标离开特性窗时copy可以继续

但是odcl就没办法做到这一点
必须强行中止当前命令
而当前程序除非做了非常完善的出错处理
被强行中断的最坏结果
可能是程序都不能用了

之所以要做DCL版的
就是为了它的系统独占性

masterlong 发表于 2015-1-13 19:02:08

话说
还没试过odcl的模式对话框呢
待俺试试
页: [1] 2
查看完整版本: DCL对话框下实时控制图层状态,有什么好的方法