Macro MeshToPart/fr: Difference between revisions
Renatorivo (talk | contribs) (Created page with "Cette macro convertit certaines mailles en pièces. Il a une grande tolérance, donc utilisez le uniquement avec des objets qui n'ont aucunes courbes sinon vous obtiendrez un ...") |
(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 |
---|
Cette macro convertit certaines mailles en pièces. Il a une grande tolérance, donc utilisez le uniquement avec des objets qui n'ont aucunes courbes sinon vous obtiendrez un résultat inattendu. Auteur: Wmayer |
Auteur |
Wmayer |
Téléchargement |
None |
Liens |
Page des macros Comment installer une macro Comment créer une barre d'outils |
Version Macro |
1.0 |
Dernière modification |
None |
Version(s) FreeCAD |
None |
Raccourci clavier |
None |
Voir aussi |
None |
Cette macro convertit certaines mailles en pièces. Il a une grande tolérance, donc utilisez le uniquement avec des objets qui n'ont aucunes courbes sinon vous obtiendrez un résultat inattendu.
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