| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Winkelabhängigkeit zwischen Y-Achsen setzen (1123 mal gelesen)
|
st.w Mitglied
Beiträge: 59 Registriert: 08.11.2011
|
erstellt am: 20. Mrz. 2014 09:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Mitoptimierer, ich habe bei meiner Arbeit (IV2008) sehr oft den Fall, dass ich an einer Zusammenstellung arbeite und das nächste Bauteil für diese Zusammenstellung erstelle. Dann schließe ich (per Makro) das Bauteil und füge eine bestimmte Anzahl in die darunterliegende iam ein. Das klappt gut, siehe Code. Was ich als nächsten Schritt mir noch wünsche ist, dass automatisch eine Winkelabhängigkeit zwischen der Y-Achse des Bauteils und der Y-Achse des Ursprungs der Assembly gesetzt wird. Die setze ich momentan alle händisch. Und es sind viele... Bitte gebt mir Tipps für ein Code-Gerüst, ich blicke nicht durch wie es gehen kann - Danke! Sonnige Grüße, Stefan Code:
Sub SchließenUndXfachEinfügen() Dim oSourceDoc As Document Dim dLänge As Double, dMaxLänge As Double Dim sName As String Dim sSepFilename As String Dim lZähler As Long, lAnz As Long Dim oAsmCompDef As AssemblyComponentDefinition Dim oTG As TransientGeometry Dim oMatrix As Matrix Dim oOcc As ComponentOccurrence Set oSourceDoc = ThisApplication.ActiveDocument If oSourceDoc Is Nothing Then Exit Sub sSepFilename = oSourceDoc.FullFileName ' aktuellen Namen merken oSourceDoc.Save oSourceDoc.Close dMaxLänge = 10 Set oSourceDoc = ThisApplication.ActiveDocument If Not (oSourceDoc Is Nothing) Then If oSourceDoc.DocumentType = kAssemblyDocumentObject Then sName = Mid(oSourceDoc.FullFileName, InStrRev(oSourceDoc.FullFileName, "\") + 1) sName = Left(sName, Len(sName) - 4) lAnz = 0 lAnz = CLng(Val(InputBox("Anzahl" & Chr(10) & Chr(10) & "ESC = Abbruch", "In " & sName & " platzieren", "1"))) Set oAsmCompDef = oSourceDoc.ComponentDefinition Set oTG = ThisApplication.TransientGeometry Set oMatrix = oTG.CreateMatrix For lZähler = 1 To lAnz dLänge = 1.1 * ((lZähler - 1) - CLng(lAnz / 2)) * dMaxLänge Call oMatrix.SetTranslation(oTG.CreateVector(-1.1 * dMaxLänge - 1 - dLänge * 0.05, dLänge * 2, 0)) Set oOcc = oAsmCompDef.Occurrences.Add(sSepFilename, oMatrix) Next End If End If End Sub
------------------ IV2008 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 20. Mrz. 2014 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für st.w
Hallo st.w, vielleicht hilft Dir folgender Code-Ausschnitt etwas. Ist allerdings mit Arbeitsebenen... Muss Du eben entsprechend auf Arbeitsachsen abändern... ----------------------------------------------- ' Funktion erstellt eine Winkelabhängigkeit mit Präfix "DOF_"
' MB-Ing. Private Sub CreateAngleCons(oAssyDoc As AssemblyDocument, oOcc As ComponentOccurrence, oAssyWorkPlane As WorkPlane, oPartWorkPlane As WorkPlane) On Error Resume Next Dim oPartWorkPlaneProxy As WorkPlaneProxy Call oOcc.CreateGeometryProxy(oPartWorkPlane, oPartWorkPlaneProxy) Dim oAngleConst As AngleConstraint Set oAngleConst = oAssyDoc.ComponentDefinition.Constraints.AddAngleConstraint(oAssyWorkPlane, oPartWorkPlaneProxy, 0) oAngleConst.Name = "DOF_" & oAngleConst.Name End Sub ------------------------------------------------------- Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
st.w Mitglied
Beiträge: 59 Registriert: 08.11.2011
|
erstellt am: 20. Mrz. 2014 13:57 <-- editieren / zitieren --> Unities abgeben:
Hi MB-ing, ich habe versucht deinen Code-Schnipsel auf Achsen zu trimmen - keine Chance (für mich) Was ich allerdings verstanden habe, die ersten zwei Variablen des Dokuments und der Occurance liegen ja direkt schon nach dem Einfügen vor.... - Aber ich weiß nicht, wie ich die Achsen in die AddAngleConstraint einsetzen soll. Daher bitte ich Euch um weitere Unterstützung - Vielen Danke! Gruß Stefan ------------------ IV2008 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 20. Mrz. 2014 16:43 <-- editieren / zitieren --> Unities abgeben: Nur für st.w
|
st.w Mitglied
Beiträge: 59 Registriert: 08.11.2011
|
erstellt am: 20. Mrz. 2014 17:08 <-- editieren / zitieren --> Unities abgeben:
Ja, ja, so habe ich mir das auch gedacht, aber Deine Sub erfordert die Übergabe der Variablen... Und da weiß ich eben nicht, wo ich die Achsen aus der iam und der occ herkriege. Hoffe, ich habe mich geeignet ausgedrückt... - Danke für Hilfe, Stefan ------------------ IV2008 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 21. Mrz. 2014 07:33 <-- editieren / zitieren --> Unities abgeben: Nur für st.w
Moin Moin, ich versteh nicht ganz wieso Du zwischen zwei Achsen eine Winkelabhängigkeit benötigst? Für eine Winkelabhängigkeit sind doch Ebenen sinnvoller!? Du benötigst eine Methode in der Du die entsprechenden Achsen mit der "Pick"-Funktion auswählst (Entsprechenden Filter setzen, um Auswahlmöglichkeiten zu begrenzen..) oder falls die Achsen bereits bekannt sind eben diese übergeben... Set oOcc = ThisApplication.CommandManager.Pick(kAssemblyOccurrenceFilter, "Einfügeteil auswählen") Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
st.w Mitglied
Beiträge: 59 Registriert: 08.11.2011
|
erstellt am: 21. Mrz. 2014 10:13 <-- editieren / zitieren --> Unities abgeben:
Auch moin, moin, nun, wir stellen auch Zylinder her und die Bauteile sind bis auf Schrauben entlang der X-Achse ausgerichtet. Wir modellieren auch seit eh und je auf der XY-Ebene und haben bei den Bauteilen nur die X- und die Y-Achse eingeschaltet. Eingeschaltete Ebenen stören (uns) nur bei der Ansicht. Wir fügen die Bauteile mit 'Einfügen' über Kreiskonturen zusammen. Also liegt die X-Achse schon übereinander. Die Y-Achse bestimmt die Ausrichtung, also die Drehung der Bauteile. Flansche sind z.B. manchmal gedreht. Also habe ich nur 2 Einfügeabhängigkeiten, die die Position und die Ausrichtung bestimmen. Wir finden, einfacher geht es für unseren Anwendungsfall nicht. Da die Drehung jedoch nur manchmal benötigt wird, möchte ich die gerne beim Nutzen des Einfüge-Makros direkt zu 0° setzen. Denn die Assembly ist klar und die just eingefügte oOcc ist klar, also möchte ich zwischen der Y-Achse des Ursprungs der Assembly und der Y-Achse des just eingefügten Bauteils die Abhängigkeit setzen. Wie schon geschrieben: Ich weiß nicht, wie ich die Parameter der von Dir vorgeschlagenen Funktion AddAngleConstraint(???) setzen soll. Code:
Set oAsmCompDef = oSourceDoc.ComponentDefinition Set oTG = ThisApplication.TransientGeometry ... For lZähler = 1 To lAnz ... Set oOcc = oAsmCompDef.Occurrences.Add(sSepFilename, oMatrix) '??? oAssyDoc.ComponentDefinition.Constraints.AddAngleConstraint(???) ' Next
Danke für weitere Hilfe, Stefan ------------------ IV2008 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 21. Mrz. 2014 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für st.w
Hallo st.w, also willst Du im Endeffekt "Schrauben" bzw. schraubenähnliche Drehteile einfügen über Kreiskante auf Kreiskante und dann eine Winkelabhängigkeit vergeben? Wenn das der Fall ist, kannst Du denn Winkel über Ebenen vergeben... Oder ich verstehe Dich einfach falsch!? Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
st.w Mitglied
Beiträge: 59 Registriert: 08.11.2011
|
erstellt am: 21. Mrz. 2014 13:41 <-- editieren / zitieren --> Unities abgeben:
Hallo MB-ing. ja, das stimmt. Ich kann die XY-Ebenen oder die XZ-Ebenen nehmen. (Ich bin halt an die Y-Achsen gewöhnt, kann mich aber auch umgewöhnen ) Aber selbst damit, die Ebenen voneinander anhängig zu machen, kann ich nicht über die vba-Hilfe herausfinden, wie ich die XY-Ebene des Ursprungs der Assembly mit der XY-Ebene des eingefügten Bauteils anhängig mache. Bitte um Hilfe in Form von konkretem Code - Danke! Gruß Stefan ------------------ IV2008 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 24. Mrz. 2014 08:25 <-- editieren / zitieren --> Unities abgeben: Nur für st.w
Zitat: Original erstellt von st.w:
Bitte um Hilfe in Form von konkretem Code - Danke!
Hallo st.w, es nicht so schwer eine Winkelabhängigkeit über Ebenen zu vergeben. Einfach alle Komponenten der BG durchlaufen, überprüfen, welches BT nur einen Rotations-FHG offen hat dann eine Ebene des BT nehmen und eine orthogonale der BG und Winkelabhängigkeit erstellen... Einen fertigen Code habe ich leider nicht parat. Da müsste ich erst etwas programmieren... Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
st.w Mitglied
Beiträge: 59 Registriert: 08.11.2011
|
erstellt am: 24. Mrz. 2014 11:59 <-- editieren / zitieren --> Unities abgeben:
Danke... Mühsam, aber dann doch, habe ich tatsächlich im Autodesk-Forum einen ähnlichen Fall mit Ebenen gefunden und mit Try and Error anpassen können. Also für alle, die den Code mal nutzen wollen (iam offen, darauf ein Bauteil öffnen und mit dem Makro schließen): Code:
Sub SchließenUndXfachEinfügen() Dim oSourceDoc As Document Dim oAssDoc As AssemblyDocument Dim dLänge As Double, dMaxLänge As Double Dim sName As String Dim sSepFilename As String Dim lZähler As Long, lAnz As Long Dim oAsmCompDef As AssemblyComponentDefinition Dim oTG As TransientGeometry Dim oMatrix As Matrix Dim oOcc As ComponentOccurrence Dim oWorkAxis1 As WorkAxis Dim oWorkAxisProxy As WorkAxisProxy Set oSourceDoc = ThisApplication.ActiveDocument If oSourceDoc Is Nothing Then Exit Sub sSepFilename = oSourceDoc.FullFileName ' aktuellen Namen merken oSourceDoc.Save oSourceDoc.Close dMaxLänge = 10 Set oSourceDoc = ThisApplication.ActiveDocument If Not (oSourceDoc Is Nothing) Then If oSourceDoc.DocumentType = kAssemblyDocumentObject Then Set oAssDoc = ThisApplication.ActiveDocument sName = Mid(oSourceDoc.FullFileName, InStrRev(oSourceDoc.FullFileName, "\") + 1) sName = Left(sName, Len(sName) - 4) lAnz = 0 lAnz = CLng(Val(InputBox("Anzahl" & Chr(10) & Chr(10) & "ESC = Abbruch", "In " & sName & " platzieren", "1"))) Set oAsmCompDef = oSourceDoc.ComponentDefinition Set oTG = ThisApplication.TransientGeometry Set oMatrix = oTG.CreateMatrix Dim oWorkAxis As WorkAxis Set oWorkAxis = oAsmCompDef.WorkAxes.Item(2) ' Y-Achse der Assembly For lZähler = 1 To lAnz dLänge = 1.1 * ((lZähler - 1) - CLng(lAnz / 2)) * dMaxLänge Call oMatrix.SetTranslation(oTG.CreateVector(-1.1 * dMaxLänge - 1 - dLänge * 0.05, dLänge * 2, 0)) Set oOcc = oAsmCompDef.Occurrences.Add(sSepFilename, oMatrix) Set oWorkAxis1 = oOcc.Definition.WorkAxes.Item(2) Call oOcc.CreateGeometryProxy(oWorkAxis1, oWorkAxisProxy) Call oAsmCompDef.Constraints.AddAngleConstraint(oWorkAxis, False, oWorkAxisProxy, False, 0) oAsmCompDef.Constraints.Item(oAsmCompDef.Constraints.count).Name = "Y-Achse zu " & oOcc.Name Next End If End If End Sub
------------------ IV2008 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|