Macro MeshToPart/es: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
 
Line 24: Line 24:
'''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 61:
}}
}}
{{clear}}
{{clear}}

==Enlazar==
==Enlazar==



Latest revision as of 11:08, 23 May 2020

MeshToPart

Descripción
Esta macro convierte las mallas seleccionadas en piezas. Tiene una tolerancia bastante grande, así que utilízala sólo con objetos que no tengan curvas pues de otro modo obtendrás resultados extraños

Versión macro : 1.0
Fecha última modificación : 2011-08-01
Versión FreeCAD : All
Descargar : ToolBar Icon
Autor : Wmayer
Autor
Wmayer
Descargar
ToolBar Icon
Enlace
Versión Macro
1.0
Fecha última modificación
2011-08-01
Versión(es) FreeCAD
All
Acceso directo predeterminado
None
Ver también
None

Descripción

Esta macro convierte las mallas seleccionadas en piezas. Tiene una tolerancia bastante grande, así que utilízala sólo con objetos que no tengan curvas pues de otro modo obtendrás resultados extraños

Guión

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

Enlazar

La discusión en el foro Convert mesh to solid?