Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Parameter aus Datei kopieren

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Parameter aus Datei kopieren (580 mal gelesen)
Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 24. Nov. 2022 09:32    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

Hi Leute

ist es möglich, per iLogic benutzerdefinierte parameter aus einer Vorlagedatei zu kopieren?? z.B. beim Speichern??? oder gar beim einer Datei????

vielen Dank für die Hilfe!!

Cheers
Tom

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 24. Nov. 2022 11:25    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 Thomas C. 10 Unities + Antwort hilfreich

Hallo

Zitat:
der gar beim einer Datei????

Beim ...was?


Ja, geht. Aber: Das Öffnen dieser Datei verbraucht Zeit und Resourcen bei jedem Speichern. Jedes Mal eine komplette Datei öffnen, nur um Wertepaare auszulesen, ist alles andere als ideal. Dann muss man auch bedenken, das beim Speichern einer Baugruppe viele Bauteile nacheinander gespeichert werden. Das heißt jedes Mal Vorlagendatei öffnen, kopieren, schließen. Das kann spürbar Performance fressen.
Die Parameter sind doch immer wieder die Gleichen und haben den selben Wert. Daher könnte man die ebenso gut hart in die iLogic Regel schreiben. Externe iLogicregeln sind reiner Text. Die können notfalls mit jedem x-beliebigen Editor modifiziert werden.
Alternativ könnte man eine globale Variable erstellen, wenn das erste Dokument geöffnet wird und die Werte einmal einlesen. Danach, da die Variable bereits existiert, wird diese verwendet. Globale Variablen vermeide ich aber normalerweise, da jede andere iLogicregel die ebenfalls missbrauchen kann.

Von wie vielen Parametern reden wir denn und gibt es Regeln wann welcher davon übertragen werden muss?

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 24. Nov. 2022 11:39    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

Hi Ralf

danke für deinen wertvollen Inpunt.
Das wäre sicher was wenns "hardcodiert" wäre - aber ich hätts gern als Pulldownmenü zur Auswahl im Property - Manager
Es geht um 3 verschiedene Variablen, einmal mit 12 werten und 2 x mit je 2 Werten.

Wie krieg ich dann das ins Formular?

danke für deinen Input!!

cheers
TC

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 24. Nov. 2022 18:55    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 Thomas C. 10 Unities + Antwort hilfreich

Hallo

Also ich versuche gerade mir zusammen zu reimen was du da machst.
- Was für ein Formular?
- Wer/was ist der Property-Manager?

Ich les mal in der Glaskugel:
Du hast ein externes iLogic Formular erstellt und dort 3 Parameter als Pulldowns eingefügt. In einer neuen Datei existieren die Parameter aber noch nicht, daher sind die Pulldowns im Formular deaktiviert. Benötigt würde jetzt also eine Funktion, um die Parameter aus einem Quelldokument auszulesen und im aktuellen Dokument zu erstellen. Die Parameter bereits in die Dateivorlage zu platzieren, geht aus irgendeinem Grund nicht bzw. ist natürlich keine Lösung für Bestandsdaten.

Man könnte die Vorlagendatei beim ersten Speichern unsichtbar öffnen und über die Sitzung offen lassen. Dann wird es performanter. Ich gehe mal davon aus, die Vorlage enthält keine Modelldaten usw.
Wenn ich mich richtig erinnere liefert der Öffnen Befehl bei einer bereits geöffnete Datei nur eine Referenz darauf zurück. Die Zeit für ein erneutes Öffnen entfällt.

Der minimale Code für eine externe Regel könnte so aussehen. Alternativ/zusätzlich zu einem Eventtrigger könnte in dein Formular auch ein Button "Parameter erstellen", der die Regel manuell aufruft.

Code:

Dim sPath As String = "C:\Pfad\zur\Vorlage\Vorlagendatei.ipt" '<--- anpassen bitte

Dim oApp As Inventor.Application = ThisApplication
Dim oTargetDoc As PartDocument=ThisDoc.Document
Dim oSourceDoc As PartDocument

Try
    oSourceDoc= oApp.Documents.Open(sPath, False)
Catch

End Try

If oSourceDoc Is Nothing Then Exit Sub

