Ankündigungen

Announcement: We’re aware of an issue affecting starting a new topic from category pages and creating new blog posts. New topics can still be started directly from the relevant board. Learn more here.

Parametrisches Teil mit VB aus Inhaltscenter laden und Parameter für Länge festlegen

Parametrisches Teil mit VB aus Inhaltscenter laden und Parameter für Länge festlegen

marvin_sahmHP3SG
Participant Participant
1.000Aufrufe
7Antworten
Nachricht 1 von 8

Parametrisches Teil mit VB aus Inhaltscenter laden und Parameter für Länge festlegen

marvin_sahmHP3SG
Participant
Participant

Hallo zusammen,

 

ich arbeite gerade an einem VB Skript, welches Teile aus dem Inhalstcenter laden soll. Ich habe schon verschiedene Sachen getestet, die soweit funktionieren. Jetzt möchte ich aber ein Teil laden, bei dem, wenn man es manuell läd, die Länge eingegeben werden muss. Hier weiß ich nicht weiter, wie das mti VB funktionieren könnte.

 

Zum probieren habe ich einfach mal einen Quader genommen.

Hier mal ein Bild wie das aussieht, wenn man das Teil manuell einfügt. Die voreingestelle Länge beträgt 50mm:

 

marvin_sahmHP3SG_0-1732009752616.pngmarvin_sahmHP3SG_0-1732009752616.png

 

Das Teil ist so im Inhaltscenter angelegt:

 

marvin_sahmHP3SG_1-1732009850338.pngmarvin_sahmHP3SG_1-1732009850338.png

 

Aktuell kann ich das Teil mit folgendem Code laden, wobei dann die 50mm angenommen werden:

 

Public Sub VonCC_OnExecute(Context As NameValueMap) Handles VonCC.OnExecute

Dim ZusDok As AssemblyDocument
ZusDok = g_inventorApplication.ActiveDocument


Dim oContentCenter As ContentCenter = g_inventorApplication.ContentCenter

Dim Rechteck As ContentTreeViewNode
Rechteck = g_inventorApplication.ContentCenter.TreeViewTopNode.ChildNodes.Item("Profile").ChildNodes.Item("Item Profile").ChildNodes.Item("Profil 8")

Dim familie As ContentFamily
Dim checkfamilie As ContentFamily

For Each checkfamilie In Rechteck.Families

If checkfamilie.DisplayName = "Rechteck_variabel2" Then
familie = checkfamilie
Exit For
End If

Next

If Not familie Is Nothing Then

Dim row As ContentTableRow
row = familie.TableRows.Item(1)
Dim failureReason As MemberManagerErrorsEnum
Dim failureMessage As String = "Fehler"
Dim memberFilename As String
memberFilename = familie.CreateMember(row, failureReason, failureMessage)

Dim transMatrix As Matrix
transMatrix = g_inventorApplication.TransientGeometry.CreateMatrix
transMatrix.Cell(2, 4) = 0
Dim Occ As ComponentOccurrence
Occ = ZusDok.ComponentDefinition.Occurrences.Add(memberFilename, transMatrix)

End If

End Sub

Für mein Verständis soll über das Skript die Länge einfach mal auf 80 gesetzt werden. Geht das überhaupt? Bin mittlerweile etwas frustriert..vielleicht liegt die Lösung ja auf der Hand und ich bin einfach blöd?

 

Inventorversion ist die 2023 und Visual Studio 2019

 

Wäre sehr cool ,wenn mir da jemand einen Tipp geben könnte.

 

Beste Grüße

Marvin

0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (2)
1.001Aufrufe
7Antworten
Antworten (7)
Nachricht 2 von 8

RaphaelMichel
Advisor
Advisor
Akzeptierte Lösung

Hallo Marvin

Leider kann ich dir mit meiner eigenen Erfahrung nicht weiterhelfen. Aber vielleicht hilft dir der letzte Beitrag aus diesem Thread weiter. Die letzten 3 Zeilen könnten für dich interessant sein, habe es aber nur überflogen.

 

Edit: Oder dieser Beitrag. Ist zwar iLogic, sollte aber auch in VBA ähnlich funktionieren.

Nachricht 3 von 8

marvin_sahmHP3SG
Participant
Participant

Vielen Dank für den Tipp, leider scheint das so nicht zu funktionieren.

0 „Gefällt mir“-Angaben
Nachricht 4 von 8

RaphaelMichel
Advisor
Advisor

Sorry, ich habe leider erst jetzt bemerkt, dass du ein VB .NET Programm schreibst. Da bin ich leider komplett raus, da kenn ich mich nicht aus. Die verlinkten Beiträge beziehen sich auf VBA und müssten an VB .NET angepasst werden. Grundsätzlich bin ich aber der Meinung, dass der Zugriff auf gleiche Art funktionieren sollte. Sorry, dass ich dir hier nicht weiterhelfen kann.

0 „Gefällt mir“-Angaben
Nachricht 5 von 8

Martin-Winkler-Consulting
Advisor
Advisor

Hallo Marvin,

das ist mangels Testmöglichkeit jetzt etwas schwierig zu helfen. Dafür müsste man sich erstmal die Umgebung bauen.

Ich kann im Code nicht erkennen wo der Wert 80 für die Variante gesetzt wird.

Müsste das nicht hier passieren?

transMatrix.Cell(2, 4) = 0

Ist das überhaupt so einfach möglich einer Familientabelle per Code eine neue Variante anzufügen?
Oder musst diese Variante vorher angelegt sein und wird dann entsprechend abgerufen?

 

Hoffe meine Gedanken helfen dir ein wenig weiter.

Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

0 „Gefällt mir“-Angaben
Nachricht 6 von 8

sara_elsayed15
Alumni
Alumni

Hi @marvin_sahmHP3SG 

 

Konnte einer der genannten Antworten bei deinem Problem helfen?

Falls ja, bitte gerne als Lösung markieren.

 

Danke für euer Mitwirken!

 

Beste Grüße,

Sara

0 „Gefällt mir“-Angaben
Nachricht 7 von 8

marvin_sahmHP3SG
Participant
Participant
Akzeptierte Lösung

Also ich habe es jetzt wie folgt gelöst:

 

        'setzt in Inventor die geöffnete Baugruppe als aktives Dokument
        Dim ZusDok As AssemblyDocument = g_inventorApplication.ActiveDocument

        'Definieren des Inhaltscenters
        Dim oContentCenter As ContentCenter = g_inventorApplication.ContentCenter

        'Definieren des Kategoriepfades, in welchem sich das Profil befindet. (Im Ursprünglichen Post ging es hier um "Rechteck_variabel, habe das jetzt aber auf "Profil_8_40X40" geändert
        Dim Profil As ContentTreeViewNode = g_inventorApplication.ContentCenter.TreeViewTopNode.ChildNodes.Item("Profile").ChildNodes.Item("Item Profile").ChildNodes.Item("Profil 8")

        'hier wird jetzt geschaut, ob in dem Pfad eine Familie mit dem Name "Profil_8_40X40" exisitiert, falls ja wird diese als "familieProfil" festgelegt
        Dim familieProfil As ContentFamily
        Dim checkfamilieProfil As ContentFamily

        For Each checkfamilieProfil In Profil.Families

        If checkfamilieProfil.DisplayName = "Profil_8_40X40" Then
                    familieProfil = checkfamilieProfil
                    Exit For
        End If

        Next

        'Hier wähle ich die Tabellenzeile innerhalb der Familie aus, habe das erstmal direkt auf Zeile "3" festgelegt
        Dim rowProfil As ContentTableRow
            rowProfil = familieProfil.TableRows.Item(3)

        'Festlegen der Länge auf 1000mm
        Dim lenghtUI As Double = 1000

        'Jetzt muss eine NameValueMap erstellt werden. Die habe ich "LängeUI" genannt. Innerhalb dieser wird dem Wert "Länge", welcher in der Familie als benutzerdefinierter Parameter angelegt ist, die Länge lenghtUI von 1000mm gegeben
        Dim LängeUI As NameValueMap = g_inventorApplication.TransientObjects.CreateNameValueMap
            LängeUI.Add("Länge", lenghtUI)

        'Festlegen was ausgegeben werden soll, falls das einfügen scheitert
        Dim failureReason As MemberManagerErrorsEnum
        Dim failureMessage As String = "Fehler"
        Dim memberFilename As String

        'erstellen einer Matrix, die zum Einfügen benötigt wird
        Dim transMatrix As Matrix = g_inventorApplication.TransientGeometry.CreateMatrix
            transMatrix.Cell(2, 4) = 0

        'Jetzt wird die Bauteildatei mit Hilfe der festgelegten Eingaben erzeugt. Hierbei sind die Leerzeichen mit den Kommas wichtig. Die habe ich nicht gesetzt, das war mein Fehler.
        'Die Createmember kann einige Sachen als Input aufnehmen, alles was nicht benötigt wird, muss nicht ausgefüllt werden, aber dennoch als "Leerplatz" ausgeschrieben sein. 
        'In meinem Fall ist das die Tabellenzeile, failurereason, message und dann "CustumInput", in meinem Fall dann die NameValueMap, die dem benutzerparamter "Länge" der Familie die gewünschte Länge gibt.
        Dim horizontalUIFile As String = familieProfil.CreateMember(rowProfil, failureReason, failureMessage, , , , LängeUI)

        'Hier wird dann schlussendlich mit Hilfe der erzeugten Datei die Komponente eingefügt
        Dim horizontalUI As ComponentOccurrence = ZusDok.ComponentDefinition.Occurrences.Add(horizontalUIFile, transMatrix)
            horizontalUI.Name = "horizontalUI" 'hier lege ich noch einen Anzeigename fest
            horizontalUI.Grounded = False 'und löste die fixierung der Komponente auf

So funktioniert es jetzt, wie ich es mir vorstelle. Geht vielleicht besser, da das aber meine ersten VB Versuche sind, bin ich damit recht zufrieden.

Vielleicht hilft es ja jemandem weiter 🙂

 

Nachricht 8 von 8

sara_elsayed15
Alumni
Alumni

Hi Marvin!


Danke für dein Update und das Markieren der Lösung! Freut uns sehr, dass du eine Lösung finden konntest!

Beste Grüße,
Sara

0 „Gefällt mir“-Angaben