Macro MeshToPart/it: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
<languages/>
<languages/>
<div class="mw-translate-fuzzy">
{{Macro/it
{{Macro/it
|Name=MeshToPart
|Name=MeshToPart
Line 10: Line 9:
|Date=2011-08-01
|Date=2011-08-01
|FCVersion=All
|FCVersion=All
|Download=[https://www.freecadweb.org/wiki/images/f/fa/]
|Download=[https://www.freecadweb.org/wiki/images/f/fa/Macro_MeshToPart.png ToolBar Icon]
}}
}}
</div>


==Descrizione==
==Descrizione==
Line 24: Line 22:
'''Macro_MeshToPart.FCMacro'''
'''Macro_MeshToPart.FCMacro'''


{{Code|code=
{{MacroCode|code=


import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
Line 61: Line 59:
}}
}}
{{clear}}
{{clear}}

==Vincolo==
==Vincolo==



Latest revision as of 11:08, 23 May 2020

Da Mesh a Part

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 strani risultati

Versione macro: 1.0
Ultima modifica: 2011-08-01
Versione FreeCAD: All
Download: ToolBar Icon
Autore: Wmayer
Autore
Wmayer
Download
ToolBar Icon
Link
Versione macro
1.0
Data ultima modifica
2011-08-01
Versioni di FreeCAD
All
Scorciatoia
Nessuna
Vedere anche
Nessuno

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

Script

ToolBar Icon

Macro_MeshToPart.FCMacro

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

Vincolo

La discussione sul foro Convert mesh to solid?