Hot News:
   

Mit Unterstützung durch:

  Foren auf CAD.de
  Inventor
  Automatische Führungslinientexte für Ausgewählte Unterbaugruppe

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

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
  
Schindler GmbH hat in Phoenix/PLM von ORCON flexible Lösung gefunden , ein Anwenderbericht
Autor Thema:  Automatische Führungslinientexte für Ausgewählte Unterbaugruppe (202 / mal gelesen)
MacFly8
Ehrenmitglied V.I.P. h.c.
Konstrukteur Kessel- & Feuerungsbau


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

Beiträge: 2137
Registriert: 13.08.2007

HP Z17;
64GB RAM; Nvidia Quadro RTX3000;
Inventor Professional PDSU 2012/2023
Mechanical 2012/2020

erstellt am: 14. Apr. 2026 12:44    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,

ist es möglich automatische Führungslinientexte an Bauteile einer Unterbaugruppe zu erstellen.

Also quasi das man eine Unterbaugruppe im Modell Browser in der Zeichnungsumgebung auswählt und dann an die Bauteile aus dieser Baugruppe eine Führungslinie im Bauteilursprung erzeugt wird und man dann ein Benutzer Iprop vorgeben kann aus dem dann der Führungslinientext erstellt wird?

MfG MacFly

------------------
- - - der Erleuchtung ist es egal wie du Sie erlangst - - -
- - - Wir leben alle unter demselben Himmel, aber wir haben nicht alle denselben Horizont - - - (K. Adenauer)

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic




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: 3059
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 15. Apr. 2026 10:34    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 MacFly8 10 Unities + Antwort hilfreich

Moin

Soll das eine Standardfunktion sein? Dann ist sie mir unbekannt.

Soll das in irgendeiner Weise eine Zusatzprogrammierung sein? Die dürfte schon in Punkt 1 scheitern. Die BrowserNodes im Modellbrowser der Zeichnung liefern meines Wissens nur ein "Generic Object" zurück. 
Das könnte man aber eventuell umgehen, indem man in der Ansicht selbst ein Bauteil anwählt und schaut, ob man die ComponentOccurrence bekommt. Mit der könnte man die übergeordnete ParentOccurrence leicht ermitteln. Dann hätte man schonmal die gewünschte Baugruppe und kann losklappern durch die Bauteile. Ich meine das Führungslinien an ein Objekt gebunden werden müssen. Es müsste daher der Bauteilursprung in der Zeichnungsansicht eingeschlossen werden - sollte machbar sein. In der Ansicht erscheint der Ursprung meines Wissens als Mittelpunktmarkierung. Wenn man das Kreuz an der Stelle nicht mag, könnte man prüfen ob man es mit einem separaten Mittelpunktmarkierungsstil kaschieren kann.
Die Position der Texte ist ein echtes Problem. Man kann jeden Text um einen definierten Wert vom Ursprung entfernt platzieren. Dabei werden sich sicher einige überlagern. Das müsste manuell nachgearbeitet werden. Mir ist noch kein funktionierender Algorithmus untergekommen. Als Text den Wert eines iProps aus dem jeweiligen Bauteil zu setzen wäre kein Problem.

Soweit die Theorie.

------------------
MfG
Ralf

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

MacFly8
Ehrenmitglied V.I.P. h.c.
Konstrukteur Kessel- & Feuerungsbau


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

Beiträge: 2137
Registriert: 13.08.2007

HP Z17;
64GB RAM; Nvidia Quadro RTX3000;
Inventor Professional PDSU 2012/2023
Mechanical 2012/2020

erstellt am: 15. Apr. 2026 13:42    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 Ralf,

ne das gibt es leider so nicht als Standard hinterlegt.
Wobei es meiner Ansicht nach möglich sein sollte. Ähnlich wie bei den Auto Positionsnummern.

Zitat:
Die dürfte schon in Punkt 1 scheitern. Die BrowserNodes im Modellbrowser der Zeichnung liefern meines Wissens nur ein "Generic Object" zurück.
Das könnte man aber eventuell umgehen, indem man in der Ansicht selbst ein Bauteil anwählt und schaut, ob man die ComponentOccurrence bekommt.

das habe ich schon gelöst.

Jetzt macht der Start von der Führungslinie Probleme ich bekomme es nicht hin den Mittelpunkt der Bauteile als Startpunkt der Führungslinie zu definieren.

Das Manuelle nachbearbeiten wäre nicht das Problem.

Das Problem ist die Punkte Kugeln R=50mm im Maßstab 1:50 bei ca 200000 Teilen zu finden (manuell), darum wollte ich es Automatisieren bei ca 2000 Punkten auf 28 Zeichnungen, und für die Zukunft da es eine wiederkehrende Aufgabe sein wird.

Wenn der Text einmal dran ist kann also die Sortierung und Ausrichtung manuell erfolgen.

Was ich bisher habe ....

Ansicht auswählen

Code holt sich die Hauptbaugruppe

das Iprop wird abgefragt

