int hpa(int argc, char *argv[], int retc, char *retv[]) /*************/ { double plotchar = 0.6; (void) argc; (void) argv; (void) retc; (void) retv; if (setplotter()) return(ERROR); if (raster) { Werrprintf("hpa is not supported on raster plotters"); return(COMPLETE); } charsize(plotchar); color(GREEN); if (debug1) Wscrprintf("ppmm= %g ymultiplier= %d plot= %d raster= %d, mnumxpnts= %d\n", ppmm,ymultiplier,plot,raster,mnumxpnts); /* Copy the display parameters from the current group to the processed group so the current values will be plotted. */ P_copygroup( CURRENT, PROCESSED, G_DISPLAY ); plotparam("tn", COL1, ROW1, 6,0); plotparam("sw", COL1, ROW2, 8,1); plotparam("at", COL1, ROW3, 8,3); plotparam("pw", COL1, ROW4, 8,1); plotparam("sfrq", COL2, ROW1, 8,4); plotparam("tof", COL2, ROW2, 8,1); plotparam("d1", COL2, ROW3, 8,3); plotparam("ct", COL2+2, ROW4, 8,0); plotparam("dn", COL3, ROW1, 6,0); plotparam("dm", COL3, ROW2, 6,0); plotparam("dmm", COL3+7, ROW3, 6,0); plotparam("pp", COL3, ROW4, 8,1); plotparam("dof", COL4, ROW1, 8,1); plotparam("dlp", COL4, ROW2, 8,0); plotparam("dmf", COL4, ROW3, 8,0); plotparam("dpwr", COL4, ROW4, 8,0); plotparam("fn", COL5, ROW1, 8,0); plotparam("lb", COL5, ROW2, 8,3); plotparam("wp", COL5+2, ROW3, 8,1); plotparam("gf", COL6, ROW2, 8,3); plotparam("sp", COL7-6, ROW3, 8,1); plotparam("seqfil", COL8, ROW1, 6,0); plotparam("temp", COL8-2, ROW3, 8,1); plotparam("solvent", COL8, ROW4, 8,0); plotparam("file", COL9, ROW2, 8,0); plotparam("date", COL9, ROW3, 8,0); plotparam("h1freq", COL9, ROW4, 6,0); plottext(295,ROW2); endgraphics(); return(COMPLETE); }
void plotlabels(char *fontname) { long i; double compr, dx = 0, dy = 0, labangle, cosl, sinl, cosv, sinv, vec; boolean left, right; node *lp; double *firstlet; firstlet = (double *)Malloc(nextnode*sizeof(double)); textlength = (double *)Malloc(nextnode*sizeof(double)); compr = xunitspercm / yunitspercm; if (penchange == yes) changepen(labelpen); for (i = 0; i < nextnode; i++) { if (nodep[i]->tip) { lp = nodep[i]; firstlet[i] = lengthtext(nodep[i]->nayme,1L,fontname,font) /fontheight; textlength[i] = lengthtext(nodep[i]->nayme, nodep[i]->naymlength, fontname, font)/fontheight; labangle = nodep[i]->oldtheta; if (cos(labangle) < 0.0) labangle += pi; cosl = cos(labangle); sinl = sin(labangle); vec = sqrt(1.0+firstlet[i]*firstlet[i]); cosv = firstlet[i]/vec; sinv = 1.0/vec; if (style == circular) { right = cos(nodep[i]->oldtheta) > 0.0; left = !right; if (right) { dx = labelheight * expand * cos(nodep[i]->oldtheta); dy = labelheight * expand * sin(nodep[i]->oldtheta); dx -= labelheight * expand * 0.5 * vec * (cosl*sinv-sinl*cosv); dy -= labelheight * expand * 0.5 * vec * (sinl*sinv+cosl*cosv); } if (left) { dx = labelheight * expand * cos(nodep[i]->oldtheta); dy = labelheight * expand * sin(nodep[i]->oldtheta); dx -= labelheight * expand * textlength[i] * cosl; dy -= labelheight * expand * textlength[i] * sinl; dx += labelheight * expand * 0.5 * vec * (cosl*cosv+sinl*sinv); dy -= labelheight * expand * 0.5 * vec * (-sinl*cosv+cosl*sinv); } } else { dx = labelheight * expand * cos(nodep[i]->oldtheta); dy = labelheight * expand * sin(nodep[i]->oldtheta); dx += labelheight * expand * 0.5 * vec * (cosl*cosv+sinl*sinv); dy += labelheight * expand * 0.5 * vec * (-sinl*cosv+cosl*sinv); } if (style == circular) { plottext(lp->nayme, lp->naymlength, labelheight * expand * xscale / compr, compr, xscale * (lp->xcoord + dx + xoffset), yscale * (lp->ycoord + dy + yoffset), 180 * (-labangle) / pi, font,fontname); } else { if (grows == vertical) plottext(lp->nayme, lp->naymlength, labelheight * expand * xscale / compr, compr, xscale * (lp->xcoord + dx + xoffset), yscale * (lp->ycoord + dy + yoffset), -labelrotation, font,fontname); else plottext(lp->nayme, lp->naymlength, labelheight * expand * yscale, compr, xscale * (lp->xcoord + dy + xoffset), yscale * (lp->ycoord - dx + yoffset), 90.0 - labelrotation, font,fontname); } } } if (penchange == yes) changepen(treepen); free(firstlet); free(textlength); } /* plotlabels */