Forum Allplan

[Domanda] Mehrere Tragwerksstützen per Liste erstellen (Structural Framing Nodes)

Tags:
  • VisualScripting

Guten Abend.

Ich würde gerne eine oder mehrere Reihen Stützen per VS aus Listen erstellen.
Mit einfachen Zylindern oder den traditionellen Architekturbauteil-Stützen klappt das auch ganz gut, aber sobald ich die Methode auf den StructuralFraming Node "ColumnRect" anwende, wird keine Geometrie erzeugt. (Allplan 2021-1-14, spanische Version)

Im Anhang ein Screenshot und einfaches Beispiel.

Ist das so gewollt oder habe ich da einen Denkfehler drin?

lg,
Stefan

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Allegati (2)

Type: image/png
169 scaricato
Size: 33,52 KiB
Type: application/zip
1120 scaricato
Size: 829,00 B

Show most helpful answer Hide most helpful answer

Hallo Stefan,

leider haben wir die Nodes für StructuralFraming noch nicht komplett auf die Listenfunktionalität und die aktuellen Eingabemöglichkeiten in der Palette (z.B. Referenzpunkt) umgestellt.

Wir können das aber im Rahmen Deines Projektes tun. Welche Nodes haben für Dich die höchste Priorität?

Viele Grüße
Horst

1 - 10 (17)

Der Node ColumnRect ist fehlerhaft. Der arbeitet nicht, wenn mehrere Stützen erzeugt werden.

Anbei der korrigierte Node!
Bitte kopieren nach: ECT\VisualScripts\StructuralFraming

Ein typisches Software-Design-Problem, was aus "schrittweisen" Entstehung dieses Framework resultiert:
Zuerst hat man Nodes gebaut, die nur ein Objekt am Ausgang liefern. Dann wurde es notwendig, mehrere Objekte am Ausgang zu übergeben: Also wurde es so ergänzt, dass der Node am Ausgang ein Objekt oder eine Liste von Objekten ausgibt.

Das war keine gute Idee, denn damit muss man an jedem Eingang unterscheiden: Kommt da ein Objekt oder eine Liste!

Warum hat man die Spezifikation nicht so geändert, dass am Ausgang immer eine Liste rauskommt?
(Wenns nur ein Objekt ist, dann eben eine Liste mit einem Objekt!)

Das wiederum konnte man nicht machen, weil da das VisualScripting schon auf dem Markt war, und bestehende "Ablaufdiagramme" (Visualscripts) nicht mehr funktioniert hätten.

Ich kann das ein bisschen nachvollziehen, weil ich genau diese Entscheidung auch bei meinem Visual-Scripting-Framework treffen musste. Allerdings war das in C++, und da hat mir der Compiler alle Stellen angezeigt, wo der geänderte Rückgabewert "Liste" statt "Objekt" zu Problemen führt! Das geht in Python mangels fehlender Typisierung nicht :-(

So muss der Entwickler jetzt bei jedem Node am Eingang, und bei den erzeugten Elementen die Frage stellen: "Bist Du eine Liste, oder nur ein Objekt". Und das wird an so mancher Stelle eben nicht gemacht, wie auch bei diesem fehlerhaften Node, und wird erst zur Laufzeit erkannt.

Allegati (1)

Type: application/zip
1070 scaricato
Size: 2,48 KiB

Guten Morgen und vielen Dank für den korrigierten Node - funktioniert jetzt einwandfrei! :-)

Ich hab zwar nur bei ColumnRect ausgiebig getestet, aber der gleiche Fehler scheint alle Nodes in StructuralFraming zu betreffen.

Könnte man das Problem, das bestehende Scripts mit erweiterten Nodes nicht ähnlich lösen, wie bei den Smartparts, durch Auswählen der kompatiblen Script-Generation, entweder für jeden Node oder global für das ganze Diagramm?

Und jetzt, da ich so viele automatisch erzeugte Tragwerksstützen habe, stehe ich vor der Frage nach der Grundrissdarstellung:
Kann man die Formateinstellungen wie Layer oder Filling der Tragwerksstützen irgendwie im VS oder auch nach Erzeugung ausserhalb beeinflussen? (ausser durch manuelles Ändern bei jeder einzelnen Stütze)

lg,
Stefan

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Hallo nochmal.

Nach dem weiteren Arbeiten mit meinem Stützenscript habe ich folgende Fragen zum Node ColumnRect:

1. Wenn ich an den Input-Port "Angle" eine Liste übergebe, wird keine Geometrie erzeugt (ähnlich wie in meinem Anfangspost beschrieben)

2. Ich würde auch gerne als "AnchorPoint" als Liste übergeben, mir ist aber nicht klar, welcher Datentyp da zur Verwendung kommt: Integer, String oder etwas anderes?

Mein Ziel ist, aus einer Exceldatei wie im Anhang, alle Stützen eines Geschosses automatisch zu erstellen, um die vom Statiker berechneten Querschnitte ins Architekturmodell zu übernehmen. (Die Spalte "Z" ist noch unbenutzt)

Bin für jede Hilfe dankbar.

lg,
Stefan

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Allegati (1)

Type: image/png
60 scaricato
Size: 10,96 KiB

Der Winkel-Eingang war bisher nicht in den "Kombinationsmöglichkeiten" enhalten.
Aus diesen "Kombinationseingängen" werden die Ergebnisse nach einem bestimmten Muster berechnet.
In richtigen Visual-Scripting-Tools wie Grashopper kann man dabei wählen, wie die Eingänge
"kombiniert" werden sollen:
1. Shortest: Es wird für die kleinste Anzahl von Werten je Eingang ein Ergebnis produziert.
2. Longest: Es wird für die größte Anzahl von Werten je Eingang ein Ergebnis produziert.
3. Cross: Es wird eine Permutation erstellt. Jeder Wert wird mit jedem anderen Wert je Eingang
für eine Ergebnis benutzt.
(s. vs_combining.mp4)

D.h. es gibt Eingänge, wo eine Liste von Werten nicht möglich ist. Die Gründe dafür sind dieselben, wie oben beschrieben. Man hatte das zu Anfang einfach nicht bedacht!

Ich habe das Node entspr. angepasst (s NodeColumnRect.zip)
Wieder an die oben beschriebene Stelle kopieren.

Allegati (2)

Type: video/mp4
1083 scaricato
Size: 309,56 KiB
Type: application/zip
977 scaricato
Size: 2,49 KiB

Hallo Stefan,

leider haben wir die Nodes für StructuralFraming noch nicht komplett auf die Listenfunktionalität und die aktuellen Eingabemöglichkeiten in der Palette (z.B. Referenzpunkt) umgestellt.

Wir können das aber im Rahmen Deines Projektes tun. Welche Nodes haben für Dich die höchste Priorität?

Viele Grüße
Horst

Guten Morgen und vielen Dank für Eure Antworten!

Gerne komme ich auf Horsts Angebot zurück und beschreibe hier mal kurz meinen konkreten Anwendungsfall:

Wir sind ein Architekturbüro und unsere Projekte haben im Regelfall ein Tragwerk des Typs Stahlbetonskelettbau.
In der Entwurfsplanung modellieren wir in Allplan z.Zt. noch mit den "alten" Architektur-Stützen, denen wir eine ganz grobe Vordimensionierung verpassen, z.B. alle mit einem Querschnitt von 40 x 40 cm.
Da der Referenzpunkt bei den Architekturstützen nicht parametrisch gespeichert wird, markieren wir diesen mit einem 2D-Symbol.

Im Anhang ist ein Screenshot eines aktuellen Projektes, ein Wohnungsbau mit insgesamt 10 Geschossen und in Allplan knapp 1400 Stützen. (davon ca. 90% rechteckig, der Rest rund oder Stahlprofil)

Mit fortschreitender Planung werden die Querschnitte aller Stützen mindestens zweimal angepasst: Einmal bei der ersten Vordimensiorung durch den Statiker und ein zweites Mal mit der definitiven statischen Berechnung. Dies ist stets ein enormer Arbeitsaufwand, da wir jede Stütze manuell anpassen und daher meine Motivation dieses Vorgehen mit VS wenigstens teilweise zu automatisieren.
Die Querschnittswerte übergibt unser Statiker traditionell als CAD-Tabelle in DWG (für eine automatische Auswertung unbrauchbar), doch ich habe ihn bereits soweit, dass er uns auch eine Exceltabelle zur Verfügung stellt, evtl. sogar ein IFC-Modell.

Idealerweise würde ich die Stützen gerne von Anfang mit Tragwerksbauteilen modellieren, da diese den Referenzpunkt parametrisch abbilden, und dann im Laufe des Projekts nur die Querschnitte per VS anpassen.
Da es aber noch keinen Node zum Modifizieren von Tragwerksbauteilen gibt, ist mein Ansatz die komplette Neuerzeugung aller Stützen aus einer Exceldatei. (s. Beispiel im Anhang)

Ein Node zum Modifizieren der Geometrieparamter von bestehenden Tragwerksbauteilen wäre aber definitiv hilfreich!

Hinsichtlich der VS-Nodes ColumnRect, ColumnRound und ColumnProfile würde ich mir folgende Features wünschen:

