[Frage] Zylinder aus CSV erstellen


Hallo Zusammen,
ich versuche mich gerade mit VS an einem PYthonPart mit dem Zylinder anhand einer CSV-Datei erstellt werden sollen. Dabei sollen die Koordinaten (X,Y,Z), die Zylinderhöhe und eine individuelle Farbe (alternativ ein Attributwert) aus der CSV-Ausgelesen werden.
Ich habe dabei im Moment folgende Probleme:

  • Zum einlesen der CSV-Datei wird 2-mal der Befehl ReadPoints benötigt, da mit diesem jeweils nur 3 Werte eingelesen werden können. Dies führt dazu, dass bei der Erstellung der Zylinder 0-Werte vorhanden sind.
  • Beim Zuweisen der Farbe habe ich den Befehl Format verwendet. Der Wert aus der CSV-Datei wird allerdings nicht als integer erkannt und kann somit nicht mit dem Befehl verknüpft werden.
  • Bei der alternative statt der Farbe ein Attribut zu vergeben scheitere ich daran, dass die Zylinder keine Objekt-Liste sind

Für Tipps und Hinweise wäre ich sehr dankbar.
Ich verwende Allplan 2023.

Gruß
Jan

Brücken und Ingenieurbau
VIC Planen und Beraten GmbH

https://www.vic-gmbh.de/

Anhänge (2)

Typ: application/x-sqlite3
504-mal heruntergeladen
Größe: 132,00 KiB
Typ: image/jpeg
60-mal heruntergeladen
Größe: 52,24 KiB

Hilfreichste Antwort anzeigen Hilfreichste Antwort verbergen

In dem Fall würde ich die einzelnen Spalten der CSV-Datei "manuell" lesen (s. read_cylind_vs.png):
Tabelle lesen
Werte von String in double wandeln -> dabei wird die Tabelle zur eindimensionalen Liste
Indices für die Spaltenwerte berechnen
Werte aus Liste holen und in neue Listen tun
Mit 3 Koordinaten-Listen die Mittelpunkte erzeugen
Mit Mittelpunkt-Liste, Radius- und Höhen-Listen die Zylinder erzeugen
Mit Farb-Liste die Zylinder "einfärben"

Anhänge (3)

Typ: image/png
123-mal heruntergeladen
Größe: 255,32 KiB
Typ: image/png
90-mal heruntergeladen
Größe: 163,14 KiB
Typ: text/plain
515-mal heruntergeladen
Größe: 130,00 B
1 - 10 (11)

In dem Fall würde ich die einzelnen Spalten der CSV-Datei "manuell" lesen (s. read_cylind_vs.png):
Tabelle lesen
Werte von String in double wandeln -> dabei wird die Tabelle zur eindimensionalen Liste
Indices für die Spaltenwerte berechnen
Werte aus Liste holen und in neue Listen tun
Mit 3 Koordinaten-Listen die Mittelpunkte erzeugen
Mit Mittelpunkt-Liste, Radius- und Höhen-Listen die Zylinder erzeugen
Mit Farb-Liste die Zylinder "einfärben"

Anhänge (3)

Typ: image/png
123-mal heruntergeladen
Größe: 255,32 KiB
Typ: image/png
90-mal heruntergeladen
Größe: 163,14 KiB
Typ: text/plain
515-mal heruntergeladen
Größe: 130,00 B

..hier noch das VScript zum Testen.

PS: Und nicht vergessen, nach dem Auswahl der Datei auf "Weiter" zu klicken!

Anhänge (1)

Typ: application/zip
507-mal heruntergeladen
Größe: 11,80 KiB

An die Zylinder noch Attribut-Werte zu vergeben, ist sinnlos,
da das Ergebnis des Visaul-Scriptes ein Makro ist.
Von Elementen auf der Makrofolie können keine Attribute ausgewertet werden.

