/************************************************************************ ** ** FILE : hakasetp.c ** ** ZWECK : ** ** AUTOR : Michael C. Ancutici ** Universitaet Stuttgart, Fakultaet Informatik ** ** DATUM : 14.03.93 ** *************************************************************************/ #include "hakasetp.h" #include "hawin.h" static XPoint Pfeil[ 4]; static void PfeilCp( p) XPoint *p; { Pfeil[1].x = p[0].x; Pfeil[1].y = p[0].y; Pfeil[2].x = p[1].x; Pfeil[2].y = p[1].y; Pfeil[3].x = p[2].x; Pfeil[3].y = p[2].y; } static void PfeilInvX( p) XPoint *p; { Pfeil[1].x = - p[0].x; Pfeil[1].y = p[0].y; Pfeil[2].x = - p[1].x; Pfeil[2].y = p[1].y; Pfeil[3].x = - p[2].x; Pfeil[3].y = p[2].y; } static void PfeilInvY( p) XPoint *p; { Pfeil[1].x = p[0].x; Pfeil[1].y = - p[0].y; Pfeil[2].x = p[1].x; Pfeil[2].y = - p[1].y; Pfeil[3].x = p[2].x; Pfeil[3].y = - p[2].y; } static void PfeilInvXY( p) XPoint *p; { Pfeil[1].x = - p[0].x; Pfeil[1].y = - p[0].y; Pfeil[2].x = - p[1].x; Pfeil[2].y = - p[1].y; Pfeil[3].x = - p[2].x; Pfeil[3].y = - p[2].y; } /************************************************************************* ** FUNKTION: HaKaSetPfeil ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ void HaKaSetPfeil( mx1, my1, mx2, my2, ActualGC) int mx1, my1; int mx2, my2; GC ActualGC; { int dx = mx2-mx1; int dy = my2-my1; double m; static XPoint Pfeil_0[] = { {-3,5}, {6,0}, {-3,-5} }; static XPoint Pfeil_1[] = { {1,6}, {-5,-1}, {4,-5} }; static XPoint Pfeil_2[] = { {-1,7}, {-4,-2}, {5,-5} }; static XPoint Pfeil_3[] = { {-3,6}, {-3,-3}, {6,-3} }; static XPoint Pfeil_4[] = { {-7,1}, {3,4}, {5,-5} }; static XPoint Pfeil_5[] = { {-6,-1}, {1,5}, {5,-4} }; /* 1: x =-y, y =-x */ static XPoint Pfeil_6[] = { {-5,3}, {0,-6}, {5,3} }; /* 0: x =-y, y =-x */ static float v0 = 0.1293; static float v1 = 0.4; static float v2 = 0.75; static float v3 = 1.8; static float v4 = 2.7; static float v5 = 7.5; Pfeil[0].x = mx2; Pfeil[0].y = my2; m = (dy !=0) ? ((double)dx)/((double)dy) : 0; /* Steigung berechnen */ if (m<0) /* Steigung positiv machen */ m = -m; if (dx>=0) /* 0..12 rechts */ if (dy<0) /* 0..6 rechts oben */ if (-dy>=dx) /* 0..3 */ if (mv5)) /* Pfeil 6 */ PfeilCp( Pfeil_6); else if (m>v4) /* Pfeil 7 */ PfeilInvY( Pfeil_5); else if (m>v3) /* Pfeil 8 */ PfeilInvY( Pfeil_4); else /* Pfeil 9 */ PfeilInvY( Pfeil_3); else /* 9..12 */ if (m>v2) /* Pfeil 9 */ PfeilInvY( Pfeil_3); else if (m>v1) /* Pfeil 10 */ PfeilInvY( Pfeil_2); else if (m>v0) /* Pfeil 11 */ PfeilInvY( Pfeil_1); else /* Pfeil 12 */ PfeilInvY( Pfeil_0); else /* 12..0 links */ if (dy>0) /* 12..18 links unten */ if (dy>=-dx) /* 12..15 */ if (mv5)) /* Pfeil 18 */ PfeilInvX( Pfeil_6); else if (m>v4) /* Pfeil 19 */ PfeilInvX( Pfeil_5); else if (m>v3) /* Pfeil 20 */ PfeilInvX( Pfeil_4); else /* Pfeil 21 */ PfeilInvX( Pfeil_3); else /* 21..0 */ if (m>v2) /* Pfeil 21 */ PfeilInvX( Pfeil_3); else if (m>v1) /* Pfeil 22 */ PfeilInvX( Pfeil_2); else if (m>v0) /* Pfeil 23 */ PfeilInvX( Pfeil_1); else /* Pfeil 0 */ PfeilCp( Pfeil_0); XSetLineAttributes( MyDisplay, ActualGC, 2, LineSolid, CapProjecting, JoinMiter); XDrawLines( MyDisplay, HaGraphPixmap, ActualGC, Pfeil, 4, CoordModePrevious); XSetLineAttributes( MyDisplay, ActualGC, 0, LineSolid, CapButt, JoinMiter); } /************************************************************************* ** FUNKTION: HaKaSetPunkt ** ZWECK: ** EINGABE: ** AUSGABE: ** RETURN: ** ANMERK: *************************************************************************/ void HaKaSetPunkt( mx, my, ActualGC) int mx, my; GC ActualGC; { XSetLineAttributes( MyDisplay, ActualGC, 5, LineSolid, CapRound, JoinMiter); XDrawLine( MyDisplay, HaGraphPixmap, ActualGC, mx, my, mx-1, my); XSetLineAttributes( MyDisplay, ActualGC, 0, LineSolid, CapButt, JoinMiter); }