void TexObjMgr::texImage(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) { TexObject * pObj = getCurrentObject(); pObj->initImage(target, level, internalformat, width, height, border, format, type, pixels); }
void TexObjMgr::texParameterf(GLenum target, GLenum pname, GLenum param) { TexObject * pObj = getCurrentObject(); if (target != pObj->target) { assert(false); return; } switch(pname) { case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MAG_FILTER: if (param != GL_LINEAR && param != GL_NEAREST) { assert(false); return; } if (GL_TEXTURE_MIN_FILTER == pname) { pObj->minFilter = param; } else { // GL_TEXTURE_MAG_FILTER pObj->magFilter = param; } break; case GL_TEXTURE_WRAP_S: case GL_TEXTURE_WRAP_T: if (param != GL_CLAMP && param != GL_REPEAT) { assert(false); return; } if (GL_TEXTURE_WRAP_S == pname) { pObj->wrapS = param; } else { pObj->wrapT = param; } break; default: assert(false); return; } }
double JsonReader::_readDouble(const string& name){ auto val = json_object_get(getCurrentObject(), name.c_str()); if (!json_is_real(val)) throwBadType(name, "real"); return json_real_value(val); }
int JsonReader::_readInt(const string& name){ auto val = json_object_get(getCurrentObject(), name.c_str()); if (!json_is_integer(val)) throwBadType(name, "int"); return json_integer_value(val); }
string JsonReader::_readString(const string& name) { auto val = json_object_get(getCurrentObject(), name.c_str()); if (!json_is_string(val)) throwBadType(name, "string"); return json_string_value(val); }
/*--------------------------------------------------------------------------*/ int sci_delete(char *fname, unsigned long fname_len) { SciErr sciErr; int* piAddrl1 = NULL; long long* l1 = NULL; int* piAddrl2 = NULL; char* l2 = NULL; int m1 = 0, n1 = 0, lw = 0; unsigned long hdl = 0; int nb_handles = 0, i = 0, dont_overload = 0; int iObjUID = 0; int iFigureUID = 0; int* piChildrenUID = NULL; int iChildrenCount = 0; int* childrencount = &iChildrenCount; int iHidden = 0; int *piHidden = &iHidden; int iParentUID = 0; int* piParentUID = &iParentUID; int iParentType = -1; int *piParentType = &iParentType; int iObjType = -1; int *piObjType = &iObjType; CheckInputArgument(pvApiCtx, 0, 1); CheckOutputArgument(pvApiCtx, 0, 1); if (nbInputArgument(pvApiCtx) == 0) /* Delete current object */ { iObjUID = getCurrentObject(); if (iObjUID == 0) { //No current object, we can leave AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } hdl = (unsigned long)getHandle(iObjUID); dont_overload = 1; nb_handles = 1; } else { sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } switch (getInputArgumentType(pvApiCtx, 1)) { case sci_matrix: { if (isEmptyMatrix(pvApiCtx, piAddrl1)) { AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 1; } else { Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } break; } case sci_handles: /* delete Entity given by a handle */ // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrl1, &m1, &n1, &l1); /* Gets the Handle passed as argument */ if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } nb_handles = m1 * n1; if (nbInputArgument(pvApiCtx) == 2) { sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 2. if (getAllocatedSingleString(pvApiCtx, piAddrl2, &l2)) /* Gets the command name */ { Scierror(202, _("%s: Wrong type for argument #%d: A string expected.\n"), fname, 2); return 1; } } hdl = (unsigned long) * (l1); /* Puts the value of the Handle to hdl */ break; case sci_strings: /* delete("all") */ CheckInputArgument(pvApiCtx, 1, 1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. if (getAllocatedSingleString(pvApiCtx, piAddrl2, &l2)) { Scierror(202, _("%s: Wrong type for argument #%d: A string expected.\n"), fname, 1); return 1; } if (strcmp((l2), "all") == 0) { int i = 0; int iFigureNumber = sciGetNbFigure(); if (iFigureNumber == 0) { //no graphic windows, we can leave AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } iFigureUID = getCurrentFigure(); getGraphicObjectProperty(iFigureUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&childrencount); getGraphicObjectProperty(iFigureUID, __GO_CHILDREN__, jni_int_vector, (void **)&piChildrenUID); for (i = 0; i < childrencount[0]; ++i) { getGraphicObjectProperty(piChildrenUID[i], __GO_HIDDEN__, jni_bool, (void **)&piHidden); if (iHidden == 0) { deleteGraphicObject(piChildrenUID[i]); } } /* * Clone a new Axes object using the Axes model which is then * attached to the 'cleaned' Figure. */ cloneAxesModel(iFigureUID); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } else { Scierror(999, _("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 1, "all"); return 0; } break; default: // Overload lw = 1 + nbArgumentOnStack(pvApiCtx) - nbInputArgument(pvApiCtx); C2F(overload) (&lw, "delete", 6); return 0; } } for (i = 0; i < nb_handles; i++) { int iTemp = 0; if (nbInputArgument(pvApiCtx) != 0) { hdl = (unsigned long) * (l1 + i); /* Puts the value of the Handle to hdl */ } iObjUID = getObjectFromHandle(hdl); if (iObjUID == 0) { Scierror(999, _("%s: The handle is not valid.\n"), fname); return 0; } if (isFigureModel(iObjUID) || isAxesModel(iObjUID)) { Scierror(999, _("This object cannot be deleted.\n")); return 0; } /* Object type */ getGraphicObjectProperty(iObjUID, __GO_TYPE__, jni_int, (void **)&piObjType); if (iObjType == __GO_AXES__) { /* Parent object */ iParentUID = getParentObject(iObjUID); /* Parent type */ getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType); } if (iObjType == __GO_LABEL__) { Scierror(999, _("A Label object cannot be deleted.\n")); return 0; } //bug #11485 : duplicate pobjUID before delete it. iTemp = iObjUID; deleteGraphicObject(iObjUID); /* ** All figure must have at least one axe child. ** If the last one is removed, add a new default one. */ if (iObjType == __GO_AXES__ && iParentType == __GO_FIGURE__) { int iChild = 0; int iChildCount = 0; int *piChildCount = &iChildCount; char **pstChildren = NULL; int iChildType = -1; int *piChildType = &iChildType; int iAxesFound = 0; int iDefaultAxes = -1; int *piDefaultAxes = &iDefaultAxes; getGraphicObjectProperty(iParentUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&piChildCount); getGraphicObjectProperty(iParentUID, __GO_CHILDREN__, jni_int_vector, (void **)&piChildrenUID); getGraphicObjectProperty(iParentUID, __GO_DEFAULT_AXES__, jni_bool, (void **)&piDefaultAxes); for (iChild = 0; iChild < iChildCount; iChild++) { getGraphicObjectProperty(piChildrenUID[iChild], __GO_TYPE__, jni_int, (void **)&piChildType); if (iChildType == __GO_AXES__) { if (getCurrentSubWin() == iTemp) // Current axes has been deleted { setCurrentSubWin(piChildrenUID[iChild]); } iAxesFound = 1; break; } } if (!iAxesFound && iDefaultAxes != 0) { /* * Clone a new Axes object using the Axes model which is then * attached to the newly created Figure. */ cloneAxesModel(iParentUID); } } } if (!dont_overload) { // Overload lw = 1 + nbArgumentOnStack(pvApiCtx) - nbInputArgument(pvApiCtx); C2F(overload) (&lw, "delete", 6); } else { AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); } if (l2) { freeAllocatedSingleString(l2); } return 0; }
int TApp::getCurrentImageType() { /*-- 現在のセルの種類に関係無く、Splineを選択中はベクタを編集できるようにする * --*/ if (getCurrentObject()->isSpline()) return TImage::VECTOR; TXshSimpleLevel *sl = 0; if (getCurrentFrame()->isEditingScene()) { int row = getCurrentFrame()->getFrame(); int col = getCurrentColumn()->getColumnIndex(); if (col < 0) #ifdef LINETEST return TImage::RASTER; #else { int levelType = Preferences::instance()->getDefLevelType(); return (levelType == PLI_XSHLEVEL) ? TImage::VECTOR : // RASTER image type includes both TZI_XSHLEVEL (levelType == TZP_XSHLEVEL) ? TImage::TOONZ_RASTER : TImage::RASTER; // and OVL_XSHLEVEL level types } #endif TXsheet *xsh = getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(row, col); if (cell.isEmpty()) { int r0, r1; xsh->getCellRange(col, r0, r1); if (0 <= r0 && r0 <= r1) { /*-- Columnに格納されている一番上のLevelのTypeに合わせる--*/ cell = xsh->getCell(r0, col); } else /*-- Columnが空の場合 --*/ { #ifdef LINETEST return TImage::RASTER; #else int levelType = Preferences::instance()->getDefLevelType(); return (levelType == PLI_XSHLEVEL) ? TImage::VECTOR : (levelType == TZP_XSHLEVEL) ? TImage::TOONZ_RASTER : TImage::RASTER; #endif } } sl = cell.getSimpleLevel(); } else if (getCurrentFrame()->isEditingLevel()) sl = getCurrentLevel()->getSimpleLevel(); if (sl) { switch (sl->getType()) { case TZP_XSHLEVEL: return TImage::TOONZ_RASTER; case OVL_XSHLEVEL: return TImage::RASTER; case PLI_XSHLEVEL: default: return TImage::VECTOR; case MESH_XSHLEVEL: return TImage::MESH; } } return TImage::VECTOR; }
/*--------------------------------------------------------------------------*/ int sci_drawaxis(char *fname, void* pvApiCtx) { /** XXXXX : un point en suspens c'est le "S" ou une adresse est * stockees ds un unsigned long : est ce sufisant ? */ static rhs_opts opts[] = { { -1, "dir", -1, 0, 0, NULL}, { -1, "fontsize", -1, 0, 0, NULL}, { -1, "format_n", -1, 0, 0, NULL}, { -1, "seg", -1, 0, 0, NULL}, { -1, "sub_int", -1, 0, 0, NULL}, { -1, "textcolor", -1, 0, 0, NULL}, { -1, "tics", -1, 0, 0, NULL}, { -1, "ticscolor", -1, 0, 0, NULL}, { -1, "val", -1, 0, 0, NULL}, { -1, "x", -1, 0, 0, NULL}, { -1, "y", -1, 0, 0, NULL}, { -1, NULL, -1, 0, 0, NULL} }; int iSubwinUID = 0; int minrhs = -1, maxrhs = 0, minlhs = 0, maxlhs = 1, nopt = 0; char dir = 'l', *format = NULL, tics = 'v', **val = NULL; int fontsize = -1, sub_int = 2, seg_flag = 1, textcolor = -1, ticscolor = -1; double *x = NULL, *y = NULL; int nx = 0, ny = 0, ntics; int nb_tics_labels = -1; int iRhs = nbInputArgument(pvApiCtx); nopt = NumOpt(pvApiCtx); CheckInputArgument(pvApiCtx, minrhs, maxrhs + nopt); CheckOutputArgument(pvApiCtx, minlhs, maxlhs); if (getOptionals(pvApiCtx, fname, opts) == 0) { /* error */ return 0; } iSubwinUID = getOrCreateDefaultSubwin(); if (opts[0].iPos != -1) { char* pstDir = NULL; //CheckLength if (opts[0].iRows != 1 || opts[0].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: %d expected.\n"), fname, opts[0].iPos, opts[0].iRows); return 1; } if (getAllocatedSingleString(pvApiCtx, opts[0].piAddr, &pstDir)) { return 1; } dir = pstDir[0]; freeAllocatedSingleString(pstDir); } if (opts[1].iPos != -1) { double dblSize = 0; //CheckScalar if (opts[1].iRows != 1 || opts[1].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[1].iPos); return 1; } getScalarDouble(pvApiCtx, opts[1].piAddr, &dblSize); fontsize = (int)dblSize; } if (opts[2].iPos != -1) { /* verfier ce que l'on recoit avec "" XXX */ if (getAllocatedSingleString(pvApiCtx, opts[2].piAddr, &format)) { return 1; } } if (opts[3].iPos != -1) { double dblSeq = 0; //CheckScalar if (opts[3].iRows != 1 || opts[3].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[3].iPos); freeAllocatedSingleString(format); return 1; } getScalarDouble(pvApiCtx, opts[3].piAddr, &dblSeq); seg_flag = (int)dblSeq; } if (opts[4].iPos != -1) { double dblSub = 0; //CheckScalar if (opts[4].iRows != 1 || opts[4].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[4].iPos); freeAllocatedSingleString(format); return 1; } getScalarDouble(pvApiCtx, opts[4].piAddr, &dblSub); sub_int = (int)dblSub; } if (opts[5].iPos != -1) { double dblColor = 0; //CheckScalar if (opts[5].iRows != 1 || opts[5].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[5].iPos); freeAllocatedSingleString(format); return 1; } getScalarDouble(pvApiCtx, opts[5].piAddr, &dblColor); textcolor = (int)dblColor; } if (opts[6].iPos != -1) { char* pstTics = NULL; //CheckLength if (opts[6].iRows != 1 || opts[6].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: %d expected.\n"), fname, opts[6].iPos, opts[6].iRows); freeAllocatedSingleString(format); return 1; } if (getAllocatedSingleString(pvApiCtx, opts[6].piAddr, &pstTics)) { return 1; } tics = pstTics[0]; freeAllocatedSingleString(pstTics); } if (opts[7].iPos != -1) { double dblColor = 0; //CheckScalar if (opts[7].iRows != 1 || opts[7].iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[7].iPos); freeAllocatedSingleString(format); return 1; } getScalarDouble(pvApiCtx, opts[7].piAddr, &dblColor); ticscolor = (int)dblColor; } if (opts[8].iPos != -1) { if (getAllocatedMatrixOfString(pvApiCtx, opts[8].piAddr, &opts[8].iRows, &opts[8].iCols, &val)) { return 1; } } if (opts[9].iPos != -1) { getMatrixOfDouble(pvApiCtx, opts[9].piAddr, &opts[9].iRows, &opts[9].iCols, &x); nx = opts[9].iRows * opts[9].iCols; /* F.Leray OK here opts[9].iRows and opts[9].iCols are integers. */ } else { static double x_def[1]; double *bounds; int iCurrentSubwinUID = getCurrentSubWin(); getGraphicObjectProperty(iCurrentSubwinUID, __GO_DATA_BOUNDS__, jni_double_vector, (void **)&bounds); nx = 1; x = x_def; if (dir == 'l') { x_def[0] = bounds[0]; /* xMin */ } else if (dir == 'r') { x_def[0] = bounds[1]; /* xMax */ } } if (opts[10].iPos != -1) { getMatrixOfDouble(pvApiCtx, opts[10].piAddr, &opts[10].iRows, &opts[10].iCols, &y); ny = opts[10].iRows * opts[10].iCols; } else { static double y_def[1]; double *bounds; int iCurrentSubwinUID = getCurrentSubWin(); getGraphicObjectProperty(iCurrentSubwinUID, __GO_DATA_BOUNDS__, jni_double_vector, (void **)&bounds); ny = 1; y = y_def; if (dir == 'd') { y_def[0] = bounds[2]; /* yMin */ } else if (dir == 'u') { y_def[0] = bounds[3]; /* yMax */ } } /* compatibility test */ switch (tics) { case 'r': if (check_xy(fname, dir, 3, opts[9].iPos, opts[9].iRows, opts[9].iCols, x, opts[10].iPos, opts[10].iRows, opts[10].iCols, y, &ntics) == 0) { ReturnArguments(pvApiCtx); freeAllocatedSingleString(format); freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val); return 0; } break; case 'i': if (check_xy(fname, dir, 4, opts[9].iPos, opts[9].iRows, opts[9].iCols, x, opts[10].iPos, opts[10].iRows, opts[10].iCols, y, &ntics) == 0) { ReturnArguments(pvApiCtx); freeAllocatedSingleString(format); freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val); return 0; } break; case 'v': if (check_xy(fname, dir, -1, opts[9].iPos, opts[9].iRows, opts[9].iCols, x, opts[10].iPos, opts[10].iRows, opts[10].iCols, y, &ntics) == 0) { ReturnArguments(pvApiCtx); freeAllocatedSingleString(format); freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val); return 0; } break; default: Scierror(999, _("%: Wrong value for %s '%c': '%s', '%s' and '%s' expected.\n"), fname, "tics", dir, "r", "v", "i"); freeAllocatedSingleString(format); freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val); return 0; } if (val != NULL) { //CheckLength if (opts[8].iRows * opts[8].iCols != ntics) { Scierror(999, _("%s: Wrong size for input argument #%d: %d expected.\n"), fname, opts[8].iPos, opts[8].iRows * opts[8].iCols); freeAllocatedSingleString(format); freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val); return 1; } nb_tics_labels = opts[8].iRows * opts[8].iCols; } Objdrawaxis(dir, tics, x, &nx, y, &ny, val, sub_int, format, fontsize, textcolor, ticscolor, 'n', seg_flag, nb_tics_labels); freeAllocatedSingleString(format); if (val != NULL) { freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val); } createScalarHandle(pvApiCtx, iRhs + 1, getHandle(getCurrentObject())); AssignOutputVariable(pvApiCtx, 1) = iRhs + 1; ReturnArguments(pvApiCtx); return 0; }
/*------------------------------------------------ * plot3d *-----------------------------------------------*/ void Objplot3d (char * fname , int * isfac , int * izcol , double x[] , double y[] , double z[] , double * zcol , int * m , int * n , double * theta , double * alpha , char * legend, int * iflag , double * ebox , int * m1 , /*Adding F.Leray 12.03.04 and 19.03.04*/ int * n1 , int * m2 , int * n2 , int * m3 , int * n3 , int * m3n , int * n3n) /* F.Leray 25.04.05 : warning here legends means "X@Y@Z": it is labels writings!! */ /* legends has not the same meaning than inside plot2dn (there, it is really the legends of the plotted curves)*/ { sciTypeOf3D typeof3d; int flagcolor = 0; long *hdltab = NULL; int i = 0; char *psubwinUID = NULL; char *pobjUID = NULL; char *parentFigureUID = NULL; double drect[6]; double rotationAngles[2]; double* dataBounds = NULL; char * loc = NULL; char * legx = NULL; char * legy = NULL; char * legz = NULL; char* labelId = NULL; /* char * buff = NULL; */ int flag_x = 1; int flag_y = 1; int dimvectx = -1; int dimvecty = -1; int view = 0; int linLogFlag; int firstPlot = 0; int *piFirstPlot = &firstPlot; int box = 0; int axisVisible = 0; int autoScale = 0; int *piAutoScale = &autoScale; int isoview = 0; int clipState = 0; char *pNewSurfaceUID = NULL; /* Initialisation drect A.C pour debuggueur */ drect[0] = 0.0; drect[1] = 0.0; drect[2] = 0.0; drect[3] = 0.0; drect[4] = 0.0; drect[5] = 0.0; /* ================================================= * Force SubWindow properties according to arguments * ================================================= */ parentFigureUID = (char*)getCurrentFigure(); psubwinUID = (char*)getCurrentSubWin(); checkRedrawing(); /* Force 3D view */ view = 1; setGraphicObjectProperty(psubwinUID, __GO_VIEW__, &view, jni_int, 1); if (legend != NULL) { int textDimensions[2] = {1, 1}; /* F.Leray 25.04.05 replace the default labels by the user labels if specified */ loc = (char *) MALLOC((strlen(legend) + 1) * sizeof(char)); if (loc == NULL) { Scierror(999, _("%s: No more memory.\n"), "Objplot3d"); } strcpy(loc, legend); /* legx=strtok_r(loc,"@",&buff); */ legx = strtok(loc, "@"); if (legx != NULL) { getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2); setGraphicObjectProperty(labelId, __GO_TEXT_STRINGS__, &legx, jni_string_vector, textDimensions[0]*textDimensions[1]); } /* legy=strtok_r((char *)0,"@",&buff); */ legy = strtok((char *)NULL, "@"); /* NULL to begin at the last read character */ if (legy != NULL) { getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2); setGraphicObjectProperty(labelId, __GO_TEXT_STRINGS__, &legy, jni_string_vector, textDimensions[0]*textDimensions[1]); } /* legz=strtok_r((char *)0,"@",&buff); */ legz = strtok((char *)NULL, "@"); if (legz != NULL) { getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2); setGraphicObjectProperty(labelId, __GO_TEXT_STRINGS__, &legz, jni_string_vector, textDimensions[0]*textDimensions[1]); } } /* Force psubwin->logflags to linear */ linLogFlag = 0; setGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_FIRST_PLOT__, jni_bool, (void **)&piFirstPlot); if (firstPlot == 0 && (iflag[2] == 0 || iflag[2] == 1)) { /* Nothing to do: we leave as before */ } else { int labelVisible; if (iflag[2] == 0 || iflag[2] == 1) { if (firstPlot) { /* 0: OFF */ box = 0; axisVisible = 0; setGraphicObjectProperty(psubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1); labelVisible = 0; getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); } /*else no changes : the axes visible properties are driven by the previous plot */ } else if (iflag[2] == 2) { /* 2: HIDDEN_AXES */ box = 2; /* for 2d use only (when switching to 2d mode) */ setGraphicObjectProperty(psubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1); axisVisible = 0; setGraphicObjectProperty(psubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); labelVisible = 0; getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); } else if (iflag[2] == 3) { /* 1: ON */ box = 1; /* for 2d use only (when switching to 2d mode) */ setGraphicObjectProperty(psubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1); axisVisible = 0; setGraphicObjectProperty(psubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); labelVisible = 1; getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); } else if (iflag[2] == 4) { /* 1: ON */ box = 1; setGraphicObjectProperty(psubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1); axisVisible = 1; setGraphicObjectProperty(psubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); setGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1); labelVisible = 1; getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, (void **)&labelId); setGraphicObjectProperty(labelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1); } } rotationAngles[0] = *alpha; rotationAngles[1] = *theta; setGraphicObjectProperty(psubwinUID, __GO_ROTATION_ANGLES__, rotationAngles, jni_double_vector, 2); getGraphicObjectProperty(psubwinUID, __GO_DATA_BOUNDS__, jni_double_vector, (void **)&dataBounds); getGraphicObjectProperty(psubwinUID, __GO_AUTO_SCALE__, jni_bool, (void **)&piAutoScale); if (autoScale) { /* compute and merge new specified bounds with data bounds */ switch (iflag[1]) { case 0: /* do not change data bounds */ break; case 1 : case 3 : case 5 : case 7 : /* Force data bounds=ebox */ drect[0] = ebox[0]; /*xmin*/ drect[2] = ebox[2]; /*ymin*/ drect[1] = ebox[1]; /*xmax*/ drect[3] = ebox[3]; /*ymax*/ drect[4] = ebox[4]; /*zmin*/ drect[5] = ebox[5]; /*zmax*/ break; case 2 : case 4 : case 6 : case 8:/* Force data bounds to the x and y bounds */ getDrect(x, (*m1) * (*n1), &drect[0], &drect[1], dataBounds[0], dataBounds[1]); getDrect(y, (*m2) * (*n2), &drect[2], &drect[3], dataBounds[2], dataBounds[3]); getDrect(z, (*m3) * (*n3), &drect[4], &drect[5], dataBounds[4], dataBounds[5]); break; } /* merge data bounds and drect */ if (!firstPlot) { drect[0] = Min(dataBounds[0], drect[0]); /* xmin */ drect[1] = Max(dataBounds[1], drect[1]); /* xmax */ drect[2] = Min(dataBounds[2], drect[2]); /* ymin */ drect[3] = Max(dataBounds[3], drect[3]); /* ymax */ drect[4] = Min(dataBounds[4], drect[4]); /* zmin */ drect[5] = Max(dataBounds[5], drect[5]); /* zmax */ } if (iflag[1] != 0) { setGraphicObjectProperty(psubwinUID, __GO_DATA_BOUNDS__, drect, jni_double_vector, 6); } } if (iflag[1] != 0) { isoview = (iflag[1] == 3 || iflag[1] == 4 || iflag[1] == 5 || iflag[1] == 6); setGraphicObjectProperty(psubwinUID, __GO_ISOVIEW__, &isoview, jni_bool, 1); } /* ================================================= * Analyze arguments to find entity type * ================================================= */ if (*isfac == 1) { if (*izcol == 0) { if (strcmp(fname, "plot3d1") == 0) { typeof3d = SCI_FAC3D; flagcolor = 1; } else { typeof3d = SCI_FAC3D; flagcolor = 0; } } else if (*izcol == 2) { typeof3d = SCI_FAC3D; flagcolor = 3; } else { typeof3d = SCI_FAC3D; flagcolor = 2; } } else if (*isfac == 0) { if (strcmp(fname, "plot3d1") == 0) { typeof3d = SCI_PLOT3D; flagcolor = 1; } else { typeof3d = SCI_PLOT3D; flagcolor = 0; } } else { typeof3d = SCI_PARAM3D1; flagcolor = 1; } /* ================================================= * Construct the Entities * ================================================= */ /*Distinction here between SCI_PARAM3D1 and others*/ if (typeof3d != SCI_PARAM3D1) { if (*isfac == 1) { /* x is considered as a matrix */ dimvectx = -1; } else if (*m1 == 1) /* x is a row vector */ { dimvectx = *n1; } else if (*n1 == 1) /* x is a column vector */ { dimvectx = *m1; } else /* x is a matrix */ { dimvectx = -1; } if (dimvectx > 1) { int monotony = checkMonotony(x, dimvectx); if (monotony == 0) { Scierror(999, _("%s: x vector is not monotonous.\n"), "Objplot3d"); return; } flag_x = monotony; } if (*isfac == 1) { /* y is considered as a matrix */ dimvecty = -1; } else if (*m2 == 1) /* y is a row vector */ { dimvecty = *n2; } else if (*n2 == 1) /* y is a column vector */ { dimvecty = *m2; } else /* y is a matrix */ { dimvecty = -1; } if (dimvecty > 1) { /* test the monotony on y*/ int monotony = checkMonotony(y, dimvecty); if (monotony == 0) { Scierror(999, _("%s: y vector is not monotonous.\n"), "Objplot3d"); return; } flag_y = monotony; } pNewSurfaceUID = ConstructSurface(psubwinUID, typeof3d, x, y, z, zcol, *izcol, *m, *n, iflag, ebox, flagcolor, isfac, m1, n1, m2, n2, m3, n3, m3n, n3n); if (pNewSurfaceUID == NULL) { Scierror(999, _("%s: No more memory.\n"), "Objplot3d"); return; } setCurrentObject(pNewSurfaceUID); /* Force clipping, 1: CLIPGRF */ clipState = 1; setGraphicObjectProperty(pNewSurfaceUID, __GO_CLIP_STATE__, &clipState, jni_int, 1); releaseGraphicObjectProperty(__GO_PARENT__, pNewSurfaceUID, jni_string, 1); } else { char* pNewPolylineUID = NULL; char* currentSubwinUID = NULL; if ((hdltab = MALLOC (*n * sizeof (long))) == NULL) { Scierror(999, "%s: No more memory.\n", fname); return; } currentSubwinUID = (char*)getCurrentSubWin(); for (i = 0; i < *n; ++i) { /* F.Leray Pb here: In fact we do not create a Surface but one or several 3D Polylines Pb comes when wanting to access the fields "surface_color" or "flag" for example in function sciSet (cf. matdes.c). Question 1: Are these properties accessible from a SCI_PARAM3D1 ? Question 2: Is "flag" obsolete and replaced by "color_mode"?*/ if ((*n > 0) && (zcol != (double *)NULL)) { if ((int) zcol[i] > 0) { int intzcol = (int) zcol[i]; pNewPolylineUID = ConstructPolyline (currentSubwinUID, &(x[*m * i]), &(y[*m * i]), &(z[*m * i]), 0, *m, 1, &intzcol, NULL, NULL, NULL, NULL, TRUE, FALSE, FALSE, FALSE); } else { int intzcol = (int) - zcol[i]; pNewPolylineUID = ConstructPolyline (currentSubwinUID, &(x[*m * i]), &(y[*m * i]), &(z[*m * i]), 0, *m, 1, NULL, NULL, &intzcol, NULL, NULL, FALSE, FALSE, TRUE, FALSE); } } else { /* default case, nothing is given */ int curcolor = 0; int *piCurColor = &curcolor; getGraphicObjectProperty(currentSubwinUID, __GO_LINE_COLOR__, jni_int, (void**)&piCurColor); pNewPolylineUID = ConstructPolyline(currentSubwinUID, &(x[*m * i]), &(y[*m * i]), &(z[*m * i]), 0, *m, 1, &curcolor, NULL, NULL, NULL, NULL, TRUE, FALSE, FALSE, FALSE); } if (pNewPolylineUID == NULL) { Scierror(999, _("%s: No more memory.\n"), fname); FREE(hdltab); return; } setCurrentObject(pNewPolylineUID); setGraphicObjectRelationship(currentSubwinUID, pNewPolylineUID); releaseGraphicObjectProperty(__GO_PARENT__, pNewPolylineUID, jni_string, 1); pNewPolylineUID = NULL; pobjUID = (char*)getCurrentObject(); /* Force clipping, 1: CLIPGRF */ clipState = 1; setGraphicObjectProperty(pobjUID, __GO_CLIP_STATE__, &clipState, jni_int, 1); hdltab[i] = getHandle(pobjUID); } /** construct Compound and make it current object**/ if (*n > 1) { char* o = ConstructCompound (hdltab, *n); setCurrentObject(o); releaseGraphicObjectProperty(__GO_PARENT__, o, jni_string, 1); } FREE(hdltab); } /* ================================================= * Redraw Figure * ================================================= */ // subwin has been modified firstPlot = 0; setGraphicObjectProperty(psubwinUID, __GO_FIRST_PLOT__, &firstPlot, jni_bool, 1); FREE(loc); loc = NULL; }