Programmation objet et géométrie/Points 3D avec CaRScript
CaRMetal est un logiciel de géométrie plane. Néanmoins il permet de simuler la géométrie dans l'espace, hormis les problèmes d'incidence, il autorise par exemple la création d'un point d'intersection de deux droites non coplanaires.
Même s'il est possible de créer un point dans l'espace en donnant ses trois coordonnées, ce point dans CaRMetal reste un objet 2D. CaRScript permet de s'affranchir de cette limitation en créant l'objet point3D.
L'objet Point3D
modifierCi-dessous on trouve
- l'utilisation d'une varibale globale numPt, incrémentée à chaque création de point 3D; elle simule le nommage automatique des objets par CaRMetal
- une occurrence du polyporphisme: Selon que l'objet point3D a été appelé avec trois arguments (les coordonnées) ou quatre (le nom en plus), l'instanciation ne se déroule pas de la même manière;
- une propriété appelée CM qui est le nom du point 3D;
- Des propriétés cachées (emplacement de l'affichage des variables dans CaRMetal)
- Le fait que les coordonnées du point 3D sont évidemment, des propriétés de celui-ci.
// constructeur de l'objet point3D
function point3D(x,y,z,nom){
// si le nom a été omis, un nom par défaut est attribué
if(nom == undefined){
nom = "Pt"+numPt; // numPt est une variable globale
numPt++};
this.CM = nom; // référence CaRMetal
// coordonnées
// pour conserver l'interactivité, les coordonnées doivent être stockées dans des expressions de CaRMetal
this.x = "X"+nom; // dans CaRMetal l'expression XA désignera l'abscisse du point A
Expression(this.x,x,-3,1);
SetHide(this.x,true);
this.y = "Y"+nom;
Expression(this.y,y,-3,0.5);
SetHide(this.y,true);
this.z = "Z"+nom;
Expression(this.z,z,-3,0);
SetHide(this.z,true);
// création du point dans CaRMetal
var pt = Point(nom, "x(O)+"+ this.x+"*(x(X)-x(O))+"+ this.y+"*(x(Y)-x(O))+"+ this.z+"*(x(Z)-x(O))",
"y(O)+"+ this.x+"*(y(X)-y(O))+"+ this.y+"*(y(Y)-y(O))+"+ this.z+"*(y(Z)-y(O))");
// affichage des coordonnées à côté du nom
SetAlias(pt, nom+ "(%"+ this.x+ "%,%"+ this.y+ "%,%"+ this.z+"%)");
}
Il va de soi que ce script doit tourner sur une figure de l'espace, laquelle fournit le repère et la possibilité de faire tourner la figure avec le clic-droit-glisser.
Distance dans l'espace
modifierCi-dessous un exemple d'utilisation : le script crée deux points 3D, que l'on retrouve dans la feuille de dessin. Les coordonnées peuvent être modifiées dans CaRMetal par l'intermédiaire des expressions, qui peuvent également être transformées en curseur.
// exemple d'utilisation
// initialisation du compteur pour les points sans nom
var numPt = 1;
// création d'un point nommé A dans CaRMetal
var unPoint = new point3D(1,2,3,"A");
SetPointType("A","square");
SetShowName("A",true);
// création d'un point avec nom par défaut dans CaRMetal
var unAutrePoint = new point3D(-2,-1,0);
SetPointType(unAutrePoint.CM,"dcross");
SetShowName(unAutrePoint.CM,true);
// exemple de calcul qui peut être fait soit dans le script, soit dans une expression de CaRMetal
var s = Segment("A","Pt1");
SetAlias(s,"%sqrt((XA-XPt1)^2+(YA-YPt1)^2+(ZA-ZPt1)^2)%"); // distance APt1
SetShowName(s,true);
Liens externes
modifier- Les fichiers source de cette page : [1]