PView *GMSH_CutParametricPlugin::execute(PView *v) { int iView = (int)CutParametricOptions_Number[7].def; PView *v1 = getView(iView, v); if(!v1) return v; if(!fillXYZ()) return v; PViewData *data1 = getPossiblyAdaptiveData(v1); int numSteps = data1->getNumTimeSteps(); int nbU = (int)CutParametricOptions_Number[2].def; int nbV = (int)CutParametricOptions_Number[5].def; int connect = (int)CutParametricOptions_Number[6].def; if(nbU < 2 && nbV < 2) connect = 0; OctreePost o(v1); PView *v2 = new PView(); PViewDataList *data2 = getDataList(v2); double *res0 = new double[9 * numSteps]; double *res1 = new double[9 * numSteps]; double *res2 = new double[9 * numSteps]; double *res3 = new double[9 * numSteps]; double x0 = 0., y0 = 0., z0 = 0., x1 = 0., y1 = 0., z1 = 0.; double x2 = 0., y2 = 0., z2 = 0., x3 = 0., y3 = 0., z3 = 0.; for(int k = 0; k < 9 * numSteps; ++k) res0[k] = res1[k] = 0.; if(nbU == 1 || nbV == 1 || !connect){ for(unsigned int i = 0; i < x.size(); ++i){ if(i && connect){ x0 = x1; y0 = y1; z0 = z1; for(int k = 0; k < 9 * numSteps; ++k) res0[k] = res1[k]; } x1 = x[i]; y1 = y[i]; z1 = z[i]; if(data1->getNumScalars()){ o.searchScalar(x1, y1, z1, res1); addInView(connect, i, 1, numSteps, x0, y0, z0, res0, x1, y1, z1, res1, data2->SP, &data2->NbSP, data2->SL, &data2->NbSL); } if(data1->getNumVectors()){ o.searchVector(x1, y1, z1, res1); addInView(connect, i, 3, numSteps, x0, y0, z0, res0, x1, y1, z1, res1, data2->VP, &data2->NbVP, data2->VL, &data2->NbVL); } if(data1->getNumTensors()){ o.searchTensor(x1, y1, z1, res1); addInView(connect, i, 9, numSteps, x0, y0, z0, res0, x1, y1, z1, res1, data2->TP, &data2->NbTP, data2->TL, &data2->NbTL); } } } else{ for(int i = 0; i < nbU - 1; ++i){ for(int j = 0; j < nbV - 1; ++j){ int v = i * nbV + j; x0 = x[v]; y0 = y[v]; z0 = z[v]; x1 = x[v+1]; y1 = y[v+1]; z1 = z[v+1]; x2 = x[v+nbV+1]; y2 = y[v+nbV+1]; z2 = z[v+nbV+1]; x3 = x[v+nbV]; y3 = y[v+nbV]; z3 = z[v+nbV]; if(data1->getNumScalars()){ o.searchScalar(x0, y0, z0, res0); o.searchScalar(x1, y1, z1, res1); o.searchScalar(x2, y2, z2, res2); o.searchScalar(x3, y3, z3, res3); addInView(1, numSteps, x0, y0, z0, res0, x1, y1, z1, res1, x2, y2, z2, res2, x3, y3, z3, res3, data2->SQ, &data2->NbSQ); } if(data1->getNumVectors()){ o.searchVector(x0, y0, z0, res0); o.searchVector(x1, y1, z1, res1); o.searchVector(x2, y2, z2, res2); o.searchVector(x3, y3, z3, res3); addInView(3, numSteps, x0, y0, z0, res0, x1, y1, z1, res1, x2, y2, z2, res2, x3, y3, z3, res3, data2->VQ, &data2->NbVQ); } if(data1->getNumTensors()){ o.searchTensor(x0, y0, z0, res0); o.searchTensor(x1, y1, z1, res1); o.searchTensor(x2, y2, z2, res2); o.searchTensor(x3, y3, z3, res3); addInView(9, numSteps, x0, y0, z0, res0, x1, y1, z1, res1, x2, y2, z2, res2, x3, y3, z3, res3, data2->TQ, &data2->NbTQ); } } } } delete [] res0; delete [] res1; delete [] res2; delete [] res3; data2->setName(data1->getName() + "_CutParametric"); data2->setFileName(data1->getName() + "_CutParametric.pos"); data2->finalize(); return v2; }
PView *GMSH_CutGridPlugin::GenerateView(PView *v1, int connect) { if(getNbU() <= 0 || getNbV() <= 0) return v1; PViewData *data1 = getPossiblyAdaptiveData(v1); PView *v2 = new PView(); PViewDataList *data2 = getDataList(v2); OctreePost o(v1); int nbs = data1->getNumScalars(); int nbv = data1->getNumVectors(); int nbt = data1->getNumTensors(); int maxcomp = nbt ? 9 : (nbv ? 3 : 1); int numsteps = data1->getNumTimeSteps(); double ***pnts = new double** [getNbU()]; double ***vals = new double** [getNbU()]; for(int i = 0; i < getNbU(); i++){ pnts[i] = new double* [getNbV()]; vals[i] = new double* [getNbV()]; for(int j = 0; j < getNbV(); j++){ pnts[i][j] = new double[3]; vals[i][j] = new double[maxcomp * numsteps]; getPoint(i, j, pnts[i][j]); } } if(nbs){ for(int i = 0; i < getNbU(); i++) for(int j = 0; j < getNbV(); j++) o.searchScalar(pnts[i][j][0], pnts[i][j][1], pnts[i][j][2], vals[i][j]); addInView(numsteps, connect, 1, pnts, vals, data2->SP, &data2->NbSP, data2->SL, &data2->NbSL, data2->SQ, &data2->NbSQ); } if(nbv){ for(int i = 0; i < getNbU(); i++) for(int j = 0; j < getNbV(); j++) o.searchVector(pnts[i][j][0], pnts[i][j][1], pnts[i][j][2], vals[i][j]); addInView(numsteps, connect, 3, pnts, vals, data2->VP, &data2->NbVP, data2->VL, &data2->NbVL, data2->VQ, &data2->NbVQ); } if(nbt){ for(int i = 0; i < getNbU(); i++) for(int j = 0; j < getNbV(); j++) o.searchTensor(pnts[i][j][0], pnts[i][j][1], pnts[i][j][2], vals[i][j]); addInView(numsteps, connect, 9, pnts, vals, data2->TP, &data2->NbTP, data2->TL, &data2->NbTL, data2->TQ, &data2->NbTQ); } for(int i = 0; i < getNbU(); i++){ for(int j = 0; j < getNbV(); j++){ delete [] pnts[i][j]; delete [] vals[i][j]; } delete [] pnts[i]; delete [] vals[i]; } delete [] pnts; delete [] vals; data2->setName(data1->getName() + "_CutGrid"); data2->setFileName(data1->getName() + "_CutGrid.pos"); data2->finalize(); return v2; }