明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1394|回复: 4

随便写的有关图层代码

[复制链接]
发表于 2004-12-7 09:20:00 | 显示全部楼层 |阅读模式
<BR>ublic g_LayerInfoArray() As LayerInfoObj


'-----------------------------------------------------------------------------


Type LayerInfoObj<BR>                         layerObj As AcadLayer<BR>                         layerName As String<BR>                         isOn As Boolean<BR>                         isLock As Boolean<BR>                         isFreeze As Boolean<BR>End Type


'----保存所有图层状态-------------------------------------------------------------------------


Public Sub GetLayerInfoArray()<BR>                         On Error GoTo ErrorHandler<BR>                         ReDim g_LayerInfoArray(0)<BR>                         <BR>                         Dim lay As AcadLayer<BR>                         Dim lays As AcadLayers<BR>                         Set lays = ThisDrawing.Layers<BR>                         <BR>                         Dim i As Integer<BR>                         <BR>                         For i = 0 To lays.count - 1<BR>                                                         Set lay = lays.Item(i)<BR>                                                         ReDim Preserve g_LayerInfoArray(UBound(g_LayerInfoArray) + 1)<BR>                                                         <BR>                                                         With g_LayerInfoArray(UBound(g_LayerInfoArray))<BR>                                                                                         Set .layerObj = lay<BR>                                                                                         .layerName = lay.name<BR>                                                                                         .isOn = lay.LayerOn<BR>                                                                                         .isLock = lay.Lock<BR>                                                                                         .isFreeze = lay.Freeze<BR>                                                         End With<BR>                         Next<BR>                         <BR>                         Exit Sub<BR>ErrorHandler:<BR>                         Debug.Print "Sub GetLayerInfoArray() occurs errors: " + Err.Description<BR>End Sub


'----恢复所有图层状态-----------------------------------------------------


Public Sub SetLayerInfoArray()<BR>                         On Error GoTo ErrorHandler<BR>                         <BR>                         Dim i As Integer<BR>                         Dim lay As AcadLayer<BR>                         <BR>                         For i = 1 To UBound(g_LayerInfoArray)<BR>                                                         Set lay = g_LayerInfoArray(i).layerObj<BR>                                                         If LayerExist(lay.name) Then<BR>                                                                                         With lay<BR>                                                                                                                         .LayerOn = g_LayerInfoArray(i).isOn<BR>                                                                                                                         .Lock = g_LayerInfoArray(i).isLock<BR>                                                                                                                         If IsCurrentLayer(lay.name) = False Then<BR>                                                                                                                                                         .Freeze = g_LayerInfoArray(i).isFreeze<BR>                                                                                                                         End If<BR>                                                                                         End With<BR>                                                         End If<BR>                         Next<BR>                         <BR>                         Exit Sub<BR>ErrorHandler:<BR>                         Debug.Print "Sub SetLayerInfoArray() occurs errors: " + Err.Description<BR>End Sub


Public Sub ClearLayerInfoArray()<BR>                         ReDim g_LayerInfoArray(0)<BR>End Sub


'-----------------------------------------------------------------------------<BR>'-----------------------------------------------------------------------------


Public Function LayerExist(ByVal layerName As String) As Boolean<BR>                         On Error GoTo ErrorHandler<BR>                         LayerExist = False<BR>                         <BR>                         Dim layerObj As AcadLayer<BR>                         Set layerObj = ThisDrawing.Layers.Item(layerName)<BR>                         <BR>                         LayerExist = True<BR>                         <BR>                         Exit Function<BR>ErrorHandler:<BR>End Function


Public Function IsCurrentLayer(ByVal layerName As String) As Boolean<BR>                         Dim sysVarName As String<BR>                         Dim varData As Variant<BR>                         <BR>                         sysVarName = "CLAYER"<BR>                         varData = ThisDrawing.GetVariable(sysVarName)<BR>                         <BR>                         If StrComp(UCase$(varData), UCase(layerName)) = 0 Then<BR>                                                         IsCurrentLayer = True<BR>                         Else<BR>                                                         IsCurrentLayer = False<BR>                         End If<BR>                         <BR>End Function


Public Sub CloseAllLayers()<BR>                         On Error GoTo ErrorHandler<BR>                         <BR>                         Dim layerObj As AcadLayer<BR>                         Dim layersObj As AcadLayers<BR>                         Set layersObj = ThisDrawing.Layers<BR>                         <BR>                         Dim i As Integer<BR>                         For i = 0 To layersObj.count - 1<BR>                                                         Set layerObj = layersObj.Item(i)<BR>                                                         layerObj.LayerOn = False<BR>                         Next<BR>                         <BR>                         Exit Sub<BR>ErrorHandler:<BR>End Sub


Public Sub OpenLayer(ByVal layerName As String, ByVal bOnOff As Boolean)<BR>                         On Error GoTo ErrorHandler<BR>                         If LayerExist(layerName) Then<BR>                                                         Dim layerObj As AcadLayer<BR>                                                         Set layerObj = ThisDrawing.Layers.Item(layName)<BR>                                                         layerObj.LayerOn = bOnOff<BR>                         End If<BR>                         <BR>                         Exit Sub<BR>ErrorHandler:<BR>End Sub


Public Sub LockLayer(ByVal layerName As String, ByVal bLock As Boolean)<BR>                         On Error GoTo ErrorHandler<BR>                         If LayerExist(layerName) Then<BR>                                                         Dim layerObj As AcadLayer<BR>                                                         Set layerObj = ThisDrawing.Layers.Item(layName)<BR>                                                         layerObj.Lock = bLock<BR>                         End If<BR>                         <BR>                         Exit Sub<BR>ErrorHandler:<BR>End Sub


Public Sub FreezeLayer(ByVal layerName As String, ByVal bFreeze As Boolean)<BR>                         On Error GoTo ErrorHandler<BR>                         If LayerExist(layerName) Then<BR>                                                         Dim layerObj As AcadLayer<BR>                                                         Set layerObj = ThisDrawing.Layers.Item(layName)<BR>                                                         layerObj.Lock = bFreeze<BR>                         End If<BR>                         <BR>                         Exit Sub<BR>ErrorHandler:<BR>End Sub


Public Sub SetClayer(ByVal layerName As String)<BR>                         If IsCurrentLayer(layerName) = False And LayerExist(layerName) Then<BR>                                                         Dim sysVarName As String<BR>                                                         Dim sysVarData As Variant<BR>                                                         <BR>                                                         sysVarName = "CLAYER"<BR>                                                         sysVarData = layerName<BR>                                                         ThisDrawing.SetVariable sysVarName, sysVarData<BR>                         End If<BR>End Sub<BR>
发表于 2004-12-7 19:22:00 | 显示全部楼层
干啥用的?
 楼主| 发表于 2004-12-7 22:38:00 | 显示全部楼层

回复

在处理数据前 保存和恢复 图层状态, 以及图层是否存在等等.
发表于 2004-12-8 21:51:00 | 显示全部楼层
保存和恢复图层状态,本身CAD已经提供了对象来处理,而且也可以通过程序控制:
LayerStateManager 保存和恢复使用图层属性管理器设置的图层。
 楼主| 发表于 2004-12-8 23:13:00 | 显示全部楼层

回复

谢谢mccad,知道了LayerStateManager
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 22:46 , Processed in 0.190259 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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