[pstricks] HOW TO add my arrowheads to PSTricks?

Christophe FOUREY christophe.fourey at wanadoo.fr
Mon Feb 12 22:29:16 CET 2007


Le 12 février 2007 à 21:56, Christophe FOUREY a écrit :

> HOW TO add my arrowheads to PSTricks?
> I created new arrowheads, and I wish everybody can use them.
>
> Send them to this mailing list?

I send them to this mailing list.
Feel free to make corrections/modifications/etc.

(Arrowheads + Examples)



%
%
%
\documentclass{article}

\usepackage{pstricks}

\pagestyle{empty}

\begin{document}

\makeatletter

% v : Vee arrow (inside)
% V : Vee arrow (outside)
% f : Filled vee arrow (inside)
% F : Filled vee arrow (outside)
\edef\pst at arrowtable{\pst at arrowtable,v-v,V-V,f-f,F-F}

% Vee arrow
\def\psset at veearrowlength#1{\pst at getlength{#1}\psk at veearrowlength}
\psset at veearrowlength{3mm} % default projected length
\def\psset at veearrowangle#1{\pst at getangle{#1}\psk at veearrowangle}
\psset at veearrowangle{30} % default angle
\def\psset at veearrowlinewidth#1{\pst at getlength{#1}\psk at veearrowlinewidth}
\psset at veearrowlinewidth{.35mm} % default vee arrow line width

% Filled vee arrow
\def\psset at filledveearrowlength#1{\pst at getlength{#1} 
\psk at filledveearrowlength}
\psset at filledveearrowlength{3mm} % default projected length
\def\psset at filledveearrowangle#1{\pst at getangle{#1} 
\psk at filledveearrowangle}
\psset at filledveearrowangle{15} % default angle
\def\psset at filledveearrowlinewidth#1{\pst at getlength{#1} 
\psk at filledveearrowlinewidth}
\psset at filledveearrowlinewidth{.35mm} % default vee arrow line width

\pst at def{VeeArrow}<%
     1 setlinecap			% round caps
     1 setlinejoin			% round join
     setlinewidth			% vee arrow line width
     /y ED				% projected length
     2 div /a ED				% angle (divide by 2)
     /t ED				% false = inside, true = outside
     a sin a cos div y mul /x ED		% perpendicular length : x=tan(a).y
     t { 1 -1 scale } if			% if outside : symmetry
     x neg y moveto			% point #1
     0 0 L				% point #2
     x y L				% point #3
     {closepath gsave fill grestore} if	% if filled : close and fill
     stroke				% draw line
     0 t {y 2 mul} {0} ifelse moveto>	% if outside : twice longer line

% VeeArrow : filled?   outside?   (total) angle   (projected)  
length   (arrow) line width

\@namedef{psas at v}{%
   false false \psk at veearrowangle \psk at veearrowlength  
\psk at veearrowlinewidth \tx at VeeArrow}

\@namedef{psas at V}{%
   false true \psk at veearrowangle \psk at veearrowlength  
\psk at veearrowlinewidth \tx at VeeArrow}

\@namedef{psas at f}{%
   true false \psk at filledveearrowangle \psk at filledveearrowlength  
\psk at filledveearrowlinewidth \tx at VeeArrow}

\@namedef{psas at F}{%
   true true \psk at filledveearrowangle \psk at filledveearrowlength  
\psk at filledveearrowlinewidth \tx at VeeArrow}

% And An another arrowhead

% architectural tick / oblique arrow
\edef\pst at arrowtable{\pst at arrowtable,t-t,T-T}

% Tick arrow
\def\psset at tickarrowlength#1{\pst at getlength{#1}\psk at tickarrowlength}
\psset at tickarrowlength{1.5mm} % default projected length
\def\psset at tickarrowlinewidth#1{\pst at getlength{#1} 
\psk at tickarrowlinewidth}
\psset at tickarrowlinewidth{.35mm} % default tick arrow line width

\pst at def{TickArrow}<%
     1 setlinecap			% round caps
     1 setlinejoin			% round join
     setlinewidth			% tick line width
     /y ED				% projected length
     /t ED				% false = normal, true = reversed
     t { 1 -1 scale } if			% if reversed : symmetry
     y neg y moveto			% point #1
     y y neg L				% point #2
     stroke				% draw line
     0 0 moveto>				% origin

\@namedef{psas at t}{%
   false \psk at tickarrowlength \psk at tickarrowlinewidth \tx at TickArrow}

\@namedef{psas at T}{%
   true \psk at tickarrowlength \psk at tickarrowlinewidth \tx at TickArrow}

\makeatother

%\pstVerb{1 setlinecap}
%\pstVerb{1 setlinejoin}

%\psset{veearrowlength=3mm,veearrowangle=30,veearrowlinewidth=.35mm}
%\psset{veearrowfill=true}
%\psset{veearrowfill=false}

Examples:

\vspace{2cm}

\psset{unit=5mm}
\begin{pspicture}(4,6)
   \psset{dimen=middle,arrows=c-c}
   \psset{linewidth=.25mm}
   \psline[linecolor=red,linewidth=.05mm](0,0)(0,6)
   \psline[linecolor=red,linewidth=.05mm](4,0)(4,6)
   \psline{v-v}(0,6)(4,6)
   \psline{v-V}(0,4)(4,4)
   \psline{V-v}(0,2)(4,2)
   \psline{V-V}(0,0)(4,0)
\end{pspicture}

\vspace{2cm}

\psset{unit=5mm}
\begin{pspicture}(4,6)
   \psset{dimen=middle,arrows=c-c}
   \psset{linewidth=.25mm}
   \psline[linecolor=red,linewidth=.05mm](0,0)(0,6)
   \psline[linecolor=red,linewidth=.05mm](4,0)(4,6)
   \psline{f-f}(0,6)(4,6)
   \psline{f-F}(0,4)(4,4)
   \psline{F-f}(0,2)(4,2)
   \psline{F-F}(0,0)(4,0)
\end{pspicture}

\vspace{2cm}

\psset{unit=5mm}
\begin{pspicture}(4,6)
   \psset{dimen=middle,arrows=c-c}
   \psset{linewidth=.25mm}
   \psline[linecolor=red,linewidth=.05mm](0,0)(0,6)
   \psline[linecolor=red,linewidth=.05mm](4,0)(4,6)
   \psline{t-t}(0,6)(4,6)
   \psline{t-T}(0,4)(4,4)
   \psline{T-t}(0,2)(4,2)
   \psline{T-T}(0,0)(4,0)
\end{pspicture}

\end{document}







More information about the PSTricks mailing list