I made a side view of a compass based on this answer symbols of pencil, ruler and compass
I'd like a view from above.

\documentclass[border=2pt]{standalone}
\usepackage{tikz,xparse}
\newcommand{\NodeAngle}[2]{%
%\pgfextra{
\pgfmathanglebetweenpoints%
{\pgfpointanchor{#1}{center}}%
{\pgfpointanchor{#2}{center}}%
\global\let\MyAngle\pgfmathresult
}%}
% #1 premier point ---- Distance entre 2 nodes ----
% #2 second point
% On récupère le résultat dans \MyDist
\makeatletter
\newcommand{\NodeDist}[2]{%
\pgfpointdiff{\pgfpointanchor{#1}{center}}
{\pgfpointanchor{#2}{center}}
% no need to use a new dimen
\pgf@xa=\pgf@x
\pgf@ya=\pgf@y
% to convert from pt to cm
\pgfmathparse{veclen(\pgf@xa,\pgf@ya)/28.45274}
\global\let\MyDist\pgfmathresult % we need a global macro
}
\makeatother
% ######################
% Dessin crayon #
% ######################
\newcommand{\Crayon}[1]{%
\begin{scope}[scale=.7,#1]
\fill[gray!60] (-.2,4.8) -- (.2,4.8)
-- (.2,.8) --(.1,.65)
-- (0,.8) -- (-.1,.66)
-- (-.2,.8) -- cycle ;
\draw[color=white] (0,4.8) -- (0,.8 );
\fill[black] (-.2,4.3) -- (0,4.27)
-- (.2,4.3) -- (.2,4.8) arc(30:150:0.23cm) ;
\fill[brown!50] (-.2,.8)
-- (0,0) node[coordinate,pos=0.75](a){}
-- (.2,.8) node[coordinate,pos=0.25](b){}
-- (.1,.65) -- (0,.8) -- (-.1,.66) -- cycle;
\fill[gray] (a) -- (0,0) -- (b) -- cycle;
\end{scope}
}
% ######################
% Dessin du compas #
% ######################
\NewDocumentCommand{\Compas}{smm}{%
\IfBooleanTF{#1}{%
% with *
% keep distance between extemities
}{%
% without *
% calulation of the distance between extemities
\NodeDist{#2}{#3}
}
\NodeAngle{#2}{#3}
\def\L{6} % taille des branches du compas
% calcul de l'angle de l'ouverture
\pgfmathsetmacro{\AngleCP}{asin(\MyDist/(2*\L))}
\begin{scope}[shift=(#2)]
\begin{scope}[%
join=round,
rotate=\MyAngle,
shift=(270-\AngleCP:-\L)
]
% branche pointe sèche
\draw[rotate=-\AngleCP,fill=gray!80]
(0,0)--(0,-\L)--(-.2,-\L+.8)--(-.2,0)--cycle ;
\draw[rotate=-\AngleCP,fill=gray!05]
(0,-\L+.8)--(0,-\L)--(-.2,-\L+.8)--cycle ;
% branche crayon
\draw[rotate=\AngleCP,fill=gray!80]
(0,0)--(0,-\L)--(.2,-\L+.8)--(.2,0)--cycle ;
\begin{scope}[rotate=\AngleCP,shift={(0,-\L)}]
\Crayon{rotate=-12}
\draw[fill=gray!25] (\L/30,\L/5) circle (\L/36) ;
\fill[gray!5] (\L/30,\L/5)
-- ++(30:\L/36) arc (30:45:\L/36) -- cycle ;
\fill[gray!5] (\L/30,\L/5)
-- ++(210:\L/36) arc (210:225:\L/36) ;
\filldraw (\L/30,\L/5) circle (.02) ;
\end{scope}
% haut du compas
\draw[fill=gray!80] (-.1,0) rectangle (.1,.7) ;
\draw[fill=gray!25] (0,0) circle (.25) ;
\fill[gray!5] (0,0) -- (30:.25) arc (30:45:.25) -- cycle ;
\fill[gray!5,rotate=180] (0,0) -- (30:.25) arc (30:45:.25) -- cycle ;
\filldraw (0,0) circle (.05) ;
\end{scope}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0) ;
\coordinate (B) at (3,2) ;
\Compas{A}{B}
\end{tikzpicture}
\end{document}



.– percusse Jul 11 '15 at 12:29-as it should be open ;-) – Tarass Jul 11 '15 at 12:32