Page 1 sur 1

Nouvelles flèches

MessagePosté: Mardi 01 Janvier 2008, 16:10
par Ph. Ivaldi
Bonjour et bonne année 2478,

Comme vous avez pu le constater les flèches par défaut de 'Asymptote' ne sont pas très "sexy" :?
J'ai récemment proposé un patch à John (qui l'a amélioré) qui implémente deux nouveaux types de flèche accessibles via un nouveau type de tête de flèche: arrowheadT.
Les nouvelles têtes se nomment SimpleHead et HookHead mais, une fois n'est pas coutume, elles ne sont pas (encore) documentées.
HookHead admet deux paramètres:
* real barb qui est la longueur de l'ardillon; sa valeur par défaut est arrowbarb=3.
* real dir qui est l'angle en degrés de la pointe; sa valeur par défaut est arrowdir=5.

Des exemples d'utilisations se trouvent ICI (figure 0030 et +).
Pour ceux qui n'utilisent pas la version SVN mais veulent toutefois profiter de cette -- exceptionnelle ;-) -- fonctionnalité, il suffit de remplacer le fichier plain_arrows.asy par celui-là.

Re: [asymptote] Nouvelles flèches

MessagePosté: Mardi 01 Janvier 2008, 17:11
par pg
Ph. Ivaldi a écrit:Comme vous avez pu le constater les flèches par défaut de 'Asymptote' ne sont pas très "sexy"

C'est d'ailleurs quelque chose qui m'a toujours choqué : alors que la flèche est l'un des objets graphiques les plus utilisés, comment se fait-il que la plupart des "logiciels" de dessin aient par défaut des flèches aussi moches ?

Je pense qu'il serait bon pour asymptote de suivre le modèle de TikZ et de mettre par défaut des flèches ressemblant à celles de TeX : $\to$. Non seulement c'est plus élégant (elles ne sont pas trop grasses tout en gardant une bonne lisibilité), mais cela permet aussi d'assurer une cohérence parfaite avec le reste du document (indispensable notamment si on s'en sert pour faire des diagrammes commutatifs, ce que je ne sais pas si asymptote fait).

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mardi 01 Janvier 2008, 18:35
par OG
Merci Philippe pour ces magnifiques flèches !
L'inspiration vient elle d'une extension Metapost ?

A+
O.G.

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mardi 01 Janvier 2008, 20:37
par Ph. Ivaldi
Bonjour Olivier,
OG a écrit:L'inspiration vient elle d'une extension Metapost ?

Non, l'extension cmarrows.mp récupère directement des données dans des fichiers de fontes; cela va bien au delà de mes compétences.
Je suis d'accord avec 'PG', la flèche est un élément graphique important et il faudrait qu'Asymptote fournisse les mêmes flèches que TeX; malheureusement je ne sais pas comment l'implémenter.
Si quelqu'un a une idée...

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mardi 01 Janvier 2008, 23:37
par MB
Merci pour cette nouvelle fonctionnalité Philippe. :D

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mercredi 02 Janvier 2008, 01:04
par pg
Ph. Ivaldi a écrit:la flèche est un élément graphique important et il faudrait qu'Asymptote fournisse les mêmes flèches que TeX; malheureusement je ne sais pas comment l'implémenter.
Si quelqu'un a une idée...

N'est-il pas possible d'adapter la façon de faire de Tikz ? (qui revient à traiter la pointe comme un simple trait)

Il y a une description relativement détaillée de comment les flèches sont gérées dans le manuel de TikZ (page 316 et suivantes) et on trouve dans le fichier pgfcorearrows.code.tex les instructions utilisées pour la flèche "to" :

Code: Tout sélectionner
\pgfarrowsdeclare{to}{to}
{
  \pgfutil@tempdima=-0.84pt%
  \advance\pgfutil@tempdima by-1.3\pgflinewidth%
  \pgfutil@tempdimb=0.21pt%
  \advance\pgfutil@tempdimb by.625\pgflinewidth%
  \pgfarrowsleftextend{+\pgfutil@tempdima}
  \pgfarrowsrightextend{+\pgfutil@tempdimb}
}
{
  \pgfutil@tempdima=0.28pt%
  \advance\pgfutil@tempdima by.3\pgflinewidth%
  \pgfsetlinewidth{0.8\pgflinewidth}
  \pgfsetdash{}{+0pt}
  \pgfsetroundcap
  \pgfsetroundjoin
  \pgfpathmoveto{\pgfqpoint{-3\pgfutil@tempdima}{4\pgfutil@tempdima}}
  \pgfpathcurveto
  {\pgfqpoint{-2.75\pgfutil@tempdima}{2.5\pgfutil@tempdima}}
  {\pgfqpoint{0pt}{0.25\pgfutil@tempdima}}
  {\pgfqpoint{0.75\pgfutil@tempdima}{0pt}}
  \pgfpathcurveto
  {\pgfqpoint{0pt}{-0.25\pgfutil@tempdima}}
  {\pgfqpoint{-2.75\pgfutil@tempdima}{-2.5\pgfutil@tempdima}}
  {\pgfqpoint{-3\pgfutil@tempdima}{-4\pgfutil@tempdima}}
  \pgfusepathqstroke
}


