其实做这个最好是用VBA,当然,用LISP也是可以的,不过代码相对可参较长,我把我做的一个提供给大家做参考,当然,如果要在R14下用,可能还得安装VBA系统。 放到Thisdrawing的代码里面。 Option Explicit Dim Clay As String Private Sub AcadDocument_BeginCommand(ByVal CommandName As String) On Error Resume Next Dim tt As String Dim Tmply As String 'Debug.Print CommandName Select Case LCase(CommandName) Case "bhatch" Tmply = ThisDrawing.GetVariable("clayer") If LCase(Tmply) <> "han" Or Clay = "" Then 'ThisDrawing.SetVariable "clayer", Clay Clay = ThisDrawing.GetVariable("clayer") End If ThisDrawing.Layers.Add "han" ThisDrawing.SetVariable "clayer", "han" Case "dimlinear", "dimaligned", "dimordinate", "dimradius", "dimdiameter", "dimangular", "qdim", "dimbaseline", "dimcontinue" Clay = ThisDrawing.GetVariable("clayer") ThisDrawing.Layers.Add "dim" ThisDrawing.SetVariable "clayer", "dim" Case "text", "mtext" Clay = ThisDrawing.GetVariable("clayer") Select Case LCase(Clay) Case "vbtk", "mxbdata", "vbjsxn", "label" DoEvents Case Else ThisDrawing.Layers.Add "02c" ThisDrawing.SetVariable "clayer", "02c" End Select '唉,不好办,我的明细表,画图框都要写文字,而又不能放到02c。 Case Else Tmply = ThisDrawing.GetVariable("clayer") If LCase(Tmply) = "han" Then If Clay <> "" Then ThisDrawing.SetVariable "clayer", Clay Clay = "" End If ElseIf Tmply = "0" Then ThisDrawing.Layers.Add "01" ThisDrawing.SetVariable "clayer", "01" End If End Select End Sub Private Sub AcadDocument_EndCommand(ByVal CommandName As String) On Error Resume Next Select Case LCase(CommandName) Case "bhatch", "dimlinear", "dimaligned", "dimordinate", "dimradius", "dimdiameter", "dimangular", "qdim", "dimbaseline", "dimcontinue", "text", "mtext" ThisDrawing.SetVariable "clayer", Clay Clay = "" End Select End Sub
|