Macro MeshToPart/sv: Difference between revisions
Renatorivo (talk | contribs) (Created page with "Detta makro konverterar valda nät till delar. Det har en bred tolerans, så använd det bara med objekt som inte har några kurvor, annars kommer du att få konstiga resultat.") |
(Updating to match new version of source page) |
||
Line 6: | Line 6: | ||
<syntaxhighlight> |
<syntaxhighlight> |
||
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) |
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 |
|||
</syntaxhighlight> |
</syntaxhighlight> |
Revision as of 13:59, 8 May 2014
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 |
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 |
Detta makro konverterar valda nät till delar. Det har en bred tolerans, så använd det bara med objekt som inte har några kurvor, annars kommer du att få konstiga resultat.
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