Macro Extract Wires from Mesh/ru

Макрос Извлечение Ломанных из сетки

Описание
Находит граничные ломанные кривые в выбранных объектах сетки. Граничные ломанные формируются из всех найденных в сетке рёбер, которые разделяет только одна грань, то есть это "граничные" рёбра. Найденные ломанные добавляются в документ (по одному соединению (compound) на объект сетки), а сама сетка скрывается.

Макрос версии : 1
Дата последней модификации : 2016-12-17
FreeCAD версия : Все версии
Скачать : Иконка панели инструментов
автор : Yorik
Автор
Yorik
Скачать
Иконка панели инструментов
Ссылки
Версия
1
Дата последней модификации
2016-12-17
Версии FreeCAD
Все версии
Сочетание клавиш
None
Смотрите также
None

Описание

Находит граничные ломанные в выбранных объектах сетки. Граничные ломанные формируются из всех найденных в сетке рёбер, которые разделяет только одна грань, то есть это "граничные" рёбра. Найденные ломанные добавляются в документ (по одному соединению на объект сетки), а сама сетка скрывается.

Скрипт

Иконка панели инструментов

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()