/***********************************************************************/ /* Open Visualization Data Explorer */ /* (C) Copyright IBM Corp. 1989,1999 */ /* ALL RIGHTS RESERVED */ /* This code licensed under the */ /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */ /***********************************************************************/ /* * (C) COPYRIGHT International Business Machines Corp. 1997 * All Rights Reserved * Licensed Materials - Property of IBM * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ #include #include #include extern Object _dxfAxes2D(Pointer); #define MINTICPIX 5; extern Pointer _dxfNew2DAxesObject(void); extern Error _dxfTransposePositions(Array); extern _dxfFreeAxesHandle(Pointer); extern Error _dxfSet2DAxesCharacteristic(Pointer, char *, Pointer); extern Error _dxfGetColorBarAnnotationColors(Object, Object, RGBColor, RGBColor, RGBColor *, RGBColor *, RGBColor *, int *); extern Array _dxfReallyCopyArray(Array); static RGBColor DEFAULTTICCOLOR = {0.3, 0.3, 0.3}; static RGBColor DEFAULTLABELCOLOR = {1.0, 1.0, 1.0}; static RGBColor DEFAULTAXESCOLOR = {-1.0, -1.0, -1.0}; static RGBColor DEFAULTGRIDCOLOR = {-1.0, -1.0, -1.0}; m_Legend(Object *in, Object *out) { char *namestring=NULL; int numstrings, numcolors, rank, shapearray[32], adjust, horizontal; int frame, axeslines=1, i, *col_ptr_i=NULL, intzero=0; int ticsx=0, ticsy=0; float *actualcorners = NULL, labelscale, *col_ptr_f=NULL; float scaleheight, scalewidth, minticsize; float *locs_ptr=NULL; Type type, colortype; Category category; Pointer axeshandle=NULL; char extralabel[80]; char *nullstring="", *fontname, *colorstring, *label; Object outo, withaxes, o, oo, ooo, ob, newo, outscreen; Array a_newpositions=NULL, a_newcolors=NULL, a_newconnections=NULL; Array stringlist=NULL; Array locs=NULL, color_list=NULL, index_list=NULL; float *index_list_ptr; Class class; Point translation, point, box[8], min, max; RGBColor ticcolor, labelcolor, axescolor, gridcolor, framecolor, color; typedef struct { float height, width, thickness; } Shape; Shape shape; strcpy(extralabel,nullstring); adjust = 0; outo = NULL; withaxes = NULL; o = NULL; oo = NULL; if (!in[0]) DXErrorGoto(ERROR_BAD_PARAMETER, "missing string_list"); class = DXGetObjectClass(in[0]); if (!DXExtractNthString(in[0],0,&namestring)) DXErrorGoto(ERROR_BAD_PARAMETER,"string_list must be a string list"); if (DXGetObjectClass(in[0])==CLASS_STRING) { numstrings = 1; stringlist = DXNewArray(TYPE_STRING, CATEGORY_REAL, 1, strlen(DXGetString((String)in[0]))+1); if (!DXAddArrayData(stringlist, 0, 1, (Pointer)DXGetString((String)in[0]))) goto error; } else { if (!DXGetArrayInfo((Array)in[0], &numstrings, &type, &category, &rank, shapearray)){ goto error; } stringlist = _dxfReallyCopyArray((Array)in[0]); if (!stringlist) goto error; } if (!in[1]) DXErrorGoto(ERROR_BAD_PARAMETER, "missing color_list"); class = DXGetObjectClass(in[1]); if (class==CLASS_FIELD) { /* it must be a colormap. Get the list of colors */ index_list = DXNewArray(TYPE_FLOAT, CATEGORY_REAL, 0); if (!DXAddArrayData(index_list, 0, numstrings, NULL)) goto error; index_list_ptr = (float *)DXGetArrayData(index_list); if (!index_list_ptr) goto error; for (i=0; i 1)||(translation.y<0.0)|| (translation.y>1.0)) { DXSetError(ERROR_BAD_PARAMETER, "#10110", "position", 0, 1); goto error; } if (!in[3]) { shape.height = 300.0; shape.width = 25.0; shape.thickness = 1.0; } else { if (!DXExtractParameter(in[3], TYPE_FLOAT, 3, 1, (Pointer)&shape)) { if (!DXExtractParameter(in[3], TYPE_FLOAT, 2, 1, (Pointer)&shape)) { DXSetError(ERROR_BAD_PARAMETER,"#10231","shape", 2, 3); goto error; } shape.thickness = 1; } if (shape.height <= 0.0) { DXSetError(ERROR_BAD_PARAMETER,"#10531","shape"); goto error; } if (shape.width <= 0.0) { DXSetError(ERROR_BAD_PARAMETER,"#10531","shape"); goto error; } } if (!_dxfGetColorBarAnnotationColors(in[6], in[7], DEFAULTTICCOLOR, DEFAULTLABELCOLOR, &ticcolor, &labelcolor, &framecolor, &frame)) goto error; if (frame==1) axeslines=1; else axeslines=0; if (in[8]) { if (!DXExtractFloat(in[8],&labelscale)) { DXSetError(ERROR_BAD_PARAMETER,"#10090","labelscale"); goto error; } if (labelscale < 0) { DXSetError(ERROR_BAD_PARAMETER,"#10090","labelscale"); goto error; } } else labelscale = 1; if (in[9]) { if (!DXExtractString(in[9],&fontname)) { DXSetError(ERROR_BAD_PARAMETER,"#10200","font"); goto error; } } else { fontname = "standard"; } a_newcolors = DXNewArray(TYPE_FLOAT, CATEGORY_REAL, 1, 3); if (!a_newcolors) goto error; if (colortype==TYPE_FLOAT) col_ptr_f = DXGetArrayData((Array)color_list); else if (colortype==TYPE_INT) col_ptr_i = DXGetArrayData((Array)color_list); else if (colortype!=TYPE_STRING) { DXSetError(ERROR_INVALID_DATA, "color_list must be a list of 3-vectors or colorname strings"); goto error; } locs = DXNewArray(TYPE_FLOAT, CATEGORY_REAL, 0); if (!DXAddArrayData(locs, 0, numstrings, NULL)) goto error; locs_ptr= DXGetArrayData(locs); for (i=0; i