Makros in 'Baustatik'


Thomas Wölfer
Thomas Wölfer

24. Juli 2007


Die neue Baustatik-Umgebung (zur Zeit mit dem Faltwerk und dem Dachprogramm) ist vollständig programmierbar - wer also will, kann eigene "Makros" schreiben, um den Funktionsumfang zu erweitern. Die Programmiermöglichkeit geht dabei sehr weit: Man kann den eingebauten Makro-Editor verwenden (die einfachste aber am wenigsten komfortable Methode), aber auch die (kostenlosen) Express-Ausgaben der Entwicklungsumgebungen von Microsoft - bis hin zum professionellen Visual Studio.

Ich habe vor im Laufe der Zeit an dieser Stelle häufiger auf die Makros einzugehen, heute will ich aber nur ein kurzes Beispiel für den Einstieg anbringen: Programmiert wird dabei nicht mit einem der externen Tools, sondern mit dem einfachen eingebauten Makro-Editor.

Um ein neues Makro anzulegen, klickt man auf Optionen -> Makro -> Makro erstellen.

Das öffnet ein Fenster, in dem man verschiedene Dinge eingeben kann:

  • Makroname: Das ist der Name, unter dem das Makro später wieder gefunden werden kann.
  • Namensraum: Für den Anfang uninteressant. Lassen Sie hier ruhig "MeineMakros" stehen.
  • Kurzbeschreibung: Ein kurzer Text, der das Makro beschreibt. Dieser Text erscheint später hinter dem Namen des Makros.
  • Dateiname: Name der Datei, in der das Makro abgelegt werden soll.
  • Programmiersprache: Entweder CSharp (C#) oder VisualBasic - meine Beispiele werden alle in CSharp verfasst sein. (Mit den externen Tools wie Visual Studio (Express) können Sie auch in anderen Sprachen programmieren - jede .Net fähige Sprache ist uns Recht. [Hint: Nehmen Sie C#])

Dann klickt man "Erstellen" - und dann hat man auch schon sein erstes eigenes Makro. Das wird in einem Textfenster angezeigt, in dem man auch editieren kann. Das Makro tut zwar noch nicht viel - man kann es aber bereits laufen lassen. Das geht, indem man auf den grünen Pfeil in der Werkzeugleiste des Editors klickt: Das Makro wird dann ausgeführt - und zeigt eine Meldungsbox an.

Im folgenden wird das Makro nun erweitert, um Knoten für eine Faltwerksdatei zu erzeugen.

Ganz oben im Makro-Editor sehen Sie die Zeile "using System;" - direkt darunter fügen Sie dann die folgende Zeile ein:

using DIE.Applications.Faltwerk.Objects.Nodes;

Damit wird der Namensraum der Knoten (Nodes) dem Makro bekannt gemacht. Was ein Namensraum ist müssen Sie eigentlich nicht wissen - was Sie wissen müssen ist: Wegen dieser Zeile können Sie später im Makro die Objekte vom Typ "Node" (die Knoten) verwenden.

Dann kommen einen Zeilen, die automatisch für Sie erzeugt wurden und nur der Infrastruktur dienen: Die können Sie getrost ignorieren - der interessante Teil kommt bei der Zeile:

public override void Execute(IExecuteCommandContext context)

Bei dieser Zeile startet das eigentliche Makro: Im automatisch erzeugten Code finden Sie im Funktionskörper der Funktion "Execute" den Ausdruck, der das Meldungsfenster anzeigt. Den können Sie eigentlich löschen, und dann das gewünschte Makro schreiben: Das Makro soll einfach ein regelmässiges Feld aus Knoten erzeugen. Das geschieht mit 2 Schleifen: In der einen wird der Wert für x gesetzt, die andere (innere) setzt einen Wert für Y. Die Z-Koordinate wird einfach immer auf 0 gesetzt. Das sieht dann so aus:

for( double x =0; x<12; x+=4)
{
   for( double y =0; y<7; y++)
   {

X nimmt also die Werte "0", "4", und "8" an. Für jeden dieser Werte nimmt Y alle Werte von "0" bis "6" an. Mit diesen Werten wird dann ein Knoten erzeugt, und dem neuen Knoten werden seine Koordinaten zugewiesen:

 Node node = new Node();
 node.X = x;
 node.Y = y;
 node.Z = 0.0;

Zuletzt muss der Knoten noch in das aktuelle Dokument getan werden: Dadurch erscheint er auch in der Dokumenten-Ansicht, in den graphischen Fenstern und in der Tabellen-Ansicht:

context.TargetDocument.AddObject( node);

Wie man sieht: Die Sache ist wirklich einfach - und ungeheuer mächtig. Mit Makros können Sie nicht nur Objekte erzeugen - Sie können diese auch verändern, Sie können Ergebnisse erfragen - und unter Umständen berechnungen auf Basis der Schnittgrößen durchführen, die wir von Haus aus nicht mitliefern. Und: Makros können auch eigene Fenster haben - wer will kann also auch komplett eigene Dialogboxen programmieren. Ich will versuchen, alle diese Bereiche hier in Zukunft abzudecken, da die Dokumentation zu den Makros momentan leider sehr spärlich ist.

Knotenfeld.cs (.6 KB)