Bryco 发表于 2007-4-1 00:35:03

基思,
I'对不起,我没有'我不理解你解释的解决方法。我将给出我所做的代码。希望你能修改代码,这让我更好地理解
Option Explicit
Dim CurUCS As AcadUCS
Dim CurLayer As AcadLayer
Dim UCSs As Object
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
If CommandName = "XREF" Or CommandName = "XATTACH" Then
    Set CurUCS = ThisDrawing.ActiveUCS
    Set CurLayer = ThisDrawing.ActiveLayer
    Call ShowWCS
    ThisDrawing.Layers("0").Freeze = False
    ThisDrawing.Layers("0").LayerOn = True
    ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
End If
End Sub
Sub ShowWCS()
'
'   Display WCS
'
    Dim wcs As Object
    Dim dorigin(0 To 2) As Double
    Dim dxAxisPnt(0 To 2) As Double
    Dim dyAxisPnt(0 To 2) As Double
      
    dorigin(0) = 0#
    dorigin(1) = 0#
    dorigin(2) = 0#
   
    dxAxisPnt(0) = 1#
    dxAxisPnt(1) = 0#
    dxAxisPnt(2) = 0#
   
    dyAxisPnt(0) = 0#
    dyAxisPnt(1) = 1#
    dyAxisPnt(2) = 0#
   
    Set wcs = ThisDrawing.UserCoordinateSystems.Add(dorigin, dxAxisPnt, dyAxisPnt, "WORLD")
'    Display WCS.
    ThisDrawing.ActiveUCS = wcs
   
End Sub
Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
If CommandName = "XREF" Or CommandName = "XATTACH" Then
    ThisDrawing.ActiveUCS = CurUCS
    ThisDrawing.ActiveLayer = CurLayer
    ThisDrawing.UserCoordinateSystems.Item("World").Delete
End If
End Sub 如果我没有错,我知道如果取消外部参照对话框,执行控件永远不会进入EndCommand事件。请帮忙
谢谢

Bryco 发表于 2007-4-1 01:38:47

dim bActive;作为布尔值,在startcommand中设置为true,在endcommand中设置为false,如果在启动startcomman时为true,则endcommand从未激活(发生转义)。现在重置图层

Keith™ 发表于 2007-4-2 01:51:08

Bryco,
我按照你在上一篇帖子中说的做了,但没有't工作。在第三步中,您写道,如果StartCommand中为true,则EndCommand从未激活。所以我的问题是,如果EndCommand从未激活,那么布尔值为true,这是在startcommand中设置的。因此所需的代码段将不会运行
谢谢

Bryco 发表于 2007-4-2 22:48:47

使用Line命令时观察图层管理器,escape yadayadaOption Explicit
Private Curlayer As AcadLayer
Private bActive As Boolean
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
    If bActive Then
      ThisDrawing.ActiveLayer = Curlayer
    End If
   
    If CommandName = "LINE" Then
      Set Curlayer = ThisDrawing.ActiveLayer
      ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
      bActive = True
    End If
End Sub
Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
    If CommandName = "LINE" Then
      bActive = False
      ThisDrawing.ActiveLayer = Curlayer
    End If
End Sub

Bryco 发表于 2007-4-12 01:18:29

不没有#039;t工作。
页: 1 [2]
查看完整版本: 取消定义/重定义外部参照