Macro MeshToPart/de: Difference between revisions

From FreeCAD Documentation
(Created page with "==Beschreibung==")
(Created page with "Dieses Makro konvertiert ausgewählte Netze in Teile. Es hat eine große Toleranz, verwenden Sie es also nur für Objekte, die keine Kurven haben, andernfalls werden Fehler od...")
Line 11: Line 11:
==Beschreibung==
==Beschreibung==


Dieses Makro konvertiert ausgewählte Netze in Teile. Es hat eine große Toleranz, verwenden Sie es also nur für Objekte, die keine Kurven haben, andernfalls werden Fehler oder seltsame Ergebnisse angezeigt
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


==Script==
==Script==

Revision as of 19:51, 17 December 2018

Generisches Makro-Symbol Erstellen Sie Ihr persönliches Symbol mit demselben Namen des Makros MeshToPart

Beschreibung
Dieses Makro konvertiert ausgewählte Netze in Teile. Es hat eine große Toleranz, verwenden Sie es also nur für Objekte, die keine Kurven haben, sonst erhalten Sie seltsame Ergebnisse

Versionsmakro : 1.0
Datum der letzten Änderung : 2011-08-01
Autor: Wmayer
Autor
Wmayer
Herunterladen
None
Links
Macro-Version
1.0
Datum der letzten Änderung
2011-08-01
FreeCAD-Version(s)
None
Standardverknüpfung
None
Siehe auch
None

Beschreibung

Dieses Makro konvertiert ausgewählte Netze in Teile. Es hat eine große Toleranz, verwenden Sie es also nur für Objekte, die keine Kurven haben, andernfalls werden Fehler oder seltsame Ergebnisse angezeigt

Script

Macro_MeshToPart.FCMacro

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?