Mesh to Part/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "La conversion des mailles en un de ces objets de niveau supérieur (gérée par le Part Module dans FreeCAD) n'est pas une opération facile. Les Mailles pe...")
(Created page with "FreeCAD propose actuellement deux méthodes pour convertir des Parts objets en mailles. La première méthode est simple, la conversion directe, sans aucune optimisation:")
Line 45: Line 45:
La conversion des mailles en un de ces objets de niveau supérieur (gérée par le [[Part Module/fr|Part Module]] dans FreeCAD) n'est pas une opération facile. Les Mailles peuvent êtres faites de milliers de triangles (par exemple lorsqu'ils sont générés par un scanner 3D), et des solides faits du même nombre de faces serait extrêmement lourd à manipuler. Donc, vous voudrez généralement voir l'objet optimisé lors de la conversion.
La conversion des mailles en un de ces objets de niveau supérieur (gérée par le [[Part Module/fr|Part Module]] dans FreeCAD) n'est pas une opération facile. Les Mailles peuvent êtres faites de milliers de triangles (par exemple lorsqu'ils sont générés par un scanner 3D), et des solides faits du même nombre de faces serait extrêmement lourd à manipuler. Donc, vous voudrez généralement voir l'objet optimisé lors de la conversion.


FreeCAD propose actuellement deux méthodes pour convertir des Parts objets en mailles.
FreeCAD currently offers two methods to convert Meshes to Part objects. The first method is a simple, direct conversion, without any optimization:
La première méthode est simple, la conversion directe, sans aucune optimisation:
<syntaxhighlight>
<syntaxhighlight>
import Mesh,Part
import Mesh,Part

Revision as of 20:54, 30 September 2014

Converting Part objects to Meshes/fr

La conversion des objets de haut niveau tels que les objets (formes) en objets simples comme les mailles (Mesh) est une opération facile, où, toutes les faces d'un Objet Part deviennent une composition de triangles (exemple sur le site de coin3d un des moteurs de FreeCAD).
Le résultat de cette triangulation (tessellation) est ensuite utilisé pour construire un maillage (Mesh):

 #let's assume our document contains one part object
 import Mesh
 faces = []
 shape = FreeCAD.ActiveDocument.ActiveObject.Shape
 triangles = shape.tessellate(1) # the number represents the precision of the tessellation)
 for tri in triangles[1]:
     face = []
     for i in range(3):
         vindex = tri[i]
         face.append(triangles[0][vindex])
     faces.append(face)
 m = Mesh.Mesh(faces)
 Mesh.show(m)

Parfois, la triangulation de certaines faces offertes par OpenCascade sont assez laid. Si une face a un forme rectangulaire et ne contient pas de trous ou n'est pas limité par des courbes, vous pouvez également créer un maillage sur cette forme:

 import Mesh
 def makeMeshFromFace(u,v,face):
 	(a,b,c,d)=face.ParameterRange
 	pts=[]
 	for j in range(v):
 		for i in range(u):
 			s=1.0/(u-1)*(i*b+(u-1-i)*a)
 			t=1.0/(v-1)*(j*d+(v-1-j)*c)
 			pts.append(face.valueAt(s,t))
 
 	mesh=Mesh.Mesh()
 	for j in range(v-1):
 		for i in range(u-1):
 			mesh.addFacet(pts[u*j+i],pts[u*j+i+1],pts[u*(j+1)+i])
 			mesh.addFacet(pts[u*(j+1)+i],pts[u*j+i+1],pts[u*(j+1)+i+1])
 
 	return mesh

Conversion de Mailles en Part objects

La conversion des mailles en Part objets est une opération extrêmement importante en CAO, car, très souvent vous recevrez des données 3D au format Mesh (maillage) à partir d'autres utilisateurs ou émis par d'autres applications de CAO. Les Mailles sont très pratiques pour représenter les formes géométriques libres et de grandes scènes visuelles, car il est très léger, mais pour la CAO nous préférons généralement des objets de niveau supérieur qui portent beaucoup plus d'informations comme, l'idée de solides, ou faces sont faites de courbes au lieu de triangles.

La conversion des mailles en un de ces objets de niveau supérieur (gérée par le Part Module dans FreeCAD) n'est pas une opération facile. Les Mailles peuvent êtres faites de milliers de triangles (par exemple lorsqu'ils sont générés par un scanner 3D), et des solides faits du même nombre de faces serait extrêmement lourd à manipuler. Donc, vous voudrez généralement voir l'objet optimisé lors de la conversion.

FreeCAD propose actuellement deux méthodes pour convertir des Parts objets en mailles. La première méthode est simple, la conversion directe, sans aucune optimisation:

 import Mesh,Part
 mesh = Mesh.createTorus()
 shape = Part.Shape()
 shape.makeShapeFromMesh(mesh.Topology,0.05) # the second arg is the tolerance for sewing
 solid = Part.makeSolid(shape)
 Part.show(solid)

The second method offers the possibility to consider mesh facets coplanar when the angle between them is under a certain value. This allows to build much simpler shapes: (let's assume our document contains one Mesh object)

 # let's assume our document contains one Mesh object
 import Mesh,Part,MeshPart
 faces = []
 mesh = App.ActiveDocument.ActiveObject.Mesh
 segments = mesh.getPlanes(0.00001) # 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)
 Part.show(shell)
 #solid = Part.Solid(Part.Shell(faces))
 #Part.show(solid)
Topological data scripting
Scenegraph