| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
jerome
Inscrit le: 06 Nov 2007 Messages: 173 Localisation: Saint-Brieuc
|
Posté le: Dim Oct 04, 2009 6:47 am Sujet du message: Fonctions CaR dans les scripts ? |
|
|
Bonjour,
Dans un script, j'aurais besoin de la distance entre deux points.
| Code: |
| distance = d("A","B"); |
ne fonctionne évidemment pas.
Alors pour l'instant je tape quelque chose comme :
| Code: |
distance=Expression("d(_o,_i)",-3,-4);SetHide(distance, true);
distance=GetExpressionValue(distance); |
Existe-t-il un moyen plus rapide ? |
|
| Revenir en haut de page |
|
 |
alain974

Inscrit le: 13 Juin 2009 Messages: 144 Localisation: Réunion
|
Posté le: Dim Oct 04, 2009 7:01 am Sujet du message: |
|
|
Si tu crées un segment, sa valeur est la distance:
| Code: |
s=Segment("A","B");
SetHide(s,true);
p=Point("_s",0);
|
L'abscisse de "p" est la distance voulue. |
|
| Revenir en haut de page |
|
 |
jerome
Inscrit le: 06 Nov 2007 Messages: 173 Localisation: Saint-Brieuc
|
Posté le: Dim Oct 04, 2009 10:34 am Sujet du message: |
|
|
Ok, merci,
Mais d'une façon plus générale, y a-t-il un moyen de récupérer des fonctions (d() ou autres) ou constantes (par exemple pixel) de CaR dans l'éditeur de scripts ? |
|
| Revenir en haut de page |
|
 |
yves974 Site Admin

Inscrit le: 30 Oct 2007 Messages: 244 Localisation: Réunion
|
Posté le: Dim Oct 04, 2009 4:53 pm Sujet du message: |
|
|
Pour d c'est comme pour les valeurs des curseurs, il suffit de le mettre dans une expression : dans une expression LaD, tu mets la distance dont tu as besoin et tu peux utiliser LaD dans le script ou la prendre par dist='LaD";
Cela dit pour les distances jusque là j'ai toujours utlisé un segment car on peut directement utiliser s1 (s'il s'appelle comme ça) dans les commandes entre guillements, c'est pratique aussi.
Par contre pour pixel, moi non plus je n'ai pas d'idée. |
|
| Revenir en haut de page |
|
 |
stephrey
Inscrit le: 20 Jan 2011 Messages: 16 Localisation: Limoges
|
Posté le: Ven Jan 21, 2011 11:10 am Sujet du message: |
|
|
Bonjour,
Je propose l'ajout d'une fonctionnalité à Carmetal version 3.5.2 (c'est la seul version pour laquelle je dispose du code source).
Il s'agit de donner l'accès au ZirkelCanvas de la figure. Pour ce faire, modifions le fichier src/eric/JSprogram/JSRun.java pour ajouter la méthode Zir à la classe JSRun.On n'oubliera pas d'ajouter la chaine "Zir" au tableau allnames.
| Code: |
public class JSRun {
static Context cx = null;
static ScriptableObject scope = null;
static Construction C = null;
static ZirkelCanvas ZC = null;
static String CTOOL = "";
static String CBACKUP = "";
static String FILENAME = "";
static ArrayList<String> BACKUPS = new ArrayList<String>();
static String[] allnames = {"cm", ... , "Layer", "Zir"};
//
//
//
static public ZirkelCanvas Zir() {
return ZC;
}
}
|
Après compilation de cette version modifiée, on peut faire les choses suivantes dans un CarScript :
| Code: |
// On suppose que A et B sont des points de la figure
pixel = Number(Zir().JSreceive("pixel"));
Println("pixel/2 =" + (pixel/2));
distanceAB = Number(Zir().JSreceive("d(A,B)"));
Println("distanceAB = " + distanceAB);
|
|
|
| Revenir en haut de page |
|
 |
stephrey
Inscrit le: 20 Jan 2011 Messages: 16 Localisation: Limoges
|
Posté le: Dim Jan 23, 2011 11:13 am Sujet du message: |
|
|
Bonjour,
Je pensais qu'il n'était pas possible d'accéder au ZirkelCanvas de la figure sans rajouter une méthode à la classe JSRun.
Eh bien en relisant le code source de CaRMetal 3.5.2 (Pas dans son intégralité, je vous rassure !), je viens de m'apercevoir que j'avais tort et qu'il n'est donc pas nécessaire de modifier CaRMetal.
| Code: |
ZC = Packages.eric.JZirkelCanvas.getCurrentZC();
a = InteractiveInput("Point A","Point");
b = InteractiveInput("Point B","Point");
pixel = Number(ZC.JSreceive("pixel"));
Println("pixel =" + pixel);
distance = Number(ZC.JSreceive("d("+a+","+b+")"));
Println("d("+a+", "+b+") = " + distance);
|
J'espère que ceci répondra à la question de Jérome :
| Citation: |
Mais d'une façon plus générale, y a-t-il un moyen de récupérer des fonctions (d() ou autres) ou constantes (par exemple pixel) de CaR dans l'éditeur de scripts ?
|
|
|
| Revenir en haut de page |
|
 |
jerome
Inscrit le: 06 Nov 2007 Messages: 173 Localisation: Saint-Brieuc
|
Posté le: Dim Jan 23, 2011 12:57 pm Sujet du message: |
|
|
Très intéressant.
Merci. |
|
| Revenir en haut de page |
|
 |
alain974

Inscrit le: 13 Juin 2009 Messages: 144 Localisation: Réunion
|
Posté le: Dim Mar 04, 2012 4:26 pm Sujet du message: |
|
|
| jerome a écrit: |
| y a-t-il un moyen de récupérer des fonctions (d() ou autres) ou constantes (par exemple pixel) de CaR dans l'éditeur de scripts ? |
Au bout de plus de deux ans après la question, je viens de trouver un élément de réponse
En supposant qu'on a tracé une fonction f1 dans la figure, on peut créer un miroir de f1 avec ce script:
| Code: |
figure=getC();
fonction=figure.find("f1");
function f1(x){
return fonction.evaluateF(x);
}
|
On peut aussi redéfinir l'intervalle de définition de f1 avec
| Code: |
| fonction.setRange(-5,5,0.1) |
Une fois que c'est fait, on peut alors calculer l'intégrale de la fonction sur ce nouvel intervalle, avec
| Code: |
| Println(fonction.getIntegral()); |
Ceci dit, cette dernière "fioriture" est inutile puisqu'on peut créer une expression donnant l'intégrale:
| Code: |
var e=Expression("integrate(f1,-5,5)",0,0);
Println(GetExpressionValue(e));
|
|
|
| Revenir en haut de page |
|
 |
jerome
Inscrit le: 06 Nov 2007 Messages: 173 Localisation: Saint-Brieuc
|
Posté le: Lun Mar 05, 2012 8:06 am Sujet du message: |
|
|
| Merci. |
|
| Revenir en haut de page |
|
 |
|