Macro MeshToPart

From FreeCAD Documentation
Revision as of 20:50, 1 January 2014 by Renatorivo (talk | contribs) (Created page with "{{Macro/fr|Icon=Text-x-python|Name=MeshToPart|Name/fr=MeshToPart|Description=Cette macro convertit certaines mailles en pièces. Il a une grande tolérance, donc utilisez le u...")

File:Text-x-python MeshToPart

Description
Cette macro convertit certaines mailles en pièces. Il a une grande tolérance, donc utilisez le uniquement avec des objets qui n'ont aucunes courbes sinon vous obtiendrez un résultat inattendu.

Auteur: Wmayer
Auteur
Wmayer
Téléchargement
None
Liens
Version Macro
1.0
Dernière modification
None
Version(s) FreeCAD
None
Raccourci clavier
None
Voir aussi
None

This macro converts selected meshes to parts. It has a broad tolerance, so use it only with objects that have no curves otherwise you'll get weird results


 import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
 
 for obj in FreeCADGui.Selection.getSelection():
 	if "Mesh" in obj.PropertiesList:
 		faces = []		
 		mesh = obj.Mesh
 		segments = mesh.getPlanes(0.01) # use rather strict tolerance here
 
 		for i in segments:
 		  if len(i) > 0:
 		     # a segment can have inner holes
 		     wires = MeshPart.wireFromSegment(mesh, i)
 		     # we assume that the exterior boundary is that one with the biggest bounding box
 		     if len(wires) > 0:
 		        ext = None
 		        max_length = 0
 		        for i in wires:		
 		           if i.BoundBox.DiagonalLength > max_length:
 		              max_length = i.BoundBox.DiagonalLength
 		              ext = i
 	        	wires.remove(ext)
 	        	# all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails
 	        	for i in wires:
 	        	   i.reverse()
 	        	# make sure that the exterior wires comes as first in the lsit
 	        	wires.insert(0, ext)
 	        	faces.append(Part.Face(wires))
 
 		shell=Part.Compound(faces)
 		solid = Part.Solid(Part.Shell(faces))
 		name = obj.Name
 		FreeCAD.ActiveDocument.removeObject(name)
 		FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid