Macro Extract Wires from Mesh/de

Linienzüge aus Netzen extrahieren

Description
Sucht begrenzende Linienzüge in ausgewählten Netzobjekten. Begrenzende Linienzüge werden aus allen Kanten im Netz gebildet, die nur von einer Fläche geteilt werden, d. h. es handelt sich um „Randkanten”. Die gefundenen Linienzüge werden dem Dokument hinzugefügt (eine Verbindung pro Netzobjekt), während das Netz selbst ausgeblendet wird.

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

Beschreibung

Sucht begrenzende Linienzüge in ausgewählten Netzobjekten. Begrenzende Linienzüge werden aus allen Kanten im Netz gebildet, die nur von einer Fläche geteilt werden, d. h. es handelt sich um „Randkanten”. Die gefundenen Linienzüge werden dem Dokument hinzugefügt (eine Verbindung pro Netzobjekt), während das Netz selbst ausgeblendet wird.

Skript

Werkzeugleisten-Symbol

Macro_Extract_Wires_from_Mesh.FCMacro

#!/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()