César Vonc
26/12/2011, 11h26
Bonjour,
Pour ceux qui chercheraient à créer un objet polygonal à partir d'un tableau de coordonnées, en COFFEE, voici un petit script tout simple qui s'en occupera :
main(doc,op)
{
var objet = AllocObject(Opolygon);
var nbPts = 6; // Nombre de points
var nbPolys = 3; // Nombre de polygones
var posPts = new(array, nbPts); // Coordonnées des points
var maillage = new(array, nbPolys*4); // Connexion des polygones
posPts[0] = vector(0, 0, 0);
posPts[1] = vector(200, 0, 0);
posPts[2] = vector(200, 0, 200);
posPts[3] = vector(0, 0, 200);
posPts[4] = vector(200, 100, 0);
posPts[5] = vector(200, 100, 200);
// Polygone 0
maillage[0] = 0; // Point A du polygone n / 4
maillage[1] = 1; // Point B du polygone (n-1) / 4
maillage[2] = 2; // Point C du polygone (n-2) / 4
maillage[3] = 3; // Point D du polygone (n-3) / 4
// Polygone 1
maillage[4] = 1;
maillage[5] = 2;
maillage[6] = 5;
maillage[7] = 4;
// Polygone 2
maillage[8] = 3;
maillage[9] = 2;
maillage[10] = 5;
maillage[11] = 5;
var vc = new(VariableChanged); if (!vc) return FALSE;
vc->Init(0, nbPts);
objet->MultiMessage(MSG_POINTS_CHANGED, vc);
objet->SetPoints(posPts);
var vc2 = new(VariableChanged); if (!vc2) return FALSE;
vc2->Init(0, nbPolys);
objet->MultiMessage(MSG_POLYGONS_CHANGED, vc2);
objet->SetPolygons(maillage);
objet#ID_BASELIST_NAME = "Objet";
doc->InsertObject(objet, NULL, NULL);
objet->Message(MSG_UPDATE);
doc->SetActiveObject(objet);
CallCommand(14023); // Aligner les normales
}Notez cependant l'utilisation de SetPoints au lieu de SetPoint, le second permettant de modifier un point précis :
SetPoints(posPts);
SetPoint(i, posPts[i]);
De même pour les polygones.
Pour ceux qui chercheraient à créer un objet polygonal à partir d'un tableau de coordonnées, en COFFEE, voici un petit script tout simple qui s'en occupera :
main(doc,op)
{
var objet = AllocObject(Opolygon);
var nbPts = 6; // Nombre de points
var nbPolys = 3; // Nombre de polygones
var posPts = new(array, nbPts); // Coordonnées des points
var maillage = new(array, nbPolys*4); // Connexion des polygones
posPts[0] = vector(0, 0, 0);
posPts[1] = vector(200, 0, 0);
posPts[2] = vector(200, 0, 200);
posPts[3] = vector(0, 0, 200);
posPts[4] = vector(200, 100, 0);
posPts[5] = vector(200, 100, 200);
// Polygone 0
maillage[0] = 0; // Point A du polygone n / 4
maillage[1] = 1; // Point B du polygone (n-1) / 4
maillage[2] = 2; // Point C du polygone (n-2) / 4
maillage[3] = 3; // Point D du polygone (n-3) / 4
// Polygone 1
maillage[4] = 1;
maillage[5] = 2;
maillage[6] = 5;
maillage[7] = 4;
// Polygone 2
maillage[8] = 3;
maillage[9] = 2;
maillage[10] = 5;
maillage[11] = 5;
var vc = new(VariableChanged); if (!vc) return FALSE;
vc->Init(0, nbPts);
objet->MultiMessage(MSG_POINTS_CHANGED, vc);
objet->SetPoints(posPts);
var vc2 = new(VariableChanged); if (!vc2) return FALSE;
vc2->Init(0, nbPolys);
objet->MultiMessage(MSG_POLYGONS_CHANGED, vc2);
objet->SetPolygons(maillage);
objet#ID_BASELIST_NAME = "Objet";
doc->InsertObject(objet, NULL, NULL);
objet->Message(MSG_UPDATE);
doc->SetActiveObject(objet);
CallCommand(14023); // Aligner les normales
}Notez cependant l'utilisation de SetPoints au lieu de SetPoint, le second permettant de modifier un point précis :
SetPoints(posPts);
SetPoint(i, posPts[i]);
De même pour les polygones.