Beispielmakro: Stäbe zu Unterzügen


Thomas Wölfer
Thomas Wölfer

22. August 2007


Vorab:

Es gibt Fälle, in denen man vorhandene Stäbe in Unterzüge umwandeln will - und zumindest zur Zeit liefern wir dafür keine fertige Funktion mit. Als Makro ist die Sache aber relativ einfach zu haben: Hier ein Makro, das genau diese Funktion erfüllt - zusammen mit ein paar Anmerkungen.

using System;
using DIE.Framework.ApplicationModell.Commands;
using DIE.Applications.Faltwerk.Objects.Beams;
using DIE.Applications.Faltwerk.Objects.BindingBeams;
using DIE.Framework.ObjectModell;

namespace MeineMakros
{
    public class stab2unterzug : UserCommandBase
    {
      // Initialisierung des Makrobefehls.
        public stab2unterzug() : base(@"stab2unterzug", @"übersetzt stäbe in unterzüge")
        {
        }
        
        // Einsprungsfunktion des Makros
        public override void Execute(IExecuteCommandContext context)
        {
            // alle balken holen (alternativ könnte man auch nur die
            // holen, die momentan ausgewäht sind.)
            IDocObjectCollection beams = context.TargetDocument.GetObjects( typeof(Beam));
            
            // über alle balken iterieren.
            foreach( IBeam beam in beams)
            {
                // für jeden balken einen neuen unterzug anlegen.
                BindingBeam bindingBeam = new BindingBeam();
                
                // all eigenschaften übertragen. die findet man in der
                // referenz-dokumentation (baustatik.chm) für die Objekte unter
                //
                bindingBeam.ObjectName = beam.ObjectName;
                bindingBeam.StartProfile = beam.StartProfile;
                bindingBeam.EndProfile = beam.EndProfile;
                bindingBeam.Material = beam.Material;
                bindingBeam.DesignParameter = beam.DesignParameter;
                bindingBeam.AdditionalProfileRotation = beam.AdditionalProfileRotation;
                bindingBeam.Anfangsknoten = beam.Anfangsknoten;
                bindingBeam.Endknoten = beam.Endknoten;
                bindingBeam.RotLocalX = beam.RotLocalX;
                bindingBeam.StartJoint = beam.StartJoint;
                bindingBeam.EndJoint = beam.EndJoint;
                
                // den nicht mehr benötigten Stab löschen
                context.TargetDocument.RemoveObject( beam);
                
                // den neuen unterzug ins dokument tun
                context.TargetDocument.AddObject( bindingBeam);
            }
        }
    }
}

Wie man sieht: Auch wenn eine bestimmte Funktion nicht von uns mitgeliefert wird - mit wenigen Zeilen kann man sowas leicht selbst nachrüsten. :-)

 stab2unterzug.cs (1.91 KB)