3030]
3131
3232
33- def flatness (vertices , faces , maxdev = 1.0 ):
33+ def flatness (vertices , faces , maxdev = 0.02 ):
3434 """Compute mesh flatness per face.
3535
3636 Parameters
@@ -41,7 +41,7 @@ def flatness(vertices, faces, maxdev=1.0):
4141 The face vertices.
4242 maxdev : float, optional
4343 A maximum value for the allowed deviation from flatness.
44- Default is ``1.0 ``.
44+ Default is ``0.02 ``.
4545
4646 Returns
4747 -------
@@ -166,9 +166,14 @@ def mesh_flatness(mesh, maxdev=1.0):
166166 This function only works as expected for quadrilateral faces.
167167
168168 """
169- vertices = {key : mesh .vertex_coordinates (key ) for key in mesh .vertices ()}
170- faces = [mesh .face_vertices (fkey ) for fkey in mesh .faces ()]
171- return flatness (vertices , faces , maxdev = maxdev )
169+ dev = []
170+ for fkey in mesh .faces ():
171+ points = mesh .face_coordinates (fkey )
172+ lengths = [distance_point_point (a , b ) for a , b in window (points + points [0 :1 ], 2 )]
173+ l = sum (lengths ) / len (lengths )
174+ d = distance_line_line ((points [0 ], points [2 ]), (points [1 ], points [3 ]))
175+ dev .append ((d / l ) / maxdev )
176+ return dev
172177
173178
174179def mesh_planarize_faces (mesh , fixed = None , kmax = 100 , callback = None , callback_args = None ):
@@ -194,6 +199,16 @@ def mesh_planarize_faces(mesh, fixed=None, kmax=100, callback=None, callback_arg
194199 callback_args : list, optional [None]
195200 A list of arguments to be passed to the callback function.
196201
202+ Returns
203+ -------
204+ None
205+
206+ Examples
207+ --------
208+ .. code-block:: python
209+
210+ #
211+
197212 """
198213 if callback :
199214 if not callable (callback ):
@@ -202,21 +217,36 @@ def mesh_planarize_faces(mesh, fixed=None, kmax=100, callback=None, callback_arg
202217 fixed = fixed or []
203218 fixed = set (fixed )
204219
205- vertices = {key : mesh .vertex_coordinates (key ) for key in mesh .vertices ()}
206- faces = [mesh .face_vertices (fkey ) for fkey in mesh .faces ()]
207-
208220 for k in range (kmax ):
209- planarize_faces (vertices , faces , fixed = fixed , kmax = 1 )
221+
222+ positions = {key : [] for key in mesh .vertices ()}
223+
224+ for fkey in mesh .faces ():
225+ vertices = mesh .face_vertices (fkey )
226+ points = [mesh .vertex_coordinates (key ) for key in vertices ]
227+ plane = bestfit_plane (points )
228+ projections = project_points_plane (points , plane )
229+
230+ for index , key in enumerate (vertices ):
231+ positions [key ].append (projections [index ])
210232
211233 for key , attr in mesh .vertices (True ):
212- attr ['x' ] = vertices [key ][0 ]
213- attr ['y' ] = vertices [key ][1 ]
214- attr ['z' ] = vertices [key ][2 ]
234+ if key in fixed :
235+ continue
236+
237+ x , y , z = centroid_points (positions [key ])
238+ attr ['x' ] = x
239+ attr ['y' ] = y
240+ attr ['z' ] = z
215241
216242 if callback :
217243 callback (k , callback_args )
218244
219245
246+ def mesh_planarize_faces_numpy (mesh , fixed = None , kmax = 100 , callback = None , callback_args = None ):
247+ pass
248+
249+
220250def mesh_planarize_faces_shapeop (mesh ,
221251 fixed = None ,
222252 kmax = 100 ,
@@ -409,20 +439,17 @@ def mesh_circularize_faces_shapeop(mesh,
409439 plotter .draw_faces ()
410440 plotter .draw_edges ()
411441
412- key_index = mesh .key_index ()
413- # vertices = mesh.get_vertices_attributes('xyz')
414- # faces = [[key_index[key] for key in mesh.face_vertices(fkey)] for fkey in mesh.faces()]
415- # fixed = [key_index[key] for key in fixed]
416-
417442 def callback (k , args ):
418- if k % 10 == 0 :
443+ print (k )
444+
445+ if k % 100 == 0 :
419446 dev = mesh_flatness (mesh , maxdev = 0.02 )
420447
421448 plotter .update_vertices (radius = radius )
422449 plotter .update_faces (facecolor = {fkey : i_to_rgb (dev [fkey ]) for fkey in mesh .faces ()})
423450 plotter .update_edges ()
424451 plotter .update ()
425452
426- mesh_planarize_faces_shapeop (mesh , fixed = fixed , kmax = 1000 , callback = callback )
453+ mesh_planarize_faces_shapeop (mesh , fixed = fixed , kmax = 2000 , callback = callback )
427454
428455 plotter .show ()
0 commit comments