Macro MeshToPart/fr: Difference between revisions

From FreeCAD Documentation
m (remplacement des balise <pre> par <syntaxhighlight>)
(Updating to match new version of source page)
Line 1: Line 1:
{{Macro|Icon=Text-x-python|Name=MeshToPart|Description=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|Author=Wmayer}}
=Macro_MeshToPart/fr=

{{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 uniquement avec des objets qui n'ont aucunes courbes sinon vous obtiendrez un résultat inattendu.|Author=Wmayer}}
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



<syntaxhighlight>
<syntaxhighlight>

import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
Line 38: Line 41:


</syntaxhighlight>
</syntaxhighlight>
{{clear}}

<languages/>
{{languages/fr | {{en|Macro_MeshToPart}} {{es|Macro_MeshToPart/es}} {{it|Macro_MeshToPart/it}} }}

Revision as of 18:08, 24 December 2013

File:Text-x-python MeshToPart

Description
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

Author: Wmayer
Author
Wmayer
Download
None
Links
Macro Version
1.0
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
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