[源码] 获取指定视口中冻结的图层列表
本帖最后由 zjh2785 于 2017-10-22 18:06 编辑函数单独的用法:(LA:GetFreezeLayerForView(vlax-ename->vla-object (car(entsel))))
返回值: "layer1,layer2",如果没有冻结的图层返回 ""
返回值可直接用于CAD自带的命令恢复图层状态,
具体用法:
(defun C:TT (/ ssent laList i)
(if (= (getvar "tilemode") 1)
(setvar "tilemode" 0)
)
(if (/= (getvar "cvport") 1)
(command "_PSPACE")
)
(if (setq ssent (ssget '((0 . "VIEWPORT"))))
(progn
(setq i 0)
(repeat (sslength ssent)
(if (/= ""
(setq laList (LA:GetFreezeLayerForView
(vlax-ename->vla-object (ssname ssent i))
)
)
)
(command "_.vplayer" "T" laList "S" (ssname ssent i) "" "")
)
(setq i (1+ i))
)
)
)
(princ)
)
(defun LA:GetFreezeLayerForView(VpObj / xt xd lyrlst a b)
(vla-getxdata VpObj "ACAD" 'xt 'xd)
(mapcar 'set
'(xt xd)
(list (safearray-value xt) (safearray-value xd))
)
(setq lyrlst "")
(mapcar '(lambda (a b)
(if (= a 1003)
(setq lyrlst (strcat lyrlst (strcase (variant-value b))","))
)
)
xt
xd
)
lyrlst
)
;;;按功能在指定视口中冻结特定图层
(defun C:DDT (/ DjKeyN DjKey VP)
(princ "\n*** 选择视口前,请保持视口中有效图层开启 ***")
(if (= (getvar "tilemode") 0)
(progn
(initget 7 "1 2 3 4")
(setq Key (getkword "\n需要设置的视口功能: 1-平面布置图 / 2-地面铺装平面图 / 3-天花布置平面图 / 4-立面图"))
(cond
((= Key "1") (setq DjKey "*0-TF-*,*0-DM-*,*FC-Hatch*")) ;_平面布置图
((= Key "2") (setq DjKey "*0-TF-*,*0-PM-固定家具*,*DOOR-NAME*,*PUB_TEXT*,*DOOR*,*LVTRY*,*DOOR-NAME*,*PUB_HATCH*,*PUB_SYMB*,*AREA*,*PUB_SYMB*,*WINDOW_GROUND*,*DOTE*")) ;_地面铺装平面图
((= Key "3") (setq DjKey "*0-DM-*,*0-PM-固定家具*,*DOOR-NAME*,*PUB_TEXT*,*stair*,*DOOR*,*LVTRY*,*DOOR-NAME*,*PUB_HATCH*,*PUB_SYMB*,*AREA*,*WINDOW_GROUND*,*DOTE*,*FC-Hatch*")) ;_天花布置平面图
((= Key "4") (setq DjKey "*填充*,*HATCH*,*ELEV*,*IDEN*,*LEAD*,*SYMB*")) ;_立面图
)
(if (setq VP (entsel "\n选择要冻结图层的视口:"))
(FreezLayInVPCmd (car VP) DjKey)
)
)
(princ "\n该命令仅允许在布局空间有效运行!")
)
(princ)
)
;;;支持通配符
(defun FreezLayInVPCmd (Ven Lst / ENT)
(if (and (= (getvar "tilemode") 0) (= (getvar "cvport") 1)) ;_判断鼠标是否在布局空间
(progn
(setq ENT (cdr (assoc 69 (entget Ven))))
(command "_.MSPACE") ;_切换到模型空间
(setvar "cvport" ENT)
(command "_.vplayer" "F" LST "" "") ;_在模型空间中操作,冻结
(command "_PSPACE") ;_切换到布局空间
)
(princ "\n*** 该命令仅允许在布局空间有效运行,请将鼠标切换到布局空间 ***")
)
)
flowerson 发表于 2019-10-9 14:42
用LWPOLYLINE来做视口的怎么办?
我也遇到这个问题了,好多是LWPOLYLINE做的视口,没法解决呢 貌似只能解冻哦 只能解冻哦 用LWPOLYLINE来做视口的怎么办? Thanks for sharing ^^ 不错,这是个指定视口中解冻全部图层的程序。 非常不错!赞一个! 学习学习 感谢分享 请问大神、怎么获取到视口内所有未冻结图层的集合啊
页:
[1]
2