Ein schönes System
Konstruktion aus Stahlbeton, Holz und Glas – gerechnet bei Burges und Döhring. Interessant daran ist unter anderem die schräge Holzdecke – bzw. deren begrenzende Polygonpunkte.
Die entstanden aus dem Lagerungspunkten im Grundriss mit einer Projektion auf die Decken-Ebene. Nun hat die Baustatik zwar Werkzeuge zum errechnen von Durchstoßpunkten – so auch zwischen einer Gerade und einer Ebene – aber in diesem Fall wäre das mit den interaktiven Werkzeugen ein arges Geklicke geworden: Es geht letztlich um knapp 100 Punkte, deren Projektion hätten ermittelt werden müssen.
Statt dessen kam hier ein Makro zum Einsatz. Das Makro kann von jedermann im Quellcode per “Optionen –> Makro –> Makro herunterladen” unter dem Namen “Durchstosspunkte.cs” eingesehen, verändert und wiederverwendet werden.
Im Makro passiert folgendes: Zunächst wird eine Ebene erzeugt, und zwar durch die Knoten 131,99 und 154:
INode n1 = (INode)context.TargetDocument.FindObject("131", typeof(Node));
INode n3 = (INode)context.TargetDocument.FindObject("99", typeof(Node));
INode n2 = (INode)context.TargetDocument.FindObject("154", typeof(Node));
XPlane3d plane3d = new XPlane3d(n1.Punkt, n2.Punkt, n3.Punkt );
Dann gibt es eine Schleife über alle derzeit ausgewählten Knoten:
foreach( INode node in context.TargetDocument.GlobalSelection.GetObjects<INode>())
Darin wird die Position des aktuellen Knotens und der Z-Einheitsvektor verwendet, um eine Linie zu definieren. Die wird dann einfach mit der zuvor definierten Ebene geschnitten:
XLine3d line3d = new XLine3d(node.Punkt, XVector3d.UnitZ);
XPoint3d? result = GeometryHelper.Intersection(plane3d, line3d);
Wenn es einen Schnittpunkt gibt, dann wird an der Stelle des Schnittpunktes ein neuer Knoten angelegt – fertig sind die Projektionen.
Node newNode = new Node();
newNode.X = result.Value.x;
newNode.Y = result.Value.y;
newNode.Z = result.Value.z;
JA: Die Makros in der Baustatik sind in der Tat unheimlich mächtig – und haben in diesem Fall auch jede Menge Handarbeit erspart…