Traces d'objets - Gestion sous Javascript

Pour tout ce qui concerne l'utilisation du logiciel.
Post Reply
felfra
Posts: 4
Joined: Tue Feb 07, 2012 5:10 pm
Location: Marseille

Traces d'objets - Gestion sous Javascript

Post by felfra » Tue Feb 07, 2012 5:45 pm

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

mohjer
Posts: 58
Joined: Wed Jun 10, 2009 9:09 pm
Location: Tunis
Contact:

Post by mohjer » Wed Feb 08, 2012 12:03 pm

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.

felfra
Posts: 4
Joined: Tue Feb 07, 2012 5:10 pm
Location: Marseille

Post by felfra » Wed Feb 08, 2012 4:03 pm

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

monique31
Posts: 373
Joined: Sat Nov 03, 2007 3:33 pm
Location: Toulouse

Re: Traces d'objets - Gestion sous Javascript

Post by monique31 » Thu Feb 09, 2012 10:31 am

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.

felfra
Posts: 4
Joined: Tue Feb 07, 2012 5:10 pm
Location: Marseille

Post by felfra » Fri Feb 10, 2012 9:59 am

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 :)

User avatar
alain974
Posts: 150
Joined: Sat Jun 13, 2009 9:08 am
Location: Réunion

Post by alain974 » Sat Feb 25, 2012 7:13 am

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...

mohjer
Posts: 58
Joined: Wed Jun 10, 2009 9:09 pm
Location: Tunis
Contact:

Post by mohjer » Sat Feb 25, 2012 9:39 am

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

felfra
Posts: 4
Joined: Tue Feb 07, 2012 5:10 pm
Location: Marseille

Post by felfra » Sat Feb 25, 2012 5:48 pm

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

User avatar
alain974
Posts: 150
Joined: Sat Jun 13, 2009 9:08 am
Location: Réunion

Post by alain974 » Sun Feb 26, 2012 8:07 am

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...

mohjer
Posts: 58
Joined: Wed Jun 10, 2009 9:09 pm
Location: Tunis
Contact:

Post by mohjer » Sun Feb 26, 2012 3:27 pm

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);

Post Reply