Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  
  Parameter in ein IProp. überführen mit ilogic

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
[an error occurred while processing this directive] mal gelesen)
MaxL1234
Mitglied
Konstrukteur

Sehen Sie sich das Profil von MaxL1234 an!   Senden Sie eine Private Message an MaxL1234  Schreiben Sie einen Gästebucheintrag für MaxL1234

Beiträge: 4
Registriert: 13.01.2021

erstellt am: 13. Jan. 2021 15:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1709
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 14. Jan. 2021 10:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MaxL1234 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 375
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 14. Jan. 2021 12:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MaxL1234 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von MaxL1234 an!   Senden Sie eine Private Message an MaxL1234  Schreiben Sie einen Gästebucheintrag für MaxL1234

Beiträge: 4
Registriert: 13.01.2021

erstellt am: 14. Jan. 2021 13:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen dank für die Infos,

muss mich die Tage mal in die VBA thematik einlesen und die Funktion testen

Gruß

Max

[Diese Nachricht wurde von MaxL1234 am 15. Jan. 2021 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MaxL1234
Mitglied
Konstrukteur

Sehen Sie sich das Profil von MaxL1234 an!   Senden Sie eine Private Message an MaxL1234  Schreiben Sie einen Gästebucheintrag für MaxL1234

Beiträge: 4
Registriert: 13.01.2021

erstellt am: 15. Jan. 2021 16:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1709
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 15. Jan. 2021 17:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MaxL1234 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von MaxL1234 an!   Senden Sie eine Private Message an MaxL1234  Schreiben Sie einen Gästebucheintrag für MaxL1234

Beiträge: 4
Registriert: 13.01.2021

erstellt am: 18. Jan. 2021 09:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 375
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 18. Jan. 2021 13:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MaxL1234 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 1709
Registriert: 15.11.2006

Windows 10 x64, AIP 2021

erstellt am: 18. Jan. 2021 13:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für MaxL1234 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2021 CAD.de | Impressum | Datenschutz