Page 1 sur 1

UnFill et rotated Label

MessagePosté: Mardi 21 Avril 2020, 14:28
par MB
Bonjour, en effectuant quelques recherches je suis tombé sur ce sujet, dans lequel Olivier propose la solution suivante.

5f91c2549a2720600182eae06480f86e.png

Code: Tout sélectionner
size(8cm);
filldraw(scale(10)*unitcircle);
frame f;
label(f,"Test",Fill(white));
add(rotate(40)*f,(1,1),UnFill);
add(rotate(-45)*f,(-4,-4));


Je cherche à faire en sorte que le fond ne soit pas blanc, comme c'est le cas avec Fill(white), mais transparent comme c'est le cas avec UnFill. Des idées ?

Re: UnFill et rotated Label

MessagePosté: Dimanche 26 Avril 2020, 22:50
par OG
Bonsoir

J'ai un petit souci avec la transparence (plus de transparence sauf en format svg).
Aurais-tu un exemple plus parlant car si c'est transparent on ne verra pas les étiquettes ?
Sinon on peut toujours ajuster la transparence avec opacity(entre 0 et 1).

O.G.

Re: UnFill et rotated Label

MessagePosté: Mercredi 29 Avril 2020, 22:31
par MB
Par exemple, avec la figure suivante, j'ai un label option 'UnFill' mais dont le fond est transparent (et non blanc).

8b9b29836abfbe5d7cfbdfe54eeab3c0.png

Code: Tout sélectionner
size(5cm);
filldraw(scale(10)*unitcircle);
label(scale(4)*"Test",(0,0),UnFill);


L'objectif serait donc d'adapter la version frame afin d'obtenir un fond transparent au lieu d'un fond blanc.

Re: UnFill et rotated Label

MessagePosté: Mardi 05 Mai 2020, 09:52
par OG
Ok j'ai compris la question !

Mettre `Unfill` dans la définition du label ne va pas te satisfaire à mon avis. Car j'imagine que tu voudrais qu'avec une rotation on obtienne un joli rectangle transparent (qui a subi la rotation) et là ça ne marche pas.
Il y a une solution avec la routine unfill(path), mais il faut récupérer la taille et position du rectangle, ce qui prendra un peu de temps.

f260028841c3030d01a4b920196e4d8e.png

Code: Tout sélectionner
size(10cm);
filldraw(scale(10)*unitcircle);
frame f;
label(f,"Test",red,UnFill);
add(rotate(40)*f,(1.4,1.4),UnFill);

add(rotate(-45)*f,(-4,-4));

Re: UnFill et rotated Label

MessagePosté: Mardi 05 Mai 2020, 17:42
par OG
Voilà, il y a peut-être plus simple. La difficulté est de récupérer le rectangle qui fait le cadre. Attention si tu ajoutes après un élément qui sort du cadre, cela change l'échelle, donc met à terre la solution proposée.


7858b770e3828f843e25b20e2f5d6359.png

Code: Tout sélectionner
size(10cm);
filldraw(scale(10)*unitcircle);
frame f;
label(f,"Test",blue,UnFill);

add(rotate(40)*f,(1,1),UnFill);

path rh=scale(size(f).x,size(f).y)*shift(-.5,-.5)*unitsquare;
real sx=size(currentpicture,true).x/size(currentpicture,false).x;
real sy=size(currentpicture,true).y/size(currentpicture,false).y;
path rhe=scale(sx,sy)*rh;
unfill(shift(-4,-4)*rotate(-45)*rhe);
add(rotate(-45)*f,(-4,-4));

Re: UnFill et rotated Label

MessagePosté: Mardi 05 Mai 2020, 23:56
par MB
Merci Olivier, c'est exactement ça.

En ce qui concerne la figure suivante, je me demandais d'où venait la marge entre le texte et la boite du label. J'ai pas vraiment pu déterminer si cette marge est gérée par latex ou par asymptote. J'ai tenté de mettre labelmargin=0 mais ça ne change pas grand chose, je ne suis pas parvenu à supprimer cette marge.

8b9b29836abfbe5d7cfbdfe54eeab3c0.png

Code: Tout sélectionner
size(5cm);
filldraw(scale(10)*unitcircle);
label(scale(4)*"Test",(0,0),UnFill);