Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Makro: Abhängigkeit auf Ursprung erstellen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Makro: Abhängigkeit auf Ursprung erstellen (128 mal gelesen)
felixspitzer
Mitglied


Sehen Sie sich das Profil von felixspitzer an!   Senden Sie eine Private Message an felixspitzer  Schreiben Sie einen Gästebucheintrag für felixspitzer

Beiträge: 4
Registriert: 11.01.2021

Autodesk Inventor 2020

erstellt am: 11. Jan. 2021 14:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 158
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für felixspitzer 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1710
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 11. Jan. 2021 22:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für felixspitzer 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von felixspitzer an!   Senden Sie eine Private Message an felixspitzer  Schreiben Sie einen Gästebucheintrag für felixspitzer

Beiträge: 4
Registriert: 11.01.2021

Autodesk Inventor 2020

erstellt am: 12. Jan. 2021 07:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

stimmt, der Winkel muss berücksichtig werden. In meinem Fall stehen aber alle Ebenen im rechten Winkel zueinander.

Das Bauteil zu fixieren ist keine Alternative.

Trotzdem danke! 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

felixspitzer
Mitglied


Sehen Sie sich das Profil von felixspitzer an!   Senden Sie eine Private Message an felixspitzer  Schreiben Sie einen Gästebucheintrag für felixspitzer

Beiträge: 4
Registriert: 11.01.2021

Autodesk Inventor 2020

erstellt am: 12. Jan. 2021 07:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


vorher.jpg


nachher.jpg

 
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


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1710
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 12. Jan. 2021 16:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für felixspitzer 10 Unities + Antwort hilfreich

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 Explicit

Public 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


Sehen Sie sich das Profil von felixspitzer an!   Senden Sie eine Private Message an felixspitzer  Schreiben Sie einen Gästebucheintrag für felixspitzer

Beiträge: 4
Registriert: 11.01.2021

Autodesk Inventor 2020

erstellt am: 19. Jan. 2021 12:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1710
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 19. Jan. 2021 16:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für felixspitzer 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2021 CAD.de | Impressum | Datenschutz