Hallo an alle!
Ich habe hier eine iLogic Code, mit der ich Parameter mit gleichem Name weiter an die Bauteile und Baugruppen gebe.
Funktioniert solange es keine Modelzustände in Bauteilen oder Baugruppen sind.
Kann mir jemand helfen dieses Code so umzuschreiben dass es auch mit Modellzuständen funktioniert!
Vielen Dank im Voraus!
Hier ist der iLogic Code:
iLogicVb.UpdateWhenDone = True ' Der Arbeitsbereich wird erst nach dem kompletten Abarbeiten ' dieser Regel aktualisiert und nicht schon jedes mal wenn sich ' darin ein Parameter ändert userParams = ThisDoc.Document.ComponentDefinition.Parameters.UserParameters ' Eine Collection mit allen UserParametern dieser Baugruppe RefParams = ThisDoc.Document.ComponentDefinition.Parameters.ReferenceParameters subDocs = ThisDoc.Document.AllReferencedDocuments.OfType(Of Document) ' Eine Collection mit allen Komponenten dieser Baugruppe For Each oParam In userParams ' Wir gehen durch die Userparameter dieses Dokuments If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable For Each oSubParam In subUserParams ' gehen auch diese durch und schauen If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert End If Next Next End If Next '____________________ For Each oParam In RefParams ' Wir gehen durch die Userparameter dieses Dokuments If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable For Each oSubParam In subUserParams ' gehen auch diese durch und schauen If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert End If Next Next End If Next '_______________________ For Each oSubDoc As Document In subDocs ' Wir gehen nochmal alle Unterkomponenten durch... If iLogicVb.Automation.Rules(oSubDoc) Is Nothing = False Then ' ...und schauen ob diese Regeln haben. Wenn ja,... For Each myRule In iLogicVb.Automation.Rules(oSubDoc) ' ...gehen wir diese alle durch. If myRule.Name = "ParameterUpdate" Then ' Wenn wir eine mit dem Namen "ParameterUpdate" finden... iLogicVb.Automation.RunRuleDirect(myRule) ' ...führen wir diese aus! End If Next End If Next
Hallo an alle!
Ich habe hier eine iLogic Code, mit der ich Parameter mit gleichem Name weiter an die Bauteile und Baugruppen gebe.
Funktioniert solange es keine Modelzustände in Bauteilen oder Baugruppen sind.
Kann mir jemand helfen dieses Code so umzuschreiben dass es auch mit Modellzuständen funktioniert!
Vielen Dank im Voraus!
Hier ist der iLogic Code:
iLogicVb.UpdateWhenDone = True ' Der Arbeitsbereich wird erst nach dem kompletten Abarbeiten ' dieser Regel aktualisiert und nicht schon jedes mal wenn sich ' darin ein Parameter ändert userParams = ThisDoc.Document.ComponentDefinition.Parameters.UserParameters ' Eine Collection mit allen UserParametern dieser Baugruppe RefParams = ThisDoc.Document.ComponentDefinition.Parameters.ReferenceParameters subDocs = ThisDoc.Document.AllReferencedDocuments.OfType(Of Document) ' Eine Collection mit allen Komponenten dieser Baugruppe For Each oParam In userParams ' Wir gehen durch die Userparameter dieses Dokuments If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable For Each oSubParam In subUserParams ' gehen auch diese durch und schauen If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert End If Next Next End If Next '____________________ For Each oParam In RefParams ' Wir gehen durch die Userparameter dieses Dokuments If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable For Each oSubParam In subUserParams ' gehen auch diese durch und schauen If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert End If Next Next End If Next '_______________________ For Each oSubDoc As Document In subDocs ' Wir gehen nochmal alle Unterkomponenten durch... If iLogicVb.Automation.Rules(oSubDoc) Is Nothing = False Then ' ...und schauen ob diese Regeln haben. Wenn ja,... For Each myRule In iLogicVb.Automation.Rules(oSubDoc) ' ...gehen wir diese alle durch. If myRule.Name = "ParameterUpdate" Then ' Wenn wir eine mit dem Namen "ParameterUpdate" finden... iLogicVb.Automation.RunRuleDirect(myRule) ' ...führen wir diese aus! End If Next End If Next
Hi!
not tested, but I think an edit like this feels like it should work:
nicht getestet, aber ich denke, eine Bearbeitung wie diese sollte funktionieren:
For Each oParam In userParams ' Wir gehen durch die Userparameter dieses Dokuments If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf oSubDoc.ComponentDefinition.ModelStates.MemberEditScope = MemberEditScopeEnum.kEditAllMembers 'sets the scope to edit all components subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable For Each oSubParam In subUserParams ' gehen auch diese durch und schauen If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert End If Next oSubDoc.ComponentDefinition.ModelStates.MemberEditScope = MemberEditScopeEnum.kEditActiveMember 'resets the scope to edit the active component Next End If Next
this utilises code that sets the modelstate-scope to edit all members like you would manually here
dies verwendet Code, der den Modelstate-scope so einstellt, dass alle Mitglieder bearbeitet werden können, wie Sie es hier manuell tun würden
(found here: http://www.hjalte.nl/73-ilogic-rules-and-modelstates)
if this code doesn't work the alternative would be to loop trough all model states in a document but I don't like adding even more loops to your code
Wenn dieser Code nicht funktioniert, wäre die Alternative, eine Schleife durch alle Modellzustände in einem Dokument zu ziehen, aber ich mag es nicht, noch mehr Schleifen zu Ihrem Code hinzuzufügen
Personally I like to divide every few loops into a function or sub to increase readability, but that's preference
Ich persönlich mag es, alle paar Loops in eine Funktion oder Unterfunktion aufzuteilen, um die Lesbarkeit zu erhöhen, aber das ist eine Vorliebe
hope this works, happy coding!
Ich hoffe, das funktioniert, viel Spaß beim Codieren!
Hi!
not tested, but I think an edit like this feels like it should work:
nicht getestet, aber ich denke, eine Bearbeitung wie diese sollte funktionieren:
For Each oParam In userParams ' Wir gehen durch die Userparameter dieses Dokuments If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf oSubDoc.ComponentDefinition.ModelStates.MemberEditScope = MemberEditScopeEnum.kEditAllMembers 'sets the scope to edit all components subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable For Each oSubParam In subUserParams ' gehen auch diese durch und schauen If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert End If Next oSubDoc.ComponentDefinition.ModelStates.MemberEditScope = MemberEditScopeEnum.kEditActiveMember 'resets the scope to edit the active component Next End If Next
this utilises code that sets the modelstate-scope to edit all members like you would manually here
dies verwendet Code, der den Modelstate-scope so einstellt, dass alle Mitglieder bearbeitet werden können, wie Sie es hier manuell tun würden
(found here: http://www.hjalte.nl/73-ilogic-rules-and-modelstates)
if this code doesn't work the alternative would be to loop trough all model states in a document but I don't like adding even more loops to your code
Wenn dieser Code nicht funktioniert, wäre die Alternative, eine Schleife durch alle Modellzustände in einem Dokument zu ziehen, aber ich mag es nicht, noch mehr Schleifen zu Ihrem Code hinzuzufügen
Personally I like to divide every few loops into a function or sub to increase readability, but that's preference
Ich persönlich mag es, alle paar Loops in eine Funktion oder Unterfunktion aufzuteilen, um die Lesbarkeit zu erhöhen, aber das ist eine Vorliebe
hope this works, happy coding!
Ich hoffe, das funktioniert, viel Spaß beim Codieren!
Can't find what you're looking for? Ask the community or share your knowledge.