关于导入stp格式,并获取导入物件的对象和ID的问题

请教大神:我想将stp格式的文件导入到Rhino中,并进一步操作。
但是遇到2个问题:

  1. 如何自动应答Rhino命令行提示?
    **设定 STEP 导入选项 ( 组合曲面(J)=是

限制组合面数(L)=否 跳过不可见的(S)=是 显示损坏物件警告(H)=是 显示嵌套图块警告(O)=是 )**

我的代码是:
Rhino.RhinoApp.SendKeystrokes(" ", True) '此语句不起作用,无法向命令行发送正确的命令

  1. 如何获取刚刚导入的物件的对象和对象ID?以下是我的代码,未能按预期工作。
 ''' <summary>
    ''' 将stp格式的文件导入到Rhino
    ''' </summary>
    ''' <param name="directory"></param>文件目录

    Sub ImportFiles(directory As String)
        Dim iFolders() As String
        iFolders = System.IO.Directory.GetDirectories(directory)

        Dim iCount As Integer = iFolders.Length
        Dim i As Integer
        Dim iLayTable As Rhino.DocObjects.Tables.LayerTable
        iLayTable = Rhino.RhinoDoc.ActiveDoc.Layers
        Dim m As Integer = 0
        For i = 0 To iCount - 1
            Dim color As Drawing.Color = Drawing.Color.FromName("SlateBlue")
            Dim layerIndex As Integer
            layerIndex = iLayTable.Add(iFolders(i), color)
            iLayTable.SetCurrentLayerIndex(layerIndex, True) '将加入的图层设置为当前图层

            Dim iFiles() As String
            Try
                iFiles = System.IO.Directory.GetFiles(iFolders(i))
            Catch ex As Exception
                System.Windows.Forms.MessageBox.Show(ex.Message.ToString, "出错信息")
                Return
            End Try
            Dim j As Integer

            For j = 0 To iFiles.Length - 1
                Rhino.RhinoDoc.ActiveDoc.Import(iFiles(j))
                Rhino.RhinoApp.SetFocusToMainWindow()
                Rhino.RhinoApp.SendKeystrokes(" ", True) '此语句不起作用,无法向命令行发送正确的命令
                Debug.Print("ElementAt:" + Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(ObjectType.Brep).ElementAt(m).Name) '打印出来的结果总是“ElementAt:01”,期望值“ElementAt:01、ElementAt:02、ElementAt:03……”
                m = m + 1
                Debug.Print("LastOrDefault:" + Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(ObjectType.Brep).LastOrDefault().Name) '打印出来的结果总是“LastOrDefault:01”,期望值“LastOrDefault:01、LastOrDefault:02、LastOrDefault:03……”
                Debug.Print("Last:" + Rhino.RhinoDoc.ActiveDoc.Objects.GetObjectList(ObjectType.Brep).Last().Name) '打印出来的结果总是“Last:01”

                '我的目的是获取到刚刚导入到Rhino的对象,和ID,然后对它进行其它操作。
            Next
        Next
    End Sub
  1. 我用的测试文件在附件中
    test.rar (913.5 KB)

我也有批量导入的工作,虽然用的不是step,我是导入时候手动设置好,勾选上以后不再提示,导入时候似乎是正常工作的。

Read_options = Rhino.FileIO.FileReadOptions()
Read_options.BatchMode = True
Read_options.ImportMode = True
ReadFile = sc.doc.ReadFile(file_path, Read_options)

我用了你的方法,但是对于stp格式,似乎不行,命令行依然要求应答 :handshake:

终于解决这个问题了,程序在这一句就已经停下来了 Rhino.RhinoDoc.ActiveDoc.Import(iFiles(j))
所以后面的语句没有机会执行,解决办法就是把它放到后面,把空格符提前发送出去。虽然这样很奇怪,但是确实能解决问题。
Rhino.RhinoApp.SetFocusToMainWindow()
Rhino.RhinoApp.SendKeystrokes(" ", True) '提前向键盘发送空格
Rhino.RhinoDoc.ActiveDoc.Import(iFiles(j))