C'est un peu incompréhensible, mais on peut traduire (approximativement) en terme de courbes de béziers :

Code: Tout sélectionner
\begin{tikzpicture}[scale=0.5]
\draw (-0.8,0)--(0,0);
\draw[cap=round,rounded corners=0.1pt,xshift=-0.75pt]
                 (-3pt,4pt) .. controls (-2.75pt,2.5pt) and (0pt,0.25pt) ..
                 (0.75pt,0pt) .. controls (0pt,-0.25pt) and (-2.75pt,-2.5pt) ..
                 (-3pt,-4pt);
\end{tikzpicture}


Voici un pdf comparant cette méthode à la flèche "to" de TeX et à celle de TikZ. Avec peut-être quelques ajustements, ce genre de définition doit être transposable facilement à Asymptote, non ?

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mercredi 02 Janvier 2008, 11:40
par Ph. Ivaldi
pg a écrit:Voici un pdf comparant cette méthode à la flèche "to" de TeX et à celle de TikZ. Avec peut-être quelques ajustements, ce genre de définition doit être transposable facilement à Asymptote, non ?

Merci pour toutes ces précisions que j'étudie avec soins.
J'essaye encore un peu de récupérer le chemin exact de la tête de flèche de \rightarrow avec cette méthode.

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mercredi 02 Janvier 2008, 23:43
par Ph. Ivaldi
J'ai enfin réussi...
Du coup j'ai sorti un petit comparatif (Tkiz, Pstricks, Asy) de flèche brut de décoffrage (le titre de la figure est donné par \rightarrow).

Re: [Asymptote] Nouvelles flèches

MessagePosté: Mercredi 02 Janvier 2008, 23:58
par pg
Eh bien, bravo !

Il ne reste maintenant plus qu'à convaincre celui qui s'occupe d'Asymptote de faire en sorte qu'Asymptote utilise cette flèche par défaut.

Re: [Asymptote] Nouvelles flèches

MessagePosté: Jeudi 03 Janvier 2008, 00:32
par MB
En effet, la flèche Asymptote est maintenant très proche de celle de LaTeX. :wink:

Re: [Asymptote] Nouvelles flèches

MessagePosté: Jeudi 03 Janvier 2008, 01:41
par kib2
Beau boulot Philippe, c'est moi ou on dirait que ta flèche n'est pas alignée avec les autres (plus haute on dirait) ?

Re: [Asymptote] Nouvelles flèches

MessagePosté: Jeudi 03 Janvier 2008, 02:12
par Ph. Ivaldi
kib2 a écrit:Beau boulot Philippe


Merci, ça parait rien mais ces histoires de flèches ne sont pas si simples.
Par exemple la flèche que je viens de faire n'est strictement la même que \rightarrow seulement si elle est remplie (Fill) alors que le paramètre par défaut pour les flèches est FillDraw. Je ne sais pas encore comment on va faire...

kib2 a écrit:c'est moi ou on dirait que ta flèche n'est pas alignée avec les autres (plus haute on dirait) ?


Bonne remarque !
Il semble y avoir un problème de "bounding box" quand Asymptote crée une image ne contenant pas à la fois une vraie composante verticale et une vraie composante horizontale (un label ou une tête de flèche ne sont pas des composantes comme les autres).
Si tu compiles le bête code draw((0,0)--(10,0)); la ligne n'est pas centrée chez moi.
Je le signale si tu confirmes.

Re: [Asymptote] Nouvelles flèches

MessagePosté: Jeudi 03 Janvier 2008, 17:54
par Ph. Ivaldi
MB a écrit:En effet, la flèche Asymptote est maintenant très proche de celle de LaTeX.


Non seulement elle est très proche mais en plus elle est mieux.
Si tu grossis 1600 le caractère \rightarrow tu pourras constater que la pointe de la flèche est mal faite.
Avec Acrobat on peut grossir 16 fois le caractère déjà grossi 100 fois:

Code: Tout sélectionner
label(scale(100)*"$\rightarrow$");
shipout(format="pdf");


La nouvelle version de plain_arrows.asy fournit un reproduction exacte de rightarrow le défaut en moins.

pg a écrit:Il ne reste maintenant plus qu'à convaincre celui qui s'occupe d'Asymptote de faire en sorte qu'Asymptote utilise cette flèche par défaut.


Ce n'est pas possible dans l'immédiat car la tête fournit par TeXHead ne s'adapte pas au chemin:

Code: Tout sélectionner
size(5cm);
draw(unitcircle,linewidth(2mm),Arrow(TeXHead,Relative(0.5)));


donne un résultat très moche.
Il faut entièrement revoir la façon dont Asymptote dessine les flèches mais là je pars deux jours en vacances; on en reparlera surement...