Forked from
gmsh / gmsh
11031 commits behind the upstream repository.
-
Christophe Geuzaine authoredChristophe Geuzaine authored
CutBox.cpp 40.71 KiB
// Gmsh - Copyright (C) 1997-2013 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <gmsh@geuz.org>.
#include "GmshConfig.h"
#include "OctreePost.h"
#include "CutBox.h"
#include "Context.h"
#if defined(HAVE_OPENGL)
#include "drawContext.h"
#endif
StringXNumber CutBoxOptions_Number[] = {
{GMSH_FULLRC, "X0", GMSH_CutBoxPlugin::callbackX0, 0.},
{GMSH_FULLRC, "Y0", GMSH_CutBoxPlugin::callbackY0, 0.},
{GMSH_FULLRC, "Z0", GMSH_CutBoxPlugin::callbackZ0, 0.},
{GMSH_FULLRC, "X1", GMSH_CutBoxPlugin::callbackX1, 1.},
{GMSH_FULLRC, "Y1", GMSH_CutBoxPlugin::callbackY1, 0.},
{GMSH_FULLRC, "Z1", GMSH_CutBoxPlugin::callbackZ1, 0.},
{GMSH_FULLRC, "X2", GMSH_CutBoxPlugin::callbackX2, 0.},
{GMSH_FULLRC, "Y2", GMSH_CutBoxPlugin::callbackY2, 1.},
{GMSH_FULLRC, "Z2", GMSH_CutBoxPlugin::callbackZ2, 0.},
{GMSH_FULLRC, "X3", GMSH_CutBoxPlugin::callbackX3, 0.},
{GMSH_FULLRC, "Y3", GMSH_CutBoxPlugin::callbackY3, 0.},
{GMSH_FULLRC, "Z3", GMSH_CutBoxPlugin::callbackZ3, 1.},
{GMSH_FULLRC, "NumPointsU", GMSH_CutBoxPlugin::callbackU, 20},
{GMSH_FULLRC, "NumPointsV", GMSH_CutBoxPlugin::callbackV, 20},
{GMSH_FULLRC, "NumPointsW", GMSH_CutBoxPlugin::callbackW, 20},
{GMSH_FULLRC, "ConnectPoints", GMSH_CutBoxPlugin::callbackConnect, 1},
{GMSH_FULLRC, "Boundary", GMSH_CutBoxPlugin::callbackBoundary, 1},
{GMSH_FULLRC, "View", NULL, -1.}
};
extern "C"
{
GMSH_Plugin *GMSH_RegisterCutBoxPlugin()
{
return new GMSH_CutBoxPlugin();
}
}
void GMSH_CutBoxPlugin::draw(void *context)
{
#if defined(HAVE_OPENGL)
glColor4ubv((GLubyte *) & CTX::instance()->color.fg);
double p[3];
drawContext *ctx = (drawContext*)context;
getPoint(0, 0, 0, p);
glRasterPos3d(p[0], p[1], p[2]);
ctx->drawString("(X0, Y0, Z0)");
if(getNbU() > 1){
getPoint(getNbU() - 1, 0, 0, p);
glRasterPos3d(p[0], p[1], p[2]);
ctx->drawString("(X1, Y1, Z1)");
}
if(getNbV() > 1){
getPoint(0, getNbV() - 1, 0, p);
glRasterPos3d(p[0], p[1], p[2]);
ctx->drawString("(X2, Y2, Z2)");
}
if(getNbW() > 1){
getPoint(0, 0, getNbW() - 1, p);
glRasterPos3d(p[0], p[1], p[2]);
ctx->drawString("(X3, Y3, Z3)");
}
if(CutBoxOptions_Number[15].def){
glBegin(GL_LINES);
//UV
for(int i = 0; i < getNbU(); ++i){
getPoint(i, 0, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(i, getNbV()-1, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(i, 0, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(i, getNbV()-1, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
}
for(int i = 0; i < getNbV(); ++i){
getPoint(0, i, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, i, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(0, i, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, i, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
}
// UW
for(int i = 0; i < getNbU(); ++i){
getPoint(i, 0, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(i, 0, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(i, getNbV()-1, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(i, getNbV()-1, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
}
for(int i = 0; i < getNbW(); ++i){
getPoint(0, 0, i, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, 0, i, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(0, getNbV()-1, i, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, getNbV()-1, i, p);
glVertex3d(p[0], p[1], p[2]);
}
// VW
for(int i = 0; i < getNbV(); ++i){
getPoint(0, i, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(0, i, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, i, 0, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, i, getNbW()-1, p);
glVertex3d(p[0], p[1], p[2]);
}
for(int i = 0; i < getNbW(); ++i){
getPoint(0, 0, i, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(0, getNbV()-1, i, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, 0, i, p);
glVertex3d(p[0], p[1], p[2]);
getPoint(getNbU()-1, getNbV()-1, i, p);
glVertex3d(p[0], p[1], p[2]);
}
glEnd();
}
else{
for(int i = 0; i < getNbU(); ++i){
for(int j = 0; j < getNbV(); ++j){
getPoint(i, j, 0, p);
ctx->drawSphere(CTX::instance()->pointSize, p[0], p[1], p[2], 1);
getPoint(i, j, getNbW()-1, p);
ctx->drawSphere(CTX::instance()->pointSize, p[0], p[1], p[2], 1);
}
}
for(int i = 0; i < getNbU(); ++i){
for(int j = 0; j < getNbW(); ++j){
getPoint(i, 0, j, p);
ctx->drawSphere(CTX::instance()->pointSize, p[0], p[1], p[2], 1);
getPoint(i, getNbV()-1, j, p);
ctx->drawSphere(CTX::instance()->pointSize, p[0], p[1], p[2], 1);
}
}
for(int i = 0; i < getNbV(); ++i){
for(int j = 0; j < getNbW(); ++j){
getPoint(0, i, j, p);
ctx->drawSphere(CTX::instance()->pointSize, p[0], p[1], p[2], 1);
getPoint(getNbU()-1, i, j, p);
ctx->drawSphere(CTX::instance()->pointSize, p[0], p[1], p[2], 1);
}
}
}
#endif
}
double GMSH_CutBoxPlugin::callback(int num, int action, double value, double *opt,
double step, double min, double max)
{
switch(action){ // configure the input field
case 1: return step;
case 2: return min;
case 3: return max;
default: break;
}
*opt = value;
GMSH_Plugin::setDrawFunction(draw);
return 0.;
}
double GMSH_CutBoxPlugin::callbackX0(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[0].def,
CTX::instance()->lc / 100., CTX::instance()->min[0],
CTX::instance()->max[0]);
}
double GMSH_CutBoxPlugin::callbackY0(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[1].def,
CTX::instance()->lc / 100., CTX::instance()->min[1],
CTX::instance()->max[1]);
}
double GMSH_CutBoxPlugin::callbackZ0(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[2].def,
CTX::instance()->lc / 100., CTX::instance()->min[2],
CTX::instance()->max[2]);
}
double GMSH_CutBoxPlugin::callbackX1(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[3].def,
CTX::instance()->lc / 100., CTX::instance()->min[0],
CTX::instance()->max[0]);
}
double GMSH_CutBoxPlugin::callbackY1(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[4].def,
CTX::instance()->lc / 100., CTX::instance()->min[1],
CTX::instance()->max[1]);
}
double GMSH_CutBoxPlugin::callbackZ1(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[5].def,
CTX::instance()->lc / 100., CTX::instance()->min[2],
CTX::instance()->max[2]);
}
double GMSH_CutBoxPlugin::callbackX2(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[6].def,
CTX::instance()->lc / 100., CTX::instance()->min[0],
CTX::instance()->max[0]);
}
double GMSH_CutBoxPlugin::callbackY2(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[7].def,
CTX::instance()->lc / 100., CTX::instance()->min[1],
CTX::instance()->max[1]);
}
double GMSH_CutBoxPlugin::callbackZ2(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[8].def,
CTX::instance()->lc / 100., CTX::instance()->min[2],
CTX::instance()->max[2]);
}
double GMSH_CutBoxPlugin::callbackX3(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[9].def,
CTX::instance()->lc / 100., CTX::instance()->min[0],
CTX::instance()->max[0]);
}
double GMSH_CutBoxPlugin::callbackY3(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[10].def,
CTX::instance()->lc / 100., CTX::instance()->min[1],
CTX::instance()->max[1]);
}
double GMSH_CutBoxPlugin::callbackZ3(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[11].def,
CTX::instance()->lc / 100., CTX::instance()->min[2],
CTX::instance()->max[2]);
}
double GMSH_CutBoxPlugin::callbackU(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[12].def,
1, 1, 200);
}
double GMSH_CutBoxPlugin::callbackV(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[13].def,
1, 1, 200);
}
double GMSH_CutBoxPlugin::callbackW(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[14].def,
1, 1, 200);
}
double GMSH_CutBoxPlugin::callbackConnect(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[15].def,
1, 0, 1);
}
double GMSH_CutBoxPlugin::callbackBoundary(int num, int action, double value)
{
return callback(num, action, value, &CutBoxOptions_Number[16].def,
1, 0, 1);
}
std::string GMSH_CutBoxPlugin::getHelp() const
{
return "Plugin(CutBox) cuts the view `View' with a "
"rectangular box defined by the 4 points "
"(`X0',`Y0',`Z0') (origin), (`X1',`Y1',`Z1') (axis of U), "
"(`X2',`Y2',`Z2') (axis of V) and (`X3',`Y3',`Z3') (axis of W).\n\n"
"The number of points along U, V, W is set with the "
"options `NumPointsU', `NumPointsV' and `NumPointsW'.\n\n"
"If `ConnectPoints' is zero, the plugin creates points; "
"otherwise, the plugin generates hexahedra, quadrangles, lines or "
"points depending on the values of `NumPointsU', "
"`NumPointsV' and `NumPointsW'.\n\n"
"If `Boundary' is zero, the plugin interpolates the view inside "
"the box; otherwise the plugin interpolates the view at its boundary.\n\n"
"If `View' < 0, the plugin is run on the current view.\n\n"
"Plugin(CutBox) creates one new view.";
}
int GMSH_CutBoxPlugin::getNbOptions() const
{
return sizeof(CutBoxOptions_Number) / sizeof(StringXNumber);
}
StringXNumber *GMSH_CutBoxPlugin::getOption(int iopt)
{
return &CutBoxOptions_Number[iopt];
}
int GMSH_CutBoxPlugin::getNbU()
{
return (int)CutBoxOptions_Number[12].def;
}
int GMSH_CutBoxPlugin::getNbV()
{
return (int)CutBoxOptions_Number[13].def;
}
int GMSH_CutBoxPlugin::getNbW()
{
return (int)CutBoxOptions_Number[14].def;
}
void GMSH_CutBoxPlugin::getPoint(int iU, int iV, int iW, double *X)
{
double u = getNbU() > 1 ? (double)iU / (double)(getNbU() - 1.) : 0.;
double v = getNbV() > 1 ? (double)iV / (double)(getNbV() - 1.) : 0.;
double w = getNbW() > 1 ? (double)iW / (double)(getNbW() - 1.) : 0.;
X[0] = CutBoxOptions_Number[0].def +
u * (CutBoxOptions_Number[3].def-CutBoxOptions_Number[0].def) +
v * (CutBoxOptions_Number[6].def-CutBoxOptions_Number[0].def) +
w * (CutBoxOptions_Number[9].def-CutBoxOptions_Number[0].def) ;
X[1] = CutBoxOptions_Number[1].def +
u * (CutBoxOptions_Number[4].def-CutBoxOptions_Number[1].def) +
v * (CutBoxOptions_Number[7].def-CutBoxOptions_Number[1].def) +
w * (CutBoxOptions_Number[10].def-CutBoxOptions_Number[1].def) ;
X[2] = CutBoxOptions_Number[2].def +
u * (CutBoxOptions_Number[5].def-CutBoxOptions_Number[2].def) +
v * (CutBoxOptions_Number[8].def-CutBoxOptions_Number[2].def) +
w * (CutBoxOptions_Number[11].def-CutBoxOptions_Number[2].def) ;
}
void GMSH_CutBoxPlugin::addInView( int connect, int boundary, int numsteps, int nbcomp,
double ****pnts, double ****vals,
std::vector<double> &P, int *nP,
std::vector<double> &L, int *nL,
std::vector<double> &Q, int *nQ,
std::vector<double> &H, int *nH)
{
if(!connect || (getNbU() == 1 && getNbV() == 1 && getNbW() == 1)){ // generate points
if(!boundary)
for(int i = 0; i < getNbU(); ++i){
for(int j = 0; j < getNbV(); ++j){
for(int m = 0; m < getNbW(); ++m){
P.push_back(pnts[i][j][m][0]);
P.push_back(pnts[i][j][m][1]);
P.push_back(pnts[i][j][m][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[i][j][m][nbcomp*k+l]);
}
}
}
}
else{
for(int i = 0; i < getNbU(); ++i){
for(int j = 0; j < getNbV(); ++j){
P.push_back(pnts[i][j][0][0]);
P.push_back(pnts[i][j][0][1]);
P.push_back(pnts[i][j][0][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[i][j][0][nbcomp*k+l]);
}
P.push_back(pnts[i][j][getNbW()-1][0]);
P.push_back(pnts[i][j][getNbW()-1][1]);
P.push_back(pnts[i][j][getNbW()-1][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[i][j][getNbW()-1][nbcomp*k+l]);
}
}
}// end UV planes
for(int i = 0; i < getNbU(); ++i){
for(int j = 0; j < getNbW(); ++j){
P.push_back(pnts[i][0][j][0]);
P.push_back(pnts[i][0][j][1]);
P.push_back(pnts[i][0][j][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[i][0][j][nbcomp*k+l]);
}
P.push_back(pnts[i][getNbV()-1][j][0]);
P.push_back(pnts[i][getNbV()-1][j][1]);
P.push_back(pnts[i][getNbV()-1][j][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[i][getNbV()-1][j][nbcomp*k+l]);
}
}
}// end UW planes
for(int i = 0; i < getNbV(); ++i){
for(int j = 0; j < getNbW(); ++j){
P.push_back(pnts[0][i][j][0]);
P.push_back(pnts[0][i][j][1]);
P.push_back(pnts[0][i][j][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[0][i][j][nbcomp*k+l]);
}
P.push_back(pnts[getNbU()-1][i][j][0]);
P.push_back(pnts[getNbU()-1][i][j][1]);
P.push_back(pnts[getNbU()-1][i][j][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[getNbU()-1][i][j][nbcomp*k+l]);
}
}
}//end VW planes
}
}
else{ // generate lines or quads
if ( getNbU() == 1 && getNbV() == 1 ){
if(!boundary)
for(int i = 0; i < getNbW()-1; ++i){
L.push_back(pnts[0][0][i][0]); L.push_back(pnts[0][0][i+1][0]);
L.push_back(pnts[0][0][i][1]); L.push_back(pnts[0][0][i+1][1]);
L.push_back(pnts[0][0][i][2]); L.push_back(pnts[0][0][i+1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][0][i ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][0][i+1][nbcomp*k+l]);
}
}
else{
P.push_back(pnts[0][0][0][0]);
P.push_back(pnts[0][0][0][1]);
P.push_back(pnts[0][0][0][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[0][0][0][nbcomp*k+l]);
}
P.push_back(pnts[0][0][getNbW()-1][0]);
P.push_back(pnts[0][0][getNbW()-1][1]);
P.push_back(pnts[0][0][getNbW()-1][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[0][0][getNbW()-1][nbcomp*k+l]);
}
}
}
else if (getNbU() == 1 && getNbW() == 1){
if(!boundary)
for(int i = 0; i < getNbV()-1; ++i){
L.push_back(pnts[0][i][0][0]); L.push_back(pnts[0][i+1][0][0]);
L.push_back(pnts[0][i][0][1]); L.push_back(pnts[0][i+1][0][1]);
L.push_back(pnts[0][i][0][2]); L.push_back(pnts[0][i+1][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i+1][0][nbcomp*k+l]);
}
}
else{
P.push_back(pnts[0][0][0][0]);
P.push_back(pnts[0][0][0][1]);
P.push_back(pnts[0][0][0][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[0][0][0][nbcomp*k+l]);
}
P.push_back(pnts[0][getNbV()-1][0][0]);
P.push_back(pnts[0][getNbV()-1][0][1]);
P.push_back(pnts[0][getNbV()-1][0][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[0][getNbV()-1][0][nbcomp*k+l]);
}
}
}
else if (getNbV() == 1 && getNbW() == 1){
if(!boundary)
for(int i = 0; i < getNbU()-1; ++i){
L.push_back(pnts[i][0][0][0]); L.push_back(pnts[i+1][0][0][0]);
L.push_back(pnts[i][0][0][1]); L.push_back(pnts[i+1][0][0][1]);
L.push_back(pnts[i][0][0][2]); L.push_back(pnts[i+1][0][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i ][0][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i+1][0][0][nbcomp*k+l]);
}
}
else{
P.push_back(pnts[0][0][0][0]);
P.push_back(pnts[0][0][0][1]);
P.push_back(pnts[0][0][0][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[0][0][0][nbcomp*k+l]);
}
P.push_back(pnts[getNbU()-1][0][0][0]);
P.push_back(pnts[getNbU()-1][0][0][1]);
P.push_back(pnts[getNbU()-1][0][0][2]);
(*nP)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
P.push_back(vals[getNbU()-1][0][0][nbcomp*k+l]);
}
}
}
else if(getNbU() == 1){
if(!boundary)
for(int i = 0; i < getNbV()-1; ++i){
for(int j = 0; j < getNbW()-1; ++j){
Q.push_back(pnts[0][i ][j ][0]); Q.push_back(pnts[0][i+1][j ][0]);
Q.push_back(pnts[0][i+1][j+1][0]); Q.push_back(pnts[0][i ][j+1][0]);
Q.push_back(pnts[0][i ][j ][1]); Q.push_back(pnts[0][i+1][j ][1]);
Q.push_back(pnts[0][i+1][j+1][1]); Q.push_back(pnts[0][i ][j+1][1]);
Q.push_back(pnts[0][i ][j ][2]); Q.push_back(pnts[0][i+1][j ][2]);
Q.push_back(pnts[0][i+1][j+1][2]); Q.push_back(pnts[0][i ][j+1][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i ][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i+1][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i+1][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i ][j+1][nbcomp*k+l]);
}
}
}
else{
for(int i = 0; i < getNbV()-1; ++i){
L.push_back(pnts[0][i][0][0]); L.push_back(pnts[0][i+1][0][0]);
L.push_back(pnts[0][i][0][1]); L.push_back(pnts[0][i+1][0][1]);
L.push_back(pnts[0][i][0][2]); L.push_back(pnts[0][i+1][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i+1][0][nbcomp*k+l]);
}
L.push_back(pnts[0][i][getNbW()-1][0]); L.push_back(pnts[0][i+1][getNbW()-1][0]);
L.push_back(pnts[0][i][getNbW()-1][1]); L.push_back(pnts[0][i+1][getNbW()-1][1]);
L.push_back(pnts[0][i][getNbW()-1][2]); L.push_back(pnts[0][i+1][getNbW()-1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i ][getNbW()][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i+1][getNbW()][nbcomp*k+l]);
}
}
for(int i = 0; i < getNbW()-1; ++i){
L.push_back(pnts[0][0][i][0]); L.push_back(pnts[0][0][i+1][0]);
L.push_back(pnts[0][0][i][1]); L.push_back(pnts[0][0][i+1][1]);
L.push_back(pnts[0][0][i][2]); L.push_back(pnts[0][0][i+1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][0][i ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][0][i+1][nbcomp*k+l]);
}
L.push_back(pnts[0][getNbV()-1][i][0]); L.push_back(pnts[0][getNbV()-1][i+1][0]);
L.push_back(pnts[0][getNbV()-1][i][1]); L.push_back(pnts[0][getNbV()-1][i+1][1]);
L.push_back(pnts[0][getNbV()-1][i][2]); L.push_back(pnts[0][getNbV()-1][i+1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][getNbV()-1][i ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][getNbV()-1][i+1][nbcomp*k+l]);
}
}
}
}
else if(getNbV() == 1){
if(!boundary)
for(int i = 0; i < getNbU()-1; ++i){
for(int j = 0; j < getNbW()-1; ++j){
Q.push_back(pnts[i ][0][j ][0]); Q.push_back(pnts[i+1][0][j ][0]);
Q.push_back(pnts[i+1][0][j+1][0]); Q.push_back(pnts[i ][0][j+1][0]);
Q.push_back(pnts[i ][0][j ][1]); Q.push_back(pnts[i+1][0][j ][1]);
Q.push_back(pnts[i+1][0][j+1][1]); Q.push_back(pnts[i ][0][j+1][1]);
Q.push_back(pnts[i ][0][j ][2]); Q.push_back(pnts[i+1][0][j ][2]);
Q.push_back(pnts[i+1][0][j+1][2]); Q.push_back(pnts[i ][0][j+1][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][0][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][0][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][0][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][0][j+1][nbcomp*k+l]);
}
}
}
else{
for(int i = 0; i < getNbU()-1; ++i){
L.push_back(pnts[i][0][0][0]); L.push_back(pnts[i+1][0][0][0]);
L.push_back(pnts[i][0][0][1]); L.push_back(pnts[i+1][0][0][1]);
L.push_back(pnts[i][0][0][2]); L.push_back(pnts[i+1][0][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i ][0][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i+1][0][0][nbcomp*k+l]);
}
L.push_back(pnts[i][0][getNbW()-1][0]); L.push_back(pnts[i+1][0][getNbW()-1][0]);
L.push_back(pnts[i][0][getNbW()-1][1]); L.push_back(pnts[i+1][0][getNbW()-1][1]);
L.push_back(pnts[i][0][getNbW()-1][2]); L.push_back(pnts[i+1][0][getNbW()-1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i ][0][getNbW()-1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i+1][0][getNbW()-1][nbcomp*k+l]);
}
}
for(int i = 0; i < getNbW()-1; ++i){
L.push_back(pnts[0][0][i][0]); L.push_back(pnts[0][0][i+1][0]);
L.push_back(pnts[0][0][i][1]); L.push_back(pnts[0][0][i+1][1]);
L.push_back(pnts[0][0][i][2]); L.push_back(pnts[0][0][i+1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][0][i ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][0][i+1][nbcomp*k+l]);
}
L.push_back(pnts[getNbU()-1][0][i][0]); L.push_back(pnts[getNbU()-1][0][i+1][0]);
L.push_back(pnts[getNbU()-1][0][i][1]); L.push_back(pnts[getNbU()-1][0][i+1][1]);
L.push_back(pnts[getNbU()-1][0][i][2]); L.push_back(pnts[getNbU()-1][0][i+1][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[getNbU()-1][0][i ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[getNbU()-1][0][i+1][nbcomp*k+l]);
}
}
}
}
else if(getNbW() == 1){
if(!boundary)
for(int i = 0; i < getNbU()-1; ++i){
for(int j = 0; j < getNbV()-1; ++j){
Q.push_back(pnts[i ][j ][0][0]); Q.push_back(pnts[i+1][j ][0][0]);
Q.push_back(pnts[i+1][j+1][0][0]); Q.push_back(pnts[i ][j+1][0][0]);
Q.push_back(pnts[i ][j ][0][1]); Q.push_back(pnts[i+1][j ][0][1]);
Q.push_back(pnts[i+1][j+1][0][1]); Q.push_back(pnts[i ][j+1][0][1]);
Q.push_back(pnts[i ][j ][0][2]); Q.push_back(pnts[i+1][j ][0][2]);
Q.push_back(pnts[i+1][j+1][0][2]); Q.push_back(pnts[i ][j+1][0][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][j ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][j ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][j+1][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][j+1][0][nbcomp*k+l]);
}
}
}
else{
for(int i = 0; i < getNbU()-1; ++i){
L.push_back(pnts[i][0][0][0]); L.push_back(pnts[i+1][0][0][0]);
L.push_back(pnts[i][0][0][1]); L.push_back(pnts[i+1][0][0][1]);
L.push_back(pnts[i][0][0][2]); L.push_back(pnts[i+1][0][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i ][0][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i+1][0][0][nbcomp*k+l]);
}
L.push_back(pnts[i][getNbV()-1][0][0]); L.push_back(pnts[i+1][getNbV()-1][0][0]);
L.push_back(pnts[i][getNbV()-1][0][1]); L.push_back(pnts[i+1][getNbV()-1][0][1]);
L.push_back(pnts[i][getNbV()-1][0][2]); L.push_back(pnts[i+1][getNbV()-1][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i ][getNbV()-1][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[i+1][getNbV()-1][0][nbcomp*k+l]);
}
}
for(int i = 0; i < getNbV()-1; ++i){
L.push_back(pnts[0][i][0][0]); L.push_back(pnts[0][i+1][0][0]);
L.push_back(pnts[0][i][0][1]); L.push_back(pnts[0][i+1][0][1]);
L.push_back(pnts[0][i][0][2]); L.push_back(pnts[0][i+1][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[0][i+1][0][nbcomp*k+l]);
}
L.push_back(pnts[getNbU()-1][i][0][0]); L.push_back(pnts[getNbU()-1][i+1][0][0]);
L.push_back(pnts[getNbU()-1][i][0][1]); L.push_back(pnts[getNbU()-1][i+1][0][1]);
L.push_back(pnts[getNbU()-1][i][0][2]); L.push_back(pnts[getNbU()-1][i+1][0][2]);
(*nL)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[getNbU()-1][i ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
L.push_back(vals[getNbU()-1][i+1][0][nbcomp*k+l]);
}
}
}
}
// from here, general case
else{
if (!boundary){ //Hexaedra in the box
for(int i = 0; i < getNbU()-1; ++i){
for(int j = 0; j < getNbV()-1; ++j){
for(int m = 0; m < getNbW()-1; ++m){
H.push_back(pnts[i ][j ][m ][0]); H.push_back(pnts[i+1][j ][m ][0]);
H.push_back(pnts[i+1][j+1][m ][0]); H.push_back(pnts[i ][j+1][m ][0]);
H.push_back(pnts[i ][j ][m+1][0]); H.push_back(pnts[i+1][j ][m+1][0]);
H.push_back(pnts[i+1][j+1][m+1][0]); H.push_back(pnts[i ][j+1][m+1][0]);
H.push_back(pnts[i ][j ][m ][1]); H.push_back(pnts[i+1][j ][m ][1]);
H.push_back(pnts[i+1][j+1][m ][1]); H.push_back(pnts[i ][j+1][m ][1]);
H.push_back(pnts[i ][j ][m+1][1]); H.push_back(pnts[i+1][j ][m+1][1]);
H.push_back(pnts[i+1][j+1][m+1][1]); H.push_back(pnts[i ][j+1][m+1][1]);
H.push_back(pnts[i ][j ][m ][2]); H.push_back(pnts[i+1][j ][m ][2]);
H.push_back(pnts[i+1][j+1][m ][2]); H.push_back(pnts[i ][j+1][m ][2]);
H.push_back(pnts[i ][j ][m+1][2]); H.push_back(pnts[i+1][j ][m+1][2]);
H.push_back(pnts[i+1][j+1][m+1][2]); H.push_back(pnts[i ][j+1][m+1][2]);
(*nH)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i ][j ][m ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i+1][j ][m ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i+1][j+1][m ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i ][j+1][m ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i ][j ][m+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i+1][j ][m+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i+1][j+1][m+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
H.push_back(vals[i ][j+1][m+1][nbcomp*k+l]);
}
}
}
}
}
else{//Quadrangles at boundary of the box + forcing exterior normals
for(int i = 0; i < getNbU()-1; ++i){
for(int j = 0; j < getNbV()-1; ++j){
Q.push_back(pnts[i ][j ][0][0]); Q.push_back(pnts[i ][j+1][0][0]);
Q.push_back(pnts[i+1][j+1][0][0]); Q.push_back(pnts[i+1][j ][0][0]);
Q.push_back(pnts[i ][j ][0][1]); Q.push_back(pnts[i ][j+1][0][1]);
Q.push_back(pnts[i+1][j+1][0][1]); Q.push_back(pnts[i+1][j ][0][1]);
Q.push_back(pnts[i ][j ][0][2]); Q.push_back(pnts[i ][j+1][0][2]);
Q.push_back(pnts[i+1][j+1][0][2]); Q.push_back(pnts[i+1][j ][0][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][j ][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][j+1][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][j+1][0][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][j ][0][nbcomp*k+l]);
}
Q.push_back(pnts[i ][j ][getNbW()-1][0]); Q.push_back(pnts[i+1][j ][getNbW()-1][0]);
Q.push_back(pnts[i+1][j+1][getNbW()-1][0]); Q.push_back(pnts[i ][j+1][getNbW()-1][0]);
Q.push_back(pnts[i ][j ][getNbW()-1][1]); Q.push_back(pnts[i+1][j ][getNbW()-1][1]);
Q.push_back(pnts[i+1][j+1][getNbW()-1][1]); Q.push_back(pnts[i ][j+1][getNbW()-1][1]);
Q.push_back(pnts[i ][j ][getNbW()-1][2]); Q.push_back(pnts[i+1][j ][getNbW()-1][2]);
Q.push_back(pnts[i+1][j+1][getNbW()-1][2]); Q.push_back(pnts[i ][j+1][getNbW()-1][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][j ][getNbW()-1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][j ][getNbW()-1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][j+1][getNbW()-1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][j+1][getNbW()-1][nbcomp*k+l]);
}
}
}
for(int i = 0; i < getNbU()-1; ++i){
for(int j = 0; j < getNbW()-1; ++j){
Q.push_back(pnts[i ][0][j ][0]); Q.push_back(pnts[i+1][0][j ][0]);
Q.push_back(pnts[i+1][0][j+1][0]); Q.push_back(pnts[i ][0][j+1][0]);
Q.push_back(pnts[i ][0][j ][1]); Q.push_back(pnts[i+1][0][j ][1]);
Q.push_back(pnts[i+1][0][j+1][1]); Q.push_back(pnts[i ][0][j+1][1]);
Q.push_back(pnts[i ][0][j ][2]); Q.push_back(pnts[i+1][0][j ][2]);
Q.push_back(pnts[i+1][0][j+1][2]); Q.push_back(pnts[i ][0][j+1][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][0][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][0][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][0][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][0][j+1][nbcomp*k+l]);
}
Q.push_back(pnts[i ][getNbV()-1][j ][0]); Q.push_back(pnts[i ][getNbV()-1][j+1][0]);
Q.push_back(pnts[i+1][getNbV()-1][j+1][0]); Q.push_back(pnts[i+1][getNbV()-1][j ][0]);
Q.push_back(pnts[i ][getNbV()-1][j ][1]); Q.push_back(pnts[i ][getNbV()-1][j+1][1]);
Q.push_back(pnts[i+1][getNbV()-1][j+1][1]); Q.push_back(pnts[i+1][getNbV()-1][j ][1]);
Q.push_back(pnts[i ][getNbV()-1][j ][2]); Q.push_back(pnts[i ][getNbV()-1][j+1][2]);
Q.push_back(pnts[i+1][getNbV()-1][j+1][2]); Q.push_back(pnts[i+1][getNbV()-1][j ][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][getNbV()-1][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i ][getNbV()-1][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][getNbV()-1][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[i+1][getNbV()-1][j ][nbcomp*k+l]);
}
}
}
for(int i = 0; i < getNbV()-1; ++i){
for(int j = 0; j < getNbW()-1; ++j){
Q.push_back(pnts[0][i ][j ][0]); Q.push_back(pnts[0][i ][j+1][0]);
Q.push_back(pnts[0][i+1][j+1][0]); Q.push_back(pnts[0][i+1][j ][0]);
Q.push_back(pnts[0][i ][j ][1]); Q.push_back(pnts[0][i ][j+1][1]);
Q.push_back(pnts[0][i+1][j+1][1]); Q.push_back(pnts[0][i+1][j ][1]);
Q.push_back(pnts[0][i ][j ][2]); Q.push_back(pnts[0][i ][j+1][2]);
Q.push_back(pnts[0][i+1][j+1][2]); Q.push_back(pnts[0][i+1][j ][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i ][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i ][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i+1][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[0][i+1][j ][nbcomp*k+l]);
}
Q.push_back(pnts[getNbU()-1][i ][j ][0]); Q.push_back(pnts[getNbU()-1][i+1][j ][0]);
Q.push_back(pnts[getNbU()-1][i+1][j+1][0]); Q.push_back(pnts[getNbU()-1][i ][j+1][0]);
Q.push_back(pnts[getNbU()-1][i ][j ][1]); Q.push_back(pnts[getNbU()-1][i+1][j ][1]);
Q.push_back(pnts[getNbU()-1][i+1][j+1][1]); Q.push_back(pnts[getNbU()-1][i ][j+1][1]);
Q.push_back(pnts[getNbU()-1][i ][j ][2]); Q.push_back(pnts[getNbU()-1][i+1][j ][2]);
Q.push_back(pnts[getNbU()-1][i+1][j+1][2]); Q.push_back(pnts[getNbU()-1][i ][j+1][2]);
(*nQ)++;
for(int k = 0; k < numsteps; ++k){
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[getNbU()-1][i ][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[getNbU()-1][i+1][j ][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[getNbU()-1][i+1][j+1][nbcomp*k+l]);
for(int l = 0; l < nbcomp; ++l)
Q.push_back(vals[getNbU()-1][i ][j+1][nbcomp*k+l]);
}
}
}
}
}
}
}
PView *GMSH_CutBoxPlugin::GenerateView(PView *v1, int connect, int boundary)
{
if(getNbU() <= 0 || getNbV() <= 0 || getNbW() <= 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* [getNbW()];
vals[i][j] = new double* [getNbW()];
for(int k = 0; k < getNbW(); k++){
pnts[i][j][k] = new double[3];
vals[i][j][k] = new double[maxcomp * numsteps];
getPoint(i, j, k, pnts[i][j][k]);
}
}
}
if(nbs){
for(int i = 0; i < getNbU(); i++)
for(int j = 0; j < getNbV(); j++)
for(int k = 0; k < getNbW(); k++)
o.searchScalar(pnts[i][j][k][0], pnts[i][j][k][1], pnts[i][j][k][2], vals[i][j][k]);
addInView(connect, boundary, numsteps, 1, pnts, vals, data2->SP, &data2->NbSP,
data2->SL, &data2->NbSL, data2->SQ, &data2->NbSQ, data2->SH, &data2->NbSH);
}
if(nbv){
for(int i = 0; i < getNbU(); i++)
for(int j = 0; j < getNbV(); j++)
for(int k = 0; k < getNbW(); k++)
o.searchVector(pnts[i][j][k][0], pnts[i][j][k][1], pnts[i][j][k][2], vals[i][j][k]);
addInView(connect, boundary, numsteps, 3, pnts, vals, data2->VP, &data2->NbVP,
data2->VL, &data2->NbVL, data2->VQ, &data2->NbVQ, data2->VH, &data2->NbVH);
}
if(nbt){
for(int i = 0; i < getNbU(); i++)
for(int j = 0; j < getNbV(); j++)
for(int k = 0; k < getNbW(); k++)
o.searchTensor(pnts[i][j][k][0], pnts[i][j][k][1], pnts[i][j][k][2], vals[i][j][k]);
addInView(connect, boundary, numsteps, 9, pnts, vals, data2->TP, &data2->NbTP,
data2->TL, &data2->NbTL, data2->TQ, &data2->NbTQ, data2->TH, &data2->NbTH);
}
for(int i = 0; i < getNbU(); i++){
for(int j = 0; j < getNbV(); j++){
for(int k = 0; k < getNbW(); k++){
delete [] pnts[i][j][k];
delete [] vals[i][j][k];
}
delete [] pnts[i][j];
delete [] vals[i][j];
}
delete [] pnts[i];
delete [] vals[i];
}
delete [] pnts;
delete [] vals;
data2->setName(data1->getName() + "_CutBox");
data2->setFileName(data1->getName() + "_CutBox.pos");
data2->finalize();
return v2;
}
PView *GMSH_CutBoxPlugin::execute(PView *v)
{
int connectPoints = (int)CutBoxOptions_Number[15].def;
int boundary = (int)CutBoxOptions_Number[16].def;
int iView = (int)CutBoxOptions_Number[17].def;
PView *v1 = getView(iView, v);
if(!v1) return v;
return GenerateView(v1, connectPoints, boundary);
}