mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	Eradicated admesh from TriangleMesh:
TriangleMesh newly only holds indexed_triangle_set and
TriangleMeshStats. TriangleMeshStats contains an excerpt of stl_stats.
TriangleMeshStats are updated when initializing with indexed_triangle_set.
Admesh triangle mesh fixing is newly only used when loading an STL.
AMF / 3MF / OBJ file formats are already indexed triangle sets, thus
they are no more converted to admesh stl_file format, nor fixed
through admesh repair machinery. When importing AMF / 3MF / OBJ files,
volume is calculated and if negative, all faces are flipped. Also
a bounding box and number of open edges is calculated.
Implemented its_number_of_patches(), its_num_open_edges()
Optimized its_split(), its_is_splittable() using a visitor pattern.
Reworked QHull integration into TriangleMesh:
    1) Face normals were not right.
    2) Indexed triangle set is newly emitted instead of duplicating
       vertices for each face.
Fixed cut_mesh(): Orient the triangulated faces correctly.
			
			
This commit is contained in:
		
							parent
							
								
									f484953a5a
								
							
						
					
					
						commit
						8a2a9dba2f
					
				
					 59 changed files with 1056 additions and 1758 deletions
				
			
		|  | @ -286,8 +286,6 @@ void cut_drainholes(std::vector<ExPolygons> & obj_slices, | |||
|      | ||||
|     if (mesh.empty()) return; | ||||
|      | ||||
|     mesh.require_shared_vertices(); | ||||
|   | ||||
|     std::vector<ExPolygons> hole_slices = slice_mesh_ex(mesh.its, slicegrid, closing_radius, thr); | ||||
|      | ||||
|     if (obj_slices.size() != hole_slices.size()) | ||||
|  | @ -316,7 +314,6 @@ void hollow_mesh(TriangleMesh &mesh, const Interior &interior, int flags) | |||
|         remove_inside_triangles(mesh, interior); | ||||
| 
 | ||||
|     mesh.merge(TriangleMesh{interior.mesh}); | ||||
|     mesh.require_shared_vertices(); | ||||
| } | ||||
| 
 | ||||
| // Get the distance of p to the interior's zero iso_surface. Interior should
 | ||||
|  | @ -557,8 +554,7 @@ void remove_inside_triangles(TriangleMesh &mesh, const Interior &interior, | |||
|     new_faces = {}; | ||||
| 
 | ||||
|     mesh = TriangleMesh{mesh.its}; | ||||
|     mesh.repaired = true; | ||||
|     mesh.require_shared_vertices(); | ||||
|     //FIXME do we want to repair the mesh? Are there duplicate vertices or flipped triangles?
 | ||||
| } | ||||
| 
 | ||||
| }} // namespace Slic3r::sla
 | ||||
|  |  | |||
|  | @ -33,7 +33,6 @@ inline void reproject_points_and_holes(ModelObject *object) | |||
|     if (!object || (!has_holes && !has_sppoints)) return; | ||||
| 
 | ||||
|     TriangleMesh rmsh = object->raw_mesh(); | ||||
|     rmsh.require_shared_vertices(); | ||||
|     IndexedMesh emesh{rmsh}; | ||||
| 
 | ||||
|     if (has_sppoints) | ||||
|  |  | |||
|  | @ -205,7 +205,6 @@ inline bool is_on_floor(const SLAPrintObjectConfig &cfg) | |||
| std::vector<XYRotation> get_chull_rotations(const TriangleMesh &mesh, size_t max_count) | ||||
| { | ||||
|     TriangleMesh chull = mesh.convex_hull_3d(); | ||||
|     chull.require_shared_vertices(); | ||||
|     double chull2d_area = chull.convex_hull().area(); | ||||
|     double area_threshold = chull2d_area / (scaled<double>(1e3) * scaled(1.)); | ||||
| 
 | ||||
|  | @ -299,7 +298,6 @@ struct RotfinderBoilerplate { | |||
|     static TriangleMesh get_mesh_to_rotate(const ModelObject &mo) | ||||
|     { | ||||
|         TriangleMesh mesh = mo.raw_mesh(); | ||||
|         mesh.require_shared_vertices(); | ||||
| 
 | ||||
|         ModelInstance *mi = mo.instances[0]; | ||||
|         auto rotation = Vec3d::Zero(); | ||||
|  | @ -437,7 +435,6 @@ Vec2d find_min_z_height_rotation(const ModelObject &mo, | |||
|     RotfinderBoilerplate<1000> bp{mo, params}; | ||||
| 
 | ||||
|     TriangleMesh chull = bp.mesh.convex_hull_3d(); | ||||
|     chull.require_shared_vertices(); | ||||
|     auto inputs = reserve_vector<XYRotation>(chull.its.indices.size()); | ||||
|     auto rotcmp = [](const XYRotation &r1, const XYRotation &r2) { | ||||
|         double xdiff = r1[X] - r2[X], ydiff = r1[Y] - r2[Y]; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Vojtech Bubnik
						Vojtech Bubnik