| |
| 6 Tipps für flexible Konstruktionen im Systembau, ein Whitepaper
|
Autor
|
Thema: Makro beim Speichern ausführen (2186 mal gelesen)
|
bacengeugn Mitglied Konstrukteur
Beiträge: 181 Registriert: 10.11.2011
|
erstellt am: 24. Jun. 2014 10:19 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, lassen sich Makros irgendwie beim Speichern der Szene automatisch ausführen? Ich möchte ein Makro benutzen um bei Translationsteilen, denen eine Variable 'l' zugeordnet ist, das Teileattribut Länge automatisch beim Speichern damit abzugleichen. [Diese Nachricht wurde von bacengeugn am 24. Jun. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dide Mitglied
Beiträge: 8 Registriert: 28.09.2007
|
erstellt am: 25. Jun. 2014 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für bacengeugn
Hallo bacengeugn, wie man Deine Aufgabenstellung mittels Makro lösen kann, weiß ich leider nicht. Aber warum erst beim Speichern abgleichen? Mittels "Script einfügen" im Feature des Teils können Teilevariablen ausgelesen/gesetzt werden und/oder mit Attributen abgeglichen werden. Hier ein Beispiel(über Teilevariablen wird das Attribute "Sachnummer" gesetzt/angepasst): //aktives gerechnete Teil in die Node-Variable n übernehmen Node n = Context.ProtocolNode; //Variablen des Teils: VariableSet teilevar = n.VariableSet; //einzelne Teilevariablen: double da = (double)teilevar["da"].Value; double di = (double)teilevar["di"].Value; double b = (double)teilevar["b"].Value; //Neue Sachnummer zusammenstellen; string Name = "Stadi " + di.ToString() + "x" + da.ToString() + "x" + b.ToString() + " - Profil GC"; //MessageBox.Show("NEUE Sachnummer : " + Name); // Teileattribute Sachnummer setzen: n.AttributeSet["$BB"].Value = Name; Ich hoffe, ich konnte damit helfen. Gruß DD
------------------ HICAD 1802.3 Helios 1800.6 Win 7 Professional Intel Core i7-2600 3,4GHz, 16GB RAM NVIDIA Quadro 2000 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bacengeugn Mitglied Konstrukteur
Beiträge: 181 Registriert: 10.11.2011
|
erstellt am: 25. Jun. 2014 15:00 <-- editieren / zitieren --> Unities abgeben:
Danke für den Tip Ich war eben dabei ein Skript zu erstellen, das per Icon gestartet wird, die Werte abgleicht und dann das Speichern übernimmt. Ich hätte es dann zum Speichern verwendet. Aber deine Lösung ist besser weil ich nicht alle Nodes auf ein Translationsteil testen muss und das nicht bei jedem Speichern machen muss. Muss ich das Skript dann in jedem Teil einfügen? So wäre es wiederum aufwändig. [Diese Nachricht wurde von bacengeugn am 25. Jun. 2014 editiert.] [Diese Nachricht wurde von bacengeugn am 25. Jun. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bacengeugn Mitglied Konstrukteur
Beiträge: 181 Registriert: 10.11.2011
|
erstellt am: 25. Jun. 2014 16:18 <-- editieren / zitieren --> Unities abgeben:
Ich würde vermutlich den Weg gehen für unsere Profile bei der Erstellung bereits ein Skript zu verwenden, das ein Translationsteil normal erstellt. Damit es dann bei Änderungen der Länge das Attribut abgleicht müsste irgendwie von vornherein so ein Featureskript bei der Erstellung automatisch mit eingefügt werden. Falls das möglich ist, werde ich die Idee später verfolgen. Für den Moment versuch ich noch die erste Variante zum Laufen zu bringen und da es mein erstes Skript ist und ich nur in C++ einigermaßen fit war mit ein bisschen Java kann vielleicht jemand anmerken was ich besser machen könnte. Es kommt folgende Ausnahme
Unknown attribute type. ISD.CAD.Base.AttributeException StackTrace: bei HiCAD.Data.Attribute bei Script.Search Translation(AssemblyNode parent) bei Script.Main() mein Skript
Code:
using System; using System.Collections; using System.Windows.Forms;using ISD.Scripting; using ISD.BaseTypes; using ISD.Math; using ISD.CAD.Base; using ISD.CAD.Data; using ISD.CAD.Contexts; using ISD.CAD.Interface; class Script : ScriptBase { [Context(typeof(UnconstrainedContext))] public static void Main() { SearchTranslation(Context.ActiveScene.MainAssembly); // Szene speichern Context.ActiveScene.Save(); } private static void SearchTranslation(AssemblyNode parent) { foreach(Node n in Context.Nodes) { if(n.FeatureProtocol[1].Name == "Translationsteil") { //MessageBox.Show("Gefunden"); VariableSet vars = n.VariableSet; if(vars.Contains("l")) AttributeSetExtensions.SetValue(n.AttributeSet,"§03",vars["l"].Value); } } } public static UnconstrainedContext Context { get { return BaseContext as UnconstrainedContext; } } }
Ich hab den Fehler bereits gefunden und abgestellt
[Diese Nachricht wurde von bacengeugn am 26. Jun. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jassir-ben-Hussein Mitglied Dipl. Ing. Maschinenbau
Beiträge: 96 Registriert: 02.03.2011 Ansys 19.1 Hicad 2021 Helios 2021
|
erstellt am: 27. Jun. 2014 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für bacengeugn
Hallo ihr beiden, ich würde auch gerne was mit Skripten machen. Gibt es da irgendwie eine weitergehende Dokumentation oder habt ihr euch das selbst beigebracht? Gruß Malte ------------------ Stell dir vor es geht und keiner kriegts hin! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bacengeugn Mitglied Konstrukteur
Beiträge: 181 Registriert: 10.11.2011
|
erstellt am: 27. Jun. 2014 13:00 <-- editieren / zitieren --> Unities abgeben:
|
Jassir-ben-Hussein Mitglied Dipl. Ing. Maschinenbau
Beiträge: 96 Registriert: 02.03.2011 Ansys 19.1 Hicad 2021 Helios 2021
|
erstellt am: 30. Jun. 2014 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für bacengeugn
|
bacengeugn Mitglied Konstrukteur
Beiträge: 181 Registriert: 10.11.2011
|
erstellt am: 30. Jun. 2014 08:14 <-- editieren / zitieren --> Unities abgeben:
|
bacengeugn Mitglied Konstrukteur
Beiträge: 181 Registriert: 10.11.2011
|
erstellt am: 24. Okt. 2014 16:20 <-- editieren / zitieren --> Unities abgeben:
Ich habe die Lösung inzwischen selbst gefunden. Das vorinstallierte Makro speinam.mac wird beim klicken der Speichern-Taste automatisch aufgerufen. Dort kann man den Aufruf eigener Makros platzieren, die beim speichern ausgeführt werden sollen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |