%%%%%%%%%%%%%%%%%% ifgeo.gen %%%%%%%%%%%%%%%%%%%%%%% % (c) Ingo Kloeckl % This program can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % History % 20.12.1999 v1.0 IK % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % geometric symbols % by I.Kloeckl, ingo.kloeckl@2k-software.de pen normalpen; normalpen := pencircle scaled 1linewidth; shadow_x := 2pt; shadow_y := 2pt; % some internal utility functions def Tri(expr n, s, phi) = if ((phi=90) or (phi=-90)): beginchar((char n),ystretch*(10pt#),xstretch*(10pt#),0); else: beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); fi; pickup normalpen; bot lft z0 = (-0.5pt*s*xstretch, -0.5pt*s*ystretch) rotated (phi); bot rt z1 = (0.5pt*s*xstretch, -0.5pt*s*ystretch) rotated (phi); top z2 = (0pt, 0.5pt*s*ystretch) rotated (phi); draw z0--z1--z2--cycle shifted(.5w,.5h); endchar; enddef; def FillTri(expr n, s, phi) = if ((phi=90) or (phi=-90)): beginchar((char n),ystretch*(10pt#),xstretch*(10pt#),0); else: beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); fi; pickup normalpen; fill (-0.5pt,-0.5pt)--(0.5pt,-0.5pt)--(0pt,0.5pt)--cycle xscaled (s*xstretch) yscaled (s*ystretch) rotated (phi) shifted(.5w,.5h); endchar; enddef; def Cir(expr n, s) = beginchar((char n),10pt#,10pt#,0); pickup normalpen; numeric t; t:=s*1pt; draw fullcircle scaled t shifted(5pt,5pt); endchar; enddef; def FillCir(expr n, s) = beginchar((char n),10pt#,10pt#,0); pickup normalpen; numeric t; t:=s*1pt; fill fullcircle scaled t shifted(5pt,5pt); endchar; enddef; def Sq(expr n, s, shadow) = beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); pickup normalpen; bot lft z0 = (-0.5pt*s*xstretch, -0.5pt*s*ystretch); bot rt z1 = (0.5pt*s*xstretch, -0.5pt*s*ystretch); top rt z2 = (0.5pt*s*xstretch, 0.5pt*s*ystretch); top lft z3 = (-0.5pt*s*xstretch, 0.5pt*s*ystretch); if shadow=1: path p; p := z0--z1--z2; draw p shifted(.5w+shadow_x,.5h-shadow_y); elseif shadow=2: path p; p := z0--z1--z2--z3--cycle; fill p shifted(.5w+shadow_x,.5h-shadow_y); unfill p shifted(.5w,.5h); elseif shadow=3: path p; p := z0--z1--z2--z3--cycle; draw p shifted(.5w+shadow_x,.5h-shadow_y); unfill p shifted(.5w,.5h); fi; draw z0--z1--z2--z3--cycle shifted(.5w,.5h); endchar; enddef; def FillSq(expr n, s, shadow) = beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); pickup normalpen; bot lft z0 = (-0.5pt*s*xstretch, -0.5pt*s*ystretch); bot rt z1 = (0.5pt*s*xstretch, -0.5pt*s*ystretch); top rt z2 = (0.5pt*s*xstretch, 0.5pt*s*ystretch); top lft z3 = (-0.5pt*s*xstretch, 0.5pt*s*ystretch); if shadow=1: path p; p := z0--z1--z2; draw p shifted(.5w+shadow_x,.5h-shadow_y); elseif shadow=3: path p; p := z0--z1--z2--z3--cycle; draw p shifted(.5w+shadow_x,.5h-shadow_y); fi; fill z0--z1--z2--z3--cycle shifted(.5w,.5h); endchar; enddef; def CrossedSq(expr n, s) = beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); pickup normalpen; bot lft z0 = (-0.5pt*s*xstretch, -0.5pt*s*ystretch) shifted(.5w,.5h); bot rt z1 = (0.5pt*s*xstretch, -0.5pt*s*ystretch) shifted(.5w,.5h); top rt z2 = (0.5pt*s*xstretch, 0.5pt*s*ystretch) shifted(.5w,.5h); top lft z3 = (-0.5pt*s*xstretch, 0.5pt*s*ystretch) shifted(.5w,.5h); draw z0--z2; draw z1--z3; endchar; enddef; def Diamond(expr n, s, shadow, fillshape) = beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); pickup normalpen; x0 = 0pt; bot y0 = -0.5pt*s*ystretch; rt x1 = 0.5pt*s*xstretch; y1 = 0pt; x2 = 0pt; top y2 = 0.5pt*s*ystretch; lft x3 = -0.5pt*s*xstretch; y3 = 0pt; if shadow=1: path p; p := z0--z1--z2; draw p shifted(.5w+shadow_x,.5h); elseif shadow=2: path p; p := z0--z1--z2--z3--cycle; fill p shifted(.5w+shadow_x,.5h); unfill p shifted(.5w,.5h); elseif shadow=3: path p; p := z0--z1--z2--z3--cycle; draw p shifted(.5w+shadow_x,.5h); unfill p shifted(.5w,.5h); fi; draw z0--z1--z2--z3--cycle shifted(.5w,.5h); if fillshape=1: % right half filled fill z0--z1--z2--cycle shifted(.5w,.5h); elseif fillshape=2: % lower half filled fill z0--z1--z3--cycle shifted(.5w,.5h); fi; endchar; enddef; def FillDiamond(expr n, s, shadow) = beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); pickup normalpen; x0 = 0pt; bot y0 = -0.5pt*s*ystretch; rt x1 = 0.5pt*s*xstretch; y1 = 0pt; x2 = 0pt; top y2 = 0.5pt*s*ystretch; lft x3 = -0.5pt*s*xstretch; y3 = 0pt; if shadow=1: path p; p := z0--z1--z2; draw p shifted(.5w+shadow_x,.5h); elseif shadow=3: path p; p := z0--z1--z2--z3--cycle; draw p shifted(.5w+shadow_x,.5h); fi; fill z0--z1--z2--z3--cycle shifted(.5w,.5h); endchar; enddef; def DiamondBar(expr n, s, barshape) = beginchar((char n),xstretch*(10pt#),ystretch*(10pt#),0); pickup normalpen; x0 = 0pt; bot y0 = -0.5pt*s*ystretch; rt x1 = 0.5pt*s*xstretch; y1 = 0pt; x2 = 0pt; top y2 = 0.5pt*s*ystretch; lft x3 = -0.5pt*s*xstretch; y3 = 0pt; path p; if barshape=1: % horizontal bar p := z1--z3; draw p shifted(.5w,.5h); elseif barshape=2: % vertical bar p := z0--z2; draw p shifted(.5w,.5h); fi; endchar; enddef; "Bigsquare"; Sq(32,10,0); "Square"; Sq(48,8,0); "Smallsquare"; Sq(64,6,0); "FilledBigsquare"; FillSq(80,10,0); "FilledSquare"; FillSq(96,8,0); "FilledSmallsquare"; FillSq(112,6,0); "SquareShadow1"; Sq(0,8,1); "SquareShadow2"; Sq(1,8,2); "SquareShadow3"; Sq(2,8,3); "FilledSquareShadow1"; FillSq(3,8,1); "FilledSquareShadow3"; FillSq(4,8,3); "BigtriangleUp"; Tri(33,10,0); "TriangleUp"; Tri(49,8,0); "SmalltriangleUp"; Tri(65,6,0); "FilledBigtriangleUp"; FillTri(81,10,0); "FilledTriangleUp"; FillTri(97,8,0); "FilledSmalltriangleUp"; FillTri(113,6,0); "BigtriangleLeft"; Tri(34,10,90); "TriangleLeft"; Tri(50,8,90); "SmalltriangleLeft"; Tri(66,6,90); "FilledBigtriangleLeft"; FillTri(82,10,90); "FilledTriangleLeft"; FillTri(98,8,90); "FilledSmalltriangleLeft"; FillTri(114,6,90); "BigtriangleDown"; Tri(35,10,180); "TriangleDown"; Tri(51,8,180); "SmalltriangleDown"; Tri(67,6,180); "FilledBigtriangleDown"; FillTri(83,10,180); "FilledTriangleDown"; FillTri(99,8,180); "FilledSmalltriangleDown"; FillTri(115,6,180); "BigtriangleRight"; Tri(36,10,-90); "TriangleRight"; Tri(52,8,-90); "SmalltriangleRight"; Tri(68,6,-90); "FilledBigtriangleRight"; FillTri(84,10,-90); "FilledTriangleRight"; FillTri(100,8,-90); "FilledSmalltriangleRight"; FillTri(116,6,-90); "Bigcircle"; Cir(37,10); "Circle"; Cir(53,8); "Smallcircle"; Cir(69,6); "FilledBigcircle"; FillCir(85,10); "Filledcircle"; FillCir(101,8); "FilledSmallcircle"; FillCir(117,6); "BigDiamond"; Diamond(38,10,0,0); "Diamond"; Diamond(54,8,0,0); "SmallDiamond"; Diamond(70,6,0,0); "FilledBigDiamond"; FillDiamond(86,10,0); "FilledDiamond"; FillDiamond(102,8,0); "FilledSmallDiamond"; FillDiamond(118,6,0); "BigRightDiamond"; Diamond(47,10,0,1); "RightDiamond"; Diamond(63,8,0,1); "SmallRightDiamond"; Diamond(79,6,0,1); "BigLowerDiamond"; Diamond(95,10,0,2); "LowerDiamond"; Diamond(111,8,0,2); "SmallLowerDiamond"; Diamond(127,6,0,2); "DiamondShadow1"; Diamond(5,8,1,0); "DiamondShadow2"; Diamond(6,8,2,0); "DiamondShadow3"; Diamond(7,8,3,0); "DiamondSquareShadow1"; FillDiamond(8,8,1); "DiamondSquareShadow3"; FillDiamond(9,8,3); "BigCross"; CrossedSq(13,10); "Cross"; CrossedSq(14,8); "SmallCross"; CrossedSq(15,6); "BigHorBar"; DiamondBar(26,10,1); "HorBar"; DiamondBar(27,8,1); "SmallHorBar"; DiamondBar(28,6,1); "BigVertBar"; DiamondBar(29,10,2); "VertBar"; DiamondBar(30,8,2); "SmallVertBar"; DiamondBar(31,6,2); end. %%%%%%%%%%%%%%%%%% end of ifgeo.gen %%%%%%%%%%%%%%%%%%%%%%%