Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Winkelabhängigkeit zwischen Y-Achsen setzen

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
  
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



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 20. Mrz. 2014 09:26    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 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)


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

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 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 st.w 10 Unities + Antwort hilfreich

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



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 20. Mrz. 2014 13:57    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

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)


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

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 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 st.w 10 Unities + Antwort hilfreich

Hallo st.w,

statt den WorkPlanes mit WorkAxis und davon auch wieder die Proxy...

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



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 20. Mrz. 2014 17:08    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

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)


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

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 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 st.w 10 Unities + Antwort hilfreich

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



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 21. Mrz. 2014 10:13    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

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)


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

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 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 st.w 10 Unities + Antwort hilfreich

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



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 21. Mrz. 2014 13:41    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 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)


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

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 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 st.w 10 Unities + Antwort hilfreich

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



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

Beiträge: 59
Registriert: 08.11.2011

erstellt am: 24. Mrz. 2014 11:59    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

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 >>)

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)2023 CAD.de | Impressum | Datenschutz