如何使用不同的 CommandFlags 值 运行 函数?

How do I run functions with different CommandFlags value?

我有两个 DLL 文件。我们称他们为:

  1. DoSomething01.dll
  2. DoSomething02.dll

我正在处理这两个 DLL 的用例由以下步骤描述:

  1. 在 AutoCAD 中打开 Drawing01.dwg 和 Drawing02.dwg。
  2. 在命令行中通过 NETLOAD 将 DoSomething01.dll 加载到 AutoCAD。
  3. 在命令行中通过 NETLOAD 将 DoSomething02.dll 加载到 AutoCAD。
  4. I 运行 来自 DoSomething01.dll 的函数来自 Drawing01.dwg 的命令行。
  5. I 运行 来自 DoSomething02.dll 的函数来自 Drawing02.dwg 的命令行。
  6. 单击绘图上的某些内容(作为 DoSomething02.dll 上函数的输入)。

我想做的是 运行 来自一个操作的两个 DLL 的功能——本质上是执行第 1 步。在一个新的 DLL 文件中调用 4 到 6 个函数。

我的新 DLL 文件中的代码如下:

Dim acDocDwg01 As Document
Dim acDocDwg02 As Document

<CommandMethod("DOITALL", CommandFlags.Session)>
Public Sub AllInOneFunction()
    Dim dosomething01 As New DoSomething01.clsMain
    Dim dosomething02 As New DoSomething02.clsMain

    Dim acDocMgr As DocumentCollection = Application.DocumentManager

    If isBothDrawingsOpened() Then
        ' Activate Drawing01 document
        acDocMgr.MdiActiveDocument = acDocDwg01
        dosomething01.createStuff()

        ' Activate Drawing02 document
        acDocMgr.MdiActiveDocument = acDocDwg02
        dosomething02.createMoreStuff()
    End If
End Sub

Private Function isBothDrawingsOpened() As Boolean
    Dim flag As Boolean

    'Collection of all opened documents
    Dim acadDocs As DocumentCollection = Application.DocumentManager
    Dim acDoc As Document
    Dim acCurDb As Database

    Dim d1, d2 As Boolean

    For Each acDoc In acadDocs
        acCurDb = acDoc.Database
        If acCurDb.Filename = "Drawing01" > 0 Then
            d1 = True
            acDocDwg01 = acDoc
        ElseIf acCurDb.Filename = "Drawing02" > 0 Then
            d2 = True
            acDocDwg02 = acDoc
        End If
        modLog.LogWrite(1, "Current Document: " & acDoc.Name)
    Next acDoc

    If (d1 And d2) = False Then
        MessageBox.Show("Please open both Drawing01.dwg and Drawing02.dwg before executing this function.")
        flag = False
    Else
        flag = True
    End If

    Return flag

End Function

问题是... 因为我需要在两个文档(绘图)之间切换,所以我需要使用CommandFlags.Session。但是步骤号中的功能。 6、使用CommandFlags.UsePickSet。我提供的代码只是运行s通过DoSomething02.dll功能上的代码,无需等待用户输入(点击)。

我从 AutoDesk documentation 那里读到:

You can specify the use of more than one flag by using the + operator in VB.NET and the | operator in C#.

<CommandMethod("CheckForPickfirstSelection", CommandFlags.UsePickSet + _
                                             CommandFlags.NoBlockEditor)> _
Public Sub CheckForPickfirstSelection()
 . . .
End Sub

我试过了,但没用。行为相同。

更新: 我尝试颠倒操作顺序:

    If isBothDrawingsOpened() Then
        ' Activate Drawing02 document
        acDocMgr.MdiActiveDocument = acDocDwg02
        dosomething02.createMoreStuff()

        ' Activate Drawing01 document
        acDocMgr.MdiActiveDocument = acDocDwg01
        dosomething01.createStuff()
    End If

它实际上是在等待我在继续之前点击绘图。该问题可能与文档激活(切换)有关。我实际上可以看到活动文档随着代码 运行s 的变化而变化,但是在切换之后,用户不能再交互中断(?)。或者我是否遗漏了如何激活或切换到文档的内容?

不确定,但也许您可以在将 acDocDwg01 设置为当前后强制将焦点放在绘图上。 喜欢:Autodesk.AutoCAD.ApplicationServices.Application.MainWindow.Focus();