| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Makro: Abhängigkeit auf Ursprung erstellen (1031 / mal gelesen)
|
felixspitzer Mitglied
Beiträge: 8 Registriert: 11.01.2021 Autodesk Inventor 2020
|
erstellt am: 11. Jan. 2021 14:21 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, gibt es schon ein Makro welches folgende Funktion bietet: den Abstand der X-,Y- & Z-Ebenen eines fertig platzierten Bauteiles zum Baugruppenursprung ermittelt mit den drei ermittelten Werten eine Abhängigkeit zum Baugruppenursprung erstellt und die 3 alten Abhängigkeiten löscht. Oder anders gesagt, folgenden Weg umgeht: Teil in seiner Baugruppenumgebung fertig platzieren Abstand der Ebenen zum Baugruppenursprung ausmessen Werte notieren Abhängigkeiten löschen neue Abhängikeiten von X-,Y- & Z-Ebenen zum Baugruppenursprung erstellen Somit ist das wieder Teil vollständig platziert, aber nicht mehr von seiner Umgebung abhängig.
Ich freue mich über eure Antworten!
Mit freundlichen Grüßen Felix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 11. Jan. 2021 15:56 <-- editieren / zitieren --> Unities abgeben: Nur für felixspitzer
Hallo felixspitzer, solch ein Makro ist mir bisher nicht untergekommen. Ich denke es ist auch nicht ganz trivial umzusetzen, da ggf. auch Winkel der Ursprungsebenen BT/BG zu einander berücksichtigt werden müssen. Wäre es vielleicht eine Alternative das Bauteil nach der Platzierung einfach zu fixieren und vorhandene Abhängigkeiten zu löschen? Grüße EIBe 3D 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. Jan. 2021 22:58 <-- editieren / zitieren --> Unities abgeben: Nur für felixspitzer
Hallo Unter der Annahme, dass: - wirklich nur die drei alten Abhängigkeiten existieren - das Bauteil so ausgerichtet ist, dass die Ursprungsebenen der Baugruppe parallel zu den Ebenen des Bauteiles liegen - die Normale der Ebenen in die gleiche Richtung zeigt und - ... mindestens ein irgendwas das ich jetzt nicht bedacht habe, kann man es mit relativ wenig Code umsetzen. Fehlerbehandlung und Plausiprüfungen wie immer konsequent eingespart. Code:
Private Sub ConstrainToAssWorkplanes()Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oAssCompDef As AssemblyComponentDefinition Set oAssCompDef = oAssDoc.ComponentDefinition Dim oOcc As ComponentOccurrence Set oOcc = ThisApplication.CommandManager.Pick(kAssemblyOccurrenceFilter, "Bauteil wählen") If oOcc.Definition.Type = kPartComponentDefinitionObject Then oOcc.Grounded = True Dim oConstraint As Object For Each oConstraint In oOcc.Constraints Call oConstraint.Delete Next Dim oPartPlane As WorkPlane Dim oAssPlaneProxy As WorkPlaneProxy Dim oAssPlane As WorkPlane Dim i As Integer Dim dDistance As Double For i = 1 To 3 Set oPartPlane = oOcc.Definition.WorkPlanes.Item(i) Call oOcc.CreateGeometryProxy(oPartPlane, oAssPlaneProxy) Set oAssPlane = oAssCompDef.WorkPlanes.Item(i) dDistance = 0 dDistance = ThisApplication.MeasureTools.GetMinimumDistance(oAssPlane, oAssPlaneProxy) Select Case i Case 1: If oAssPlaneProxy.Plane.RootPoint.X < 0 Then dDistance = -dDistance End If Case 2: If oAssPlaneProxy.Plane.RootPoint.Y < 0 Then dDistance = -dDistance End If Case 3: If oAssPlaneProxy.Plane.RootPoint.Z < 0 Then dDistance = -dDistance End If End Select Call oAssCompDef.Constraints.AddFlushConstraint(oAssPlane, oAssPlaneProxy, dDistance) Next oOcc.Grounded = False End If End Sub
------------------ MfG Ralf
RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
felixspitzer Mitglied
Beiträge: 8 Registriert: 11.01.2021 Autodesk Inventor 2020
|
erstellt am: 12. Jan. 2021 07:18 <-- editieren / zitieren --> Unities abgeben:
|
felixspitzer Mitglied
Beiträge: 8 Registriert: 11.01.2021 Autodesk Inventor 2020
|
erstellt am: 12. Jan. 2021 07:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, wow Vielen Dank für deine schnelle und so ausführliche Hilfe! Grundsätzlich macht es schon viel richtig Was es meiner Ansicht nach allerdings nicht beachtet ist, ob es eine Passend- oder eine Fluchtend-Abhängigkeit ist. Jetzt dreht es das Teil, in meinem Fall die Verschraubung, anders herum. Felix 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: 12. Jan. 2021 16:58 <-- editieren / zitieren --> Unities abgeben: Nur für felixspitzer
Hallo Doch, hab ich beachtet. In den Vorbedingungen steht, dass die Normalen in die gleiche Richtung zeigen müssen. Das was du uns jetzt präsentierst sieht für mich nicht nur danach aus, dass die Normalen gleich- oder gegengerichtet sein können. Das die Ebenen im Winkel zueinander stehen können war ja auch schon eine genannte Möglichkeit. Ich befürchte als nächstes kommt die Salamischeibe, dass das Teil um eine der Ursprungsachsen verdreht ist und so nicht jeweils die XY-Ebene Baugruppe zur XY-Ebene Bauteil passend/fluchtend gemacht werden muss, sondern XY Bauteil zu YZ Baugruppe. Die automatische/programmierte Vergabe von Abhängigkeiten kann vieles, aber nicht hellsehen. Es muss entweder vorab per Definition/Regel eindeutig festgelegt werden, welche Abhängigkeiten erstellt werden sollen oder man macht es selbst. Probier mal, ob es das Teil damit immer noch umdreht. Code:
Option ExplicitPublic Sub PlaceConstraintOnTwoWorkPoints() ' Add a mate constraint on two workpoints Dim oAsmCompDef As AssemblyComponentDefinition Set oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition Dim oOcc1 As ComponentOccurrence Set oOcc1 = oAsmCompDef.Occurrences.Item(1) Dim oOcc2 As ComponentOccurrence Set oOcc2 = oAsmCompDef.Occurrences.Item(2) Dim oMasterPoint As WorkPoint Set oMasterPoint = oAsmCompDef.Occurrences(1).Definition.WorkPoints.Item(2) Dim oPostPoint As WorkPoint Set oPostPoint = oAsmCompDef.Occurrences(2).Definition.WorkPoints.Item(2) Dim oMasterPointProxy As WorkPointProxy Call oOcc1.CreateGeometryProxy(oMasterPoint, oMasterPointProxy) Dim oPostPointProxy As WorkPointProxy Call oOcc2.CreateGeometryProxy(oPostPoint, oPostPointProxy) Call oAsmCompDef.Constraints.AddMateConstraint(oMasterPointProxy, oPostPointProxy, 0) End Sub Private Sub ConstrainToAssWorkplanes() Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument Dim oAssCompDef As AssemblyComponentDefinition Set oAssCompDef = oAssDoc.ComponentDefinition Dim oOcc As ComponentOccurrence Set oOcc = ThisApplication.CommandManager.Pick(kAssemblyOccurrenceFilter, "Bauteil wählen") If oOcc.Definition.Type = kPartComponentDefinitionObject Then oOcc.Grounded = True Dim oConstraint As Object For Each oConstraint In oOcc.Constraints Call oConstraint.Delete Next Dim oPartPlane As WorkPlane Dim oAssPlaneProxy As WorkPlaneProxy Dim oAssPlane As WorkPlane Dim i As Integer Dim dDistance As Double For i = 1 To 3 Set oPartPlane = oOcc.Definition.WorkPlanes.Item(i) Call oOcc.CreateGeometryProxy(oPartPlane, oAssPlaneProxy) Set oAssPlane = oAssCompDef.WorkPlanes.Item(i) dDistance = 0 dDistance = ThisApplication.MeasureTools.GetMinimumDistance(oAssPlane, oAssPlaneProxy) Select Case i Case 1: If oAssPlaneProxy.Plane.RootPoint.X < 0 Then dDistance = -dDistance End If If oAssPlaneProxy.Plane.Normal.X = 1 Then Call oAssCompDef.Constraints.AddFlushConstraint(oAssPlane, oAssPlaneProxy, dDistance) Else Call oAssCompDef.Constraints.AddMateConstraint(oAssPlane, oAssPlaneProxy, dDistance) End If Case 2: If oAssPlaneProxy.Plane.RootPoint.Y < 0 Then dDistance = -dDistance End If If oAssPlaneProxy.Plane.Normal.Y = 1 Then Call oAssCompDef.Constraints.AddFlushConstraint(oAssPlane, oAssPlaneProxy, dDistance) Else Call oAssCompDef.Constraints.AddMateConstraint(oAssPlane, oAssPlaneProxy, dDistance) End If Case 3: If oAssPlaneProxy.Plane.RootPoint.Z < 0 Then dDistance = -dDistance End If If oAssPlaneProxy.Plane.Normal.Z = 1 Then Call oAssCompDef.Constraints.AddFlushConstraint(oAssPlane, oAssPlaneProxy, dDistance) Else Call oAssCompDef.Constraints.AddMateConstraint(oAssPlane, oAssPlaneProxy, dDistance) End If End Select Next oOcc.Grounded = False End If End Sub
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
felixspitzer Mitglied
Beiträge: 8 Registriert: 11.01.2021 Autodesk Inventor 2020
|
erstellt am: 19. Jan. 2021 12:45 <-- editieren / zitieren --> Unities abgeben:
Mit Vorbedingungen meinst du: - wirklich nur die drei alten Abhängigkeiten existieren - das Bauteil so ausgerichtet ist, dass die Ursprungsebenen der Baugruppe parallel zu den Ebenen des Bauteiles liegen - die Normale der Ebenen in die gleiche Richtung zeigt und Ich fürchte ich habe den genannten Punkten in der Euphorie über deinen geposteten Code zu wenig Beachtung geschenkt. Zu deiner Frage, ob es das Teil damit noch immer umdreht: Kommt ganz darauf an, wie ich das Teil platziere. Das ist auch das Problem an der ganzen Sache. Wohl kaum jemand achtet darauf, dass nur gleichnamige Ebenen aufeinander platziert werden. Dass eine programmierte Vergabe von Abhängigkeiten nicht hellsehen kann, leuchtet mir ein. Wenn sich das auf die Schnelle per Code nicht so einfach lösen lässt, dann wird das wohl auch der Grund sein, warum es ein derartiges Makro leider noch nicht gibt. Denn die Grundidee dahinter wäre ja nicht so verkehrt und doch in so mancher Baugruppe gut zu gebrauchen, oder? 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: 19. Jan. 2021 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für felixspitzer
Hallo Lehn dich einfach mal drei Minuten zurück und denke selbst darüber nach. Wenn du keine eineindeutigen Bedingungen für die Abhängigkeiten definieren kannst, wird es diesen Code niemals geben. Mein Code sollte die Passend/Fluchtend Ausrichtung der Ursprungsebenen zueinander korrekt umsetzen. Das gilt unter der Voraussetzung, dass die Ebenen jeweils parallel zueinander liegen. Für alles darüber hinaus sind einfach nicht genug Randbedingungen definiert. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
felixspitzer Mitglied
Beiträge: 8 Registriert: 11.01.2021 Autodesk Inventor 2020
|
erstellt am: 22. Jan. 2021 09:04 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|