AbdelChoufani commited on
Commit
31d88dd
·
1 Parent(s): f1cf635

Fix indentation and exception pairing in create_3d_model

Browse files
Files changed (1) hide show
  1. app.py +17 -16
app.py CHANGED
@@ -123,24 +123,21 @@ def create_3d_model(buildings: List[Dict]) -> trimesh.Scene:
123
  scene = trimesh.Scene()
124
 
125
  for i, building in enumerate(buildings):
126
- # only debug the first 5 to avoid log spam
127
  debug = (i < 5)
128
-
129
  footprint = building["footprint"]
130
  height = building.get("height", 10)
131
  if debug:
132
  print(f"🏗️ Building #{i}: {len(footprint)} points, height={height}")
133
-
134
  if height <= 0:
135
  if debug: print(" ↳ skipping: non-positive height")
136
  continue
137
-
138
- # make the 2D polygon
139
  try:
140
  polygon = sg.Polygon(footprint)
141
  if debug:
142
  print(f" ↳ polygon valid={polygon.is_valid}, area={polygon.area:.2f}")
143
- if not polygon.is_valid:
144
  polygon = polygon.buffer(0)
145
  if debug:
146
  print(f" ↳ after buffer valid={polygon.is_valid}, area={polygon.area:.2f}")
@@ -148,18 +145,21 @@ def create_3d_model(buildings: List[Dict]) -> trimesh.Scene:
148
  if debug: print(" ↳ skipping: invalid or zero-area polygon")
149
  continue
150
  except Exception as e:
151
- if debug: print(f" ↳ skipping: polygon construction error: {e}")
152
  continue
153
 
154
- # extrude: prefer triangle if available, otherwise earcut
155
  try:
156
- extruded = trimesh.creation.extrude_polygon(polygon, height, engine="triangle")
157
- except (ImportError, ValueError) as e:
 
 
 
 
 
 
158
  if debug:
159
- print(f" ↳ triangle engine unavailable ({e}), falling back to earcut")
160
- extruded = trimesh.creation.extrude_polygon(polygon, height, engine="earcut")
161
- if debug:
162
- print(f" ↳ extruded mesh vertices={len(extruded.vertices)}, faces={len(extruded.faces)}")
163
 
164
  # orientation fix
165
  transform_x = trimesh.transformations.rotation_matrix(np.pi/2, (1, 0, 0))
@@ -171,13 +171,14 @@ def create_3d_model(buildings: List[Dict]) -> trimesh.Scene:
171
  if debug: print(" ↳ added to scene")
172
 
173
  except Exception as e:
174
- if debug: print(f" ↳ skipping: extrusion error: {e}")
175
  continue
176
-
177
  print(f"🔧 Final scene.geometry count: {len(scene.geometry)}")
178
  return scene
179
 
180
 
 
181
  def save_3d_model(scene: trimesh.Scene, filename: str) -> bool:
182
  """Export the 3D scene to a GLB file."""
183
  try:
 
123
  scene = trimesh.Scene()
124
 
125
  for i, building in enumerate(buildings):
 
126
  debug = (i < 5)
 
127
  footprint = building["footprint"]
128
  height = building.get("height", 10)
129
  if debug:
130
  print(f"🏗️ Building #{i}: {len(footprint)} points, height={height}")
 
131
  if height <= 0:
132
  if debug: print(" ↳ skipping: non-positive height")
133
  continue
134
+
135
+ # build the polygon
136
  try:
137
  polygon = sg.Polygon(footprint)
138
  if debug:
139
  print(f" ↳ polygon valid={polygon.is_valid}, area={polygon.area:.2f}")
140
+ if not polygon.is_valid or polygon.area == 0:
141
  polygon = polygon.buffer(0)
142
  if debug:
143
  print(f" ↳ after buffer valid={polygon.is_valid}, area={polygon.area:.2f}")
 
145
  if debug: print(" ↳ skipping: invalid or zero-area polygon")
146
  continue
147
  except Exception as e:
148
+ if debug: print(f" ↳ skipping: polygon error: {e}")
149
  continue
150
 
151
+ # **Extrude + orient + add all in one try/except**
152
  try:
153
+ # attempt triangle, else fall back
154
+ try:
155
+ extruded = trimesh.creation.extrude_polygon(polygon, height, engine="triangle")
156
+ except (ImportError, ValueError) as e:
157
+ if debug:
158
+ print(f" ↳ triangle engine error ({e}), falling back to earcut")
159
+ extruded = trimesh.creation.extrude_polygon(polygon, height, engine="earcut")
160
+
161
  if debug:
162
+ print(f" ↳ extruded mesh vertices={len(extruded.vertices)}, faces={len(extruded.faces)}")
 
 
 
163
 
164
  # orientation fix
165
  transform_x = trimesh.transformations.rotation_matrix(np.pi/2, (1, 0, 0))
 
171
  if debug: print(" ↳ added to scene")
172
 
173
  except Exception as e:
174
+ if debug: print(f" ↳ skipping: extrusion/orientation error: {e}")
175
  continue
176
+
177
  print(f"🔧 Final scene.geometry count: {len(scene.geometry)}")
178
  return scene
179
 
180
 
181
+
182
  def save_3d_model(scene: trimesh.Scene, filename: str) -> bool:
183
  """Export the 3D scene to a GLB file."""
184
  try: