Community
Inventor - Deutsch
Das Forum für alle Fragen rund um Autodesk Inventor, iLogic, Factory Design, Automation und mehr. Der Ort zum Fragen stellen, Antworten erhalten und Wissen teilen.
abbrechen
Suchergebnisse werden angezeigt für 
Anzeigen  nur  | Stattdessen suchen nach 
Meintest du: 

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

7 ANTWORTEN 7
GELÖST
Antworten
Nachricht 1 von 8
marvin_sahmHP3SG
169 Aufrufe, 7 Antworten

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

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

 

Das Teil ist so im Inhaltscenter angelegt:

 

marvin_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

Beschriftungen (3)
7 ANTWORTEN 7
Nachricht 2 von 8
RaphaelMichel
als Antwort auf: marvin_sahmHP3SG

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

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

Nachricht 4 von 8
RaphaelMichel
als Antwort auf: marvin_sahmHP3SG

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.

Nachricht 5 von 8
martin_winkler
als Antwort auf: marvin_sahmHP3SG

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.

Nachricht 6 von 8
sara_elsayed15
als Antwort auf: marvin_sahmHP3SG

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

Nachricht 7 von 8

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 :leicht_lächelndes_Gesicht:

 

Nachricht 8 von 8
sara_elsayed15
als Antwort auf: marvin_sahmHP3SG

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

Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.

In Foren veröffentlichen  

Autodesk Design & Make Report