Macro MeshToPart/it: Difference between revisions

From FreeCAD Documentation
mNo edit summary
(Updating to match new version of source page)
Line 1: Line 1:
{{Macro/it|Icon=Text-x-python|Name=MeshToPart|Name/it=MeshToPart|Description=Questa macro converte gli oggetti Mesh selezionati in Parti. Ha una tolleranza ampia, quindi è da utilizzare solo con oggetti che non hanno curve altrimenti si ottengono strani risultati|Author=Wmayer}}
{{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|Version=1.0}}


==Descrizione==
==Descrizione==
Line 6: Line 6:




{{Code|code=
<syntaxhighlight>


import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
Line 41: Line 41:
FreeCAD.ActiveDocument.removeObject(name)
FreeCAD.ActiveDocument.removeObject(name)
FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid
FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid
}}
</syntaxhighlight>
{{clear}}
{{clear}}



Revision as of 10:38, 23 September 2016

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

Macro version: 1.0
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

Descrizione

Questa macro converte gli oggetti Mesh selezionati in Parti. Ha una tolleranza ampia, quindi è da utilizzare solo con oggetti che non hanno curve altrimenti si ottengono errori o strani risultati


import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
 
for obj in FreeCADGui.Selection.getSelection():
    if "Mesh" in obj.PropertiesList:
        faces = []      
        mesh = obj.Mesh
        segments = mesh.getPlanarSegments(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

Link

The discussion on the forum Convert mesh to solid?