您的位置:网站首页 > CAD新闻

利用CAD事件禁止在某图层中写入图元

时间:2010-12-31 09:00:53 来源:未知

我那个批量标准页码的小工具,是新建了个页码图层,然后刷新页码(或者重新调整页码)的时候,会把页码图层中的图元都删除,然后重新编排页码,当时是为了偷个懒这样写的,但是我还把页码图层设置为了当前图层,“一小撮不明真相”的同事于是在页码图层中画画,然后再插入页码~~~~~~结果就是都被删啦。罪过啊,

    于是想到了个方法就是:如果在当前层(页码图层)中写入任何图元,然后马上删除,看上去就像不能输入一样,哈哈。找了下帮助,看到两个事件:EndCommand:完成命令之后立即触发。BeginCommand:紧接着命令发出之后但在完成之前触发。

    在命令前得到图元总数目,再得到命令后的数目,就得到了最后这个命令写入的图元,然后把这些图元删掉就OK了。但是突然有了更好的想法,何必那么麻烦呢,我只要设置页码图层不能设置为当前图层就OK了。哈哈。但是代码写下了就贴着,留着以后看看

Dim startN As Integer
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
startN = ThisDrawing.ModelSpace.Count - 1
End Sub

Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
Dim layer As AcadLayer, EndN As Integer, i As Integer
Set layer = ThisDrawing.Layers("TK")
EndN = ThisDrawing.ModelSpace.Count - 1
If ThisDrawing.ActiveLayer Is layer Then
    ReDim InsertBlock(EndN - startN - 1) As Object
    For i = 0 To EndN - startN - 1
        Set InsertBlock(i) = ThisDrawing.ModelSpace.Item(EndN - i)
    Next
    '删除
    For i = 0 To EndN - startN - 1
        InsertBlock(i).Erase
    Next
End If
End Sub

---------------

但是在写的过程中发现有好多问题。也不去弄了,(嘿嘿,有新方法了么),如上面你弄了个数组,原因是之前发现如用line命令画了N条线后,我一开始的时候是ThisDrawing.ModelSpace.Count - 1来删除最后一个图元,但是循环一下后ThisDrawing.ModelSpace.Count - 1就变了,不是原来第2个图元,方法可以用上面的,一次性设置好增加的图元,然后删除,或者也可以一直删除最后一个图元,循环次数就是增加的图元个数(好像这个比较好。额)。还有就是运行erase命令的时候就不应该用上面的Erase删除图元了,应该把Erase的图元恢复啊,还有就是画line的时候如果画了几条然后中途按esc了,则没有激发EndCommand==,哈哈,总之好像问题挺多了。哈哈,弄了个烂尾楼

-----------------------------