Modus Komponente oder Bauteil wählen im Formular umschalten

Modus Komponente oder Bauteil wählen im Formular umschalten

Patrick_987
Contributor Contributor
318Aufrufe
2Antworten
Nachricht 1 von 3

Modus Komponente oder Bauteil wählen im Formular umschalten

Patrick_987
Contributor
Contributor

Hallo! 

Um Konstruktionen besser prüfen zu können habe ich mir eine Regel erstellt um markierte Bauteile schnell einfärben zu können. Funktioniert an sich auch so wie ich mir das vorgestellt habe, so lange wie ich im Modus "Komponente auswählen" bin. Jetzt möchte ich aber auch in der obersten Baugruppe Bauteile der Unterbaugruppen mit einfärben und wechsle in den Modus "Bauteil auswählen". Das macht der Code aber leider nicht.

Gibt es dafür eine Lösung? Und kann man zu dem Formular zwei Buttons hinzufügen über die ich die Auswahl zwischen Komponente auswählen und Bauteil auswählen steuer?

Danke!

Imports System.Windows.Forms

Sub Main()
    ' Formular 
    Dim myForm As New Form
    myForm.Text = "Farbe auswählen"
    myForm.Width = 250
    myForm.Height = 200
    myForm.TopMost = True ' Fenster bleibt im Vordergrund
    myForm.StartPosition = FormStartPosition.CenterScreen

    ' Buttons für Grün/Rot
    Dim btnGruen As New Button
    btnGruen.Text = "Grün"
    btnGruen.Width = 150
    btnGruen.Height = 30
    btnGruen.Top = 20
    btnGruen.Left = 50

    Dim btnRot As New Button
    btnRot.Text = "Rot"
    btnRot.Width = 150
    btnRot.Height = 30
    btnRot.Top = 60
    btnRot.Left = 50

    ' Buttons zum Formular
    myForm.Controls.Add(btnGruen)
    myForm.Controls.Add(btnRot)

    ' Button Grün interaktion
    AddHandler btnGruen.Click, Sub(sender, E)
                                   ApplyColorToSelected("Green")
                               End Sub

    ' Button Rot interaktion
    AddHandler btnRot.Click, Sub(sender, E)
                                  ApplyColorToSelected("Red")
                              End Sub

    'Formular im nicht-modalen Modus öffnen
    myForm.Show()

    'Kontrolle bei Inventor aktiv
    While myForm.Visible
        ' in Inventor interagieren bei geöffneten Formular
        System.Windows.Forms.Application.DoEvents()
    End While
End Sub

Sub ApplyColorToSelected(colorName As String)
    Try
        ' Prüfung ob Dokument Baugruppe
        Dim oDoc As AssemblyDocument = ThisApplication.ActiveDocument
        If oDoc Is Nothing OrElse oDoc.SelectSet.Count = 0 Then
            MessageBox.Show("Bitte wählen Sie ein Bauteil oder eine Komponente aus.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If

        ' ausgewähltes Objekt prüfen
        Dim selectedObject = oDoc.SelectSet(1)
        If TypeOf selectedObject Is ComponentOccurrence Then
            Dim oOccurrence As ComponentOccurrence = CType(selectedObject, ComponentOccurrence)

            ' Farbe auf die Komponente anwenden (unabhängig von der Hierarchieebene)
            Try
                Component.Color(oOccurrence.Name) = colorName
            Catch ex As Exception
                MessageBox.Show("Fehler beim Anwenden der Farbe: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Bitte ein gültiges Bauteil oder eine Komponente auswählen.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End If

    Catch ex As Exception
        MessageBox.Show("Fehler beim Anwenden der Farbe: " & ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Sub

 

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (1)
319Aufrufe
2Antworten
Antworten (2)
Nachricht 2 von 3

jeremy.goenen
Advocate
Advocate
Akzeptierte Lösung

Hallo, zum wechseln des Auswahlfilters könntest du so einen Sub benutzen:

 

 

Sub SwitchSelectionBetweenPartAndComponent
Dim oDoc As Document = ThisDoc.Document
If oDoc.SelectionPriority = SelectionPriorityEnum.kComponentSelectionPriority Then
	oDoc.SelectionPriority = SelectionPriorityEnum.kPartSelectionPriority
Else If oDoc.SelectionPriority = SelectionPriorityEnum.kPartSelectionPriority Then
	oDoc.SelectionPriority = SelectionPriorityEnum.kComponentSelectionPriority
End If
End Sub

 

 

Das wäre wenn du nur einen Knopf zum Wechseln möchtest, wenn du zwei getrennte möchtest machst du halt zwei Subs, und die Knöpfe definierst du wie oben schon deinen Rot/Grün Knopf.

Fanden Sie diesen Beitrag hilfreich? Fühlen Sie sich frei, diesen Beitrag zu liken.
Wurde Ihre Frage erfolgreich beantwortet? Klicken Sie dann auf die Schaltfläche LÖSUNG AKZEPTIEREN

Inventor Versionen:
2025.2
0 „Gefällt mir“-Angaben
Nachricht 3 von 3

sara_elsayed15
Alumni
Alumni

Hi @Patrick_987, willkommen im deutschen Forum und danke für deinen Beitrag!

Konnte @jeremy.goenen  Antwort deine Fragestellung lösen?
Falls ja, bitte ich dich diese als Akzeptierte Lösung zu markieren.
Dazu klickst du rechts neben der Antwort auf die drei vertikalen Punkte und danach auf "Als Lösung akzeptieren". 

Danke für euer Mitwirken!

Beste Grüße,
Sara

0 „Gefällt mir“-Angaben