Hello. I have a difficulty with creating a surface that has a hole inside. I need to do it in Python (need for for loops) but when I try to find out if there are any surfaces covering other surfaces with IntersectAll all I get is array full of zeros.
This is the code that i used:
import clr
import os
import traceback
# Import openpyxl
try:
import openpyxl
from openpyxl import load_workbook
except ImportError:
raise Exception(“Moduł openpyxl nie jest dostępny. Zainstaluj go w środowisku Dynamo.”)
# DesignScript (Dynamo) Geometry
clr.AddReference(“ProtoGeometry”)
from Autodesk.DesignScript.Geometry import \*
polyline_geometry_isclosed_list = IN\[0\]
filtered_polylines = IN\[1\]
excel_path = IN\[2\]
circle_surface = IN\[3\]
circle_objects = IN\[4\]
# ================= ZMIENNE =================
surfaces = [ ]
errors = [ ]
polyline_surface_pairs = [ ]
debug_lisp_entries = [ ]
intersect_data = [ ]
circle_surface_pairs = list(zip(circle_objects, circle_surface))
for i, (polyline, geometry, is_closed) in enumerate(polyline_geometry_isclosed_list):
if geometry **is** **not** None **and** is_closed == True:
try:
srf = Surface.ByPatch(geometry)
surfaces.append(srf)
errors.append(None)
polyline_surface_pairs.append(\[polyline, srf\])
except Exception **as** e:
surfaces.append(None)
errors.append(traceback.format_exc())
polyline_surface_pairs.append(\[polyline, None\])
else:
surfaces.append(None)
errors.append(“Brak geometrii lub niezamykanie”)
polyline_surface_pairs.append(\[polyline, None\])
polyline_surface_pairs.extend(circle_surface_pairs)
intersections = \[\]
int_areas = \[\]
errors = \[\]
surfaces_all = list({pair\[1\] for pair in polyline_surface_pairs if pair\[1\] **is** **not** None})
for i, (polyline1, surface1) in enumerate(polyline_surface_pairs):
area_1 = surface1.Area
total_area = 0
for surface2 in surfaces_all:
if surface2 == surface1:
continue
try:
area_2 = surface2.Area
if area_1 > area_2:
# Intersect surface1 with surface2
intersection = surface1.IntersectAll(\[surface2\])
if intersection **and** isinstance(intersection, list):
for geom in intersection:
if hasattr(geom, "Area"):
total_area += geom.Area
except Exception **as** e:
errors.append(f"Błąd IntersectAll dla surface1\[{i}\] z inną powierzchnią: {str(e)}")
int_areas.append(total_area)
And visual representation of a problem (I dont want to create hatches :))




