Suite à une remarque judicieuse concernant l'impossibilité de faire une symétrie avec un objet lumière, Parksto s'est lancé dans le code et nous a amené une bonne petite expression à laquelle, j'ai fait quelques petites remarques, je vous livre donc ici l'expression modifiée:
Ce code est bien sûr créé à la base par Parksto qui j'espère acceptera ces petits correctifs ! :wink:
La "symétrique" de la lumière est une instance ce qui permet de modifier la lumière originale avec une copie qui utilise les mêmes paramètres, j'ai également ajouté les symétries de rotations pour prendre en charge le cas des spots et lumières directionnelles...
var symetrie, lumiere, copie, poslumiere, posymetrie, distance, final, copielampe, containerlampe;
var rotlumiere, rotfinal;
main(doc,op)
{
//symetrie = "x";
//symetrie = "y";
symetrie = "z";
copie=doc->FindObject("lampe copie");
lumiere = op->GetDown();
if (!lumiere) return; //si il n'y a pas d'objet enfant on quitte
if (!instanceof(lumiere, LightObject)) return; //si l'enfant n'est pas une lumière on quitte
poslumiere = lumiere->GetPosition();
rotlumiere=lumiere->GetRotation();
posymetrie = op->GetPosition();
if (symetrie=="x") {
distance = poslumiere.x - posymetrie.x;
final=vector (posymetrie.x-distance,poslumiere.y,poslumiere.z);
rotfinal=rotlumiere;
rotfinal.x=-rotfinal.x;
rotfinal.z=-rotfinal.z;
}
if (symetrie=="y") {
distance = poslumiere.y - posymetrie.y;
final=vector (poslumiere.x,posymetrie.y-distance,poslumiere.z);
rotfinal=rotlumiere;
rotfinal.z=-rotfinal.z;
rotfinal.y=-rotfinal.y;
}
if (symetrie=="z") {
distance = poslumiere.z - posymetrie.z;
final=vector (poslumiere.x,poslumiere.y,posymetrie.z-distance);
rotfinal=rotlumiere;
rotfinal.x=-rotfinal.x+Radians(180);
rotfinal.z=-rotfinal.z;
}
if (!copie)
{
copie=new(InstanceObject); //on créé une instance pour notre lumiere
copie->SetName("lampe copie");
var container=copie->GetContainer(); //on accède aux paramètre de cet objet Instance
container->SetData(INSTANCEOBJECT_SOURCE,lumiere->GetName()); //l'instance pointe sur le nom de la lumiere
doc->InsertObject(copie,op,lumiere);
copie->SetContainer(container);
}
copie->SetPosition(final);
copie->SetRotation(rotfinal);
doc->Message(MSG_UPDATE); //actualisation des modifications du document
}
Cette expression doit être placée sur un objet servant de point de symétrie, dans lequel on glisse une lumière, celle-ci sera dupliquée par rapport à un axe définit dans le code (symetrie="z");
Merci Parsto !
C'est du coffee ça ?
C'est un mélange de C et d'orienté objet ?
En tout cas, pour quelqu'un qui a l'habitude de programmer (du php entre autre pour mon cas), ça n'a pas l'air trop difficile à comprendre et à mettre en oeuvre...
Tengaal, ça serait cool un petit dossier avec les bases de coffee, ça me donnerait du courage et certainement à d'autres pour se lancer
Remarque, xPresso arrive... :roll:
Ce n'était que le début du commencement.
J'avais déjà commencé des doc de base du COFFEE en PDF, c'est sur mon site dans "Astuces 3D" puis dans "Programmation".
Ce langage est extrêmemnt proche du C++, il est orienté objet avec des classes et des méthodes, c'est vraiment simplissime ! :wink:
Merci les amis mais toutes ces lignes de code, j'en fais quoi maintenant ? Y a un lien pour télécharger l'expression ?
Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.
il suffit juste de créer un tag "expression COFFEE" sur un object neutre et de copier/coller le code ci-dessus. 8)Envoyé par lenogre
ben moi, je programme en php aussi, au depart. quand j'ai vu la similitude, je ma suis dis que je pourrai essayer moi aussi, non mais ! :lol:Envoyé par Izostar
merci à toi pour ces corrections, moi j'apprend, toi t'es le profEnvoyé par Tengaal
Salut
Magistral ! bravo
Je vois que l'ont peut en vraque déclarer les variables
var toto, titi, tutu, etc ...
désormais ont peut le rajouter sur le Tutorial de Tengal !
Stéphane