把上面的函数完善了, 翔版测试下, 这样解冻尚未考虑视口的图层替代、视口裁减,仅作为 Lisp 应用探讨
 - ;;Author: eachy From www.xdcad.net 2013.10.8
- (defun Vp:GetFrzLayer (VpObj / xt xd lyrlst)
- (vla-getxdata VpObj "ACAD" 'xt 'xd)
- (mapcar '(lambda (a b)
- (if (= a 1003)
- (setq lyrlst (cons (variant-value y) lyrlst))
- )
- )
- (safearray-value xt)
- (safearray-value xd)
- )
- lyrlst
- )
- (defun Vp:FrzLayer (VpObj lyrlst / xt xd flyr)
- (vla-getxdata VpObj "ACAD" 'xt 'xd)
- (setq flyr (mapcar '(lambda (lyr)
- (list (vlax-make-variant
- 1003
- vlax-vbinteger
- )
- (vlax-make-variant lyr vlax-vbString)
- )
- )
- lyrlst
- )
- xt (reverse (safearray-value xt))
- xd (reverse (safearray-value xd))
- )
- (vla-setxdata
- VpObj
- "ACAD"
- (vlax-make-variant
- (reverse (append (list (car xt) (cadr xt))
- (mapcar 'car flyr)
- (list (cdddr xt))
- )
- )
- )
- (vlax-make-variant
- (reverse (append (list (car xd)
- (cadr xd)
- (mapcar 'cadr flyr)
- (list (cdddr xd))
- )
- )
- )
- )
- )
- )
- (defun Vp:ThwLayer (VpObj lyrlst / properties pSp nVp oldFrzlyr)
- (setq properties
- '("Center" "CustomScale" "Direction"
- "DisplayLocked" "EntityTransparency"
- "Height" "GridOn" "Layer"
- "LensLength" "Linetype" "LinetypeScale"
- "Lineweight" "Material" "PlotStyleName"
- "SnapBasePoint" "SnapOn" "SnapRotationAngle"
- "StandardScale" "StandardScale2" "Target"
- "TrueColor" "TwistAngle" "UCSIconAtOrigin"
- "UCSIconOn" "Visible" "VisualStyle"
- "Width"
- )
- )
- (mapcar '(lambda (x)
- (set (read x) (vlax-get-property oldvp x))
- )
- properties
- )
- (setq pSp (vla-get-PaperSpace
- (vla-get-ActiveDocument
- (vlax-get-acad-object)
- )
- )
- nVp (vla-AddPViewport
- pSp
- center
- width
- height
- )
- )
- (setq oldFrzlyr (Vp:GetFrzlayer VpObj))
- (mapcar '(lambda (x) (vl-remove x oldFrzlyr)) lyrlst)
- (mapcar '(lambda (x)
- (vl-catch-all-apply
- 'vlax-put-property
- (list nVp x (eval (read x)))
- )
- )
- properties
- )
- (if oldFrzlyr
- (Vp:Frzlayer nVp oldFrzlyr)
- )
- (vla-display nVp :vlax-false)
- (vla-display nVp :vlax-true)
- ;;nVp
- )
|