Page 1 of 1

Traces d'objets - Gestion sous Javascript

Posted: Tue Feb 07, 2012 5:45 pm
by felfra
Bonjour,

Je découvre depuis quelques jours CaRMetal, Qui me semble être un excellent logiciel de géométrie dynamique. Différents outils permettent d'animer les figures, dont, j'en viens à l'objet de ce post, les traces d'objets.

Cependant, si dans un script (JS) il est possible de cacher ou supprimer un objet, je n'ai pas trouvé la méthode pour en effacer la trace, ce qui est possible par le menu Edition. Est-ce qu'une telle commande javascript existe ?

je voudrais aussi savoir si, toujours dans javascript, il est possible de passer à CarMetal des raccourcis clavier, ce qui pourrait être une solution à mon problème... et à d'autres :) .

D'avance merci pour vos réponses.

felfra

Posted: Wed Feb 08, 2012 12:03 pm
by mohjer
Bonjour,
si dans un script (JS) il est possible de cacher ou supprimer un objet, je n'ai pas trouvé la méthode pour en effacer la trace, ce qui est possible par le menu Edition. Est-ce qu'une telle commande javascript existe ?
Bien sur il existe une commande javascript qui est " PenDown" suivi du nom de l'objet et de false (un booléen) si on veut que l'objet cesse de laisser une trace.

Posted: Wed Feb 08, 2012 4:03 pm
by felfra
Merci, mohjer, pour votre réponse.

Cependant, PenDown(Obj, "false") désactive la trace d'un objet, qui cesse donc d'en laisser une. Comme le fait la commande de menu "Edition/Désactiver les traces".

Mais mon problème concerne l'effacement des traces existantes, comme le fait la commande "Edition/Effacer les traces" (raccourci clavier ctrl-T). Ce n'est pas la même chose...

Cordialement,

felfra

Re: Traces d'objets - Gestion sous Javascript

Posted: Thu Feb 09, 2012 10:31 am
by monique31
felfra wrote:je n'ai pas trouvé la méthode pour en effacer la trace, ce qui est possible par le menu Edition. Est-ce qu'une telle commande javascript existe ?
Non, il n'existe pas de telle commande. Mais une trace disparait quand on effectue un zoom ou une translation de la figure ... même pendant l'exécution d'un script.
felfra wrote:je voudrais aussi savoir si, toujours dans javascript, il est possible de passer à CarMetal des raccourcis clavier, ce qui pourrait être une solution à mon problème... et à d'autres :) .
Non, pas de raccourcis clavier dans javascript.

Posted: Fri Feb 10, 2012 9:59 am
by felfra
Merci Monique,

J'ai tout de même trouvé une une solution à mon problème. Je cherchais en fait, pour bien montrer la construction de figures un peu compliquées, à mettre en évidence la construction des différents éléments. Non seulement leur succession, avec temporisation, mais aussi l'apparition progressive de chacun d'eux.

Par exemple, pour un cercle, au lieu d'utiliser la fonction "circle", je programme l'affichage du centre, puis d'un point du (futur) cercle, et déplace celui sur toute la (future) circonférence, la trace dessinant le cercle complet, en quelques secondes, et enfin j'appelle la fonction "circle" pour créer l'objet cercle dont j'aurai ultérieurement besoin. Mais ensuite, impossible, donc, de supprimer la trace dans le script. Et je ne peux pas la conserver, car les attributs (couleur, épaisseur) de la trace (du point) et du cercle ne doivent pas toujours être identiques.

Finalement, en compliquant un peu la programmation, je n'utilise plus la trace, mais la remplace par un arc défini par le point de départ sur la circonférence, le point que je déplace sur la circonférence, et un troisième point à mi-chemin des deux autres. A chaque déplacement du point, l'arc "suit" dynamiquement.

Evidemment, comme l'opération doit se répéter plusieurs fois dans le script, il vaut mieux créer une fonction à cet effet.

Bonne journée :)

Posted: Sat Feb 25, 2012 7:13 am
by alain974
Bonjour, pour effacer les traces sur le graphique on peut zoomer un petit coup, ce qui réinitialise l'affichage de la figure (en enlevant les traces). Pour faire la même chose en JavaScript, on peut réinitialiser la figure en JavaScript, avec l'algorithme suivant:

1) On récupère la figure à initialiser, et on la stocke dans une variable ZC (comme Zirkel Canvas);
2) On lui demande poliment de se réinitialiser, ce qu'elle fait avec diligence parce qu'elle a une méthode qui fait ça (et qui est appelée par le zoom).

Ça donne ceci:

Code: Select all

ZC=getZC();
ZC.resetGraphics();
Du coup, ce post aurait dû figurer dans la rubrique "CaRScripts" qui a soif de ce genre de questions...

Posted: Sat Feb 25, 2012 9:39 am
by mohjer
Bonjour Alain,

Super le code pour effacer la trace! Merci Alain; j'étais presque sur qu'il y avait un truc pour effacer contrairement à ce que disait Monique "Non, il n'existe pas de telle commande."
je cherchai depuis deux semaines en vain, finalement on est sauvé;
je l'ai essayé et ça marche;
voici le script auquel j'ai ajouté le petit bout de code fourni :

h=Point("A",3,-2);
h=Point("B",3,1);
for(i=0;i<10;i++){
x=-2+Math.random();
y=-1+Math.random();
Move("A",x,y);
PenDown("A",true);
x=2+Math.random();
y=1+Math.random();
Move("B",x,y);
PenDown("B",true);
Pause(500);
}
ZC=getZC();
ZC.resetGraphics();




Encore merci Alain

Posted: Sat Feb 25, 2012 5:48 pm
by felfra
Désolé, Alain, je n'ai pas vu arriver votre réponse, je vous en remercie. Et merci Mohjer, pour le complément.

Effectivement, votre solution est simple et efficace. Je la note soigneusement, car elle m'aurait économisé quelques jours d'efforts, passé à créer des fonctions, pour tracer progressivement des cercles ou arcs, simulant des traces, que je pouvais ensuite effacer.
Maintenant, grâce à vous, j'ai bien plus simple :) .

Encore merci

felfra

Posted: Sun Feb 26, 2012 8:07 am
by alain974
mohjer wrote:voici le script auquel j'ai ajouté le petit bout de code fourni :
En fait, PenDown imite le comportement de la tortue LOGO, qui a un stylo dans la bouche, et PenDown baisse le stylo pour que les tracés soient visibles. Il n'est donc pas nécessaire de modifier 10 fois cette variable. Je propose la modification suivante:

Code: Select all

h=Point("A",3,-2);
h=Point("B",3,1);
PenDown("A",true);
PenDown("B",true);
for(i=0;i<10;i++){
    x=-2+Math.random();
    y=-1+Math.random();
    Move("A",x,y);
    x=2+Math.random();
    y=1+Math.random();
    Move("B",x,y);
    Pause(500);
}
PenDown("A,B",false);
ZC=getZC();
ZC.resetGraphics();
Pour l'instant le seul moyen de savoir tout ce qu'on peut faire avec ces geekeries est de consulter le code source de CaRMetal. Jusqu'à ce que quelqu'un ait le temps de faire un document à l'usage des développeurs...

Posted: Sun Feb 26, 2012 3:27 pm
by mohjer
Bonjour,

Pour le dernier script d'Alain, deux guillemets manquantes,une petite correction pour éviter une perte de temps:
PenDown("A","B",false); à la place de PenDown("A,B",false);