This is an old revision of the document!
Table of Contents
Surfaces
Définition
La surface est l'entité géométrique 3D de base. A ce niveau, le concept géométrique (Surface
) est séparé de l'entité topologique (Side)
. Cela permet de définir une surface bien plus grande que la face (analytiquement, les surfaces sont généralement infinies – cylindres, plans, NURBS, etc) et la limiter avec un Wire
.
Plan
Passant par 3 points:
plane = surfaceset.add( Plane(number, p1, p2, p3) )
La normale (et donc l'orientation de la surface) est calculée en prenant le produit vectoriel des vecteurs $\boldsymbol{p_2}-\boldsymbol{p_1}$ et $\boldsymbol{p_3}-\boldsymbol{p_1}$.
p1 , p2 , p3 | référence vers les Points |
Coons
Une Coons est une interpolation linéaire entre 4 courbes. Ces courbes sont définies dans un contour fermé. Le sens du contour définit l'orientation de la surface.
coons = surfaceset.add( Coons(number, wire) )
wire | référence vers le Wire |
Surface réglée
Une surface réglée est une surface construite en interpolant linéairement l'espace entre deux courbes. Le sens de celles-ci est important et définit l'orientation de la surface.
ruled = surfaceset.add( Ruled(number, curve1, curve2) )
curve1 , curve2 , … | référence vers les Curves |
Ce type de surface peut être utilisé pour créer des plans (les deux courbes sont alors des droites) ou des cylindres (les deux courbes sont des arcs de cercle).
Nurbs
nur = surfaceset.add( NurbsSurface(number) ) nur.setDegreeU(degU) nur.setDegreeV(degV) nur.push(i1,j1,p1); nur.pushWeight(i1,j1,w1) nur.push(i2, j2, p2); nur.pushWeight(i2, j2, w2) nur.pushKnotU(knotu1) ... nur.pushKnotU(knotu2) nur.pushKnotV(knotv1) ... nur.pushKnotV(knotv2)
degU , degV | degré selon U et V |
i1 , j1 , i2 , j2 , … | indice de la matrice des pôles |
p1 , p2 , … | référence vers les points (pôles) |
w1 , w2 , … | poids |
knotu1 , knotu2 , … | vecteur knot selon U |
knotv1 , knotv2 , … | vecteur knot selon V |
Surface de révolution
revsur = surfaceset.add( RevolutionSurface(number, axe, wire) )
où
axe | Line définissant l'axe de révolution de la surface de révolution |
wire | Wire définissant le contour tournant autour de l'axe de révolution (limitation : il ne peut pas toucher l'axe en son premier point). Il doit être coplanaire avec l'axe |
Cylindre de révolution droit
c = Cylinder(number, axe, radius, ptGen) #Première possibilité d'utiliser Cylinder c = Cylinder(number, axe, radius) #Deuxième possibilité d'utiliser Cylinder c.setProjType(projType) surfaceset.add( c )
où
axe | Line définissant l'axe du cylindre |
radius | Rayon du cylindre |
ptGen | Point optionnel de la génératrice du cylindre situé : - dans le plan perpendiculaire à l'axe, - passant par le premier point de l'axe, - à une distance égale au rayon du cylindre du premier point de l'axe. Comme ce point est assez difficile à définir quand on n'a pas de cylindre parallèle à un axe, on peut ajouter un point avec des coordonnées quelconques et Metafor le remettra à la bonne place tout seul comme un grand au début du calcul avec un petit WARNING_MESSAGE pour signaler que le point a été changé de place (voir apps.qs.contactCylProj0Point ). Ce point est obligatoire si le cylindre a une rotation imposée. |
projType | = 0 : on considère une surface finie limitée par la longueur de l'axe = 1 : on considère une surface infinie |