| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Normteile erstellen (1218 mal gelesen)
|
lumb Mitglied Informatiker
Beiträge: 60 Registriert: 17.02.2011 Inventor2015
|
erstellt am: 11. Mrz. 2014 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich würde gerne in Inv2014 die Normteilbibliothek (IDCL) per VBA ansprechen und Normteile in eine IAM (in der der VBA Code ist) erstellen. Kann mir jemand sagen ob das möglich ist? Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 11. Mrz. 2014 18:52 <-- editieren / zitieren --> Unities abgeben: Nur für lumb
Hallo Ich poste mal das Beispiel aus der Inventorhilfe: Code: Public Sub PlaceFromContentCenter() Dim asmDoc As AssemblyDocument Set asmDoc = ThisApplication.Documents.Add(kAssemblyDocumentObject) Dim asmDef As AssemblyComponentDefinition Set asmDef = asmDoc.ComponentDefinition ' Get the node in the content browser based on the names of the nodes in the hierarchy. Dim hexHeadNode As ContentTreeViewNode Set hexHeadNode = ThisApplication.ContentCenter.TreeViewTopNode.ChildNodes.Item("Fasteners").ChildNodes.Item("Bolts").ChildNodes.Item("Hex Head") ' Find a specific family. In this case it's using the display name, but any family ' characteristic could be searched for. Dim family As ContentFamily Dim checkFamily As ContentFamily For Each checkFamily In hexHeadNode.Families If checkFamily.DisplayName = "DIN EN 24016" Then Set family = checkFamily Exit For End If Next Dim i As Integer If Not family Is Nothing Then ' Place one instance of each member. Dim offset As Double offset = 0 Dim row As ContentTableRow For Each row In family.TableRows ' Create the member (part file) from the table. Dim failureReason As MemberManagerErrorsEnum Dim failureMessage As String Dim memberFilename As String memberFilename = family.CreateMember(row, failureReason, failureMessage, kRefreshOutOfDateParts) ' Place the part into the assembly. Dim transMatrix As matrix Set transMatrix = ThisApplication.TransientGeometry.CreateMatrix transMatrix.Cell(2, 4) = offset Dim Occ As ComponentOccurrence Set Occ = asmDef.Occurrences.Add(memberFilename, transMatrix) ' Compute the position for the next placement based on the size of the part just placed. Dim minY As Double Dim maxY As Double minY = Occ.RangeBox.minPoint.y maxY = Occ.RangeBox.maxPoint.y offset = offset + ((maxY - minY) * 1.1) Next End If End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lumb Mitglied Informatiker
Beiträge: 60 Registriert: 17.02.2011 Inventor2015
|
erstellt am: 14. Mrz. 2014 12:22 <-- editieren / zitieren --> Unities abgeben:
Hallo, Danke, das klappt soweit schonmal. Nur muss ich den "Node" kennen, also den "Ordner" der die Familien enthält. Dann gehe ich alle Familientabellen jeder Familie durch und gut. Was ich aber nicht hinbekommen ist, das jeder "Node" drankommt, da ich ja die entgültige Tiefe nicht kenne. Habe da was von Rekursion gelesen aber leider verstehe ich das nicht. Kann mir da nochmal jemand helfen? Danke
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 16. Mrz. 2014 07:50 <-- editieren / zitieren --> Unities abgeben: Nur für lumb
Moin Ein einfaches Beispiel einer möglichen Rekursion. Wenn du im VBA-Editor das Direktfenster mit einblendest (Menü Ansicht), dann siehst du die Namen jedes Nodes. Code: Public Sub PlaceFromContentCenter() Dim oTopNode As ContentTreeViewNode Set oTopNode = ThisApplication.ContentCenter.TreeViewTopNode Dim oNode As ContentTreeViewNode For Each oNode In oTopNode.ChildNodes If oNode.ChildNodes.Count > 0 Then Call SubNode(oNode) End If Debug.Print oNode.DisplayName NextEnd Sub Public Sub SubNode(oNode As ContentTreeViewNode) Dim oSubNode As ContentTreeViewNode For Each oSubNode In oNode.ChildNodes If oSubNode.ChildNodes.Count > 0 Then Call SubNode(oSubNode) End If Debug.Print oSubNode.DisplayName Next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lumb Mitglied Informatiker
Beiträge: 60 Registriert: 17.02.2011 Inventor2015
|
erstellt am: 17. Mrz. 2014 10:37 <-- editieren / zitieren --> Unities abgeben:
|