Lichtmastenplatzierung

Einer der vielen praktischen Anwendungsfälle von Dynamo ist das dynamische Platzieren einzelner Objekte entlang eines 3D-Profilkörpermodells. Häufig müssen Objekte an Positionen platziert werden, die unabhängig von den eingefügten Querschnitten entlang des 3D-Profilkörpers sind. Dies manuell zu erledigen ist sehr mühsam. Wenn sich die horizontale oder vertikale Geometrie des 3D-Profilkörpers ändert, ist ein erheblicher Überarbeitungsaufwand erforderlich.

Ziel

🎯 Platzieren Sie Lichtmast-Blockreferenzen entlang eines 3D-Profilkörpers an Stationswerten, die in einer Excel-Datei angegeben sind.

Wichtige Konzepte

  • Lesen von Daten aus einer externen Datei (in diesem Fall Excel)

  • Organisieren von Daten in Wörterbüchern

  • Steuern von Position/Skalierung/Drehung mithilfe von Koordinatensystemen

  • Platzieren von Blockreferenzen

  • Visualisieren von Geometrie in Dynamo

Kompatibilität der Versionen

Dieses Diagramm wird in Civil 3D 2020 und höher ausgeführt.

Datensatz

Laden Sie zunächst die folgenden Beispieldateien herunter, und öffnen Sie dann die DWG-Datei und das Dynamo-Diagramm.

Die Excel-Datei sollte im selben Verzeichnis wie das Dynamo-Diagramm gespeichert werden.

Lösung

Hier sehen Sie einen Überblick über die Logik in diesem Diagramm.

  1. Excel-Datei lesen und Daten in Dynamo importieren

  2. Elementkanten aus der angegebenen 3D-Profilkörper-Basislinie abrufen

  3. Koordinatensysteme entlang der 3D-Profilkörper-Elementkante an den gewünschten Stationen generieren

  4. Koordinatensysteme zum Platzieren von Blockreferenzen im Modellbereich verwenden

Los gehts!

Abrufen von Excel-Daten

In diesem Beispieldiagramm verwenden wir eine Excel-Datei, um die Daten zu speichern, die Dynamo zum Platzieren der Lichtmast-Blockreferenzen verwendet. Die Tabelle sieht so aus.

Das Lesen von Daten aus externen Dateien (z. B. Excel-Dateien) mit Dynamo ist praktisch, insbesondere dann, wenn auch andere Teammitglieder die Daten nutzen müssen.

Die Excel-Daten werden wie folgt in Dynamo importiert.

Nachdem wir die Daten erstellt haben, müssen wir sie nach Spalten aufteilen (Corridor, Baseline, PointCode usw.), damit sie im restlichen Diagramm verwendet werden können. Eine gängige Methode hierfür ist die Verwendung des List.GetItemAtIndex-Blocks und die Angabe der Indexnummer für jede gewünschte Spalte. Beispiel: Die Spalte Corridor befindet sich bei Index 0, die Spalte Baseline bei Index 1 usw.

Klingt gut, oder? Doch bei diesem Ansatz gibt es ein potenzielles Problem. Was geschieht, wenn sich die Reihenfolge der Spalten in der Excel-Datei in Zukunft ändert? Oder wenn eine neue Spalte zwischen zwei Spalten hinzugefügt wird? Das Diagramm funktioniert dann nicht ordnungsgemäß und muss aktualisiert werden. Sie können das Diagramm für zukünftige Aktionen absichern, indem Sie die Daten in ein Wörterbuch einfügen, wobei die Excel-Spaltenüberschriften die Schlüssel und die übrigen Daten die Werte sind.

Wenn Wörterbücher neu für Sie sind, finden Sie im Abschnitt Wörterbücher in Dynamo weitere Informationen.

Dadurch wird das Diagramm stabiler, da es Flexibilität beim Ändern der Spaltenreihenfolge in Excel ermöglicht. Solange die Spaltenüberschriften gleich bleiben, können die Daten einfach mithilfe des Schlüssels (d. h. der Spaltenüberschrift) aus dem Wörterbuch abgerufen werden. Dies ist die Vorgehensweise beim nächsten Schritt.

Abrufen von 3D-Profilkörper-Elementkanten

Nachdem wir die Excel-Daten importiert haben und bereit für die Arbeit sind, können wir damit einige Informationen zu den 3D-Profilkörpermodellen aus Civil 3D abrufen.

  1. Wählen Sie das 3D-Profilkörpermodell nach seinem Namen aus.

  2. Rufen Sie eine bestimmte Basislinie innerhalb des 3D-Profilkörpers ab.

  3. Rufen Sie eine Elementkante innerhalb der Basislinie anhand ihres Punktcodes ab.

