draw2d.mac (expérimental)

Pour proposer des idées, ou simplement discuter

draw2d.mac (expérimental)

Messagepar P.Fradin » 24 Jan 2010 00:20

Je poste dans ce fil un fichier expérimental de macros pour la 2d (version 0.2 du 24/01/10):

draw2d.mac
(19.91 Kio) Téléchargé 797 fois


C'est surtout pour montrer ce que j'aimerais faire pour les prochaines versions de TeXgraph au niveau de l'homogénéité des commandes de dessin 2d:

draw( "type", données, [options] )


Pour l'instant le fichier ne définit que les types: line, dot, cartesian, polar, parametric (les 3 derniers faisant appel au premier). Outre l'homogénéité, les avantages sont les suivants:

  • On peut ajouter de nouvelles options ou styles à un type, cela ne remet pas en cause la syntaxe. Par exemple, j'ai ajouté le FillStyle:=gradient, ainsi que LineStyle:=gradient, DotStyle:=pix dans ce modèle, ainsi que l'option marker:=[pos1, marker1, pos2, marker2, ...].
  • On peut ajouter ou modifier les exports d'un type sans modifier le source de TeXgraph. Par exemple pour le type line: la commande draw("line", ...) va appeler la macro Drawline lors du rendu écran, et Exportline lors d'un export, si cette dernière n'existe pas, alors TeXgraph procède à l'export par défaut.
  • On peut créer ses propres types, par exemple pour créer le type "domaine1", il faut créer la macro Drawdomaine1(données, [options] ), si on veut un export personnalisé, alors il faut aussi créer la macro Exportdomaine1( données, [options] ).

Code: Tout sélectionner
{Drawdomaine1( f(x), [options] )}
[
SaveAttr(),
x:=if ForMinToMax then [Xmin,Xmax] else [tMin,tMax] fi,
discont:=0, nbdiv:=5,
$options:=%2,
tMin:=x[1], tMax:=x[2], x:=Nil,
if Free(%1,x) then $L1:=Get(Courbe(t+i*%1,nbdiv),0)
else $L1:=Get(Cartesienne(%1,nbdiv),0)
fi,
draw("line", [tMin, for $z in L1 By jump do z od, tMax], [%2,close:=0]),
RestoreAttr()
]


Un exemple d'élément graphique et son résultat:

