| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| ZWCAD bietet leistungsfähigere Designs für SAIC |
Autor
|
Thema: iLogic - Zugriff auf Bauteilteilparameter in tieferen Baugruppen (42 mal gelesen)
|
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 09. Dez. 2013 15:04 <-- editieren / zitieren --> Unities abgeben:
Hallo, kann man per iLogic Baugruppen in unterschiedlichen tiefen bearbeiten? Bsp: - Baugruppe 1 (iLogic Regel) ---Schraube M10x20 ---Unterbaugruppe 1 -----Unterbaugruppe 1.1 --------Bauteil 1.1 (Würfel 100x100x100mm) Nun soll in einem Rutsch, beim ausführen einer Regel in der Baugruppe 1, folgendes abgearbeitet werden:
- Würfel auf 150x150x150 ändern - Schraube M10x20 durch M10x25 ersetzen ´Wäre das möglich? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 10. Dez. 2013 09:27 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Hallo, ja, das wäre durchaus möglich. Allerdings musst du in die Unterbaugruppe 1 und in Unterbaugruppe1.1 auch iLogic Regeln einbauen, auf die du in Baugruppe 1 zugreifen kannst. Die Schraube ist ja sowieso in der Hauptbaugruppe vorhanden, da solltest du sowieso keine Probleme haben. Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 10. Dez. 2013 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
es kommt natürlich auch darauf an, wie du deine Regeln aufbaust. Unter Umständen ist es auch möglich, die Teile direkt zu manipulieren, indem du die jeweilige untergeordnete Ebene in Bearbeitung setzt und dann dort wieder die jeweilig untergeordnete in Bearbeitung und so weiter, bis du dort bist, wo du hin möchtest. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 11. Dez. 2013 08:10 <-- editieren / zitieren --> Unities abgeben:
Danke. Ich würde gerne die ganzen Baugruppe mit einem einzigen Forumular von ganz oben steuern, wenn möglich. Also, ich verstehe dich so: - Baugruppen und Bauteile in Ebene 2 oder tiefer kann ich nicht direkt ansprechen - Aber man kann Regeln in tieferern Ebene ausführen Richtig? Heisst, wenn ich so eine Baugruppe habe:
- BG 1 -- BG 1.1 --- BG 1.1.1 ---- BG 1.1.1.1 ---- Würfel.prt Und ich den Würfel bearbeiten will, zb Parameter bearbeiten, dann braucht jede BG eine eigene Regel, die eine tiefere auslöst? Meine damit: - Regel in BG 1 löst Regel in BG 1.1 aus - Regel in BG 1.1 löst Regel in BG 1.1.1 aus - Regel in BG 1.1.1 löst Regel in BG 1.1.1.1 aus - Regel in BG 1.1.1.1 ändert Bauteilparameter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 11. Dez. 2013 08:15 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Guten Morgen, das kommt sehr darauf an, wie du deine Regeln programmierst. Hast du zufällig ein Beispiel? Wenn du es mit einfachen iLogic-Snippets programmierst, dann ist es anders, als wenn du vb-Code nutzt. Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 11. Dez. 2013 09:11 <-- editieren / zitieren --> Unities abgeben:
noch habe ich nichts programmiert, wollte erstmal wissen, was überhaupt möglich ist. wäre natürlich interessant zu wissen, wie man sowas ggf mit vb löst, also nur eine regel in der BG 1, und dann ein bauteil in BG 1.1.1.1 zu ändern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 11. Dez. 2013 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Dann müsstest du in deiner Regel die Baugruppen durchlaufen, die richtige Unterbaugruppe suchen, die "im Edit öffnen" oder rekursiv durchlaufen, dann in dieser Unterbaugruppe wieder die richtige Baugruppe suchen und editieren oder durchlaufen, in dieser wieder das gleiche Prozedere. Solange, bis du ganz unten angekommen bist. Dann kannst du den Parameter in deinem Bauteil bearbeiten. Geht alles. Ist bei einer definierten Tiefe von Ebenen auch nicht so schwierig. Wenn du nicht weißt, wie viele Ebenen du hast, oder immer unterschiedlich viele Ebenen vorkommen, bis du bei deinem Bauteil angekommen bist, dann musst du in jede Ebene eine Abfrage einbauen, ob es schon vorhanden ist, wenn nicht, in die nächsttiefere Ebene springen und dort suchen. Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2428 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 11. Dez. 2013 15:49 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Hallo Sollen alle Schrauben dieses Typs ersetzt werden oder nur in einer bestimmten Unterbaugruppe? Im ersten Fall wäre ein Code: ComponentOccurrence.Replace( FileName As String, ReplaceAll As Boolean )
wohl zielführender. Die Parameteränderung des Würfels würde ich mal über
Code: ComponentOccurrence.Definition() As ComponentDefinition
angehen. Damit kommst du aus der Hauptbaugruppe direkt an die ComponentDefinition des Würfels und eine Ebene darunter müßten sich die Parameter befinden. Zum Schluß wird wohl ein
Code: Document.Update
notwendig sein, um die Änderungen sichtbar zu machen. Soweit die Theorie. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 11. Dez. 2013 15:59 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Aus der Hauptbaugruppe heraus, kann man direkt auf ein Bauteil, das mehrere Baugruppenebenen drunter liegt zugreifen? Hätte ich das gewusst, dann hätte ich mir ne ganze Menge Arbeit sparen können
Gruß Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 11. Dez. 2013 22:51 <-- editieren / zitieren --> Unities abgeben:
|
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 08:44 <-- editieren / zitieren --> Unities abgeben:
Habe da mal was gefunden, aber irgendwie will das nicht laufen... Code:
Sub Main Dim oAsmDoc As AssemblyDocument oAsmDoc = ThisApplication.ActiveDocument Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences, 1) End Sub Private Sub TraverseAssembly(Occurrences As ComponentOccurrences, Level As Integer) Dim oOcc As ComponentOccurrence For Each oOcc In Occurrences Dim oBrowserNode As String oBrowserNode = oOcc.Name Try ' Push the required iProperties down to the occurrences iProperties.Value(oBrowserNode, "Custom", "Laenge") = 300 iProperties.Value(oBrowserNode, "Custom", "Hoehe") = 300 iProperties.Value(oBrowserNode, "Custom", "Breite") = 300 Catch End Try If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then Call TraverseAssembly(oOcc.SubOccurrences, Level + 1) End If Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
|
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 09:04 <-- editieren / zitieren --> Unities abgeben:
Mein Fehler, Code funktioniert, aber bisher nur für benutzerdefinierte iProperties. Schreibe ich es so, passiert nichts. Keine Fehler, keine Änderung der Parameter. Code:
Sub Main Dim oAsmDoc As AssemblyDocument oAsmDoc = ThisApplication.ActiveDocument Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences, 1) End Sub Private Sub TraverseAssembly(Occurrences As ComponentOccurrences, Level As Integer) Dim oOcc As ComponentOccurrence For Each oOcc In Occurrences Dim oBrowserNode As String oBrowserNode = oOcc.Name Try Parameter("Laenge") = 300 Parameter("Hoehe") = 300 Parameter("Breite") = 300 Catch End Try If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then Call TraverseAssembly(oOcc.SubOccurrences, Level + 1) End If Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
versuch es mal so: Code: Sub Main Dim oAsmDoc As AssemblyDocument oAsmDoc = ThisApplication.ActiveDocument Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences, 1) End Sub Private Sub TraverseAssembly(Occurrences As ComponentOccurrences, Level As Integer) Dim oOcc As ComponentOccurrence If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then Call TraverseAssembly(oOcc.SubOccurrences, Level + 1) End If For Each oOcc In Occurrences Dim oBrowserNode As String oBrowserNode = oOcc.Name Try Parameter("Laenge") = 300 Parameter("Hoehe") = 300 Parameter("Breite") = 300 Catch End Try ) Next End Sub
[Diese Nachricht wurde von Chris 31 am 12. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 09:15 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
|
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 09:43 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
|
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 10:06 <-- editieren / zitieren --> Unities abgeben:
Hiermit klappt es Code:
Dim openDoc As Document openDoc = ThisDoc.Document 'Look at all of the files referenced in the open document Dim docFile As Document For Each docFile In openDoc.AllReferencedDocuments 'format file name Dim FNamePos As Long FNamePos = InStrRev(docFile.FullFileName, "\", -1) Dim docFName As String docFName = Right(docFile.FullFileName, Len(docFile.FullFileName) - FNamePos) Parameter.Quiet = True Parameter(docFName, "Hoehe") = 300 InventorVb.DocumentUpdate() Next
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 11:23 <-- editieren / zitieren --> Unities abgeben:
Nochmal eine Frage: Ich bekomme das ganze leider nicht in ein Formular gepackt. Eine eine Idee wie das gehen könnte? Das einzige was klappt, wenn ich in die Baugruppe, wo der iLogic Code liegt, noch zusätliche Benutzerparameter schreibe: Formular_Laenge Formular_Breite Formular_Hoehe und in den iLogic Code dann diesen Teil: Code:
iLogicForm.Show("Wuerfel")Dim openDoc As Document openDoc = ThisDoc.Document Dim docFile As Document For Each docFile In openDoc.AllReferencedDocuments Dim FNamePos As Long FNamePos = InStrRev(docFile.FullFileName, "\", -1) Dim docFName As String docFName = Right(docFile.FullFileName, Len(docFile.FullFileName) - FNamePos) Parameter.Quiet = True Parameter(docFName, "Hoehe") = Parameter("Formular_Laenge") Parameter(docFName, "Laenge") = Parameter("Formular_Breite") Parameter(docFName, "Breite") = Parameter("Formular_Hoehe") InventorVb.DocumentUpdate() Next
Klappt aber nur Halb, muss die Regel 2x aurufen, damit die Paramter übergeben werden.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
gib mal ein Code: RuleParametersOutput()
vor dem
Code: InventorVb.DocumentUpdate()
ein. Sollte dann eigentlich beim einmaligen Aufruf durchlaufen. Gruß Chris Edit: Das mit dem Formular.... Ist so wie du es gemacht hast, mit den Parametern, sicher der einfachste Weg. [Diese Nachricht wurde von Chris 31 am 12. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 13:55 <-- editieren / zitieren --> Unities abgeben:
Geht leider nicht, das Modell wird erst aktualisiert, wenn ich die Regel ein 2tes mal starte. Denke beim aufrufen der Regel arbeitet die iLogic so: - Formular startet - Code wird abgearbeitet - ändern der Parameter - OK Button - Parameter werden in die Benutzerparameter geschrieben Neustart der Regel: - Formular startet - Code wird abgearbeitet - Neue Benutzerparameter werden in die Parameter des Würfels übergeben - ändern der Parameter - OK Button - Parameter werden in die Benutzerparameter geschrieben usw usw Eigentlich dürte der Code erst ausgeführt wenn - ein neuer Wert ins Formular eingetragen wird oder - das Formular geschlossen wird (mit OK Button) [Diese Nachricht wurde von iUser am 12. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Wie startest du denn die Regel? Was ist denn, wenn du den Aufruf des Formulars raus nimmst, die Regel auf automatisch ausführen stellst und das Formular von Hand aufrufst, die neuen Werte eingibst und dann auf OK klickst?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 14:14 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Chris 31: Wie startest du denn die Regel?
zb Rechte Maustaste: Regel ausführen Soll, wenns klappt später aber per Ereignisauslöser starten (nach Laden der Baugruppe) Zitat: Original erstellt von Chris 31: Was ist denn, wenn du den Aufruf des Formulars raus nimmst, die Regel auf automatisch ausführen stellst und das Formular von Hand aufrufst, die neuen Werte eingibst und dann auf OK klickst?
Habs mal so probiert: Aufruf des Formulars rausgenommen und in eine neue Regel geschrieben. Diese Regel wird beim starten ausgelöst, so das ich gleich das Formular habe. Dann diverse Ereignisauslöser probiert, die das Script starten sollen, wenn - beliebige Modellparameteränderung klappt leider auch nicht.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 14:26 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Zitat: Original erstellt von iUser:
Habs mal so probiert: Aufruf des Formulars rausgenommen und in eine neue Regel geschrieben. Diese Regel wird beim starten ausgelöst, so das ich gleich das Formular habe. Dann diverse Ereignisauslöser probiert, die das Script starten sollen, wenn - beliebige Modellparameteränderung klappt leider auch nicht....
Was meinst du denn mit diverse Ereignisauslöser?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 12. Dez. 2013 15:32 <-- editieren / zitieren --> Unities abgeben:
na, ich hatte verschiedene probiert. Habs nun so gelöst: OK-Button aus dem Formular rausgeschmissen und Regel direkt ins Formular eingebunden, dann bekommt man einen weiteren "Knopf", der die Regel auslöst. Im Grunde funktioniert nun alles, obwohl schick ist es nicht. Was mir nicht so gefällt, das man in der obersten Baugruppe, in welcher das Formular liegt, sich noch Pseudo-Parameter erstellen muss. Ist wohl so. Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 12. Dez. 2013 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für iUser
Ja, geht leider nicht anders, weil du ja Parameter brauchst, in die du deine Werte schreibst, bevor du sie in deiner Regel übergibst. Warum du die Regel manuell aufrufen musst, damit sie durchläuft verstehe ich zwar immer noch nicht, aber wenn es nicht anders geht, dann ist das wohl leider so. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iUser Mitglied
Beiträge: 38 Registriert: 26.11.2013 Inv2k13
|
erstellt am: 13. Dez. 2013 07:45 <-- editieren / zitieren --> Unities abgeben:
Bin froh, erstmal eine Lösung zu haben. Wenn jemand noch ne andere Idee hat, nur her damit Edit: Würde gerne noch das Script um 2 Regeln erweitern, vielleicht kann mir da einer noch helfen: 1. Der Würfel soll Fasen haben, die sollen ebenfalls in der obersten Baugruppe aus oder eingeblendet werden. Normal wäre wohl
Code: Feature.IsActive("Fase") = True Feature.IsActive("Fase") = False
richtig, aber der Würfel sitzt ja leider etwas tiefer 2. Weiterhin hätte ich gerne eine Regel, die mir die oberste Baugruppe speichert. Dabei sollen a) Alle Regeln und Formulare gelöscht werden b) Alle ausgeblendeten Features in den unteren Bauteilen (Fasen, Bohrungen etc) löschen c) Alle benutzerparamter in der obersten Baugruppe löschen Vielleicht hat der eine oder andere ne Idee dazu [Diese Nachricht wurde von iUser am 13. Dez. 2013 editiert.] [Diese Nachricht wurde von iUser am 13. Dez. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |