Macro Extract Wires from Mesh

From FreeCAD Documentation
Revision as of 12:22, 27 September 2017 by Mario52 (talk | contribs) (date)

File:Text-x-python Macro Extract Wires from Mesh

Description
Extracts boundary wires from selected meshes

Macro version: 1
Last modified: 17/12/2016
Author: Yorik
Author
Yorik
Download
None
Links
Macro Version
1
Date last modified
17/12/2016
FreeCAD Version(s)
None
Default shortcut
None
See also
None

Description

Finds boundary wires in selected mesh objects. Boundary wires are formed from all the edges found in the mesh that are shared by only one face, that is, they are "border" edges. The found wires get added to the document (one compound per mesh object), while the mesh itself gets hidden.

Script

#!/usr/bin/python

# This macro will extract wires from selected meshes
# The result is a new Part Compound containing wires, one per original mesh object
# The selected meshes will be hidden but still selected after the operation.
# Warning, it takes a bit of time...

import FreeCAD,FreeCADGui,Part,Draft,DraftGeomUtils,Mesh
for obj in FreeCADGui.Selection.getSelection():
    if obj.isDerivedFrom("Mesh::Feature"):
        shape = Part.Shape()
        shape.makeShapeFromMesh(obj.Mesh.Topology,0.1)
        edges = []
        lut = {}
        for f in shape.Faces:
            for e in f.Edges:
                lut.setdefault(e.hashCode(),[]).append(e)
        for k,v in lut.items():
            if len(v) == 1:
                edges.extend(v)
        if edges:
            wires = DraftGeomUtils.findWires(edges)
            if wires:
                Part.show(Part.makeCompound(wires))
                obj.ViewObject.hide()
Other languages: