重命名 parts/assembly 的内部程序集

Rename parts/assembly's inside assembly

我制作了一个程序,可以将文件放入程序集中或打开该文件并重命名并将它们放入正确的文件夹中。我想对小型装配体做同样的事情,但我无法让它工作,因为我需要重命名零件并将其放在正确的文件夹中,然后再放置或打开它们。

我的代码是这样的;

Dim oDoc As AssemblyDocument
oDoc = _invApp.ActiveDocument
'Dim oDoc As String = "K:\Flenzen\BundNutPakking\DN10 19 - DIN11864-2.iam"
Dim acd As AssemblyComponentDefinition
acd = oDoc.ComponentDefinition

Dim oPath As String = "C:\Thomas de Vries\K20TEST\"

Dim refDocs As DocumentsEnumerator = oDoc.AllReferencedDocuments
Dim compCount As Integer = refDocs.Count
Dim refDoc As Document
For j = 1 To compCount
    refDoc = refDocs.Item(j)
    'If the component in assembly is part then save it to "Parts" folder
    If refDoc.DocumentType = DocumentTypeEnum.kPartDocumentObject Then
        refDoc.SaveAs(oPath & "02 - Onderdelen\" & j & ".ipt", False)
        'If the component in assembly is subassembly then save it to "Assembly" folder
    ElseIf refDoc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
        refDoc.SaveAs(oPath & "03 - Samenstellingen\" & j & ".iam", False)
    End If
Next

'Saving a copy of the assembly document
oDoc.SaveAs(oPath & "03 - Samenstellingen\Newassemname.iam", False)

这段代码的作用是: 1 您需要打开一个程序集(这不是我想要的)。 2 它检查程序集中有多少 Parts/assembly。 3 它给 parts/assembly 一个新名称并将它们放在 te 文件夹中。 4 主程序集被放置在一个文件夹中,并赋予了一个新名称。

我不想要的是这样的: 1 从“K:\Flenzen\BundNutPakking\DN10 19 - DIN11864-2.iam”中获取 parts/assembly。 2 重命名 parts/assembly 的 whitin 并将它们放在一个文件夹中。 3 重命名master assembly并将其放入正确的文件夹中。 (这一切都没有打开文件) 4 放置您在步骤 4 中指定的新位置的主组件或打开它。

我希望你们中有这方面经验的人可以帮助我! 非常感谢。

再见, 托马斯·德弗里斯

如果您想更改装配文件中文件的位置,最好的工具是 ApprenticeServerComponent。这是用于处理 iProperty、文件引用等的 COM 组件。请参阅 Inventor SDK 或以下链接以获取示例。

https://modthemachine.typepad.com/my_weblog/2010/03/iproperties-without-inventor-apprentice.html

https://adndevblog.typepad.com/manufacturing/2012/08/replace-the-file-reference-by-inventor-api.html

感谢您的回答,我今天早上终于开始工作了。

我就是这样做的;

1: 我打开了我要复制的程序集 2:将里面的零件保存到我不想要的新位置(所以我的所有连接都是正确的) 3:将我刚刚编辑的程序集保存到新位置 4:关闭组件 5:打开刚才保存的地方新建的程序集

这是我使用的代码:

           Dim oDoc As Document
            oDoc = _invApp.Documents.Open(oLocatie)


            Dim osDoc As AssemblyDocument
            osDoc = _invApp.ActiveDocument

            Dim acd As AssemblyComponentDefinition
            acd = osDoc.ComponentDefinition

            Dim refDocs As DocumentsEnumerator = osDoc.AllReferencedDocuments
            Dim compCount As Integer = refDocs.Count
            Dim refDoc As Document

            For Each refDoc In refDocs
                Dim subFilenaam1 As String = refDoc.FullFileName
                Dim subFilenaam As String = subFilenaam1.Substring(subFilenaam1.LastIndexOf("\") + 1)
                'For j = 1 To compCount
                Dim subsFilenaam As String
                subsFilenaam = Replace(subFilenaam, "KW", nName & "-" & Standardpartnummer)



                'refDoc = refDocs.Item(j)
                'If the component in assembly is part then save it to "Parts" folder
                If refDoc.DocumentType = DocumentTypeEnum.kPartDocumentObject Then
                    refDoc.SaveAs(nLocatie & nName & " - Onderdelen\" & subsFilenaam, False)
                    'If the component in assembly is subassembly then save it to "Assembly" folder
                ElseIf refDoc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then
                    refDoc.SaveAs(nLocatie & nName & "03 - Samenstellingen\" & subsFilenaam, False)
                End If
                'Next
            Next
            oDoc.SaveAs(nLocatie & nName & " - Samenstellingen\" & Filenaam, False)

            Call oDoc.Close()

            Dim oNewDoc As Inventor.Document
            oNewDoc = _invApp.Documents.Open(nLocatie & nName & " - Samenstellingen\" & Filenaam)

        ElseIf nFilesoort = "ipt" Then

            If My.Computer.FileSystem.FileExists(nLocatie & nFilenaam) Then
                MsgBox("Filebestaat al, er moet nog even die autonummering er in geplaats worden!")
                Exit Sub
            Else
                IO.File.Copy(oLocatie, nLocatie & nFilenaam)
            End If

            Dim oDoc As Document
            oDoc = _invApp.Documents.Open(nLocatie & nFilenaam)
        End If