| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Name der Parent-Baugruppe (1136 mal gelesen)
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 16. Sep. 2010 09:30 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich möchte gerne für jeden Bauteil (ipt) den Verbaupfad angeben. Dazu hab ich mir eine Macro geschrieben die durch alle Dateien Läuft und wenn es eine IPT ist dann wird ein zusätzlicher Block ausgeführt. in diesem Block möchte ich einen Code drinnen haben welcher Folgendes im Debug fenster Schreibt: Dateiname - Baugruppenname - baugruppenname - ........ - Dateiname zB.: Zusammenbau.iam - Rahmen.iam - Tür.iam - Blockierung.iam - Zylinder.ipt Ich habs mit "oRefDoc.Parent" versucht aber ich bekomme anstatt einen Baugruppennamen eine Zahl, welche für viele Dateien gleich ist, obwohl sie in unterschiedlichen Baugruppen child sind. kann mir bitte jemand weiterhelfen? Danke im voraus Grüße Alcom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Doc Snyder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13115 Registriert: 02.04.2004 PDSU-2013-SP1.1 W7pro64-SP1 F-Secure-Int.-Sec.2012 Dell-M4600 2,13GHz 8GB Quadro2000M 15,4"1920x1080/24"1920x1200 MS-IntelliMouse-Optical SpacePilotClassic
|
erstellt am: 16. Sep. 2010 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für Alcom
Moin! Völlig falscher Ansatz! Die Komponenten einer Baugruppe sind nicht deren "Child", zumal eine Komponente in verschiedenen Baugruppen eingefügt sein kann, und das ist ja auch der Sinn von Komponenten. Die Komponenten können und müsssen überhaupt nicht wissen, wo sie verwendet werden. Eine solche Information gehört in Komponentdateien prinzipiell nicht hinein. ------------------ Roland www.Das-Entwicklungsbuero.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 16. Sep. 2010 12:29 <-- editieren / zitieren --> Unities abgeben:
Hallo! Danke für die Info! Mein Ziel ist es eine Liste aller Komponenten mit den Verbaupfad zu haben und diese dann in Excel zu exportieren. Wenn eine Datei öfters verbaut ist, dann ist sie halt öfters in der Liste vorhanden. Kannst Du mir da bitte weiterhelfen? zumindest einen richtigen Ansatz? ist in der IAM gespeichert welche Dateien darin enthalten sind? Danke... Grüße Alcom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 16. Sep. 2010 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für Alcom
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 16. Sep. 2010 15:05 <-- editieren / zitieren --> Unities abgeben:
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 17. Sep. 2010 08:44 <-- editieren / zitieren --> Unities abgeben:
ok, jetzt hab ich folgende macro und das Ergebnis ist so fast was ich haben möchte! nun möchte ich aber dei Einträge gruppieren. Das heist, wenn in einer Baugruppe ein teil öfters vorkommt dann sollte 2X stehen (in der dritten spalte) und das Bauteil nur ein mal aufgelistet. In php wäre es einfach da man variablen nicht deklarieren muss, aber in VB hab ich keine Ahnung wie man so was erstellen kann... ein konkretes Beispiel: jetzt: 123.ipt -> baugruppe1.iam 123.ipt -> baugruppe1.iam 123.ipt -> baugruppe2.iam 456.ipt -> baugruppe2.iam
später: 123.ipt -> baugruppe1.iam (2X) 123.ipt -> baugruppe2.iam (1X) 456.ipt -> baugruppe2.iam (1X) Grüße
Alcom hier ist meine Makro:
Code:
Public Sub verbauinfo() ' Get the active assembly. Dim oAsmDoc As AssemblyDocument Set oAsmDoc = ThisApplication.ActiveDocument Dim group As String Dim oXL As Excel.Application Dim oWB As Excel.Workbook Dim oWS As Excel.WorkSheet Dim looper As Integer looper = 3 Set moFileLocations = ThisApplication.FileLocations sCurrentProject = moFileLocations.FileLocationsFile ' Get all of the referenced documents. Dim oRefDocs As DocumentsEnumerator Set oRefDocs = oAsmDoc.AllReferencedDocuments Set oXL = New Excel.Application Set oWB = oXL.Workbooks.Add(XlWBATemplate.xlWBATWorksheet) Set oWS = oWB.Worksheets(1) oWS.Range("A1").Value = "Bauteil" oWS.Range("B1").Value = "Verbaut in..." ' Iterate through the list of documents. Dim oRefDoc As Document Path = Mid(sCurrentProject, 1, InStrRev(sCurrentProject, "\")) For Each oRefDoc In oRefDocs Dim filename As String filename = oRefDoc.DisplayName Dim strlenght As Integer strlenght = Len(filename) filename = Left(filename, strlenght - 4) Debug.Print oRefDoc.DisplayName & " " & oRefDoc.DocumentType If (oRefDoc.DocumentType = 12291) Then group = oRefDoc.DisplayName Else If (group <> "" And group <> " ") Then '------------WRITE IN EXCEL--------------------------------------------------------------------- oWS.Range("A" & looper).Value = oRefDoc.DisplayName oWS.Range("B" & looper).Value = group looper = looper + 1 '--------------------------------------------------------------------------------- Debug.Print oRefDoc.DisplayName & " ---> " & group End If End If Next oWB.SaveAs (Path & "Verbauinfo.xlsx") oXL.Quit End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 17. Sep. 2010 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für Alcom
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 17. Sep. 2010 09:14 <-- editieren / zitieren --> Unities abgeben:
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 17. Sep. 2010 11:02 <-- editieren / zitieren --> Unities abgeben:
|
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 17. Sep. 2010 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für Alcom
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 17. Sep. 2010 12:21 <-- editieren / zitieren --> Unities abgeben:
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 20. Sep. 2010 11:42 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 20. Sep. 2010 20:58 <-- editieren / zitieren --> Unities abgeben: Nur für Alcom
Hallo So, geht das.
Code: Private Sub ProcessOcc()Dim oCompDef As ComponentDefinition Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition For Each oCompOcc In oCompDef.Occurrences If oCompOcc.Suppressed = False Then ' Check if it's child occurrence (leaf node) If oCompOcc.SubOccurrences.Count = 0 Then 'Hier das rein, was du in der Ebene machen willst 'z.B. Namen im Direktfenster anzeigen Debug.Print oCompOcc.Definition.Document.FullDocumentName Else 'eine Ebene tiefer springen Call processAllSubOcc(oCompOcc) ' subassembly End If End If Next End Sub ' This function is called for processing sub assembly. It is called recursively ' to iterate through the entire assembly tree. Private Sub processAllSubOcc(ByVal oCompOcc As ComponentOccurrence) Dim oSubCompOcc As ComponentOccurrence For Each oSubCompOcc In oCompOcc.SubOccurrences If oSubCompOcc.Suppressed = False Then ' Check if it's child occurrence (leaf node) If oSubCompOcc.SubOccurrences.Count = 0 Then 'Hier das rein, was du in der Ebene machen willst 'z.B. Namen im Direktfenster anzeigen Debug.Print oSubCompOcc.Definition.Document.FullDocumentName Else 'eine Ebene tiefer springen Call processAllSubOcc(oSubCompOcc) End If End If Next End Sub
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 21. Sep. 2010 09:05 <-- editieren / zitieren --> Unities abgeben:
|
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 21. Sep. 2010 12:29 <-- editieren / zitieren --> Unities abgeben:
Ist es möglich zu wissen wieviele Ebenen er gerade Tief ist? oder zu wissen wann er wieder eine Ebene zurückspringt? Ansonsten weiß ich nicht wie die IAM heist in der ich gerade drinnen bin. Danke Igor 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: 21. Sep. 2010 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für Alcom
Hallo Natürlich geht das. Im Beispiel ist die Ebene deiner Hauptbaugruppe Ebene 0. Code: Private Sub ProcessOcc()Dim oCompDef As ComponentDefinition Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition Dim i As Integer i = 0 For Each oCompOcc In oCompDef.Occurrences If oCompOcc.Suppressed = False Then ' Check if it's child occurrence (leaf node) If oCompOcc.SubOccurrences.Count = 0 Then 'Hier das rein, was du in der Ebene machen willst 'z.B. Namen im Direktfenster anzeigen Debug.Print "Ebene: " & i & " --- " & oCompOcc.Definition.Document.FullDocumentName & " in " & oCompDef.Document.FullDocumentName Else 'eine Ebene tiefer springen i = i + 1 Call processAllSubOcc(oCompOcc, i) ' subassembly End If End If Next End Sub ' This function is called for processing sub assembly. It is called recursively ' to iterate through the entire assembly tree. Private Sub processAllSubOcc(ByVal oCompOcc As ComponentOccurrence, ByRef i As Integer) Dim oSubCompOcc As ComponentOccurrence For Each oSubCompOcc In oCompOcc.SubOccurrences If oSubCompOcc.Suppressed = False Then ' Check if it's child occurrence (leaf node) If oSubCompOcc.SubOccurrences.Count = 0 Then 'Hier das rein, was du in der Ebene machen willst 'z.B. Namen im Direktfenster anzeigen Debug.Print "Ebene: " & i & " --- " & oSubCompOcc.Definition.Document.FullDocumentName & " in " & oCompOcc.Definition.Document.FullDocumentName Else 'eine Ebene tiefer springen i = i + 1 Call processAllSubOcc(oSubCompOcc, i) End If End If Next i = i - 1 End Sub
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Alcom Mitglied
Beiträge: 191 Registriert: 07.05.2008 GPU: Nvidia 8800 GTS CPU: Intel Core 2 Duo E6850 @ 3.00 GHZ RAM: 3GB OS: WIN XP
|
erstellt am: 21. Sep. 2010 13:38 <-- editieren / zitieren --> Unities abgeben:
|