Difference between revisions of "Macro MeshToPart/fr"

From FreeCAD Documentation
Jump to navigation Jump to search
(Created page with "{{Macro/fr|Icon=Text-x-python|Name=MeshToPart|Name/fr=MeshToPart|Description=Cette macro convertit certaines mailles en pièces. Il a une grande tolérance, donc utilisez le u...")
(Updating to match new version of source page)
 
(24 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Macro/fr|Icon=Text-x-python|Name=MeshToPart|Name/fr=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.|Author=Wmayer}}
+
<languages/>
 +
{{Macro/fr
 +
|Name=MeshToPart
 +
|Icon=Macro_MeshToPart.png
 +
|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.
 +
|Author=Wmayer
 +
|Version=1.0
 +
|Date=2011-08-01
 +
|FCVersion=All
 +
|Download=[https://www.freecadweb.org/wiki/images/f/fa/Macro_MeshToPart.png ToolBar Icon]
 +
}}
 +
 
 +
==Description==
 +
 
 +
Cette macro convertit les objets Mesh sélectionnés en objets Part. Il a une grande tolérance, utilisez uniquement cette macro avec des objets qui n'ont pas de courbes, sinon vous obtiendrez une erreur ou des résultats inattendus.
 +
 
 +
==Script==
  
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 weird results
+
ToolBar Icon [[Image:Macro_MeshToPart.png]]
  
 +
'''Macro_MeshToPart.FCMacro'''
  
<syntaxhighlight>
+
{{MacroCode|code=
  
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
+
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart
 
   
 
   
for obj in FreeCADGui.Selection.getSelection():
+
for obj in FreeCADGui.Selection.getSelection():
if "Mesh" in obj.PropertiesList:
+
    if "Mesh" in obj.PropertiesList:
faces = []
+
        faces = []    
mesh = obj.Mesh
+
        mesh = obj.Mesh
segments = mesh.getPlanes(0.01) # use rather strict tolerance here
+
        segments = mesh.getPlanarSegments(0.01) # use rather strict tolerance here
 
   
 
   
for i in segments:
+
        for i in segments:
  if len(i) > 0:
+
          if len(i) > 0:
    # a segment can have inner holes
+
            # a segment can have inner holes
    wires = MeshPart.wireFromSegment(mesh, i)
+
            wires = MeshPart.wireFromSegment(mesh, i)
    # we assume that the exterior boundary is that one with the biggest bounding box
+
            # we assume that the exterior boundary is that one with the biggest bounding box
    if len(wires) > 0:
+
            if len(wires) > 0:
        ext = None
+
                ext = None
        max_length = 0
+
                max_length = 0
        for i in wires:
+
                for i in wires:    
          if i.BoundBox.DiagonalLength > max_length:
+
                  if i.BoundBox.DiagonalLength > max_length:
              max_length = i.BoundBox.DiagonalLength
+
                      max_length = i.BoundBox.DiagonalLength
              ext = i
+
                      ext = i
        wires.remove(ext)
+
                wires.remove(ext)
        # all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails
+
                # all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails
        for i in wires:
+
                for i in wires:
          i.reverse()
+
                  i.reverse()
        # make sure that the exterior wires comes as first in the lsit
+
                # make sure that the exterior wires comes as first in the lsit
        wires.insert(0, ext)
+
                wires.insert(0, ext)
        faces.append(Part.Face(wires))
+
                faces.append(Part.Face(wires))
 
   
 
   
shell=Part.Compound(faces)
+
        shell=Part.Compound(faces)
solid = Part.Solid(Part.Shell(faces))
+
        solid = Part.Solid(Part.Shell(faces))
name = obj.Name
+
        name = obj.Name
FreeCAD.ActiveDocument.removeObject(name)
+
        FreeCAD.ActiveDocument.removeObject(name)
FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid
+
        FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid
 +
}}
 +
{{clear}}
 +
 
 +
==Lien==
  
</syntaxhighlight>
+
La discussion sur le forum [http://forum.freecadweb.org/viewtopic.php?f=3&t=253&hilit=getPlanarSegments Convert mesh to solid?]
{{clear}}
 
<languages/>
 

Latest revision as of 11:08, 23 May 2020

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎polski • ‎svenska • ‎čeština

Macro MeshToPart.png 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.

Version macro : 1.0
Date dernière modification : 2011-08-01
Version FreeCAD : All
Téléchargement : ToolBar Icon
Auteur: Wmayer
Auteur
Wmayer
Téléchargement
ToolBar Icon
Liens
Version Macro
1.0
Dernière modification
2011-08-01
Version(s) FreeCAD
All
Raccourci clavier
None
Voir aussi
None

Description

Cette macro convertit les objets Mesh sélectionnés en objets Part. Il a une grande tolérance, utilisez uniquement cette macro avec des objets qui n'ont pas de courbes, sinon vous obtiendrez une erreur ou des résultats inattendus.

Script

ToolBar Icon Macro MeshToPart.png

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

Lien

La discussion sur le forum Convert mesh to solid?