我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網(wǎng)站首頁 > CAD新聞

利用CAD事件禁止在某圖層中寫入圖元

時間:2010-12-31 09:00:53 來源:未知

我那個批量標(biāo)準(zhǔn)頁碼的小工具,是新建了個頁碼圖層,然后刷新頁碼(或者重新調(diào)整頁碼)的時候,會把頁碼圖層中的圖元都刪除,然后重新編排頁碼,當(dāng)時是為了偷個懶這樣寫的,但是我還把頁碼圖層設(shè)置為了當(dāng)前圖層,“一小撮不明真相”的同事于是在頁碼圖層中畫畫,然后再插入頁碼~~~~~~結(jié)果就是都被刪啦。罪過啊,

    于是想到了個方法就是:如果在當(dāng)前層(頁碼圖層)中寫入任何圖元,然后馬上刪除,看上去就像不能輸入一樣,哈哈。找了下幫助,看到兩個事件:EndCommand:完成命令之后立即觸發(fā)。BeginCommand:緊接著命令發(fā)出之后但在完成之前觸發(fā)。

    在命令前得到圖元總數(shù)目,再得到命令后的數(shù)目,就得到了最后這個命令寫入的圖元,然后把這些圖元刪掉就OK了。但是突然有了更好的想法,何必那么麻煩呢,我只要設(shè)置頁碼圖層不能設(shè)置為當(dāng)前圖層就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

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

但是在寫的過程中發(fā)現(xiàn)有好多問題。也不去弄了,(嘿嘿,有新方法了么),如上面你弄了個數(shù)組,原因是之前發(fā)現(xiàn)如用line命令畫了N條線后,我一開始的時候是ThisDrawing.ModelSpace.Count - 1來刪除最后一個圖元,但是循環(huán)一下后ThisDrawing.ModelSpace.Count - 1就變了,不是原來第2個圖元,方法可以用上面的,一次性設(shè)置好增加的圖元,然后刪除,或者也可以一直刪除最后一個圖元,循環(huán)次數(shù)就是增加的圖元個數(shù)(好像這個比較好。額)。還有就是運行erase命令的時候就不應(yīng)該用上面的Erase刪除圖元了,應(yīng)該把Erase的圖元恢復(fù)啊,還有就是畫line的時候如果畫了幾條然后中途按esc了,則沒有激發(fā)EndCommand==,哈哈,總之好像問題挺多了。哈哈,弄了個爛尾樓

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