Erstellen von Koordinatensystemen

Als Nächstes generieren wir Koordinatensysteme entlang der 3D-Profilkörper-Elementkanten an den Stationswerten, die wir in der Excel-Datei angegeben haben. Diese Koordinatensysteme werden verwendet, um die Position, Drehung und Skalierung der Lichtmast-Blockreferenzen zu definieren.

Wenn Koordinatensysteme neu für Sie sind, finden Sie im Abschnitt Vektor, Ebene und Koordinatensystem weitere Informationen.

Beachten Sie, dass zum Drehen der Koordinatensysteme hier ein Codeblock verwendet wird, je nachdem, auf welcher Seite der Basislinie sie sich befinden. Dies könnte mithilfe einer Sequenz von mehreren Blöcken erreicht werden, ist aber ein gutes Beispiel für eine Situation, in der es einfacher ist, einfach den Code zu schreiben.

Wenn Codeblöcke neu für Sie sind, finden Sie im Abschnitt Codeblöcke und DesignScript weitere Informationen.

Erstellen von Blockreferenzen

Gleich haben wir es geschafft! Wir verfügen über alle Informationen, die wir benötigen, um die Blockreferenzen tatsächlich platzieren zu können. Als Erstes müssen wir die gewünschten Blockdefinitionen mithilfe der Spalte BlockName in der Excel-Datei abrufen.

Der letzte Schritt ist die Erstellung der Blockreferenzen.

Ergebnis

Beim Ausführen des Diagramms sollten neue Blockreferenzen im Modellbereich entlang des 3D-Profilkörpers angezeigt werden. Wenn der Ausführungsmodus des Diagramms auf Automatisch eingestellt ist und Sie die Excel-Datei bearbeiten, werden die Blockreferenzen automatisch aktualisiert.

Weitere Informationen über die Diagrammausführungsmodi finden Sie im Abschnitt Benutzeroberfläche.

Hier sehen Sie ein Beispiel für die Ausführung des Diagramms mit Dynamo Player.

Wenn Dynamo Player neu für Sie ist, finden Sie im Abschnitt Dynamo Player weitere Informationen.

🎉 Mission erfüllt!

Bonus: Visualisierung in Dynamo

Es kann hilfreich sein, die 3D-Profilkörpergeometrie in Dynamo zu visualisieren, um Kontext bereitzustellen. In diesem speziellen Modell sind die 3D-Profilkörper-Volumenkörper bereits im Modellbereich extrahiert. Diese exportieren wir in Dynamo.

Aber wir müssen noch etwas bedenken. Volumenkörper sind ein relativ "schwerer" Geometrietyp, was bedeutet, dass dieser Vorgang das Diagramm verlangsamt. Es wäre praktisch, wenn es eine einfache Möglichkeit gäbe, auszuwählen, ob wir die Volumenkörper anzeigen möchten oder nicht. Die offensichtliche Antwort ist, einfach den Corridor.GetSolids-Block zu trennen. Dadurch werden jedoch Warnungen für alle nachgeordneten Blöcke angezeigt, was zu einer chaotischen Ansicht führt. Dies ist eine Situation, in der der ScopeIf-Block hilfreich ist.

  1. Beachten Sie, dass der Object.Geometry-Block unten einen grauen Balken aufweist. Dies bedeutet, dass die Blockvorschau deaktiviert ist (Zugriff durch Klicken mit der rechten Maustaste auf den Block). Dadurch muss der Block GeometryColor.ByGeometryColor in der Hintergrundvorschau nicht mit anderer Geometrie um die Anzeigepriorität konkurrieren.

  2. Mit dem ScopeIf-Block können Sie einen ganzen Zweig von Blöcken selektiv ausführen. Wenn die test-Eingabe false ist, werden alle mit dem ScopeIf-Block verbundenen Blöcke nicht ausgeführt.

Hier sehen Sie das Ergebnis in der Dynamo-Hintergrundvorschau.

Ideen

Im Folgenden finden Sie einige Anregungen, wie Sie die Funktionen dieses Diagramms erweitern können.

Fügen Sie eine rotation-Spalte zur Excel-Datei hinzu, die Sie zum Steuern der Drehung des Koordinatensystems verwenden können.

Fügen Sie horizontale oder vertikale Versätze zur Excel-Datei hinzu, sodass die Lichtmasten bei Bedarf von der 3D-Profilkörper-Elementkante abweichen können.

Anstatt eine Excel-Datei mit Stationswerten zu verwenden, generieren Sie die Stationswerte direkt in Dynamo mit einer Anfangsstation und typischem Abstand.

Last updated