(*  *)
rot120[xy_]:=(({{Cos[((2π)/3)], -Sin[((2π)/3)]}, {Sin[((2π)/3)], Cos[((2π)/3)]}})).xy;
Rot120[xylist_]:=rot120 /@xylist;
Rot240[xylist_]:=Rot120[Rot120[xylist]];
ROT120[xylistlist_]:= Rot120 /@xylistlist;
ROT240[xylistlist_]:=ROT120[ROT120[xylistlist]];

(*Heesch type C3C3C3C3*)
ptA={2× 5.773,10}; 
(*5.773=10/(Sqrt[3])*)
ptB={5.773,0};
ptC={5.773,20};
ptD={0,10};
(* *)
XC=-40; YC=+40; RC= 40;
(*middelpunt C en straal*)

incircle[xy_]:=If[(((xy[[1]]-XC))^2)+(((xy[[2]]-YC))^2)<(RC^2),xy,{0,0}];
InCircle[xylist_]:=incircle /@ xylist;
INCIRCLE[xylistlist_]:=Select[InCircle /@ xylistlist,!MemberQ[#,{0,0}]&];

dfrm[{x_,y_}]:=(r=(Sqrt[(x^2)+(y^2)]);σ=(Sqrt[(((1/2)RC)/r)]);{ σ x,σ y});
deform[xy_]:=dfrm[xy-{XC,YC}]+{XC,YC};
Deform[xylist_]:=deform /@ xylist;
DEFORM[xylistlist_]:=Deform /@ xylistlist;

(OverHat[f_]) := (f /@ #)&;
transBC[xy_]:=xy+(ptC-ptB);
TransBC[xylist_]:=transBC /@ xylist;
TRANSBC[xylistlist_]:=TransBC /@ xylistlist;
transOB[xy_]:=xy+ptB;
TransOB[xylist_]:=transOB /@ xylist;
TRANSOB[xylistlist_]:=TransOB /@ xylistlist;
transBO[xy_]:=xy-ptB;
TransBO[xylist_]:=transBO /@ xylist;
TRANSBO[xylistlist_]:=TransBO /@ xylistlist;

rabit1={{5.773,0},{9,4.5},{10,9.5},{2× 5.773,10}};
rabit2={{5.773,0},{3,4},{0,6.5},{0.5,8.5},{0,10}};
eye={{9,12},{9,13},{8,13},{8,12},{9,12}};
wisker={{7,10},{10,11},{8,10},{10,11},{9,10},{10,11}};
rabit1A=(#+ptA)& /@ Rot240[(#-ptA)& /@rabit1];
rabit2D=(#+ptD)& /@ Rot120[(#-ptD)& /@rabit2];

cutting={rabit1,rabit1A,rabit2,rabit2D};
gravure={eye,wisker};

T1[xylistlist_]:=TRANSBC[xylistlist];
T2[xylistlist_]:=ROT120[TRANSBC[ROT240[xylistlist]]];

ROT120B[xylistlist_]:=TRANSOB[ROT120[TRANSBO[xylistlist]]];

Needs["Splines`"];
MyLine[xylist_]:=Spline[xylist,Cubic];
MYLINE[xylistlist_]:=Line /@ INCIRCLE[xylistlist];

NN=RC/2;

WW3[c_,x_]:=N[Table[{c,MYLINE[DEFORM[Nest[T1,Nest[T2,Nest[ROT120B,x,i],j],k]]]},{i,0,2},{j,0,NN},{k,0,NN}]];
G:=Graphics[{WW3[Red,cutting],WW3[Black,gravure]}];
Show[G]
(*Export["rabits.eps",G]*)