Dim oParam As UserParameter
Dim oNewParam As UserParameter
For Each oParam In oSourceDoc.ComponentDefinition.Parameters.UserParameters
    Try
        oNewParam = oTargetDoc.ComponentDefinition.Parameters.UserParameters.Item(oParam.Name)
    Catch
        oNewParam= oTargetDoc.ComponentDefinition.Parameters.UserParameters.AddByValue(oParam.Name,oParam.Value,oParam.Units)

        oNewParam.Comment = oParam.Comment
        oNewParam.CustomPropertyFormat.Precision  = oParam.CustomPropertyFormat.Precision
        oNewParam.CustomPropertyFormat.PropertyType  = oParam.CustomPropertyFormat.PropertyType
        oNewParam.CustomPropertyFormat.ShowLeadingZeros  = oParam.CustomPropertyFormat.ShowLeadingZeros
        oNewParam.CustomPropertyFormat.ShowTrailingZeros = oParam.CustomPropertyFormat.ShowTrailingZeros
        oNewParam.CustomPropertyFormat.ShowUnitsString = oParam.CustomPropertyFormat.ShowUnitsString
        oNewParam.CustomPropertyFormat.Units = oParam.CustomPropertyFormat.Units

        oNewParam.DisplayFormat = oParam.DisplayFormat
        oNewParam.ExposedAsProperty = oParam.ExposedAsProperty
        oNewParam.IsKey = oParam.IsKey
        oNewParam.ModelValueType=oParam.ModelValueType
        oNewParam.Precision = oParam.Precision

        If oParam.ExpressionList IsNot nothign Then
            If oParam.ExpressionList.Count>0 Then
                oNewParam.ExpressionList.SetExpressionList(oParam.ExpressionList.GetExpressionList,False)
            End If
        End If
    End Try
Next


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 25. Nov. 2022 07:18    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

Hi Ralf

deine Glaskugel ist sensationell - die trifft genau ins Schwarze.
Ich werds mal probieren und melde mich sobald ich ein Ergebnis habe

vielen Dank für deine immense Unterstützung.

lg
Tom

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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

Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 25. Nov. 2022 07:38    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


1.JPG


2.JPG


3.JPG

 
Hi Ralf

ich habs jetzt probiert und da kam ne Fehlermeldung - siehe Bilder
ich hab dir auch ein Bild meiner Parameter angehängt.

Nochmals vielen Dank

Tom

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 25. Nov. 2022 09: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 Thomas C. 10 Unities + Antwort hilfreich

Moin

Fehler vom Amt. Die ganzen CustomPropertyFormat Properties existieren nur, wenn die Eigenschaft ExposedAsProperty auf True steht. So müsste es gehen:

Code:

Dim sPath As String = "C:\Pfad\zur\Vorlage\Vorlagendatei.ipt" '<--- anpassen bitte

Dim oApp As Inventor.Application = ThisApplication
Dim oTargetDoc As PartDocument=ThisDoc.Document
Dim oSourceDoc As PartDocument

Try
    oSourceDoc= oApp.Documents.Open(sPath, False)
Catch

End Try

If oSourceDoc Is Nothing Then Exit Sub

Dim oParam As UserParameter
Dim oNewParam As UserParameter
For Each oParam In oSourceDoc.ComponentDefinition.Parameters.UserParameters
    Try
        oNewParam = oTargetDoc.ComponentDefinition.Parameters.UserParameters.Item(oParam.Name)
    Catch
        oNewParam= oTargetDoc.ComponentDefinition.Parameters.UserParameters.AddByValue(oParam.Name,oParam.Value,oParam.Units)

        oNewParam.Comment = oParam.Comment
oNewParam.ExposedAsProperty = oParam.ExposedAsProperty
If oNewParam.ExposedAsProperty=True Then
        oNewParam.CustomPropertyFormat.Precision  = oParam.CustomPropertyFormat.Precision
        oNewParam.CustomPropertyFormat.PropertyType  = oParam.CustomPropertyFormat.PropertyType
        oNewParam.CustomPropertyFormat.ShowLeadingZeros  = oParam.CustomPropertyFormat.ShowLeadingZeros
        oNewParam.CustomPropertyFormat.ShowTrailingZeros = oParam.CustomPropertyFormat.ShowTrailingZeros
        oNewParam.CustomPropertyFormat.ShowUnitsString = oParam.CustomPropertyFormat.ShowUnitsString
        oNewParam.CustomPropertyFormat.Units = oParam.CustomPropertyFormat.Units
End If
oNewParam.DisplayFormat = oParam.DisplayFormat
        oNewParam.IsKey = oParam.IsKey
        oNewParam.ModelValueType=oParam.ModelValueType
        oNewParam.Precision = oParam.Precision

        If oParam.ExpressionList IsNot nothign Then
            If oParam.ExpressionList.Count>0 Then
                oNewParam.ExpressionList.SetExpressionList(oParam.ExpressionList.GetExpressionList,False)
            End If
        End If
    End Try
Next


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 28. Nov. 2022 08:01    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

Hi Ralf!!

das funktioniert perfekt!!! und kaum spürbar. Vielen Vielen Dank!!

eine Frage habe ich noch
Wenn ich da weiter rumkonfigurieren muss - und z.B. Parameter verändere resp. ergänze, muss ich dann den bestehenden Parameter zuerst löschen?
Wie kann ich das auf einfache Art und Weise up to date halten???

Danke nochmals für deinen Support

TC

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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

Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 28. Nov. 2022 08:25    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

Hi Ralf

es gibt anscheinend doch noch ein Problem.
Wenn ich ein Bauteil aktualisiere gehts gut.
Bei einer Baugruppe geht das aber nicht - muss ich dann in dem Fall noch eine Baugruppe anlegen mit denselben Parametern???

die Meldung ist:

Das COM-Objekt des Typs "Inventor._DocumentClass" kann nicht in den Schnittstellentyp "Inventor.PartDocument" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{29F0D463-C114-11D2-B77F-0060B0F159EF}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)).


Danke vorab
TC

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 28. Nov. 2022 09:32    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 Thomas C. 10 Unities + Antwort hilfreich

Moin

Ich bin davon ausgegangen, das von Bauteil zu Bauteil kopiert werden soll. Ändere die Zeile

Code:
Dim oTargetDoc As PartDocument=ThisDoc.Document

in
Code:
Dim oTargetDoc As Document=ThisDoc.Document

Ist etwas unsauber, sollte aber hier keine Probleme verursachen. Außer du lässt das in einer Zeichnung laufen.
Da ist übrigens noch ein Tippfehler in "Nothing" in der Zeile

Code:
If oParam.ExpressionList IsNot Nothing Then

Das der keinen Fehler wirft...interessant.

Das kommt ein wenig darauf an wie das aktuell halten aussehen soll.
Das Löschen von Parametern im Zieldokument, die im Quelldokument gelöscht wurden, funktioniert nicht unbedingt. Im Zieldokument kann nicht zwischen kopierten und anderen, selbst erstellten Parametern unterschieden werden. Hier müsste erst ein Marker, z.B. ein eindeutiger Eintrag im Kommentarfeld oder ein eindeutiger Teil im Parameternamen vorgehalten werden, um fälschliches Löschen zu verhindern. Außerdem lassen sich Parameter in Verwendung nicht löschen. Ein pauschales Drüberbügeln halte ich grundsätzlich für sehr fehleranfällig.

Beim Aktualisieren kommt es darauf an was sich ändert. Es müsste jeder Wert erst geprüft und nur die Abweichungen aktualisiert werden. Das ist etwas Schreibarbeit. Ändert sich aber der Typ z.B. von Numerisch in Text, muss meines Wissens gelöscht und neu angelegt werden. Muss ich ausprobieren. Da könnte es auch wieder zu Problemen mit verwendeten Parametern kommen, die sich dann nicht löschen lassen. So eine Typänderung, falls sie direkt möglich ist, könnte auch Folgefehler auslösen, wenn der Parameter als Teil eines anderen Parameters verwendet wurde.
Ein paar Entscheidungen muss man auch noch treffen. Soll z.B. in einem Parameter mit Werteliste der aktuelle Wert geändert werden, weil in der Liste einer dazu gekommen ist oder nur die Liste ergänzen? Wenn der selektierte Wert in der Liste im Zieldokument im Quelldokument nicht mehr vorhanden ist und im Zieldokument ebenfalls gelöscht wird, welchen Wert soll der Parameter annehmen?

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thomas C.
Mitglied



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

Beiträge: 326
Registriert: 20.05.2003

Diverse Inventorsysteme

erstellt am: 28. Nov. 2022 10: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

Hi Ralf

man - was du dir da für ne Arbeit antust - ich krieg langsam ein schlechtes Gewissen!!!

das mit dem Parameter updaten bezieht sich nur darauf, falls sich mal ein Eintrag in der Liste ändert. Es soll eigentlich kein Parameter gelöscht werden, auch ändert sich die Art des Parameters (text oder numerisch) nicht. Was sein kann ist, dass es eventuell einen zusätzlichen Parameter gibt.
Bei Zeichnungen werden keine Parameter benötigt, da alle relevanten Informationen aus dem Bauteil/der Baugruppe kommen.

Nochmals vielen vielen Dank!!!

lg
Tom

------------------
Inventor ist cool...
Inventor ist .... anders...
VAULT macht den Braten erst fett..  ;-)

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: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 30. Nov. 2022 10:54    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 Thomas C. 10 Unities + Antwort hilfreich

Hallo

Sag mir einfach wo ich die Rechnung hinschicken soll, wenn es deinem Gewissen gut tut. 

Ein neuer, zusätzlicher Parameter wird einfach ergänzt.
Ein gelöschter Parameter im Quelldokument wird nicht im Zieldokument gelöscht. Erstens weil das mit verwendeten Parametern nicht funktioniert und zweitens weil ich Löschen im Hintergrund immer für fatal halte.
Ich bin mir nicht sicher ob das Aktualisieren der Multivaluelisten so funktioniert. Es sollte eine bestehende Liste mit neuen Werten ergänzt werden. Wurde ein Wert der Werteliste in der Quelldatei gelöscht, wird er im Zieldokument auch entfernt. Ist der zu entfernende Wert der aktuell ausgewählte, bekommt man eine Meldung angezeigt.

Code:

Dim sPath As String = "C:\Pfad\zur\Vorlage\Vorlagendatei.ipt" '<--- anpassen bitte

Dim oApp As Inventor.Application = ThisApplication
Dim oTargetDoc As Document=ThisDoc.Document
Dim oTargetParams As UserParameters = oTargetDoc.ComponentDefinition.Parameters.UserParameters
Dim oSourceDoc As PartDocument

Try
    oSourceDoc= oApp.Documents.Open(sPath, False)
Catch
End Try

If oSourceDoc Is Nothing Then Exit Sub

Dim oSourceParams As UserParameters = oSourceDoc.ComponentDefinition.Parameters.UserParameters

Dim oSourceParam As UserParameter
Dim oNewParam As UserParameter
For Each oSourceParam In oSourceParams
    Try
        oNewParam = oTargetParams.Item(oSourceParam.Name)
    Catch
        oNewParam= oTargetParams.AddByValue(oSourceParam.Name,oSourceParam.Value,oSourceParam.Units)
    End Try
   
    If oNewParam IsNot Nothing Then
        If oNewParam.ExpressionList IsNot Nothing Then
            If oSourceParam.ExpressionList IsNot Nothing Then
                If oSourceParam.ExpressionList.Count>0 Then
                    Dim sNewExList() As String = oNewParam.ExpressionList.GetExpressionList()
                    Dim sOldExList() As String = oSourceParam.ExpressionList.GetExpressionList()
       
                    If sOldExList.Except(sNewExList) IsNot Nothing Then
                        oNewParam.ExpressionList.SetExpressionList(sOldExList, False)
                    End If
                   
                    Dim dValue As New List(Of String)
                    Dim sEx As String
                    For Each sEx In sOldExList
                        dValue.Add(oTargetDoc.ComponentDefinition.Parameters.GetValueFromExpression(sEx, oNewParam.Units).ToString)
                    Next
                    If dValue.Contains(oNewParam.Value.ToString) = False Then
                        MsgBox("Der aktuelle Wert von Parameter " & oNewParam.Name & " ist nicht mehr in der Werteauswahlliste enthalten. Es wird der erste Listenwert als aktuell gewählt.", MsgBoxStyle.Critical, "iLogic")
                        oNewParam.Expression=oNewParam.ExpressionList.Item(1)
                    End If
                End If
            End If
        Else
            If oSourceParam.ExpressionList IsNot Nothing Then
                If oSourceParam.ExpressionList.Count>0 Then
                    oNewParam.ExpressionList.SetExpressionList(oSourceParam.ExpressionList.GetExpressionList,False)
                End If
            End If   
        End If
           
        oNewParam.Comment = oSourceParam.Comment
        oNewParam.ExposedAsProperty = oSourceParam.ExposedAsProperty
        If oNewParam.ExposedAsProperty=True Then
            oNewParam.CustomPropertyFormat.Precision  = oSourceParam.CustomPropertyFormat.Precision
            oNewParam.CustomPropertyFormat.PropertyType  = oSourceParam.CustomPropertyFormat.PropertyType
            oNewParam.CustomPropertyFormat.ShowLeadingZeros  = oSourceParam.CustomPropertyFormat.ShowLeadingZeros
            oNewParam.CustomPropertyFormat.ShowTrailingZeros = oSourceParam.CustomPropertyFormat.ShowTrailingZeros
            oNewParam.CustomPropertyFormat.ShowUnitsString = oSourceParam.CustomPropertyFormat.ShowUnitsString
            oNewParam.CustomPropertyFormat.Units = oSourceParam.CustomPropertyFormat.Units
        End If
        oNewParam.DisplayFormat = oSourceParam.DisplayFormat
        oNewParam.IsKey = oSourceParam.IsKey
        oNewParam.ModelValueType = oSourceParam.ModelValueType
        oNewParam.Precision = oSourceParam.Precision
    End If
Next


------------------
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)2023 CAD.de | Impressum | Datenschutz