ich kann über Nummern bis zur gewünschten Baugruppe navigieren und dann die Führungslinien Erstellung anstossen, wenn ich in der richtigen Baugruppe angekommen bin.

der Code erstellt auch die Führungslinie aber der Start stimmt nicht.

hier der Ilogic Code, den ich bisher mithilfe vom Internet und Sonnet 4.6 erstellt habe.

Sub Main()

    Dim oDrw As DrawingDocument = ThisDoc.Document
    Dim oSheet As Sheet = oDrw.ActiveSheet
    Dim oTG As TransientGeometry = ThisApplication.TransientGeometry

    '-----------------------------------------------------------
    ' 1. Ansicht auswählen
    '-----------------------------------------------------------
    Dim oView As DrawingView
    Try
        oView = ThisApplication.CommandManager.Pick( _
            SelectionFilterEnum.kDrawingViewFilter, _
            "Bitte Ansicht auswählen.")
    Catch
        MsgBox("Keine Ansicht ausgewählt.")
        Exit Sub
    End Try

    '-----------------------------------------------------------
    ' 2. Hauptbaugruppe aus Ansicht holen
    '-----------------------------------------------------------
    Dim asmDoc As AssemblyDocument
    Try
        asmDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument
    Catch
        MsgBox("Ansicht verweist nicht auf eine Baugruppe.")
        Exit Sub
    End Try

    '-----------------------------------------------------------
    ' 3. iProperty abfragen
    '-----------------------------------------------------------
    Dim propName As String = InputBox( _
        "Benutzerdefiniertes iProperty eingeben:", "iProperty", "LP")
    If propName = "" Then Exit Sub

    '-----------------------------------------------------------
    ' 4. Navigation durch Ebenen
    '-----------------------------------------------------------
    Dim currentOccs As ComponentOccurrences = asmDoc.ComponentDefinition.Occurrences
    Dim selectedOcc As ComponentOccurrence = Nothing
    Dim ebene As Integer = 1
    Dim transformChain As New List(Of Matrix)

    Do While True

        Dim nameList As New List(Of String)
        Dim occList As New List(Of ComponentOccurrence)

        For Each occ As ComponentOccurrence In currentOccs
            Try
                If occ.DefinitionDocumentType = kAssemblyDocumentObject Then
                    nameList.Add(System.IO.Path.GetFileName( _
                        occ.Definition.Document.FullDocumentName))
                    occList.Add(occ)
                End If
            Catch
            End Try
        Next

        Dim msg As String = "Ebene " & ebene.ToString & _
                            " — Unterbaugruppe wählen:" & vbCrLf & vbCrLf
        For i = 0 To nameList.Count - 1
            msg &= (i + 1).ToString & ": " & nameList(i) & vbCrLf
        Next

        Dim createOption As Integer = nameList.Count + 1
        msg &= vbCrLf & createOption.ToString & ": ► Führungslinientext erstellen"

        Dim input As String = InputBox(msg, "Navigation Ebene " & ebene.ToString, "1")
        Dim idx As Integer

        If Not Integer.TryParse(input, idx) Then Exit Sub

        If idx = createOption Then

            If selectedOcc Is Nothing Then
                MsgBox("Bitte zuerst eine Unterbaugruppe auswählen!")
                Continue Do
            End If

            Dim count As Integer = 0
            Dim errors As Integer = 0
            Dim combinedMatrix As Matrix = GetCombinedMatrix(transformChain, oTG)

            ProcessAllParts(selectedOcc.SubOccurrences, combinedMatrix, _
                          oView, oSheet, oTG, propName, count, errors)

            MsgBox("Fertig!" & vbCrLf & _
                  "Führungslinien erstellt: " & count & vbCrLf & _
                  "Fehler / iProperty fehlt: " & errors)
            Exit Sub

        End If

        idx -= 1
        If idx < 0 Or idx >= occList.Count Then
            MsgBox("Ungültige Eingabe.")
            Continue Do
        End If

        selectedOcc = occList(idx)
        transformChain.Add(selectedOcc.Transformation)
        currentOccs = selectedOcc.SubOccurrences
        ebene += 1

    Loop

End Sub


'-----------------------------------------------------------
' Kombinierte Matrix berechnen
'-----------------------------------------------------------
Function GetCombinedMatrix(chain As List(Of Matrix), oTG As TransientGeometry) As Matrix
    Dim result As Matrix = oTG.CreateMatrix()
    result.SetToIdentity()
    For Each m As Matrix In chain
        result.PreMultiplyBy(m)
    Next
    Return result
End Function


