Comment faire avec TikZ pour dessiner une ligne qui commence pleine et devient traitillée ? Voici un ECM (ma courbe est bien plus complexe en réalité) :

\documentclass[tikz, border = 2 mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw[red, very thick, rounded corners, -Stealth]
(0, 0) -- (1, 0) -- (1, 1) -- (2, 1) -- (2, 2) [dashed] -- (0, 2) -- (0, 0.5) ;
\end{tikzpicture}
\end{document}

Dans cet exemple, j'aimerais que la ligne commence pleine et devienne traitillée à partir point de coordonnées (0, 2). J'ai placé le paramètre [dashed] à cet endroit car il me semblait avoir fait comme ça par le passé, mais ma mémoire me joue des tours.

Posée 11 Oct '23, 09:16

Pathe's gravatar image

Pathe ♦♦
7.5k31199246
Taux d'acceptation : 55%

Modifiée 11 Oct '23, 10:23

Dans la doc de tikz, section 14 "Syntax for path specifications", il est précisé que certaines options s'appliquent à tout le "path" comme "color". Je crains que ce soit la même chose avec "dashed" et qu'il faille faire deux draw...

(11 Oct '23, 10:12) jybaudais jybaudais's gravatar image

J'ai bien pensé aux deux draw ; c'est d'ailleurs pour cette raison que j'ai rajouté le paramètre rounded corners : si je crée deux courbes, l'une pleine, avant un corner, et l'autre traitillée, qui commence là et va plus loin, le corner en question n'est pas rounded !

(11 Oct '23, 10:21) Pathe ♦♦ Pathe's gravatar image

Il faut répéter et décaler un peu les points, cf. la réponse que je propose. Si le code n'est pas ce qu'il y a de plus automatique, le résultat est correcte. Non ?

(11 Oct '23, 14:46) jybaudais jybaudais's gravatar image

Certes, mais dans mon cas, décaler les points est complexe : il s'agit d'une courbe de Bézier. L'autre solution est de « dessiner » deux lignes identiques, l'une traitillée, l'autre non, et de ne rendre visible qu'une partie de chacune d'entre elles. Problème : je ne sais pas le faire.

(11 Oct '23, 17:45) Pathe ♦♦ Pathe's gravatar image

Ce dernier commentaire ("ne rendre visible qu'une partie de chacune d'entre elles") donne effectivement une solution :

\documentclass[tikz, border = 2 mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw[red, very thick, rounded corners,dashed, -Stealth]
(0, 0) -- (1, 0) -- (1, 1) -- (2, 1) -- (2,2) -- (0, 2) -- (0, 0.5) ;
\begin{scope}
\path[clip] (-.2,-.2) -- (2.2,2.1) |- cycle; 
\draw[red, very thick, rounded corners]
(0, 0) -- (1, 0) -- (1, 1) -- (2, 1) -- (2,2) -- (0, 2) -- (0, 0.5) ;
\end{scope}
\end{tikzpicture}
\end{document}
Lien permanent

Publiée 11 Oct '23, 21:36

nmarkey's gravatar image

nmarkey
1.4k29
Taux d'acceptation : 45%

Je comprends que vous dessinez une première ligne, traitillée. Puis une seconde, pleine, au tracé identique, à l'intérieur d'un environnement scope.

Mais je ne comprends pas la syntaxe de clip : pourquoi ces coordonnées ? Et que fait le |- cycle à la fin ?

(12 Oct '23, 09:19) Pathe ♦♦ Pathe's gravatar image

clip permet de définir une zone en dehors de laquelle rien ne sera tracé ; ici, un triangle un peu plus grand que le triangle de coordonnées (0,0) -- (2,2) -- (2,0) -- (0,0) [un peu plus grand pour inclure l'épaisseur du trait]

Le |- est un raccourci pour dire "dessine un trait vertical puis un trait horizontal jusqu'au prochain point", et cycle signifie "le point de départ du tracé". Du coup, le triangle (0,0) -- (2,2) -- (2,0) -- (0,0) peut être obtenu par (0,0) -- (2,2) |- cycle.

(12 Oct '23, 10:17) nmarkey nmarkey's gravatar image

Mais bien sûr ! Merci ! Maintenant je comprends pourquoi mes tentatives de modification des paramètres de clip ne fonctionnaient pas !

(12 Oct '23, 10:24) Pathe ♦♦ Pathe's gravatar image
\documentclass[tikz, border = 2 mm]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw[red, very thick, rounded corners]
(0, 0) -- (1, 0) -- (1, 1) -- (2, 1) -- (2,2) -- (1.85,2) ;
\draw[red, very thick, rounded corners, dashed, -Stealth]
(1.8, 2) -- (0, 2) -- (0, 0.5) ;
\end{tikzpicture}
\end{document}
Lien permanent

Publiée 11 Oct '23, 10:16

jybaudais's gravatar image

jybaudais
3435
Taux d'acceptation : 27%

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.