Difference between revisions of "Macro MeshToPart/fr"
Jump to navigation
Jump to search
Renatorivo (talk | contribs) (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 | + | <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== | ||
− | + | ToolBar Icon [[Image:Macro_MeshToPart.png]] | |
+ | '''Macro_MeshToPart.FCMacro''' | ||
− | + | {{MacroCode|code= | |
− | + | 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 | |
+ | }} | ||
+ | {{clear}} | ||
+ | |||
+ | ==Lien== | ||
− | + | La discussion sur le forum [http://forum.freecadweb.org/viewtopic.php?f=3&t=253&hilit=getPlanarSegments Convert mesh to solid?] | |
− | |||
− |
Latest revision as of 11:08, 23 May 2020
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 |
Page des macros Comment installer une macro Comment créer une barre d'outils |
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
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?