| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Autodesk Inventor: Grundlagen, ein Seminar am 10.03.2025
|
Autor
|
Thema: Parameter in ein IProp. überführen mit ilogic (1785 / mal gelesen)
|
MaxL1234 Mitglied Konstrukteur
Beiträge: 10 Registriert: 13.01.2021
|
erstellt am: 13. Jan. 2021 15:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, Ich möchte einen Parameter der Länge (x) eines Bauteils in ein Benutzer-def. iproperty (y) überführen / erstellen (in IV 2021)
Dabei soll das iprop. (y) immer folgende Formatierung haben „000“ also aus 3 Ziffern bestehen. Maße mit Komma (2,3mm etc.) existieren in diesem Bsp. nicht und 1<=(x)<=999 😉 Die Werte sollen dabei immer, wie in den Bsp. mit entsprechendem Nullen aufgefüllt werden und die Einheit soll auch "verschwinden". Wenn (x) = 5mm ist (y) = 005 Wenn (x) = 65mm ist (y) = 065 Wenn (x) = 321mm ist (y) = 321 Ich denke das für die Aufgabe iLogik das Mittel der Wahl ist, da meine Kenntnisse in dem Bereich aber minimal sind würde ich mich über einen Lösungsansatz freuen.
Gruß
Max
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 14. Jan. 2021 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
Moin Geht's auch mit VBA? Mach dir Gedanken wie du den Export aktuell hältst. Von allein aktualisiert der sich nicht. Code:
Public Sub ExportParameter()Dim sParameterName As String Dim sPropertyName As String '############################################ 'Namen anpassen sParameterName = "Länge" sPropertyName = "Länge" '############################################ Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oParam As Parameter Dim oParams As Parameters Dim oParamExpr As String Set oParams = oPartDoc.ComponentDefinition.Parameters For Each oParam In oParams If oParam.Name = sParameterName Then oParamExpr = oParam.Expression End If Next If Not oParamExpr = "" Then Dim oProp As Property Dim oPropSet As PropertySet Set oPropSet = oPartDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") For Each oProp In oPropSet If oProp.Name = sPropertyName Then oProp.Value = Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#") Exit Sub End If Next Call oPropSet.Add(Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#"), sPropertyName) End If End Sub
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 14. Jan. 2021 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
zum "aktuell halten" kann iLogic verwendet werden. Eine Regel definieren, die das Makro von Ralf aufruft: Code: InventorVb.RunMacro("projectName", "moduleName", "macroName")
Diese Regel, dann in einen passenden Ereignisauslöser setzen. "Beliebige Modellparameteränderung" erscheint mir geeignet. ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxL1234 Mitglied Konstrukteur
Beiträge: 10 Registriert: 13.01.2021
|
erstellt am: 14. Jan. 2021 13:37 <-- editieren / zitieren --> Unities abgeben:
|
MaxL1234 Mitglied Konstrukteur
Beiträge: 10 Registriert: 13.01.2021
|
erstellt am: 15. Jan. 2021 16:28 <-- editieren / zitieren --> Unities abgeben:
Funktioniert einwandfrei, habe >Public Sub ExportParameter()> durchnummeriert und kann somit weitere Parameter in einem Modul erstellen 😉 Als Benutzerbefehl habe ich es auch schon in IV bekommen, gibt es denn die Möglichkeit den VBA Code auch z.b. nach jedem Speichern der Datei durchlaufen zu lassen? In Bezug auf den Code oben wird bei mir nach einer Änderung des Parameters (z.B. der Länge) im Ben.def. iProp. der Wert wieder als Zahl mit Einheit ausgegeben. Erst nach erneutem ausführen vom Code wird wieder das gewünschte Format ausgegeben. Gruß Max
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 15. Jan. 2021 17:11 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
Hallo Ist bei dem Parameter das Häkchen "Exportparameter" aktiviert? Das sollte dann raus. Anders kann ich mir spontan nicht erklären. Siehe KraBBy's Vorschlag eine iLogicRegel zu erstellen, die das Makro auslöst und die Regel per Ereignisauslöser auszuführen. In der Inventor Hilfe ist die Verwendung von iLogic Ereignisauslösern und Triggern recht gut erklärt.
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxL1234 Mitglied Konstrukteur
Beiträge: 10 Registriert: 13.01.2021
|
erstellt am: 18. Jan. 2021 09:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, das Entfernen des Exportparameters funktioniert Ich habe aber an anderer Stelle Blödsinn erzählt: >>>durchnummeriert und kann somit weitere Parameter in einem Modul erstellen 😉<<< funktioniert nicht so wie gewünscht. Mal als Bsp. mit zwei Variablen AAA, BBB Als VBA Laie würde ich das so angehen, das ich die jeweiligen Parametervariablen durchnummeriere um so zwei Exportparameter in einem Modul zu bekommen: Code:
Public Sub ExportParameter1() Public Sub ExportParameter2() Dim sParameterName1 As String Dim sPropertyName1 As String Dim sParameterName2 As String Dim sPropertyName2 As String'############################################ 'Namen anpassen sParameterName1 = "AAA" sPropertyName1 = "AAA" sParameterName2 = "BBB" sPropertyName2 = "BBB" '############################################ Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oParam As Parameter Dim oParams As Parameters Dim oParamExpr As String Set oParams = oPartDoc.ComponentDefinition.Parameters For Each oParam In oParams If oParam.Name = sParameterName1 Then oParamExpr = oParam.Expression End If Next If Not oParamExpr = "" Then Dim oProp As Property Dim oPropSet As PropertySet Set oPropSet = oPartDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") For Each oProp In oPropSet If oProp.Name = sPropertyName Then oProp.Value = Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#") Exit Sub End If Next Call oPropSet.Add(Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#"), sPropertyName1) End If End Sub
Funktionieren tut das aber nicht, was muss ich denn des Weiteren im Code och differenzieren um zwei oder mehrere Parameter über das Modul auslesen zu können.
Gruß Max
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 18. Jan. 2021 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
so geht es (wie immer, gäbe es auch andere Möglichkeiten) Die 'Logik' (das Verhalten, die Voraussetzungen etc.) ist unverändert, zu dem von Ralf. Du kannst vmtl. auch erkennen, wie weitere Parameter hinzugefügt werden können. Code: Public Sub ExportParameter_Main() Dim sParameterName1 As String, sPropertyName1 As String Dim sParameterName2 As String, sPropertyName2 As String '############################################ 'Namen anpassen sParameterName1 = "AAA" sPropertyName1 = "AAA" sParameterName2 = "BBB" sPropertyName2 = "BBB" '############################################ Call ExportParameter(sParameterName1, sPropertyName1) 'Aufruf des Sub unten Call ExportParameter(sParameterName2, sPropertyName2) End Sub Private Sub ExportParameter(sParameterName As String, sPropertyName As String) ' hier jetzt als eigenes Sub, das die beiden Namen als Parameter bekommt ' so kann man diesen Teil recht einfach mehrmals aufrufen ' KraBBy 18.01.2021 Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oParam As Parameter Dim oParams As Parameters Dim oParamExpr As String Set oParams = oPartDoc.ComponentDefinition.Parameters For Each oParam In oParams If oParam.Name = sParameterName Then oParamExpr = oParam.Expression End If Next If Not oParamExpr = "" Then Dim oProp As Property Dim oPropSet As PropertySet Set oPropSet = oPartDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") For Each oProp In oPropSet If oProp.Name = sPropertyName Then oProp.Value = Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#") Exit Sub End If Next Call oPropSet.Add(Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#"), sPropertyName) End If
End Sub
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 18. Jan. 2021 13:26 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
Hallo Dann packen wir die Parameter-Property-Paare in ein Array. Gibt sicher schönere Möglichkeiten, aber die hier ging schnell. EDIT: Huh, KraBBy war wieder schneller. Dafür haste jetzt die Qual der Wahl. Ich hab noch ein deaktivieren des Exportparameterhäkchens mit eingebaut.
Code:
Public Sub ExportParameter()Dim aParameterName(1) As String 'Nullbasiertes Array, max. Index anpassen wenn mehr Parameter-Property-Paare erstellt werden Dim aPropertyName(1) As String 'Parameter-Property-Paare aParameterName(0) = "AAA" aPropertyName(0) = "AAA" aParameterName(1) = "BBB" aPropertyName(1) = "BBB" Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument
Dim oParam As Parameter Dim oParams As Parameters Dim oParamExpr As String Dim i As Integer Set oParams = oPartDoc.ComponentDefinition.Parameters For Each oParam In oParams For i = 0 To UBound(aParameterName) If oParam.Name = aParameterName(i) Then oParam.ExposedAsProperty = False 'Exportparameter deaktivieren oParamExpr = oParam.Expression Exit For End If Next If Not oParamExpr = "" Then Dim oProp As Property Dim oPropSet As PropertySet Set oPropSet = oPartDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}") For Each oProp In oPropSet If oProp.Name = aPropertyName(i) Then oProp.Value = Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#") GoTo NextParam: End If Next Call oPropSet.Add(Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#"), aPropertyName(i)) End If NextParam: Next End Sub
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MaxL1234 Mitglied Konstrukteur
Beiträge: 10 Registriert: 13.01.2021
|
erstellt am: 22. Jan. 2021 08:26 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, der Code funktioniert wunderbar Jetz teste ich gerade ob ich den Code in ein iLogik überführen kann, weil ich faul bin möchte ich den Code ja über einen Ereignisauslöser ausführen Für ilogik habe ich den Code Anfang auf „sub main“ geändert und die „set“ entfernt. Den letzten Fehler den mir iLogik anzeigt ist: „Das Schlüsselwort gibt kein Typ an“ iLogik definiert den Fehler im letzten Absatz bei dem Wort „Property“: Code: If Not oParamExpr = "" Then Dim oProp As Property
Muss ich von VBA zu iLogik den Property genauer definieren oder wo ist der haaken? Gruß
Max Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 22. Jan. 2021 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
Hallo Max, anderer Vorschlag: Lasse das Macro in VBA wie es ist und rufe es aus einer iLogic-Regel auf. Auf die Regel kannst du dann deinen Ereignisauslöser setzen. Code:
'Aufruf VBA Macro aus iLogic-Regel projectName = "Name_VBA_Projekt" moduleName = "Name_Modul" macroName = "Name_Macro" InventorVb.RunMacro(projectName, moduleName, macroName)
Gruß
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 22. Jan. 2021 14:42 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
|
EIBe 3D Mitglied Dipl. - Ing. (FH)
Beiträge: 267 Registriert: 24.01.2020 HP Z4 G4 Workstation Xeon 3,6 32GB Nvidia P2000 WIN10 SW2015 SP5.0 SW2017 ************* Inv2018 akt.SP
|
erstellt am: 22. Jan. 2021 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für MaxL1234
Hallo KraBBy, nö klappt nicht. Außerdem meckert er bei mir noch jeweils in den Zeilen mit Format. Code:
oProp.Value = Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#") GoTo NextParam: End If Next Call oPropSet.Add(Format(CStr(Left(oParamExpr, InStr(oParamExpr, " "))), "00#"),
Daher um weitere Ärgernisse zu vermeiden mein Vorschlag.
Grüße
EIBe 3D Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |