Support Forum

[Frage] Node Intersection Point - Schnittpunktnummerierung nicht richtig


Hallo,

ich arbeite gerade an einem Script bei dem eine bereits vorhandene, aus verbundenen Dreiecken bestehende 3D-Fläche (DGM-artig) durch Selektion übernommen und dann in weiterer Folge durch eine variable Anzahl, vertikaler Ebenen zerschnitten und neu aufgeteilt werden soll.

Die Ebenen werden dabei normal auf die X und Y Richtung angeordnet und schneiden die übernommene 3D-Fläche wodurch ein neuer Raster in Flucht der Ebenen entstehen soll. (siehe Screenshots im Anhang)

Um dies zu erreichen habe ich mir mit dem Node IntersectionPoint die Schnittpunkte zwischen den Ebenen und der 3D-Fläche erstellt.
Nun möchte ich die so erhaltenen Schnittpunkte, in Flucht der Schnittebene mit einer 3D-Polylinie neu Verbinden, sozusagen eine über die ganze 3D-Fläche verlaufende Schnittlinie erzeugen.

Das Problem dabei:
Die entstehenden Schnittpunkte zwischen Ebene und 3D-Fläche werden nicht der Reihe nach (von -X nach +X) durchnummeriert, (siehe Anhang "Punktnummern") was dazu führt, dass auch die 3D-Polylinie welche sich an den aufsteigenden Punktnummern orientiert, wild zwischen den Schnittpunkten hin und her springt (siehe Anhang Punktnummern und 3DPolylinie).

Meiner Vermutung nach liegt es am Note IntersectionPoint welcher anscheinend in Flucht der Schnittebene, keine der Reihe nach, vom Anfang bis zum Ende der 3D-Fläche aufsteigende Schnittpunkt-Nummerierungen erstellt.
Wenn man sich die Punktnummerierung ansieht merkt man, dass zuerst die Diagonalen von +X nach -X und anschließend erst die in Y-Richtung verlaufenden 3D-Flächen-Kanten (wieder von +X nach -X) durchnummeriert werden.

Nach welcher Logik werden hier die Punktnummern vergeben?

Grüße,
Mario

Anhänge (2)

Typ: image/jpeg
38-mal heruntergeladen
Größe: 176,72 KiB
Typ: image/jpeg
26-mal heruntergeladen
Größe: 216,75 KiB

Hilfreichste Antwort anzeigen Hilfreichste Antwort verbergen

Hallo Mario,

ich habe mal ein neues Node gemacht, welches aus einem Polyhedron ein BRep macht. (s. NodeBRepFromPolyhedron.zip)
Diese Dateien bitte ablegen unter: D:\Allplan2021\Std\VisualScripts\Geometry\Conversion

VS_DGM_Intersection enthält das VS-Script.

Damit funktioniert das mit der Boolschen Operation Intersection schon mal.

Die Kanten des Schnittkurven-BReps extrahiert man mit NodeGetEdges und vebindet Sie mit NodeBSpline3DJoined.
Dann hast Du Deine Schnittkurve...

Anhänge (3)

Typ: application/zip
829-mal heruntergeladen
Größe: 1,60 KiB
Typ: application/zip
869-mal heruntergeladen
Größe: 1,40 KiB
Typ: image/png
29-mal heruntergeladen
Größe: 17,06 KiB
11 - 14 (14)

Hallo Nemo,

hab das jetzt ausgiebig getestet.
Solange ich nur eine Schnittebene verwende, funktioniert der von dir beschriebene Workflow.
Auch die Schnittpunkte bzw. Splinepunkte werden sauber, der Reihe nach durchnummeriert wodurch sich anschließend auch eine Polylinie erzeugen lässt.

Sobald ich aber eine zweite Schnittebene ergänze, bekomme ich eine Fehlermeldung, welche meiner Meinung nach vom
NodeBSpline3DJoined verursacht wird:

"Joining failed! Curves should meet by end points"

Bis zum Node GetEdges und auch dessen Output, passt alles. (Pro Schnittebene eine SubList mit den zugehörigen Punkten)

Aber anscheinend kann der Node BSpline3DJoined mehrzeilige Listen nicht richtig verarbeiten.
Bei den Möglichkeiten wie die Liste zu Interpretieren ist, hatte ich bei Curves auf "Input lists as a single element per row" gestellt.
(Hab zusätzlich aber auch alle anderen Varianten versucht...)

Ein weiterer, aber eher nebensächlicher Schönheitsfehler des Nodes: Die vom Node BSpline3DJoined erstellten Objekte werden im Modell nicht grün hervorgehoben/markiert, wenn man ihn anklickt - deshalb dacht ich zuerst der Node funktioniert überhaupt nicht

Grüße,
Mario

...scheinbar braucht es noch einen Node zum Verbinden von beliebigen Kurven (mit dem Ergebnis einer Liste von Path3D), der ggf. mehr als einen verbundenen Pfad liefert. Bei dem Node BSpline3DJoined ist das Ergebnis scheinbar immer nur eine BSpline!

Die NOI (C++) hat eine solche Funktion zum automatischen Verbinden von Kurven zu einem/mehreren Path3D. aber an die komme ich ohne Python-Wrapper nicht ran. Mal sehen, ob ich das "zu Fuss" mit Python hinbekomme, in C++ habe ich mir so einen Algorithmus schon mal gebaut...

..so, hier ist der NodeJoinCurves:
Am Eingang können beliebige Kurven sein, allerdings in einer eindimensionalen Liste.
Verschachtelte Listen werden intern "platt" gemacht (flatten).

Am Ausgang erhält man eine Liste von den maximal möglichen verbundenen Curven als Path3D.

Zielort ist derselbe, wie beim vorigen Node.

Anhänge (2)

Typ: application/zip
599-mal heruntergeladen
Größe: 2,13 KiB
Typ: application/zip
590-mal heruntergeladen
Größe: 1,74 KiB

Hallo Nemo,

dazu kann ich nur sagen...genial, DANKE!

Hab den Node schon in mein Script eingebaut und er funktioniert problemlos.
Jetzt hab ich saubere Schnittkanten(-Kurven) mit denen ich weiterarbeiten kann.

Grüße,
Mario

11 - 14 (14)

Verwendung von Cookies:
Um die Webseite optimal gestalten und fortlaufend verbessern zu können, verwendet Allplan Cookies.
Durch die weitere Nutzung der Webseite erklären Sie sich mit der Verwendung von Cookies einverstanden.  -  Mehr Informationen

Schließen