Man müßte das Ganze in einem PytonPart machen, und einzelne Zylinder , Stützen
oder PythonParts erzeugen, und an diese die Attribute dranhängen.
Dazu braucht man dann aber ein Interactor-PythonPart (Fire & Forget) ohne die Möglichkeit
der nachträglichen Aktualisierung...

vielen Dank Nemo, funktioniert wie gewünscht. Die Möglichkeit einen Double Werte mittels Division + Aufrunden zu einem Integer zu wandeln kannte ich noch nicht.
Zur Attribuierung: Ein Interactor-PythonPart wäre kein Beinbruch, da die Informationen sowieso aus der csv-Datei kommen. Aber mit der Einfärbung habe ich eine Möglichkeit zu Filtern, das reicht fürs erste.
Danke dir.

Brücken und Ingenieurbau
VIC Planen und Beraten GmbH

https://www.vic-gmbh.de/

...habe mal noch ein Interactor-PythonPart "Geometrie-Import" gemacht.

Dieses kann man sehr leicht ändern/erweitern, sodass sich auch andere Formen mit anderen Parametern importieren lassen.
Die Reihenfolge der Spalten ist egal. Wichtig für's richtige Einlesen ist die Header-Zeile:
Dort wird nach den Parameter-Namen ("X","Y","Z",Radius","Height","Color") gesucht.

Eine beliebige Anzahl von Attributen kann ebenfalls aus der csv-Datei gelesen werden, und an die geometrischen Elemente geschrieben werden. Dabei dient der Header als Attribut-Name.

Könnte man auch noch dahingehend erweitern, sodass auch Excel-Dateien gelesen werden können.

Damit sollten die Leute, die hier ständig Bohrpfähle importieren müssen, sich erst mal nicht mehr
mit Visual-Scritping abmühen müssen...

Have fun!

Anhänge (3)

Typ: image/png
101-mal heruntergeladen
Größe: 196,26 KiB
Typ: application/zip
507-mal heruntergeladen
Größe: 5,13 KiB
Typ: text/plain
497-mal heruntergeladen
Größe: 191,00 B

wow. Ganz schön beeindruckend, was du da geschrieben hast.
Ich habe derzeit noch das Problem, dass der Z-Vektor negativ sein sollte, da in der Regel der Kopfpunkt bekannt ist. Im Selbstversuch bin ich leider an den Eingabewerten für die Funktion ZDirection bzw. Vector3D gescheitert.

Brücken und Ingenieurbau
VIC Planen und Beraten GmbH

https://www.vic-gmbh.de/

...habe das PythonPart noch etwas erweitert und fehlertoleranter gemacht:

- xlsx-Dateien können verwendet werden
- "X" , "Y", "Radius" und "Height" sind als Spalten notwendig, und müssen Werte enthalten, damit ein Zylinder erstellt wird
- die anderen Spalten können fehlen oder teilweise leer sein
- wenn Spalte "Z" leer oder nicht vorhanden ist, dann wird für Z "0" angenommen
- wenn Spalte "Color" leer oder nicht vorhanden ist, wird die aktuelle Farbe verwendet
- die Höhe kann negativ sein -> in diesem Fall bezeichnet X,Y,Z den "Kopfpunkt", und der Zylinder "geht von dort aus nach unten"

Have fun!

Anhänge (1)

Typ: application/zip
494-mal heruntergeladen
Größe: 5,97 KiB

Es klappt super und spart mir in meinem Projekt enorm Zeit. danke dir.

Brücken und Ingenieurbau
VIC Planen und Beraten GmbH

https://www.vic-gmbh.de/

Hi,

zu dem Thema habe ich auch eine Frage. Wenn ich Koordinaten aus einer CSV Datei einlesen möchte, und diese 4 Spalten hat (x; y; z; Bauteilnummer) wie kann ich zum einen nach der entsprechende Bauteilnummer filtern. Und dann aus dem Punkten den jeweiligen maximalen und minimalen xyz, also die zu einander am weitest entfernten Punkte selektieren?

1 - 10 (11)