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:
Das Teil ist so im Inhaltscenter angelegt:
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 SubFü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
Gelöst! Gehe zur Lösung
Gelöst von marvin_sahmHP3SG. Gehe zur Lösung
Gelöst von RaphaelMichel. Gehe zur 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.
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.
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.
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
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 aufSo 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 ![]()
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.