[Frage] Substraction von zwei Füllflächen [Gelöst]

Schlagworte:
  • Filling
  • Python
  • Substraction
  • Area
  • Object
  • Füllflächen
  • Abziehen

Hallo zusammen,

ich suche nach einer Möglichkeit für eine möglichst leichte eine ein Filling Objekt von einem anderen abzuziehen. Bild ist im Anhang.

Ich habe schon versucht, zwei Polygone mit MakeSubstraction von einander abzuziehen, aber das gab mir leider keine funktionierende Geometrie zurück. Bei MakeSubstraction mit Fillings funktioniert leider gar nicht.

Ich weiss, es gäbe die Möglichkeit einen neuen Polygon aus den einzelnen Punkten der beiden Polys zu erstellen aber hoffe es gibt eine leichtere Möglichkeit, irgendwie Füllflächen oder Stilflächen voneinander abzuziehen ohne die 8 Punkte als Polygon abzugreifen.

Gruss Sebastian

Anhänge (1)

Typ: image/png
37-mal heruntergeladen
Größe: 6,63 KiB

Lösung anzeigen Lösung verbergen

Ich habe schon versucht, zwei Polygone mit MakeSubstraction von einander abzuziehen, aber das gab mir leider keine funktionierende Geometrie zurück.

Damit man zwei Polygone voneinander abziehen kann, müssen diese die richtige Orientierung (Umlaufsinn) der Punkte aufweisen. siehe hier:
"Jedes Polygon besteht aus einer oder mehreren Komponenten. Eine Komponente ist ein geschlossener Ring (von Punkten), die je nach Ausrichtung des Rings entweder einen Körper (solid) oder einen Ausschnitt (hole) darstellt (gegen den Uhrzeigersinn ist ein Körper (solid), im Uhrzeigersinn ist ein Ausschnitt(hole))."

Das bedeutet, man muss bei der Konstruktion der Polygone aufpassen, dass beide Polygon gegen den Uhrzeigersinn orientiert und damit "solid" sind. Nur dann kann man das eine Polygon vom anderen abziehen.

Wenn man die Poylgone aus bereits existierenden Füllflächen in Allplan verwendet, muss man diese vorher ebenfalls auf die obige Bedingung hin überprüfen, und ggf. umdrehen. Das macht die Funktion:

err = polygon.NormalizeNoThrow(ePolygonNormalizeType.HATCHING_NORM_TYPE)

Ich habe mal ein Beispiel dazu gemacht (s.polygon_subtraction.mp4)

Anhänge (2)

Typ: video/mp4
91-mal heruntergeladen
Größe: 717,18 KiB
Typ: application/zip
89-mal heruntergeladen
Größe: 3,39 KiB

Ich habe schon versucht, zwei Polygone mit MakeSubstraction von einander abzuziehen, aber das gab mir leider keine funktionierende Geometrie zurück.

Damit man zwei Polygone voneinander abziehen kann, müssen diese die richtige Orientierung (Umlaufsinn) der Punkte aufweisen. siehe hier:
"Jedes Polygon besteht aus einer oder mehreren Komponenten. Eine Komponente ist ein geschlossener Ring (von Punkten), die je nach Ausrichtung des Rings entweder einen Körper (solid) oder einen Ausschnitt (hole) darstellt (gegen den Uhrzeigersinn ist ein Körper (solid), im Uhrzeigersinn ist ein Ausschnitt(hole))."

Das bedeutet, man muss bei der Konstruktion der Polygone aufpassen, dass beide Polygon gegen den Uhrzeigersinn orientiert und damit "solid" sind. Nur dann kann man das eine Polygon vom anderen abziehen.

Wenn man die Poylgone aus bereits existierenden Füllflächen in Allplan verwendet, muss man diese vorher ebenfalls auf die obige Bedingung hin überprüfen, und ggf. umdrehen. Das macht die Funktion:

err = polygon.NormalizeNoThrow(ePolygonNormalizeType.HATCHING_NORM_TYPE)

Ich habe mal ein Beispiel dazu gemacht (s.polygon_subtraction.mp4)

Anhänge (2)

Typ: video/mp4
91-mal heruntergeladen
Größe: 717,18 KiB
Typ: application/zip
89-mal heruntergeladen
Größe: 3,39 KiB

Hallo Nemo,

danke für das Beispiel. Habe die Polygone über tatsächlich über CreateRectangle erzeugt und mein Fehler lag darin, dass ich das Ergebnis der Substraction alles unter einer Variable gesetzt habe statt wie du, das Ergebnis unter 3 verschiedenen Variablen. Und wenn ich natürlich das Ergebnis von dem Polygon, der Intersection und der ErrorGeometry auf das Filling anwende, kann das ja nicht funktionieren.

Danke für die Hilfe und noch ein schönes Wochenende