Skip to content
Snippets Groups Projects
Commit 7b05a0d6 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

ported Annotate and HarmonicToTime plugins to new API

parent 5060a9bd
No related branches found
No related tags found
No related merge requests found
...@@ -201,7 +201,8 @@ void GMSH_AnnotatePlugin::getInfos(char *author, char *copyright, ...@@ -201,7 +201,8 @@ void GMSH_AnnotatePlugin::getInfos(char *author, char *copyright,
"according to `Align'. If `iView' < 0, the plugin\n" "according to `Align'. If `iView' < 0, the plugin\n"
"is run on the current view.\n" "is run on the current view.\n"
"\n" "\n"
"Plugin(Annotate) is executed in-place.\n"); "Plugin(Annotate) is executed in-place for list-based\n"
"datasets or creates a new view for other datasets.\n");
} }
int GMSH_AnnotatePlugin::getNbOptions() const int GMSH_AnnotatePlugin::getNbOptions() const
...@@ -241,29 +242,42 @@ PView *GMSH_AnnotatePlugin::execute(PView *v) ...@@ -241,29 +242,42 @@ PView *GMSH_AnnotatePlugin::execute(PView *v)
PView *v1 = getView(iView, v); PView *v1 = getView(iView, v);
if(!v1) return v; if(!v1) return v;
PViewData *data1 = v1->getData();
PViewDataList *data1 = getDataList(v1); PView *v2 = v1;
if(!data1) return v; PViewDataList *data2 = getDataList(v2, false);
if(!data2){
v2 = new PView();
data2 = getDataList(v2);
}
if(dim3){ if(dim3){
data1->T3D.push_back(X); data2->T3D.push_back(X);
data1->T3D.push_back(Y); data2->T3D.push_back(Y);
data1->T3D.push_back(Z); data2->T3D.push_back(Z);
data1->T3D.push_back(style); data2->T3D.push_back(style);
data1->T3D.push_back(data1->T3C.size()); data2->T3D.push_back(data2->T3C.size());
for(int i = 0; i < (int)strlen(text) + 1; i++) for(int i = 0; i < (int)strlen(text) + 1; i++)
data1->T3C.push_back(text[i]); data2->T3C.push_back(text[i]);
data1->NbT3++; data2->NbT3++;
} }
else{ else{
data1->T2D.push_back(X); data2->T2D.push_back(X);
data1->T2D.push_back(Y); data2->T2D.push_back(Y);
data1->T2D.push_back(style); data2->T2D.push_back(style);
data1->T2D.push_back(data1->T2C.size()); data2->T2D.push_back(data2->T2C.size());
for(int i = 0; i < (int)strlen(text) + 1; i++) for(int i = 0; i < (int)strlen(text) + 1; i++)
data1->T2C.push_back(text[i]); data2->T2C.push_back(text[i]);
data1->NbT2++; data2->NbT2++;
}
if(v2 != v1){
for(int i = 0; i < data1->getNumTimeSteps(); i++)
data2->Time.push_back(data1->getTime(i));
data2->setName(data1->getName() + "_Annotate");
data2->setFileName(data1->getName() + "_Annotate.pos");
} }
return v1; data2->finalize();
return v2;
} }
...@@ -97,49 +97,49 @@ void GMSH_ExtractPlugin::catchErrorMessage(char *errorMessage) const ...@@ -97,49 +97,49 @@ void GMSH_ExtractPlugin::catchErrorMessage(char *errorMessage) const
strcpy(errorMessage, "Extract failed..."); strcpy(errorMessage, "Extract failed...");
} }
static std::vector<double> *incrementList(PViewDataList *data2, int numComp2, static std::vector<double> *incrementList(PViewDataList *data, int numComp,
int numEdges) int numEdges)
{ {
switch(numEdges){ switch(numEdges){
case 0: case 0:
if (numComp2 == 1){ data2->NbSP++; return &data2->SP; } if (numComp == 1){ data->NbSP++; return &data->SP; }
else if(numComp2 == 3){ data2->NbVP++; return &data2->VP; } else if(numComp == 3){ data->NbVP++; return &data->VP; }
else if(numComp2 == 9){ data2->NbTP++; return &data2->TP; } else if(numComp == 9){ data->NbTP++; return &data->TP; }
break; break;
case 1: case 1:
if (numComp2 == 1){ data2->NbSL++; return &data2->SL; } if (numComp == 1){ data->NbSL++; return &data->SL; }
else if(numComp2 == 3){ data2->NbVL++; return &data2->VL; } else if(numComp == 3){ data->NbVL++; return &data->VL; }
else if(numComp2 == 9){ data2->NbTL++; return &data2->TL; } else if(numComp == 9){ data->NbTL++; return &data->TL; }
break; break;
case 3: case 3:
if (numComp2 == 1){ data2->NbST++; return &data2->ST; } if (numComp == 1){ data->NbST++; return &data->ST; }
else if(numComp2 == 3){ data2->NbVT++; return &data2->VT; } else if(numComp == 3){ data->NbVT++; return &data->VT; }
else if(numComp2 == 9){ data2->NbTT++; return &data2->TT; } else if(numComp == 9){ data->NbTT++; return &data->TT; }
break; break;
case 4: case 4:
if (numComp2 == 1){ data2->NbSQ++; return &data2->SQ; } if (numComp == 1){ data->NbSQ++; return &data->SQ; }
else if(numComp2 == 3){ data2->NbVQ++; return &data2->VQ; } else if(numComp == 3){ data->NbVQ++; return &data->VQ; }
else if(numComp2 == 9){ data2->NbTQ++; return &data2->TQ; } else if(numComp == 9){ data->NbTQ++; return &data->TQ; }
break; break;
case 6: case 6:
if (numComp2 == 1){ data2->NbSS++; return &data2->SS; } if (numComp == 1){ data->NbSS++; return &data->SS; }
else if(numComp2 == 3){ data2->NbVS++; return &data2->VS; } else if(numComp == 3){ data->NbVS++; return &data->VS; }
else if(numComp2 == 9){ data2->NbTS++; return &data2->TS; } else if(numComp == 9){ data->NbTS++; return &data->TS; }
break; break;
case 12: case 12:
if (numComp2 == 1){ data2->NbSH++; return &data2->SH; } if (numComp == 1){ data->NbSH++; return &data->SH; }
else if(numComp2 == 3){ data2->NbVH++; return &data2->VH; } else if(numComp == 3){ data->NbVH++; return &data->VH; }
else if(numComp2 == 9){ data2->NbTH++; return &data2->TH; } else if(numComp == 9){ data->NbTH++; return &data->TH; }
break; break;
case 9: case 9:
if (numComp2 == 1){ data2->NbSI++; return &data2->SI; } if (numComp == 1){ data->NbSI++; return &data->SI; }
else if(numComp2 == 3){ data2->NbVI++; return &data2->VI; } else if(numComp == 3){ data->NbVI++; return &data->VI; }
else if(numComp2 == 9){ data2->NbTI++; return &data2->TI; } else if(numComp == 9){ data->NbTI++; return &data->TI; }
break; break;
case 8: case 8:
if (numComp2 == 1){ data2->NbSY++; return &data2->SY; } if (numComp == 1){ data->NbSY++; return &data->SY; }
else if(numComp2 == 3){ data2->NbVY++; return &data2->VY; } else if(numComp == 3){ data->NbVY++; return &data->VY; }
else if(numComp2 == 9){ data2->NbTY++; return &data2->TY; } else if(numComp == 9){ data->NbTY++; return &data->TY; }
break; break;
} }
return 0; return 0;
......
...@@ -20,12 +20,6 @@ extern "C" ...@@ -20,12 +20,6 @@ extern "C"
} }
} }
GMSH_HarmonicToTimePlugin::GMSH_HarmonicToTimePlugin()
{
;
}
void GMSH_HarmonicToTimePlugin::getName(char *name) const void GMSH_HarmonicToTimePlugin::getName(char *name) const
{ {
strcpy(name, "Harmonic to Time"); strcpy(name, "Harmonic to Time");
...@@ -64,30 +58,52 @@ void GMSH_HarmonicToTimePlugin::catchErrorMessage(char *errorMessage) const ...@@ -64,30 +58,52 @@ void GMSH_HarmonicToTimePlugin::catchErrorMessage(char *errorMessage) const
strcpy(errorMessage, "HarmonicToTime failed..."); strcpy(errorMessage, "HarmonicToTime failed...");
} }
static std::vector<double> *incrementList(PViewDataList *data, int numComp,
static void h2t(int nb1, std::vector<double> &list1, int numEdges)
int *nb2, std::vector<double> &list2,
int nbNod, int nbComp, int rIndex, int iIndex, int nSteps)
{ {
if(!nb1) return; switch(numEdges){
case 0:
int nb = list1.size() / nb1; if (numComp == 1){ data->NbSP++; return &data->SP; }
for(unsigned int i = 0; i < list1.size(); i += nb) { else if(numComp == 3){ data->NbVP++; return &data->VP; }
for(int j = 0; j < 3 * nbNod; j++) else if(numComp == 9){ data->NbTP++; return &data->TP; }
list2.push_back(list1[i + j]); break;
double *valr = &list1[i + 3 * nbNod + nbNod * nbComp * rIndex]; case 1:
double *vali = &list1[i + 3 * nbNod + nbNod * nbComp * iIndex]; if (numComp == 1){ data->NbSL++; return &data->SL; }
for(int t = 0; t < nSteps; t++) { else if(numComp == 3){ data->NbVL++; return &data->VL; }
double p = 2. * M_PI * t / nSteps; else if(numComp == 9){ data->NbTL++; return &data->TL; }
for(int j = 0; j < nbNod; j++) { break;
for(int k = 0; k < nbComp; k++) { case 3:
double val = valr[nbComp * j + k] * cos(p) - vali[nbComp * j + k] * sin(p); if (numComp == 1){ data->NbST++; return &data->ST; }
list2.push_back(val); else if(numComp == 3){ data->NbVT++; return &data->VT; }
} else if(numComp == 9){ data->NbTT++; return &data->TT; }
} break;
} case 4:
} if (numComp == 1){ data->NbSQ++; return &data->SQ; }
*nb2 = nb1; else if(numComp == 3){ data->NbVQ++; return &data->VQ; }
else if(numComp == 9){ data->NbTQ++; return &data->TQ; }
break;
case 6:
if (numComp == 1){ data->NbSS++; return &data->SS; }
else if(numComp == 3){ data->NbVS++; return &data->VS; }
else if(numComp == 9){ data->NbTS++; return &data->TS; }
break;
case 12:
if (numComp == 1){ data->NbSH++; return &data->SH; }
else if(numComp == 3){ data->NbVH++; return &data->VH; }
else if(numComp == 9){ data->NbTH++; return &data->TH; }
break;
case 9:
if (numComp == 1){ data->NbSI++; return &data->SI; }
else if(numComp == 3){ data->NbVI++; return &data->VI; }
else if(numComp == 9){ data->NbTI++; return &data->TI; }
break;
case 8:
if (numComp == 1){ data->NbSY++; return &data->SY; }
else if(numComp == 3){ data->NbVY++; return &data->VY; }
else if(numComp == 9){ data->NbTY++; return &data->TY; }
break;
}
return 0;
} }
PView *GMSH_HarmonicToTimePlugin::execute(PView * v) PView *GMSH_HarmonicToTimePlugin::execute(PView * v)
...@@ -99,9 +115,12 @@ PView *GMSH_HarmonicToTimePlugin::execute(PView * v) ...@@ -99,9 +115,12 @@ PView *GMSH_HarmonicToTimePlugin::execute(PView * v)
PView *v1 = getView(iView, v); PView *v1 = getView(iView, v);
if(!v1) return v; if(!v1) return v;
PViewData *data1 = v1->getData();
PViewDataList *data1 = getDataList(v1); if(data1->hasMultipleMeshes()){
if(!data1) return v; Msg::Error("HarmonicToTime plugin cannot be applied to multi-mesh views");
return v1;
}
if(rIndex < 0 || rIndex >= data1->getNumTimeSteps() || if(rIndex < 0 || rIndex >= data1->getNumTimeSteps() ||
iIndex < 0 || iIndex >= data1->getNumTimeSteps()){ iIndex < 0 || iIndex >= data1->getNumTimeSteps()){
...@@ -115,34 +134,39 @@ PView *GMSH_HarmonicToTimePlugin::execute(PView * v) ...@@ -115,34 +134,39 @@ PView *GMSH_HarmonicToTimePlugin::execute(PView * v)
} }
PView *v2 = new PView(); PView *v2 = new PView();
PViewDataList *data2 = getDataList(v2); PViewDataList *data2 = getDataList(v2);
if(!data2) return v;
for(int ent = 0; ent < data1->getNumEntities(0); ent++){
h2t(data1->NbSP, data1->SP, &data2->NbSP, data2->SP, 1, 1, rIndex, iIndex, nSteps); for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){
h2t(data1->NbVP, data1->VP, &data2->NbVP, data2->VP, 1, 3, rIndex, iIndex, nSteps); if(data1->skipElement(0, ent, ele)) continue;
h2t(data1->NbTP, data1->TP, &data2->NbTP, data2->TP, 1, 9, rIndex, iIndex, nSteps); int numNodes = data1->getNumNodes(0, ent, ele);
h2t(data1->NbSL, data1->SL, &data2->NbSL, data2->SL, 2, 1, rIndex, iIndex, nSteps); int numEdges = data1->getNumEdges(0, ent, ele);
h2t(data1->NbVL, data1->VL, &data2->NbVL, data2->VL, 2, 3, rIndex, iIndex, nSteps); int numComp = data1->getNumComponents(0, ent, ele);
h2t(data1->NbTL, data1->TL, &data2->NbTL, data2->TL, 2, 9, rIndex, iIndex, nSteps); std::vector<double> *out = incrementList(data2, numComp, numEdges);
h2t(data1->NbST, data1->ST, &data2->NbST, data2->ST, 3, 1, rIndex, iIndex, nSteps); std::vector<double> x(numNodes), y(numNodes), z(numNodes);
h2t(data1->NbVT, data1->VT, &data2->NbVT, data2->VT, 3, 3, rIndex, iIndex, nSteps); std::vector<double> vr(numNodes * numComp), vi(numNodes * numComp);
h2t(data1->NbTT, data1->TT, &data2->NbTT, data2->TT, 3, 9, rIndex, iIndex, nSteps); for(int nod = 0; nod < numNodes; nod++){
h2t(data1->NbSQ, data1->SQ, &data2->NbSQ, data2->SQ, 4, 1, rIndex, iIndex, nSteps); data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]);
h2t(data1->NbVQ, data1->VQ, &data2->NbVQ, data2->VQ, 4, 3, rIndex, iIndex, nSteps); for(int comp = 0; comp < numComp; comp++){
h2t(data1->NbTQ, data1->TQ, &data2->NbTQ, data2->TQ, 4, 9, rIndex, iIndex, nSteps); data1->getValue(rIndex, ent, ele, nod, comp, vr[numComp * nod + comp]);
h2t(data1->NbSS, data1->SS, &data2->NbSS, data2->SS, 4, 1, rIndex, iIndex, nSteps); data1->getValue(iIndex, ent, ele, nod, comp, vi[numComp * nod + comp]);
h2t(data1->NbVS, data1->VS, &data2->NbVS, data2->VS, 4, 3, rIndex, iIndex, nSteps); }
h2t(data1->NbTS, data1->TS, &data2->NbTS, data2->TS, 4, 9, rIndex, iIndex, nSteps); }
h2t(data1->NbSH, data1->SH, &data2->NbSH, data2->SH, 8, 1, rIndex, iIndex, nSteps); for(int nod = 0; nod < numNodes; nod++) out->push_back(x[nod]);
h2t(data1->NbVH, data1->VH, &data2->NbVH, data2->VH, 8, 3, rIndex, iIndex, nSteps); for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
h2t(data1->NbTH, data1->TH, &data2->NbTH, data2->TH, 8, 9, rIndex, iIndex, nSteps); for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
h2t(data1->NbSI, data1->SI, &data2->NbSI, data2->SI, 6, 1, rIndex, iIndex, nSteps); for(int t = 0; t < nSteps; t++) {
h2t(data1->NbVI, data1->VI, &data2->NbVI, data2->VI, 6, 3, rIndex, iIndex, nSteps); double p = 2. * M_PI * t / nSteps;
h2t(data1->NbTI, data1->TI, &data2->NbTI, data2->TI, 6, 9, rIndex, iIndex, nSteps); for(int nod = 0; nod < numNodes; nod++) {
h2t(data1->NbSY, data1->SY, &data2->NbSY, data2->SY, 5, 1, rIndex, iIndex, nSteps); for(int comp = 0; comp < numComp; comp++) {
h2t(data1->NbVY, data1->VY, &data2->NbVY, data2->VY, 5, 3, rIndex, iIndex, nSteps); double val = vr[numComp * nod + comp] * cos(p) -
h2t(data1->NbTY, data1->TY, &data2->NbTY, data2->TY, 5, 9, rIndex, iIndex, nSteps); vi[numComp * nod + comp] * sin(p);
out->push_back(val);
}
}
}
}
}
for(int i = 0; i < nSteps; i++){ for(int i = 0; i < nSteps; i++){
double p = 2. * M_PI * i / (double)nSteps; double p = 2. * M_PI * i / (double)nSteps;
......
...@@ -16,7 +16,7 @@ extern "C" ...@@ -16,7 +16,7 @@ extern "C"
class GMSH_HarmonicToTimePlugin : public GMSH_PostPlugin class GMSH_HarmonicToTimePlugin : public GMSH_PostPlugin
{ {
public: public:
GMSH_HarmonicToTimePlugin(); GMSH_HarmonicToTimePlugin(){}
void getName(char *name) const; void getName(char *name) const;
void getInfos(char *author, char *copyright, char *help_text) const; void getInfos(char *author, char *copyright, char *help_text) const;
void catchErrorMessage(char *errorMessage) const; void catchErrorMessage(char *errorMessage) const;
......
...@@ -19,17 +19,14 @@ PView *GMSH_PostPlugin::getView(int index, PView *view) ...@@ -19,17 +19,14 @@ PView *GMSH_PostPlugin::getView(int index, PView *view)
} }
} }
PViewDataList *GMSH_PostPlugin::getDataList(PView *view) PViewDataList *GMSH_PostPlugin::getDataList(PView *view, bool error)
{ {
if(!view) return 0; if(!view) return 0;
PViewDataList *data = dynamic_cast<PViewDataList*>(view->getData()); PViewDataList *data = dynamic_cast<PViewDataList*>(view->getData());
if(data){ if(data)
return data; return data;
} else if(error)
else{
// FIXME: do automatic data conversion here
Msg::Error("This plugin can only be run on list-based views (`.pos' files)"); Msg::Error("This plugin can only be run on list-based views (`.pos' files)");
return 0; return 0;
} }
}
...@@ -81,7 +81,7 @@ class GMSH_PostPlugin : public GMSH_Plugin ...@@ -81,7 +81,7 @@ class GMSH_PostPlugin : public GMSH_Plugin
// get the view given an index and a default value // get the view given an index and a default value
virtual PView *getView(int index, PView *view); virtual PView *getView(int index, PView *view);
// get the data in list format // get the data in list format
virtual PViewDataList *getDataList(PView *view); virtual PViewDataList *getDataList(PView *view, bool error=1);
virtual void assignSpecificVisibility() const {} virtual void assignSpecificVisibility() const {}
virtual bool geometricalFilter(gmshMatrix<double> *) const { return true; } virtual bool geometricalFilter(gmshMatrix<double> *) const { return true; }
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment