Page 1 sur 1

[Un peu résolu] Entourer un texte avec une double ellipse

MessagePosté: Mercredi 21 Septembre 2011, 16:57
par cerise
Bonjour,

Je découvre la commande object qui permet de mettre un texte dans une boîte, par exemple :
Code: Tout sélectionner
unitsize(1cm);

object B = object("B",ellipse);
add(B);

qui donne un B entouré d'une ellipse.
J'ai vu que les formes de boîte prédéfinis étaient box, roundbox et ellipse. Y a-t-il un moyen d'avoir une double ellipse autour de mon texte ?

Cerise

Re: Entourer un texte avec une double ellipse

MessagePosté: Jeudi 22 Septembre 2011, 08:35
par cerise
Bon désolée du double post, mais je complète un peu ce que je disais.
Finalement, j'utilise plutôt la commande draw, comme ci-dessous :
Code: Tout sélectionner
unitsize(1cm);

pair zB = (0,0);
object B = draw("B",ellipse,zB);

Je n'ai toujours pas trouvé comment faire une double ellipse. Peut-on définir d'autres types d'"enveloppe" que les trois prédéfinis ? Y a-t-il une documentation plus détaillée de ces fonctions que la doc officielle ?

EDIT : Pour relier plusieurs objets définis comme ça, j'ai trouvé dans un exemple sur le site de Gaëtan, ainsi que dans un exemple sur le site officiel, une syntaxe du genre :
Code: Tout sélectionner
add(new void(picture pic, transform t) {
    draw(pic,point(B,SE,t)--point(A,NW,t));
}); 

J'ai aussi essayé d'écrire simplement une syntaxe du genre
Code: Tout sélectionner
draw(point(B,SE)--point(A,NW));

et j'ai constaté que dans le deuxième cas, cela traçait tout une droite, alors que dans le premier cas, cela traçait un segment qui s'arrête bien où on veut. Et j'avoue ne pas comprendre pourquoi ça marche. Si quelqu'un pouvait m'expliquer cette syntaxe...

(Je crois que je perds beaucoup plus de temps à essayer de faire quelque chose d'élégant et ad hoc qu'il ne m'en faudrait pour simplement faire ce que je veux "à la main", mais bon...)

EDIT 2 : bon, j'ai finalement abandonné l'idée d'utiliser ces fonctions et j'ai plutôt programmé mes propres fonctions pour faire exactement ce que je veux. Cela dit, je reste intéressée par des explications supplémentaires sur la manière dont fonctionnent les "objects" et les enveloppes...

Re: Entourer un texte avec une double ellipse

MessagePosté: Jeudi 22 Septembre 2011, 20:21
par chellier
Bonsoir,
On peut se référer au fichier plain_boxes.asy.
Par exemple, en modifiant ellipse de plain_boxes, on peut obtenir ceci (j'ai enlevé object pour que ça compile sur le forum) :

e69e656c6eea0dbbf22317d1b02aa1bf.png

Code: Tout sélectionner
unitsize(1cm);

path DBellipse(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
pen p=currentpen, filltype filltype=NoFill, bool above=true)
{
pair m=min(src);
pair M=max(src);
pair D=M-m;
static real factor=0.5*sqrt(2);
int sign=filltype == NoFill ? 1 : -1;
pair h=0.5*sign*(max(p)-min(p));
path g=ellipse(0.5*(M+m),factor*D.x+h.x+xmargin,factor*D.y+h.y+ymargin);
frame F;
if(above == false) {
filltype.fill(F,g,p);
filltype.fill(F,g,white);
prepend(dest,F);
} else {filltype.fill(dest,g,p);
filltype.fill(dest,g,white);}
return g;
}

pair zA=(2,2), zB=(1,1), zO=(0,0);
draw("B",DBellipse,zO,1pt+blue);
draw("DEUX",DBellipse,zB,2pt+blue);
draw("TROIS",DBellipse,zA,3pt+blue);


Pour les autres questions, je n'ai pas regardé, et je n'ai pas trop le temps en ce moment :( Quelqu'un d'autre peut-être ?
Christophe

Re: Entourer un texte avec une double ellipse

MessagePosté: Vendredi 23 Septembre 2011, 10:29
par cerise
Merci pour ta réponse !
Je vais regarder ton code en détail et le comparer à celui de ellipse dans le fichier plain_boxes.asy pour comprendre ce qu'il fait.

EDIT : si je comprends bien, tu traces d'abord une ellipse colorée épaisse (enfin, de l'épaisseur spécifiée en argument), par dessus laquelle tu traces une ellipse blanche plus fine (enfin de l'épaisseur par défaut) ?

Re: Entourer un texte avec une double ellipse

MessagePosté: Vendredi 23 Septembre 2011, 12:08
par chellier
cerise a écrit:si je comprends bien, tu traces d'abord une ellipse colorée épaisse (enfin, de l'épaisseur spécifiée en argument), par dessus laquelle tu traces une ellipse blanche plus fine (enfin de l'épaisseur par défaut) ?

C'est ça. J'ai fais ça vite juste pour montrer que l'on pouvait modifier ellipse. Après il faudrait tester davantage, voire essayer de passer la largeur de l'ellipse blanche en argument (je ne sais pas si c'est faisable facilement). Mais il y a peut-être mieux...

Christophe

Re: Entourer un texte avec une double ellipse

MessagePosté: Dimanche 25 Septembre 2011, 17:26
par GMaths
cerise a écrit:Pour relier plusieurs objets définis comme ça, j'ai trouvé dans un exemple sur le site de Gaëtan, ainsi que dans un exemple sur le site officiel, une syntaxe du genre :
Code: Tout sélectionner
add(new void(picture pic, transform t) {
    draw(pic,point(B,SE,t)--point(A,NW,t));
}); 


Il y a beaucoup d'objets à relier ? Tous de même forme ? Dans quel but ?
Je demande cela... car, par exemple, pour quelque chose qui ressemble à un graphe (qui pourrait ressembler à celui-ci, mais d'autres mises en forme sont possibles), il y aurait éventuellement une autre façon.

2011-09-25_182405.png
2011-09-25_182405.png (24.4 Kio) Vu 932 fois

Re: Entourer un texte avec une double ellipse

MessagePosté: Lundi 26 Septembre 2011, 14:50
par cerise
Bonjour !

Comme je le disais dans un précédent message, je me suis programmé des petites macros pour faire exactement ce que je voulais. Donc, dans l'immédiat, j'ai résolu mon problème, et les feuilles de TD sont imprimées. (Là c'était pour dessiner des arbres binaires pas trop gros, en l'occurrence.)

Mais à l'avenir, je pourrais avoir besoin de dessiner des graphes ou d'autres arbres, et ta solution m'intéresse !

Re: Entourer un texte avec une double ellipse

MessagePosté: Jeudi 29 Septembre 2011, 16:46
par cerise
Désolée du double-post, mais je voulais te signaler, Gaëtan, que j'ai justement eu l'occasion d'utiliser ton package pour dessiner des graphes pour faire mon TD suivant, et je voulais te remercier pour ton beau boulot ! Ça m'a été très utile.

Re: Entourer un texte avec une double ellipse

MessagePosté: Jeudi 29 Septembre 2011, 23:34
par GMaths
cerise a écrit:je voulais te signaler, Gaëtan, que j'ai justement eu l'occasion d'utiliser ton package pour dessiner des graphes pour faire mon TD suivant, et je voulais te remercier pour ton beau boulot ! Ça m'a été très utile.

Il n'y a pas de quoi mais je me pose une question : tu es sûre de parler du mien de package ? :mrgreen:

Je dis cela car j'ai dû mettre à un moment donné un lien vers un début de doc sur le package, avec très peu d'exemples... donc il faut être doué(e) pour l'avoir trouvé et avoir compris son fonctionnement. :mrgreen:

Re: [Un peu résolu] Entourer un texte avec une double ellips

MessagePosté: Vendredi 30 Septembre 2011, 13:17
par cerise
On parle bien de ça ?
asymptote-f34/extension-sur-les-graphes-t12231.html

Si je comprends bien ton message, c'est bien toi qui a écrit ce package ? C'est bien celui-ci que j'ai utilisé, pour produire le dessin ci-dessous, que l'un des premiers exemples de la doc permet de réaliser sans trop de problème.

Re: [Un peu résolu] Entourer un texte avec une double ellips

MessagePosté: Samedi 01 Octobre 2011, 08:32
par GMaths
cerise a écrit:On parle bien de ça ?
asymptote-f34/extension-sur-les-graphes-t12231.html

Si je comprends bien ton message, c'est bien toi qui a écrit ce package ?


oui et oui. :-)

J'avais oublié que j'avais osé créer un sujet à son propos... alors que sa documentation est si pauvre.

cerise a écrit:C'est bien celui-ci que j'ai utilisé, pour produire le dessin ci-dessous, que l'un des premiers exemples de la doc permet de réaliser sans trop de problème.

Alors tant mieux.

Re: [Un peu résolu] Entourer un texte avec une double ellips

MessagePosté: Samedi 01 Octobre 2011, 15:58
par cerise
GMaths a écrit:J'avais oublié que j'avais osé créer un sujet à son propos... alors que sa documentation est si pauvre.

Eh bien tu as bien fait d'oser ;)