'-----------------------------------------------------------
' Rekursiv alle Bauteile beschriften
'-----------------------------------------------------------
Sub ProcessAllParts( _
    occs As ComponentOccurrences, _
    parentMatrix As Matrix, _
    oView As DrawingView, _
    oSheet As Sheet, _
    oTG As TransientGeometry, _
    propName As String, _
    ByRef count As Integer, _
    ByRef errors As Integer)

    Dim oOcc As ComponentOccurrence
    For Each oOcc In occs

        If oOcc.DefinitionDocumentType = kPartDocumentObject Then

            Dim worldMatrix As Matrix = parentMatrix.Copy()
            worldMatrix.PreMultiplyBy(oOcc.Transformation)
            SetLeader(oOcc, worldMatrix, oView, oSheet, oTG, propName, count, errors)

        ElseIf oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then

            Dim subMatrix As Matrix = parentMatrix.Copy()
            subMatrix.PreMultiplyBy(oOcc.Transformation)
            ProcessAllParts(oOcc.SubOccurrences, subMatrix, oView, oSheet, _
                          oTG, propName, count, errors)

        End If

    Next

End Sub


'-----------------------------------------------------------
' Führungslinie setzen
' Ankerpunkt = Ursprung (0,0,0) des Bauteils → Weltkoordinaten → Zeichnung
'-----------------------------------------------------------
Sub SetLeader( _
    occ As ComponentOccurrence, _
    worldMatrix As Matrix, _
    oView As DrawingView, _
    oSheet As Sheet, _
    oTG As TransientGeometry, _
    propName As String, _
    ByRef count As Integer, _
    ByRef errors As Integer)

    ' iProperty lesen
    Dim val As String = ""
    Try
        val = occ.Definition.Document.PropertySets( _
            "Inventor User Defined Properties")(propName).Value
    Catch
        Try
            val = occ.Definition.Document.PropertySets( _
                "Design Tracking Properties")(propName).Value
        Catch
            errors += 1
            Exit Sub
        End Try
    End Try

    If val = "" Then
        errors += 1
        Exit Sub
    End If

    Try
        ' === Ursprung (0,0,0) des Bauteils in Weltkoordinaten transformieren ===
        ' worldMatrix enthält bereits die vollständige Transformationskette
        ' Der Ursprung des Bauteils ist (0,0,0) im lokalen System
        Dim oOrigin As Point = oTG.CreatePoint(0, 0, 0)
        oOrigin.TransformBy(worldMatrix)

        ' worldMatrix gibt Werte in cm zurück (Inventor intern = cm)
        ' oView.Position ist in cm
        ' oView.Scale ist dimensionslos

        ' === Kameraparameter für Projektion ===
        Dim cam As Camera = oView.Camera
        Dim upVec As UnitVector = cam.UpVector
        Dim viewDir As UnitVector = cam.Eye.VectorTo(cam.Target).AsUnitVector()
        Dim rightVec As Vector = upVec.AsVector().CrossProduct(viewDir.AsVector())

        ' === Relative Position: Ursprung - Kameraziel ===
        ' cam.Target ist in cm, oOrigin ist in cm → direkt subtrahieren
        Dim relX As Double = oOrigin.X - cam.Target.X
        Dim relY As Double = oOrigin.Y - cam.Target.Y
        Dim relZ As Double = oOrigin.Z - cam.Target.Z
        Dim relVec As Vector = oTG.CreateVector(relX, relY, relZ)

        ' === Projektion auf Zeichenebene × Maßstab ===
        Dim projX As Double = relVec.DotProduct(rightVec) * oView.Scale
        Dim projY As Double = relVec.DotProduct(upVec.AsVector()) * oView.Scale

        ' === Ankerpunkt auf Blatt (cm) ===
        Dim anchorX As Double = oView.Position.X + projX
        Dim anchorY As Double = oView.Position.Y + projY

        ' === Textpunkt rechts neben der Ansicht, gleiche Höhe ===
        Dim textX As Double = oView.Position.X + (oView.Width / 2) + 2.0
        Dim textY As Double = anchorY

        ' === Führungslinie erstellen ===
        Dim oPts As ObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection()
        oPts.Add(oTG.CreatePoint2d(anchorX, anchorY))
        oPts.Add(oTG.CreatePoint2d(textX, textY))

        oSheet.DrawingNotes.LeaderNotes.Add(oPts, val)
        count += 1

    Catch ex As Exception
        errors += 1
    End Try

End Sub

------------------
- - - der Erleuchtung ist es egal wie du Sie erlangst - - -
- - - Wir leben alle unter demselben Himmel, aber wir haben nicht alle denselben Horizont - - - (K. Adenauer)

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic




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: 3059
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 15. Apr. 2026 15: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 Nur für MacFly8 10 Unities + Antwort hilfreich

Moin

Ach Sonnet macht das schon, einfach dranbleiben. Ich korrigiere aus Prinzip keinen KI-generierten Code.
LeaderNotes.Add akzeptiert keinen transienten Punkt als Anker, sondern nur reale Objekte bzw. den daraus erzeugten GeometryIntent. Man könnte höchtens mal probieren aus einem transienten Punkt einen PointIntent zu erzeugen, bin aber skeptisch das es funktioniert. Die restlichen Punkte für Knicke in der Linie oder die Textposition können transient sein.


------------------
MfG
Ralf

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

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

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

(c)2026 CAD.de | Impressum | Datenschutz