Code: Tout sélectionner
[
frenchBabel:=1, {si le document utilise l'option french de Babel}
draw( "line", [-4.5+i,-0.5+i,-3+4*i],
      [FillStyle:=gradient, colorA:=white, colorB:=darkblue, gradstyle:=radial, radialcenter:=0.5+i*0.5, close:=1]  ),
Width:=8,
draw( "cartesian", Ent(x),
      [x:=[-4,4], discont:=1, Color:=red, marker:=[0,Dot,1,Oarc] ]  ),
draw( "domaine1", sin(x)-2,
      [x:=[1,4], Color:=forestgreen, FillStyle:=gradient, gradstyle:=horizontal, colorA:=white, colorB:=gray]   ),
Axes(0,1+i)
]


testdraw2d.png
testdraw2d.png (10.91 Kio) Consulté 26440 fois


pour les options, voici les variables du fichier:

Code: Tout sélectionner
Var
    pix = -1; {style pixel pour DotStyle, nécessite un NewBitmap() dans l'élément graphique}
    x = 1/0;  {option intervalle pour les courbes cartesiennes x:=[-5, 4], pour les autres c'est t:=[ ; ]}
    discont = 0; {discontinuité (0/1) pour les courbes}
    nbdiv = 5;   {nb de dichotomies pour les courbes}
    marker = Nil; {liste de marqueurs [pos1, type1, pos2, type2, ...] où pos est entre 0 et 1}
{type de marker}
    Oarc = 1;      {arc ouvert}
    Carc = 1+i;      {arc fermé}
    Ocro = 3;      {crochet ouvert}
    Ccro = 3+i;      {crochet fermé}
    Circle = 7;      {cercle}
    Dot = 2;      {point}
    Oarrow = 4;      {flèche ouverte}
    Carrow = 4+i;   {flèche fermée}
    OTarrow = 5;   {flèche triangulaire ouverte}
    CTarrow = 5+i;   {flèche triangulaire}
{dimensions des markers, utiliser l'option size:= }
    arcSize = 0.1;
    {dotSize = 2;}
    croHeight = 0.1 {cm};
    croWidth = 0.05;
    arrowHeight = 0.1;
    arrowWidth = 0.15;
    Line = 6;
    lineHeight = 0.1;
{style gradient}
    gradient = 8; {style pour FillStyle ou LineStyle}
    colorA = white;
    colorB = red;
    frenchBabel = 0;   {pour l'export tikz et pgf il y a un conflit avec les caractères actifs de Babel}
    gradstyle = horizontal; {radial/horizontal/vertical}
    radial = 5;
    radialcenter = 0.25+075*i; {pour le style radial, le centre est dans [0;1]x[0;1]}
    SvgGradient = 0; {pour les exports en svg}
{options déjà définies
    scale = 1;      pour les marker
    close = 0;      pour le type line
    radius = 0      pour le type line}


Si vous avez un avis sur cette uniformisation de la syntaxe, ou des idées supplémentaires, n'hésitez pas! Bien sûr ce fichier n'est qu'une ébauche.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (exprimental)

Messagepar projetmbc » 24 Jan 2010 11:00

Salut,
P.Fradin a écrit:C'est surtout pour montrer ce que j'aimerais faire pour les prochaines versions de TeXgraph au niveau de l'homogénéité des commandes de dessin 2d:
draw( "type", [options], données )


Quand je lis les codes actuels j'ai toujours un peu du mal, mais tout est relatif bien entendu, pour les comprendre. Il me semble que choisir une syntaxe du type ci-dessous serait mieux :
draw( "type", données, [options] )

De cette façon, on a l'objet math. en premier puis ensuite toutes les fioritures.

P.Fradin a écrit:On peut créer ses propres types, par exemple pour créer le type "domaine1", il faut créer la macro Drawdomaine1([options], données), si on veut un export personnalisé, alors il faut aussi créer la macro Exportdomaine1( [options], données).[/*]

Du coup, il serait mieux d'utiliser :
Exportdomaine1( données, [options])


Qu'en penses-tu ?
projetmbc
 
Messages: 398
Inscription: 26 Déc 2009 18:01

Re: draw2d.mac (exprimental)

Messagepar P.Fradin » 24 Jan 2010 11:23

Salut,

projetmbc a écrit:Quand je lis les codes actuels j'ai toujours un peu du mal, mais tout est relatif bien entendu, pour les comprendre. Il me semble que choisir une syntaxe du type ci-dessous serait mieux :
draw( "type", données, [options] )

De cette façon, on a l'objet math. en premier puis ensuite toutes les fioritures.


C'était ce que j'avais fait pour le premier jet, parce que je pense comme toi que la description mathématique devrait être prioritaire. Puis je me suis rendu que mettre les options en dernier oblige à réduire les données à un seul argument, ce qui n'est pas le cas si on les met en dernier. Par exemple le type label (pas encore ajouté) nécessite au moins deux données: le texte et le point d'ancrage, bien sûr on peut contourner le problème en décidant que la donnée c'est le texte et on met le point d'ancrage en option. Comme le fichier n'en est qu'au début, il est facile de changer l'ordre.

Juste une remarque: en tikz et pstricks les options sont en premier et tous les utilisateurs s'en accomodent!

Du coup, il serait mieux d'utiliser :
Exportdomaine1( données, [options])

Qu'en penses-tu ?


Bien sûr les deux types de macros (Draw... et Export...) doivent avoir les mêmes arguments.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (exprimental)

Messagepar projetmbc » 24 Jan 2010 12:57

P.Fradin a écrit:Puis je me suis rendu que mettre les options en dernier oblige à réduire les données à un seul argument, ce qui n'est pas le cas si on les met en dernier.

Est-ce dû à des contraintes internes ? Je bosse, quand j'ai un peu de temps, sur un prog. pour taper des maths et la partie graphique math. se fera par exemple pour les points en tapant :
Code: Tout sélectionner
A = pt(4;5 | red cross)

Du coup je pense plus pratique d'avoir
Code: Tout sélectionner
A = pt(4;5 | red cross)
B = pt(7;8 | green cross visible)
C = pt(11;12 | blue circle fixed)

au lieu de
Code: Tout sélectionner
A = pt(red cross | 4;5)
B = pt(green cross visible | 7;8)
C = pt(blue circle fixed | 11;12)

On voit tout de suite ce qu'il se passe d'un point de vue mathématique dans le 1er cas..
P.Fradin a écrit:Juste une remarque: en tikz et pstricks les options sont en premier et tous les utilisateurs s'en accomodent!

"Mauvais argument"... Je trouve ces langages hyper verbeux et depuis que je programme sous Python, je cherche vraiment à minimiser ce qu'il faut taper. Je "refuse" de taper directement du tikz.

De plus, il y a certaines habitudes qui ne sont pas bonnes.
projetmbc
 
Messages: 398
Inscription: 26 Déc 2009 18:01

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 24 Jan 2010 13:02

Je suis d'accord avec toi. Mais je dois admettre aussi que la syntaxe: draw("type", donnéees, [options]), peut donner quelque chose d'assez verbeux également!
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 24 Jan 2010 13:32

Finalement je suis revenu à la syntaxe d'origine: draw( "type", données, [options] ). Le post initial a donc été mis à jour.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar projetmbc » 24 Jan 2010 16:02

P.Fradin a écrit:Je suis d'accord avec toi. Mais je dois admettre aussi que la syntaxe: draw("type", donnéees, [options]), peut donner quelque chose d'assez verbeux également!

Dans le cadre de mon langage, j'ai opté pour l'utilisation de la casse pour savoir si un point est visible ou non.
projetmbc
 
Messages: 398
Inscription: 26 Déc 2009 18:01

Re: draw2d.mac (expérimental)

Messagepar Alphonse Capriani » 25 Jan 2010 15:58

Très intéressant ton fichier... Je vais regarder ca de plus près et te dire ce que j'en pense...

Au fait, tu a mis un fichier d'aide avec??? (je remarque que non, mais tes variables globales sont suffisament explicite. Ca devrait pas poser de problème...)
Ya Ba Da Ba Dooo!!!
Avatar de l’utilisateur
Alphonse Capriani
 
Messages: 576
Inscription: 18 Juil 2009 19:10
Localisation: East Harlem - NY

Re: draw2d.mac (expérimental)

Messagepar projetmbc » 27 Jan 2010 15:49

Bonjour,
je viens de tomber dans la doc. sur la macro suite... Il me semble sain de ne mettre que des noms en english. Non ?
projetmbc
 
Messages: 398
Inscription: 26 Déc 2009 18:01

Re: draw2d.mac (expérimental)

Messagepar Alphonse Capriani » 28 Jan 2010 16:13

Là, ca me parrait un peu compliqué projetmbc.

C'est vrai que l'idéal aurait été de choisir dès le départ une langue pour les macros : soit le français, soit l'anglais (l'anglais, ca fait plus class!! :D )
Maintenant, si Patrick commence à modifier ca maintenant, bonjour les incompatibilités avec les fichiers qui tournaient sur les versions précédentes...

Et puis au final, on s'y habitue au "franglais" de TeXgraph. Je m'y suis même mis dans mes fichiers de macros (DrawCalendrier, DrawRosace, ...)
Ya Ba Da Ba Dooo!!!
Avatar de l’utilisateur
Alphonse Capriani
 
Messages: 576
Inscription: 18 Juil 2009 19:10
Localisation: East Harlem - NY

Re: draw2d.mac (expérimental)

Messagepar projetmbc » 28 Jan 2010 16:50

Le problème, c'est que l'on risque d'attraper le syndrome JCV... Et cela m'effraie, j'ai pas trop envie d'être aware. :lol:

Je faisais juste une remarque au niveau de la cohérence. Je me fais un langage pour taper mes docs efficacement, et j'ai opté pour de l'anglais de partout. Comme tu dis, c'est un choix à faire au départ.
projetmbc
 
Messages: 398
Inscription: 26 Déc 2009 18:01

Re: draw2d.mac (expérimental)

Messagepar Alphonse Capriani » 28 Jan 2010 16:58

Et oui : tu as raison! L'ombre de JCVD plane sur TeXgraph.

A ce sujet, j'ai lu dans Closer que Van Damme était justement un grand utilisateur de TeXgraph et que c'était un membre actif du forum.
(Si mes sources son fiables, son pseudo serait "Joffrey")
Ya Ba Da Ba Dooo!!!
Avatar de l’utilisateur
Alphonse Capriani
 
Messages: 576
Inscription: 18 Juil 2009 19:10
Localisation: East Harlem - NY

Re: draw2d.mac (expérimental)

Messagepar projetmbc » 28 Jan 2010 17:11

:mrgreen: :lol: :D
projetmbc
 
Messages: 398
Inscription: 26 Déc 2009 18:01

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 29 Jan 2010 16:40

Salut à tous,

A ce sujet, j'ai lu dans Closer que Van Damme était justement un grand utilisateur de TeXgraph et que c'était un membre actif du forum.
(Si mes sources son fiables, son pseudo serait "Joffrey")


Oups, démasqué !!!
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 02 Mars 2010 10:42

Bonjour,

Une suggestion : pour les markers on pourrait rajouter
- flèche triangulaire ouverte pleine
- flèche triangulaire pleine
non ?
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 02 Mars 2010 13:30

Joffrey a écrit:Bonjour,

Une suggestion : pour les markers on pourrait rajouter
- flèche triangulaire ouverte pleine
- flèche triangulaire pleine
non ?


???
OTarrow et CTarrow
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 02 Mars 2010 13:58

Ce que j'entends par "pleine" c'est "coloriée" à l'intérieur.
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 02 Mars 2010 14:33

Joffrey a écrit:Ce que j'entends par "pleine" c'est "coloriée" à l'intérieur.


Il te suffit d'ajouter FillColor:= <couleur> dans les options.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 21 Mars 2010 21:39

Bonsoir à tous,

Patrick, j'ai besoin d'une précision au sujet de cette macro.
Je voudrais créer une macro Drawmachin(),que je veux utiliser dans un élément utilisateur comme suit :
Code: Tout sélectionner
draw("machin", arg1, arg2, [options])

mais cela ne colle pas car ce type de macro nécessite les options en deuxième argument, comment je peux m'en sortir ?

Merci

Deux précisions quand même :
- arg2 est une chaine de caractère ;
- j'ai réussi à contourner le problème, mais je ne me sers pas de la nouvelle syntaxe.

Je ne suis pas sûr que ce post soit clair (sauf peut-être pour moi, quoique ;) )
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 21 Mars 2010 22:06

Salut Joffrey,

La seule solution que je vois est de passer un des deux arguments en option, c'est plus facile pour le premier car le deuxième est une chaine (mais ce n'est pas impossible pour le deuxième de le mettre en option).

[Edit]: cette syntaxe ne sera pas obligatoire je le répète. Avec la version 1.95 tu pourras écrire:
draw( "machin", arg1, arg2, [options])

mais ce sera moins homogène.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 21 Mars 2010 22:37

Ok, je vois, ce qui me gène c'est que le deuxième argument n'est pas une option vu qu'il est absolument nécessaire au fonctionnement de la macro.
Je reprendrais tout ça demain et je posterais ma macro.

Merci
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 21 Mars 2010 22:45

Tu peux essayer avec la version test 1.95, ça marche.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 22 Mars 2010 21:51

Bonsoir Patrick,

Je viens d'essayer de passer de la version 1.94 à la version 1.95, mais ma macro qui fonctionnait sous 1.94 ne fonctionne pas sous 1.95.
D'ailleurs j'ai testé ceci (dans un élément utilisateur) :
Code: Tout sélectionner
[
NewMac("Drawdomaine4",[
SaveAttr(),
x:=if ForMinToMax then [Xmin,Xmax] else [tMin,tMax] fi,
discont:=0, nbdiv:=5,
$options:=%2,
tMin:=x[1], tMax:=x[2], x:=Nil,
if Free(%1,x) then $L1:=Get(Courbe(t+i*%1,nbdiv),0)
else $L1:=Get(Cartesienne(%1,nbdiv),0)
fi,
draw("line", [tMin, for $z in L1 By jump do z od, tMax], [%2,close:=0]),
RestoreAttr()] ),

draw("domaine4", sin(x)-2,
      [Color:=forestgreen, FillStyle:=full, FillColor:=red])
]

Mais je n'obtiens rien dans la fenêtre graphique, et la macro ne se crée pas.
Il y surement un truc que je fais de travers.
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Re: draw2d.mac (expérimental)

Messagepar P.Fradin » 22 Mars 2010 21:59

C'est l'utilisation de NewMac qui ne va pas, c'est NewMac("nom", "expression"). Donc ici cela donnerait:

Code: Tout sélectionner
NewMac("Drawdomaine4","[
SaveAttr(),
x:=if ForMinToMax then [Xmin,Xmax] else [tMin,tMax] fi,
discont:=0, nbdiv:=5,
$options:=%2,
tMin:=x[1], tMax:=x[2], x:=Nil,
if Free(%1,x) then $L1:=Get(Courbe(t+i*%1,nbdiv),0)
else $L1:=Get(Cartesienne(%1,nbdiv),0)
fi,
draw(""line"", [tMin, for $z in L1 By jump do z od, tMax], [%2,close:=0]),
RestoreAttr()]" ),   


Tu noteras le double "" autour du mot line.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: draw2d.mac (expérimental)

Messagepar Joffrey » 22 Mars 2010 22:06

Ok, la macro Drawdomaine4 se crée mais rien dans la fenetre ; il n'y a pas de macro à charger dans la version 1.95.
L'homme en noir fuyait à travers le désert, et le Pistoléro le suivait ...
Joffrey
 
Messages: 287
Inscription: 16 Juil 2009 17:05
Localisation: Vichy

Suivant

Revenir vers Propositions - Discussions

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 16 invités

cron