home *** CD-ROM | disk | FTP | other *** search
- /* linetype.c
- * Sets the line type and the scaling of the line pattern
- *
- * Don McCormick CSIRO Division of Applied Physics National Measurements
- * Laboritory Bradfield Road Lindfield 2018 N.S.W.
- *
- * NOTE: default length for a line pattern is approx 6.5 mm on A4 size paper.
- */
- #include "defn.h"
-
- float linescale;
- int linestyle;
-
- linetype(line)
- int line;
- {
- float down1, down2;
- float up1, up2;
- float diagonal;
-
- end_draw();
-
- if (line == LINE_TYPE_SCALE) /* HP-GL only */
- {
- if (SIGNED_NUMERIC)
- {
- if ((linestyle = rint(getval())) > 6)
- linestyle = 6;
- else if (linestyle < -6)
- linestyle = -6;
- }
- else
- {
- SETDOT = 0;
- printf("[] 0 setdash\n");
- return;
- }
-
- diagonal = pow((xmax - xmin),2.0) + pow((ymax - ymin),2.0);
- diagonal = pow(diagonal,0.5);
- if (SIGNED_NUMERIC)
- linescale = getval() * 0.01 * diagonal * XSCALE * SCALE * 0.2;
- else
- linescale = 0.015 * diagonal * XSCALE * SCALE * 0.2;
- } else
- if (line == LINESCALE) /* DXY commands only */
- {
- if (SIGNED_NUMERIC)
- linescale = getval() / 80 * SCALE;
- else
- return;
- } else
- if (line == LINETYPE) /* DXY commands only */
- {
- if (SIGNED_NUMERIC)
- {
- if ((linestyle = rint(getval())) > 5)
- linestyle = 5;
- else if (linestyle < -5)
- linestyle = -5;
- }
- else
- return;
- } else
- {
- fprintf(stderr, "Error: Unknown line flag in linetype.c\n");
- exit(1);
- }
- /*
- * select a line style/type and scale/pitch
- */
- switch (linestyle)
- {
- case 6:
- down1 = 2.0;
- up1 = up2 = 1.5;
- down2 = 1.5;
- break;
-
- case 5:
- down1 = 3.0;
- up1 = up2 = 1.0;
- down2 = 1.5;
- break;
-
- case 4:
- down1 = 4.0;
- up1 = up2 = 0.75;
- down2 = 1.0;
- break;
-
- case 3:
- down1 = 5.0;
- up1 = up2 = 1.0;
- down2 = 0.5;
- break;
-
- case 2:
- down1 = 5.5;
- up1 = 1.0;
- up2 = down2 = 0.0;
- break;
-
- case 1:
- down1 = 5.0;
- up1 = 1.5;
- up2 = down2 = 0.0;
- break;
-
- case -1:
- down1 = 1.5;
- up1 = 3.5;
- down2 = 1.5;
- up2 = 0.0;
- break;
-
- case -2:
- down1 = 2.0;
- up1 = 2.5;
- down2 = 2.0;
- up2 = 0.0;
- break;
-
- case -3:
- down1 = 2.5;
- up1 = up2 = 1.75;
- down2 = 0.5;
- break;
-
- case -4:
- down1 = 2.5;
- up1 = up2 = 1.5;
- down2 = 1.5;
- break;
-
- case -5:
- down1 = down2 = 2.0;
- up1 = up2 = 1.25;
- break;
-
- case -6:
- down1 = down2 = 1.75;
- up1 = up2 = 1.5;
- break;
- }
- if (linestyle == 0)
- {
- SETDOT = 1; /* For HP-GL only */
- printf("[] 0 setdash\n"); /* For DXY commands */
- } else
- {
- SETDOT = 0; /* For HP-GL only */
- if (linescale <= 0) linescale = SCALE;
- down1 *= linescale;
- up2 *= linescale;
- up1 *= linescale;
- down2 *= linescale;
- printf("[%g mm %g mm %g mm %g mm] 0 setdash\n",
- down1, up1, down2, up2);
- }
- }
-