Page 1 sur 2

linetype

Posté : dim. 11 nov. 2012, 19:58
par zariski
Bonsoir !
Qui pourrait me dire la signification des chiffres entre guillemets (et des options true ou false) et notamment comment dois je faire pour avoir des longueurs en mm (ou cm) qui ressortent bien dans l'unité voulue ?

draw( (0,2)--(5,2) , linetype ("24 8 8 8" , false , true ) + 2mm); par exemple ...

Merci

Re: linetype

Posté : dim. 11 nov. 2012, 21:52
par GM
zariski a écrit :Qui pourrait me dire la signification des chiffres entre guillemets (et des options true ou false) et notamment comment dois je faire pour avoir des longueurs en mm (ou cm) qui ressortent bien dans l'unité voulue ?

draw( (0,2)--(5,2) , linetype ("24 8 8 8" , false , true ) + 2mm); par exemple ...


Question pas simple du tout (sache que cela dépend déjà si tu vas utiliser unitsize ou size pour ta figure ; si tu sais l'effet que size a sur une figure, tu imagines bien que souhaiter des traits d'une longueur précise peut sembler un peu contradictoire avec l'utilisation d'un size)...

... à laquelle je ne répondrai pas vraiment ce soir.

Je vais me contenter de deux exemples pour montrer que ce n'est pas si simple d'avoir un nombre précis de points pour un quadrillage, avec de simples commandes :

Figure asymptote 0a91e32e336bc55eea53628e658a136b
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import math;
  2. unitsize(2cm);
  3. add(grid(4,1,dotted+1bp));


Figure asymptote 34a51f52d7c0042f7eac949e033307e5
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import math;
  2. unitsize(2cm);
  3. add(grid(4,1,dashed+1bp));


Les bonnes façons sont un peu compliquées :

Figure asymptote fd42ea2720308610bc5455d924f8a8aa
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import math;
  2. unitsize(2cm);
  3. pen p=linetype("0 " + string(2mm), offset=0, scale=false, adjust=false);
  4. add(grid(4,1,p+1bp));

Figure asymptote 4b1353deb4ae74409f50bda091adaea9
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import math;
  2. unitsize(2cm);
  3. pen p=linetype(string(2mm)+ " " + string(2mm), offset=0, scale=false, adjust=false);
  4. add(grid(4,1,p+1bp));

Figure asymptote de4fcd2a1df7e7d1b5635b7de9b34050
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import math;
  2. unitsize(2cm);
  3. pen p=linetype(string(1mm)+ " " + string(1mm), offset=0, scale=false, adjust=false);
  4. add(grid(4,1,p+1bp));

Re: linetype

Posté : dim. 11 nov. 2012, 22:34
par zariski
Cela me convient en partie.
Une chose par contre, ce n'est pas le nombre de tirets qui m'importe mais plutôt leur longueur et épaisseur.
Ceci dit merci encore une fois pour la réponse.
Bonne soirée et bonne semaine.

Re: linetype

Posté : dim. 11 nov. 2012, 22:54
par GM
zariski a écrit :Cela me convient en partie.
Une chose par contre, ce n'est pas le nombre de tirets qui m'importe mais plutôt leur longueur et épaisseur.

Je veux bien affiner la réponse... si tu donnes un exemple précis à réaliser.

Re: linetype

Posté : lun. 12 nov. 2012, 07:07
par zariski
Finalement c'est Asymptote qui ajuste les tirets selon l'échelle size donnée.
Donc quel est l'intérêt de donner "24 8 8" par exemple ?
Au passage, ces 3 chiffres sont bien en unité bp, n'est ce pas !
Enfin j'avoue être perplexe ...

Re: linetype

Posté : lun. 12 nov. 2012, 07:57
par GM
As-tu regardé la doc Asymptote ?

Les exemples donnés semblent assez clairs, je trouve :

Image

pour longdashdotted : {24,8,0,8} (avant dernière ligne)

{longueur de trait - longueur de l'espace sans trait - 1 point - longueur de l'espace sans trait}

Re: linetype

Posté : lun. 12 nov. 2012, 17:41
par GM
Des exemples pour aider à comprendre les autres paramètres :

Figure asymptote 7d62851c74f5afaa4c072b32c42b7d14
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. unitsize(1cm);
  2.  
  3. path p=(0,0)--(4,0);
  4. transform t=shift(0,-1);
  5. marker croix= marker(scale(2)*cross(4),blue);
  6.  
  7. pen stylo[]={linetype(string(1cm)+" "+string(1cm)), // 0
  8. linetype(string(1cm)+" "+string(1cm),scale=false,adjust=false), // 1
  9. linetype(string(1cm)+" "+string(1cm),scale=false,adjust=true), // 2
  10. 2bp+linetype(string(1cm)+" "+string(1cm),scale=false,adjust=false), // 3
  11. 2bp+linetype(string(1cm)+" "+string(1cm),scale=false,adjust=true), // 4
  12. 2bp+linetype(string(1/(2bp)*cm)+" "+string(1/(2bp)*cm),adjust=false), // 5
  13. linetype(string(1cm)+" "+string(1cm),offset=-2mm,scale=false,adjust=false) // 6
  14. };
  15. // Par défaut : real offset=0, bool scale=true, bool adjust=true
  16.  
  17. for(int k=0; k<stylo.length; ++k) draw(Label(string(k),EndPoint),t^k*p,stylo[k],croix);

Re: linetype

Posté : lun. 12 nov. 2012, 18:31
par zariski
eh beh quel travail !
Grand merci, je suis en train d'étudier les options ...

Re: linetype

Posté : lun. 12 nov. 2012, 18:55
par zariski
Ma conclusion :

- adjust à true fait en sorte que le motif occupe toute la largeur

- scale à true ajuste la longueur des tirets si une largeur de trait a été précisée avant linetype

-offset précise à partir de quand doit commencer le motif depuis le point de départ

Re: linetype

Posté : lun. 12 nov. 2012, 19:32
par GM
zariski a écrit :Ma conclusion :

- adjust à true fait en sorte que le motif occupe toute la largeur

- scale à true ajuste la longueur des tirets si une largeur de trait a été précisée avant linetype

-offset précise à partir de quand doit commencer le motif depuis le point de départ


je rectifie la première affirmation, puisque le motif sera évidemment répété un certain nombre de fois : adjust=true fait en sorte que cela ne se se termine pas par un blanc.

Sinon oui, je suis d'accord... en redisant que par défaut adjust et scale sont définis sur true... donc il faut les passer à false pour avoir le contrôle des longueurs... sans que la largeur ait une influence.
Il faudrait refaire des essais avec size (au lieu de unitsize) et adjust=false, scale=false , pour voir si Asymptote fait du "defered drawing" dans ce cas : respecte t-il encore les nombres de cm indiqués avec un 'size' ?

Autres remarques :
  • il est intéressant de comparer les exemples 3 et 5 pour comprendre l'influence d'un scale=true... dans le cas d'une épaisseur demandée qui n'est pas égale à la valeur par défaut.

    Deux exemples pour prolonger cette remarque :
    http://www.marris.org/asymptote/Grilles ... 109_grille
    http://www.marris.org/asymptote/Grilles ... 109_grille



  • on pourra regretter que cela ne soit pas plus simple (pour nous qui utilisons souvent le cm) pour avoir un nombre précis de points ou de traits par cm... mais compte tenu que l'on a finalement le quasi contrôle-total des traits en pointillés, on ne va pas trop se plaindre : il suffit de prédéfinir des styles et de les mettre dans un fichier asy de macros personnelles.