Skip to content
Snippets Groups Projects
Commit 90449e3f authored by Gaetan Bricteux's avatar Gaetan Bricteux
Browse files

improve polygons display

parent 7a415c7d
Branches
Tags
No related merge requests found
...@@ -183,7 +183,7 @@ static std::string stringValue(int numComp, double d[9], double norm, ...@@ -183,7 +183,7 @@ static std::string stringValue(int numComp, double d[9], double norm,
} }
static void drawNumberGlyphs(drawContext *ctx, PView *p, int numNodes, int numComp, static void drawNumberGlyphs(drawContext *ctx, PView *p, int numNodes, int numComp,
double xyz[PVIEW_NMAX][3], double val[PVIEW_NMAX][9]) double **xyz, double **val)
{ {
PViewOptions *opt = p->getOptions(); PViewOptions *opt = p->getOptions();
double d[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.}; double d[9] = {0., 0., 0., 0., 0., 0., 0., 0., 0.};
...@@ -230,7 +230,7 @@ static void drawNumberGlyphs(drawContext *ctx, PView *p, int numNodes, int numCo ...@@ -230,7 +230,7 @@ static void drawNumberGlyphs(drawContext *ctx, PView *p, int numNodes, int numCo
} }
static void drawNormalVectorGlyphs(drawContext *ctx, PView *p, int numNodes, static void drawNormalVectorGlyphs(drawContext *ctx, PView *p, int numNodes,
double xyz[PVIEW_NMAX][3], double val[PVIEW_NMAX][9]) double **xyz, double **val)
{ {
PViewOptions *opt = p->getOptions(); PViewOptions *opt = p->getOptions();
...@@ -252,7 +252,7 @@ static void drawNormalVectorGlyphs(drawContext *ctx, PView *p, int numNodes, ...@@ -252,7 +252,7 @@ static void drawNormalVectorGlyphs(drawContext *ctx, PView *p, int numNodes,
} }
static void drawTangentVectorGlyphs(drawContext *ctx, PView *p, int numNodes, static void drawTangentVectorGlyphs(drawContext *ctx, PView *p, int numNodes,
double xyz[PVIEW_NMAX][3], double val[PVIEW_NMAX][9]) double **xyz, double **val)
{ {
PViewOptions *opt = p->getOptions(); PViewOptions *opt = p->getOptions();
...@@ -292,7 +292,14 @@ static void drawGlyphs(drawContext *ctx, PView *p) ...@@ -292,7 +292,14 @@ static void drawGlyphs(drawContext *ctx, PView *p)
#endif #endif
#endif #endif
double xyz[PVIEW_NMAX][3], val[PVIEW_NMAX][9]; //double xyz[PVIEW_NMAX][3], val[PVIEW_NMAX][9];
int NMAX = PVIEW_NMAX;
double **xyz = new double*[NMAX];
double **val = new double*[NMAX];
for(int i = 0; i < NMAX; i++){
xyz[i] = new double[3];
val[i] = new double[9];
}
for(int ent = 0; ent < data->getNumEntities(opt->timeStep); ent++){ for(int ent = 0; ent < data->getNumEntities(opt->timeStep); ent++){
if(data->skipEntity(opt->timeStep, ent)) continue; if(data->skipEntity(opt->timeStep, ent)) continue;
for(int i = 0; i < data->getNumElements(opt->timeStep, ent); i++){ for(int i = 0; i < data->getNumElements(opt->timeStep, ent); i++){
...@@ -302,6 +309,23 @@ static void drawGlyphs(drawContext *ctx, PView *p) ...@@ -302,6 +309,23 @@ static void drawGlyphs(drawContext *ctx, PView *p)
int dim = data->getDimension(opt->timeStep, ent, i); int dim = data->getDimension(opt->timeStep, ent, i);
int numComp = data->getNumComponents(opt->timeStep, ent, i); int numComp = data->getNumComponents(opt->timeStep, ent, i);
int numNodes = data->getNumNodes(opt->timeStep, ent, i); int numNodes = data->getNumNodes(opt->timeStep, ent, i);
if(numNodes > NMAX){
if(type == TYPE_POLYG || type == TYPE_POLYH){
for(int j = 0; j < NMAX; j++){
delete [] xyz[i];
delete [] val[i];
}
delete [] xyz;
delete [] val;
NMAX = numNodes;
xyz = new double*[NMAX];
val = new double*[NMAX];
for(int j = 0; j < NMAX; j++){
xyz[j] = new double[3];
val[j] = new double[9];
}
}
}
for(int j = 0; j < numNodes; j++){ for(int j = 0; j < numNodes; j++){
data->getNode(opt->timeStep, ent, i, j, xyz[j][0], xyz[j][1], xyz[j][2]); data->getNode(opt->timeStep, ent, i, j, xyz[j][0], xyz[j][1], xyz[j][2]);
if(opt->forceNumComponents){ if(opt->forceNumComponents){
...@@ -328,6 +352,12 @@ static void drawGlyphs(drawContext *ctx, PView *p) ...@@ -328,6 +352,12 @@ static void drawGlyphs(drawContext *ctx, PView *p)
drawTangentVectorGlyphs(ctx, p, numNodes, xyz, val); drawTangentVectorGlyphs(ctx, p, numNodes, xyz, val);
} }
} }
for(int j = 0; j < NMAX; j++){
delete [] xyz[j];
delete [] val[j];
}
delete [] xyz;
delete [] val;
} }
static bool eyeChanged(drawContext *ctx, PView *p) static bool eyeChanged(drawContext *ctx, PView *p)
......
...@@ -134,8 +134,8 @@ class PView{ ...@@ -134,8 +134,8 @@ class PView{
void changeCoordinates(PView *p, int ient, int iele, void changeCoordinates(PView *p, int ient, int iele,
int numNodes, int type, int numComp, int numNodes, int type, int numComp,
double xyz[PVIEW_NMAX][3], double val[PVIEW_NMAX][9]); double **xyz, double **val);
bool isElementVisible(PViewOptions *opt, int dim, int numNodes, bool isElementVisible(PViewOptions *opt, int dim, int numNodes,
double xyz[PVIEW_NMAX][3]); double **xyz);
#endif #endif
...@@ -353,24 +353,38 @@ int PViewDataGModel::getNumNodes(int step, int ent, int ele) ...@@ -353,24 +353,38 @@ int PViewDataGModel::getNumNodes(int step, int ent, int ele)
return _steps[step]->getGaussPoints(e->getTypeForMSH()).size() / 3; return _steps[step]->getGaussPoints(e->getTypeForMSH()).size() / 3;
} }
else{ else{
if(e->getNumChildren())
return e->getNumChildren() * e->getChild(0)->getNumVertices();
if(isAdaptive()) if(isAdaptive())
return e->getNumVertices(); return e->getNumVertices();
else return e->getNumPrimaryVertices();
return e->getNumPrimaryVertices(); }
}
MVertex *PViewDataGModel::_getNode(MElement *e, int nod)
{
MVertex *v;
if(!e->getNumChildren())
v = e->getVertex(nod);
else {
int nbV = e->getChild(0)->getNumVertices();
v = e->getChild((int)(nod / nbV))->getVertex(nod % nbV);
} }
return v;
} }
int PViewDataGModel::getNode(int step, int ent, int ele, int nod, int PViewDataGModel::getNode(int step, int ent, int ele, int nod,
double &x, double &y, double &z) double &x, double &y, double &z)
{ {
MElement *e = _getElement(step, ent, ele); MElement *e = _getElement(step, ent, ele);
MVertex *v = _getNode(e, nod);
if(_type == GaussPointData){ if(_type == GaussPointData){
std::vector<double> &p(_steps[step]->getGaussPoints(e->getTypeForMSH())); std::vector<double> &p(_steps[step]->getGaussPoints(e->getTypeForMSH()));
if(p[0] == 1.e22){ if(p[0] == 1.e22){
// hack: the points are the element vertices // hack: the points are the element vertices
x = e->getVertex(nod)->x(); x = v->x();
y = e->getVertex(nod)->y(); y = v->y();
z = e->getVertex(nod)->z(); z = v->z();
} }
else{ else{
double vx[8], vy[8], vz[8]; double vx[8], vy[8], vz[8];
...@@ -386,7 +400,6 @@ int PViewDataGModel::getNode(int step, int ent, int ele, int nod, ...@@ -386,7 +400,6 @@ int PViewDataGModel::getNode(int step, int ent, int ele, int nod,
return 0; return 0;
} }
else{ else{
MVertex *v = e->getVertex(nod);
x = v->x(); x = v->x();
y = v->y(); y = v->y();
z = v->z(); z = v->z();
...@@ -397,7 +410,8 @@ int PViewDataGModel::getNode(int step, int ent, int ele, int nod, ...@@ -397,7 +410,8 @@ int PViewDataGModel::getNode(int step, int ent, int ele, int nod,
void PViewDataGModel::setNode(int step, int ent, int ele, int nod, void PViewDataGModel::setNode(int step, int ent, int ele, int nod,
double x, double y, double z) double x, double y, double z)
{ {
MVertex *v = _getElement(step, ent, ele)->getVertex(nod); MElement *e = _getElement(step, ent, ele);
MVertex *v = _getNode(e, nod);
v->x() = x; v->x() = x;
v->y() = y; v->y() = y;
v->z() = z; v->z() = z;
...@@ -405,7 +419,8 @@ void PViewDataGModel::setNode(int step, int ent, int ele, int nod, ...@@ -405,7 +419,8 @@ void PViewDataGModel::setNode(int step, int ent, int ele, int nod,
void PViewDataGModel::tagNode(int step, int ent, int ele, int nod, int tag) void PViewDataGModel::tagNode(int step, int ent, int ele, int nod, int tag)
{ {
MVertex *v = _getElement(step, ent, ele)->getVertex(nod); MElement *e = _getElement(step, ent, ele);
MVertex *v = _getNode(e, nod);
v->setIndex(tag); v->setIndex(tag);
} }
...@@ -438,7 +453,8 @@ void PViewDataGModel::getValue(int step, int ent, int ele, int idx, double &val) ...@@ -438,7 +453,8 @@ void PViewDataGModel::getValue(int step, int ent, int ele, int idx, double &val)
int numcomp = _steps[step]->getNumComponents(); int numcomp = _steps[step]->getNumComponents();
int nod = idx / numcomp; int nod = idx / numcomp;
int comp = idx % numcomp; int comp = idx % numcomp;
val = _steps[step]->getData(e->getVertex(nod)->getNum())[comp]; int num = _getNode(e, nod)->getNum();
val = _steps[step]->getData(num)[comp];
} }
else{ else{
Msg::Error("getValue(index) should not be used on this type of view"); Msg::Error("getValue(index) should not be used on this type of view");
...@@ -450,7 +466,10 @@ void PViewDataGModel::getValue(int step, int ent, int ele, int nod, int comp, do ...@@ -450,7 +466,10 @@ void PViewDataGModel::getValue(int step, int ent, int ele, int nod, int comp, do
MElement *e = _getElement(step, ent, ele); MElement *e = _getElement(step, ent, ele);
switch(_type){ switch(_type){
case NodeData: case NodeData:
val = _steps[step]->getData(e->getVertex(nod)->getNum())[comp]; {
int num = _getNode(e, nod)->getNum();
val = _steps[step]->getData(num)[comp];
}
break; break;
case ElementNodeData: case ElementNodeData:
case GaussPointData: case GaussPointData:
...@@ -468,7 +487,10 @@ void PViewDataGModel::setValue(int step, int ent, int ele, int nod, int comp, do ...@@ -468,7 +487,10 @@ void PViewDataGModel::setValue(int step, int ent, int ele, int nod, int comp, do
MElement *e = _getElement(step, ent, ele); MElement *e = _getElement(step, ent, ele);
switch(_type){ switch(_type){
case NodeData: case NodeData:
_steps[step]->getData(e->getVertex(nod)->getNum())[comp] = val; {
int num = _getNode(e, nod)->getNum();
_steps[step]->getData(num)[comp] = val;
}
break; break;
case ElementNodeData: case ElementNodeData:
case GaussPointData: case GaussPointData:
...@@ -593,8 +615,8 @@ bool PViewDataGModel::skipElement(int step, int ent, int ele, bool checkVisibili ...@@ -593,8 +615,8 @@ bool PViewDataGModel::skipElement(int step, int ent, int ele, bool checkVisibili
MElement *e = _getElement(step, ent, ele); MElement *e = _getElement(step, ent, ele);
if(checkVisibility && !e->getVisibility()) return true; if(checkVisibility && !e->getVisibility()) return true;
if(_type == NodeData){ if(_type == NodeData){
for(int i = 0; i < e->getNumVertices(); i++) for(int i = 0; i < getNumNodes(step, ent, ele); i++)
if(!sd->getData(e->getVertex(i)->getNum())) return true; if(!sd->getData(_getNode(e, i)->getNum())) return true;
} }
else{ else{
if(!sd->getData(e->getNum())) return true; if(!sd->getData(e->getNum())) return true;
......
...@@ -165,6 +165,7 @@ class PViewDataGModel : public PViewData { ...@@ -165,6 +165,7 @@ class PViewDataGModel : public PViewData {
DataType _type; DataType _type;
// cache last element to speed up loops // cache last element to speed up loops
MElement *_getElement(int step, int ent, int ele); MElement *_getElement(int step, int ent, int ele);
MVertex *_getNode(MElement *e, int nod);
// helper function to populate the interpolation matrix list // helper function to populate the interpolation matrix list
void _addInterpolationMatricesForElement(MElement *e); void _addInterpolationMatricesForElement(MElement *e);
public: public:
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment