Jetzt habe ich mich etwas mit dem Thema befassen können und bin nun bei zwei Vorschlägen/Varianten gelandet. Um die Programmierung komme ich auch nicht herum, aber gebt der Sache einen Versuch!
Es ist ja möglich einen (Benutzer-)Parameter in einen Skizzentext einzubinden. Deshalb ist es nur nötig eine Verbindung zwischen dem Parameter und einem iProperty herzustellen. Das mache ich mit iLogic. Die Regel wird dem Ereignisauslöser bei iProperty-Änderung angestoßen.
Nun zu den beiden Varianten:
iLogic-Regel im Einzelteil
Code:
'dem Benutzerparameter "Nr" wird der Wert eines iProperty zugewiesen
' der Parameter muss bereits existieren
Parameter("Nr") = iProperties.Value("Project", "Part Number")
InventorVb.DocumentUpdate()
Simpler Code. Der Parameter (im Bsp. „Nr“) muss aber vorher von Hand erstellt werden, sonst tritt ein Fehler auf.
externe Regel
Hier wird der Parameter durch die Regel erstellt (deshalb ein paar Zeilen mehr). Im Bauteil muss nur die externe Regel beim Ereignisauslöser gesetzt werden. Ggf. muss man die Ausführung einmal antriggern, z.B. indem man ein iProperty ändert. Dann steht der Parameter zur Verfügung. Die ‚zentrale Ablage‘ des Codes als externe Regel sehe ich hier auch als Vorteil. Aber Vorsicht: den Namen des Parameters darf man später in der Regel nicht mehr ändern, sonst existieren später in den Bauteilen verschiedene Parameter und nur einer davon wird mit dem iProperty synchron gehalten!
Code:
'From https://www.cadlinecommunity.co.uk/hc/en-us/articles/203139401
' reworked, KraBBy 2020-01-30Const oHoldingPositionName As String = "Prt_No" 'KraBBy: Name of the Parameter
Dim oValue As String = iProperties.Value("Project", "Part Number") 'Value: iProperty
Dim oDoc as Object = ThisApplication.ActiveDocument
'Check to see if this is a part file
If oDoc.DocumentType <> kPartDocumentObject Then
' MessageBox.Show("This rule can only be run in a " & DocType & " file - exiting rule...", "Cadline Community")
' KraBBy: i don't want a message
Return
End If
Dim oPartCompDef As PartComponentDefinition = oDoc.ComponentDefinition
Dim oNewParameter As Parameters = oPartCompDef.Parameters
Dim oUParameter As UserParameters = oNewParameter.UserParameters
Dim oParam As Parameter
If ""=oValue Then MsgBox("iProperty 'part No.' is empty!")
Try
oParam = oUParameter.Item(oHoldingPositionName) 'get the existing Param.
oParam.Value = oValue 'change/update its value
'MsgBox("Param. changed") 'for debugging
Catch
'Parameter doesn't exist, create it!
oParam = oUParameter.AddByValue(oHoldingPositionName, (oValue), "text")
'MsgBox("Param. created") 'for debugging
End Try
oDoc.Update() 'Updates the document
anbei habe ich beide Varianten in ein Beispiel gepackt
(edit: ext. Regel:
iProp_As_Param.iLogicVb.txt .txt an der Dateiendung entfernen...
)
------------------
Gruß KraBBy
[Diese Nachricht wurde von KraBBy am 30. Jan. 2020 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP