Macro MeshToPart: Difference between revisions
m (minor) |
m ({{Code|code=) |
||
Line 1: | Line 1: | ||
<translate> |
<translate> |
||
<!--T:1--> |
<!--T: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|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}} |
||
==Description== <!--T:2--> |
==Description== <!--T:2--> |
||
Line 10: | Line 10: | ||
</translate> |
</translate> |
||
{{Code|code= |
|||
<syntaxhighlight> |
|||
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart |
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart |
||
Line 45: | Line 45: | ||
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 |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
1.0 |
Date last modified |
None |
FreeCAD Version(s) |
None |
Default shortcut |
None |
See also |
None |
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 errors or 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.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?