1. Die Möglichkeit an alle Input-Ports auch Listen zu übergeben.
2. Dokumentation zum Input-Port "Anchor-Point": Welches Datenformat? Welche Werte führen zu welchem Ergebnis?
3. Hinzufügen von "FormatProperties" und "Area2DProperties" (wie beim Node ColumnElement) um die Plandarstellung kontrollieren zu können.
4. Hinzufügen von "StandardAttributes" und "AttributeIDValue"

Gerne stehe ich für Fragen und Experimente zur Verfügung :-)

lg,
Stefan

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Allegati (2)

Type: image/png
102 scaricato
Size: 210,96 KiB
Type: image/png
48 scaricato
Size: 10,96 KiB

Hallo Stefan,

vielen Dank für die Beschreibung Deines Anwendungsfalls. Soweit ich sehen kann, können wir Dich bei der Umsetzung Deiner Wünsche unterstützen. So ist z.B. die nachträgliche Änderung von Tragwerksbauteilen mit VS bereits möglich, aber dafür benötigts Du Allplan 2022.

Ich denke, wir beginnen mit dem NodeColumnRect. Ich habe einen neue Version mit einem Beispiel angehängt. Darauf aufbauend können die nächsten Schritte ausgeführt werden. Die Eingabe des AnchorPoint erfolgt jetzt über den Allplan-Standardbutton. Als Datenformat für den Eingang werden Integer-Werte verwendet (Einzelwert oder Liste) und die Punktnummerierung ist

1 2 3
4 5 6
7 8 9

Viele Grüße
Horst

Allegati (2)

Type: application/zip
1037 scaricato
Size: 1,94 KiB
Type: application/zip
1002 scaricato
Size: 3,57 KiB

Vielen Dank für die schnelle Hilfe.
Da komme ich ja mit dem Ausprobieren gar nicht so schnell hinterher...

Ich habe den verbesserten NodeColumnRect mal in meinem Script in Allplan 2022 ausprobiert und das erste Ergebnis ist sehr vielversprechend! Die Auswertung von Winkel und Referenzpùnkt funktioniert hervorragend.

Folgende Anmerkungen habe ich dazu:

1. An den Input-Port "Angle" im Node "Column-Palette" kann ich den Variablentyp Double aus einem ConvertDataType übergeben, bei ColumnRect muss man offenbar einen Angle Output-Port anschliessen. Kann man das ändern? Oder wie kann ich einen Float-Wert aus meiner Exceltabelle in einen Winkelwert umwandeln? (in meinem Script habe ich das umgangen, indem ich bereits in der Exceltabelle Sinus und Cosinus berechne)

2. Sobald ich eine XLSX-Datei mit ReadTable in ein VS lade, kann ich diese Excel-Datei nicht mehr überschreiben. Kann bzw. muss man die Datei mit einem spezifischen Node wieder schliessen?

So ist z.B. die nachträgliche Änderung von Tragwerksbauteilen mit VS bereits möglich, aber dafür benötigts Du Allplan 2022.

Mit welchem Node kann man denn die Werte für Width und Thickness von bestehenden Stützen ändern?

lg und schönes Wochenende,
Stefan

PS:
Mein Script habe ich angehängt. Bin noch blutiger Anfänger im VS. Vielleicht hat ja jemand einen Tip, v.a. wie ich das Auslesen der Quelldaten eleganter lösen kann. :-)

GEA Arquitectos S.L.P.
Calle Gerardo Diego 6A | 41013 Sevilla | Spain

Allegati (1)

Type: application/zip
1005 scaricato
Size: 23,09 KiB

Hallo Stefan,

1. das Problem beim "Angle" in ColumnRect habe ich behoben, bitte NodeColumnRect.py nach ...\etc\VisualScripts\StructuralFraming kopieren.
2. das Problem mit der XLSX-Datei habe ich behoben, bitte TabularDataUtil.py nach ...\etc\PythonPartsFramework\Utils kopieren.

Den Node NodeTableColumns habe ich erweitert, man kann jetzt den Namen direkt in dem Node eingeben und die Konvertierung direkt in dem Node durchführen. Bitte die Dateien ImportExport_deu.xml, ImportExport_spa.xml, NodeReadTable.py, NodeTableColumns.py und NodeTableColumns.pypsub
nach ...\etc\VisualScripts\ImportExport kopieren.

Das Skript hat sich dadurch wesentlich vereinfacht, ich habe es auch angehängt.

In der 2020 haben wir bisher nur die Funktionen für die Änderung der Stützenabmessungen für Python freigegeben. Den Node für die Änderung der Abmessungen erstelle ich und sende ihn Dir morgen zu.

Mit freundlichen Grüßen
Horst

Allegati (2)

Type: application/zip
961 scaricato
Size: 10,11 KiB
Type: application/zip
941 scaricato
Size: 3,38 KiB
1 - 10 (17)