乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 37|回复: 4

[编程交流] 检查锁定层。。

[复制链接]

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 17:31:06 | 显示全部楼层 |阅读模式
你好
 
我在我们的模板中内置了这段代码,如果任何维度已被文本编辑,它将标记(更改文本颜色)任何非动态维度。。
 
但是,如果任何维度位于锁定层上,例程就会崩溃。
 
在下面的代码中,我添加了几行我认为应该在那里的代码(红色),但似乎不起作用-在“”行标记无效标识符的错误
 
  1. Private Sub AcadDocument_BeginSave(ByVal FileName As String)
  2. Dim block As AcadBlock
  3. Dim ent As AcadEntity
  4. Dim DimEnt As AcadDimension
  5. Dim override As String
  6. Dim LayerX As AcadLayer
  7. For Each block In ThisDrawing.Blocks 'Loop through blocks for layouts..
  8.    If block.IsLayout Then 'Is the block a layout..
  9.        For Each ent In block 'Loop through objects in the layout..
  10.                If ent.ObjectName Like "AcDb*Dimension" Then
  11.                    Set DimEnt = ent
  12.                    [color=red]Set LayerX = DimEnt.Layer[/color]
  13.                    [color=red]If LayerX.Lock = False Then 'If layer is not locked..[/color]
  14.                    override = UCase$(DimEnt.TextOverride)
  15.                        If override = "" Then
  16.                            ' Not overridden, so normal dimtext colour should be "ByLayer"..
  17.                            DimEnt.TextColor = acByLayer
  18.                        ElseIf override Like "<>?*" Or override Like "?*<>" Or override Like "?*<>?*" Or override Like "?*\P<>?*" Or override Like "?*<>\P?*" Then
  19.                            ' Overridden but dynamic <>, so dimtext colour should be "ByLayer"..
  20.                            DimEnt.TextColor = acByLayer
  21.                        ElseIf IsNumeric(override) Then
  22.                            ' Overridden and NOT dynamic (dim value as text), so dimtext colour should be "Green"..
  23.                            DimEnt.TextColor = 80
  24.                        ElseIf IsLike(override, "# [A-Z]*,## [A-Z]*,### [A-Z]*,#### [A-Z]*") Then
  25.                            ' Overridden with text and numerical, so dimtext colour should be "Green"..
  26.                            DimEnt.TextColor = 80
  27.                        Else
  28.                            ' We failed to trap the override's characteristics so this is "Green"..
  29.                            DimEnt.TextColor = 80
  30.                        End If 'End if for TextOverride checking..
  31.                    End If
  32.                [color=red]Else 'If layer is locked..[/color]
  33. [color=red]                   MsgBox "One or more dimensions are on locked layers. These will be ignored..", vbInformation, ThisDrawing.Name[/color]
  34. [color=red]               End If 'Is Layer locked?[/color]
  35.        Next ent 'End ent FOR loop..
  36.    End If 'If block is Layout..
  37. Next block 'End main FOR loop..
  38. End Sub

 
有没有关于如何检查锁定层的想法?我只想忽略这一层上的任何东西真的。。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:56:58 | 显示全部楼层
实体Layer仅返回实体所在层的名称。而不是:
 
设置LayerX=尺寸。层
 
使用:
 
设置LayerX=此图形。层。项目(尺寸层)
回复

使用道具 举报

0

主题

132

帖子

198

银币

限制会员

铜币
-21
发表于 2022-7-6 18:08:07 | 显示全部楼层
这里有一个我经常跑的。。。
 
  1. Public Sub UnlockAllLayers()
  2. '------------------------------------------------------------------------------
  3. 'Cycle through layer collection, unlock any locked layer
  4. '------------------------------------------------------------------------------
  5. Dim acLyrs As AcadLayers
  6. Dim acLyr As AcadLayer
  7. '''''''''''''''''''''''''''''''''''''''
  8. On Error GoTo ErrHandler
  9. Set acLyrs = ThisDrawing.Layers
  10. For Each acLyr In acLyrs
  11.    acLyr.Lock = False
  12. Next acLyr
  13. Exit Sub
  14.            
  15. ErrHandler:
  16.    Debug.Print Err.Number, Err.description, " In UnlockAllLayers"
  17. End Sub
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 18:25:59 | 显示全部楼层
我喜欢先解锁所有层的想法,但这难道不需要更多的处理时间吗?还有,我该如何编写代码,使之前锁定的任何层在之后都会再次锁定?
回复

使用道具 举报

0

主题

132

帖子

198

银币

限制会员

铜币
-21
发表于 2022-7-6 18:40:42 | 显示全部楼层
嗯,你必须决定你想做什么。如果需要获取图层,请检查其状态,解锁,执行某些操作,将其返回到以前的状态,然后执行下一个操作。这相当直接。如果您想记住所有设置的位置,然后稍后将其返回到该状态,那么您可能会制作一个层名称及其状态的数组,做些什么,然后拉出该数组并将其返回到以前的状态。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 13:58 , Processed in 0.322706 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表