Page 1 sur 1

Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 14:53
par sarmin
Hello :)

Voilà je viens (ce matin !) de me lancer dans la découverte d'asymptote : ca semble vraiment puissant.

Néanmoins je cherche à faire quelque chose de précis et j'ai pas trouvé d'aide dans la doc (enfin je l'ai surement loupé, c'est qu'elle est un peu ... hardcore à lire cette doc. ET Dieu ne m'a pas aidé :'( ) : je cherche à ajouter un petit espace entre le bord (le contour) d'un rectangle et le remplissage (des hachures) afin de distinguer les différents bord. Une image valant mieux qu'un long discours : j'ai ceci

Image

dont le code est
Code: Tout sélectionner
\documentclass{article}
\usepackage[pdftex]{graphicx}
\usepackage{asymptote}
\begin{document}
\begin{figure}[h]
 \begin{asy}
 // Variables
 import patterns;
 unitsize(1inch);
 pair A=(0,0),B=(2,0),C=(2,1),D=(0,1);
 path rect=A--B--C--D--cycle;
 // Dessin
 draw(A--B);
 draw(C--D);
 draw(B--C,dashed);
 draw(D--A,dashed);
 add("hachure",hatch(1.2mm,NE,.3mm+black));
 fill(rect,pattern("hachure"));
\end{asy}
\end{figure}
\end{document}


Je veux donc simplement ajouter du blanc entre les hachures et le bord noir plein/pointillé ; une idée ?

Merci d'avance !

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 16:10
par maurice
Bonjour, je ne suis pas sur d'avoir bien compris :

0ed12cc53fdcddac4ef9fd6ba16d74b6.png

Code: Tout sélectionner
// Variables
import patterns;
unitsize(1inch);
pair A=(0,0),B=(2,0),C=(2,1),D=(0,1);
path rect=A--B--C--D--cycle;
// Dessin
draw(A--B);
draw(C--D);
draw(B--C,dashed);
draw(D--A,dashed);
add("hachure",hatch(1.2mm,NE,.3mm+black));
fill(rect,pattern("hachure"));
shipout(bbox(5mm));


ou

8ba2b7938377c8a8ad1fc06e7e513417.png

Code: Tout sélectionner
// Variables
import patterns;
unitsize(1inch);
pair A=(-1,-0.5),B=(1,-0.5),C=(1,0.5),D=(-1,0.5);
path rect=A--B--C--D--cycle;
// Dessin
draw(A--B);
draw(C--D);
draw(B--C,dashed);
draw(D--A,dashed);
add("hachure",hatch(1.2mm,NE,.3mm+black));
fill(scale(0.95)*rect,pattern("hachure"));


Pour des documents plus abordables, pour commencer le démarrage rapide de Christophe (voir lien en dessous) ou les sites de Gaétan Marris et de Philippe Ivaldi sont très bien.

maurice

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 16:50
par chellier
Pour compléter la réponse de maurice sur bbox, on peut préciser plusieurs arguments :
Code: Tout sélectionner
frame bbox(picture pic=currentpicture,
           real xmargin=0, real ymargin=xmargin,
           pen p=currentpen, filltype filltype=NoFill)


8b6861dcb8ab54bd378af36d2ccc3bd7.png

Code: Tout sélectionner
import patterns;
unitsize(1inch);
pair A=(0,0),B=(2,0),C=(2,1),D=(0,1);
path rect=A--B--C--D--cycle;
// Dessin
draw(A--B);
draw(C--D);
draw(B--C,dashed);
draw(D--A,dashed);
add("hachure",hatch(1.2mm,NE,.3mm+black));
fill(rect,pattern("hachure"));
shipout(bbox(1cm,5mm,invisible,Fill(yellow))); //invisible pour ne pas avoir de cadre


Christophe

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 17:45
par sarmin
Merci beaucoup à vous deux. Le second résultat de maurice est parfait :D Et merci pour les liens ca me semble fort interessant (j'avais déjà remarqué la doc 3D :wink: )

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 21:22
par sarmin
Je me permet un petit up sur le même sujet : ca va peut être vous sembler "futile" comme détail, mais bon : pourquoi sur le second résultat de maurice le blanc est plus fin en haut que sur les côtés ?

Le code est donc

fa6b8e7a523ad1ad1f51178273bb345c.png

Code: Tout sélectionner
// Variables
import patterns;
unitsize(1inch);
pair A=(-1,-0.5),B=(1,-0.5),C=(1,0.5),D=(-1,0.5);
path rect=A--B--C--D--cycle;
// Dessin
draw(A--B);
draw(C--D);
draw(B--C,dashed);
draw(D--A,dashed);
add("hachure",hatch(1.2mm,NE,.3mm+black));
fill(scale(0.95)*rect,pattern("hachure"));

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 21:29
par chellier
Je tente. Le coefficient de réduction est 0,95, la largeur est plus petite que la longueur (oui, je sais :roll: ), donc l'espace en haut et en bas est plus petit.

C'est pas plus simple avec shipout(bbox(...)) ?

Christophe

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 21:42
par sarmin
Bien vu pour le coef ca doit venir de là. On ne sais pas par hasard donner des longeurs absolues en moins ou un truc du style ?

Sinon pour shippout je ne vois pas bien comment l'utiliser ; on sait faire des bordures de styles différents ?

Enfin je pense qu'il y a moyen de contourner le problème en faisant un autre rectangle par dessus (et en virant les bordures du premier).

EDIT : bon bha j'ai essayé, mais j'ai l'impression que l'espace est pas égal en haut/bas et sur les côtés. Pourtant là ce sont des longueurs absolues. Me trompe-je ?

9978df2f07d02585e6e2de30803b5001.png

Code: Tout sélectionner
// Variables
import patterns;
unitsize(1inch);
pair A=(-1,-0.5),B=(1,-0.5),C=(1,0.5),D=(-1,0.5),E=(1.3,-0.25),F=(1.3,0.25);
path rect=A--B--C--D--cycle;
// Le rectangle
add("hachure",hatch(1.2mm,NE,.3mm+black));
fill(scale(0.95)*rect,pattern("hachure"));
// La bordure
draw(A+(-0.01,-0.01)--B+(0.01,-0.01));
draw(D+(-0.01,+0.01)--C+(0.01,0.01));
draw(A+(-0.01,-0.01)--D+(-0.01,+0.01),dashed);
draw(B+(0.01,-0.01)--C+(0.01,0.01),dashed);
// Points isolés
draw(E);
draw(F);


PS : les deux points sur les côtés on s'en fiche x)

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 21:54
par chellier
Personnellement, je ne comprend pas bien la méthode avec le coef de réduction...

Pour bbox, regarde un de mes messages précédents, pour bbox, xmargin, la marge à gauche et à droite et ymargin, la marge en haut et en bas.
p, le trait de contour, et le filltype si tu veux remplir.

14c0304fcd303e8fce8ac412b6570f41.png

Code: Tout sélectionner
import patterns;
unitsize(1inch);
pair A=(0,0),B=(2,0),C=(2,1),D=(0,1);
path rect=A--B--C--D--cycle;
// Dessin
draw(A--B);
draw(C--D);
draw(B--C,dashed);
draw(D--A,dashed);
add("hachure",hatch(1.2mm,NE,.3mm+black));
fill(rect,pattern("hachure"));

shipout(bbox(.5mm,.5mm,invisible)); //invisible pour ne pas avoir de cadre


Christophe

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 22:01
par sarmin
Hum oui je comprend bien le bout de code mais ce que je recherche c'est bien un blanc entre la cadre extérieur (composé de segment pleins et de pointillés) et les hachures (comme sur mon exemple), pas autour de la figure.

Sinon ton exemple semble bon s'il y a moyen de définir un cadre de type différent (pointillés sur les côtés, plein en haut) pour la "bbox". Mais c'est cela que je ne vois pas comment faire.

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Vendredi 01 Juillet 2011, 22:20
par chellier
Ok :idea: J'avais rien compris :wink: Désolé.

Christophe

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Samedi 02 Juillet 2011, 01:56
par GMaths
Une solution pour des contours fermés de forme quelconque.

Image

Re: Ajouter un espace entre le remplissage et le bord

MessagePosté: Samedi 02 Juillet 2011, 10:19
par sarmin
GMaths a écrit:Une solution pour des contours fermés de forme quelconque.

Image


Waw merci je vais regarder ca de près :)