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

tooltips for mesh inspect

parent 81fea7cb
No related branches found
No related tags found
No related merge requests found
......@@ -1790,6 +1790,63 @@ static void mesh_delete_parts_cb(Fl_Widget *w, void *data)
Msg::StatusBar(3, false, "");
}
static std::vector<std::string> getInfoStrings(MElement *ele)
{
std::vector<std::string> info;
{
std::ostringstream sstream;
sstream << "Element " << ele->getNum() << ":";
info.push_back(sstream.str());
}
{
std::ostringstream sstream;
const char *name;
MElement::getInfoMSH(ele->getTypeForMSH(), &name);
sstream << " " << name
<< " (MSH type " << ele->getTypeForMSH()
<< ", dimension "<< ele->getDim()
<< ", order "<< ele->getPolynomialOrder()
<< ", partition " << ele->getPartition()
<< ")";
info.push_back(sstream.str());
}
{
std::ostringstream sstream;
sstream << " Vertices:";
for(int i = 0; i < ele->getNumVertices(); i++)
sstream << " " << ele->getVertex(i)->getNum();
info.push_back(sstream.str());
}
{
std::ostringstream sstream;
SPoint3 pt = ele->barycenter();
sstream << " Barycenter: (" << pt[0] << ", " << pt[1] << ", " << pt[2] << ")";
info.push_back(sstream.str());
}
{
std::ostringstream sstream;
sstream << " Quality: "
<< "rho = " << ele->rhoShapeMeasure() << " "
<< "gamma = " << ele->gammaShapeMeasure() << " "
<< "eta = " << ele->etaShapeMeasure();
info.push_back(sstream.str());
}
{
std::ostringstream sstream;
double jmin, jmax;
ele->scaledJacRange(jmin, jmax);
sstream << " Scaled Jacobian range: " << jmin << " " << jmax;
info.push_back(sstream.str());
}
{
std::ostringstream sstream;
sstream << " Inner / outer radius: "
<< ele->getInnerRadius() << " / " << ele->getOuterRadius();
info.push_back(sstream.str());
}
return info;
}
static void mesh_inspect_cb(Fl_Widget *w, void *data)
{
CTX::instance()->pickElements = 1;
......@@ -1804,32 +1861,18 @@ static void mesh_inspect_cb(Fl_Widget *w, void *data)
MElement *ele = FlGui::instance()->selectedElements[0];
GModel::current()->setSelection(0);
ele->setVisibility(2);
Msg::Direct("Element %d:", ele->getNum());
int type = ele->getTypeForMSH();
const char *name;
MElement::getInfoMSH(type, &name);
Msg::Direct(" Type: %d ('%s')", type, name);
Msg::Direct(" Dimension: %d", ele->getDim());
Msg::Direct(" Order: %d", ele->getPolynomialOrder());
Msg::Direct(" Partition: %d", ele->getPartition());
char tmp1[32], tmp2[512];
sprintf(tmp2, " Vertices:");
for(int i = 0; i < ele->getNumVertices(); i++){
sprintf(tmp1, " %d", ele->getVertex(i)->getNum());
strcat(tmp2, tmp1);
}
Msg::Direct(tmp2);
SPoint3 pt = ele->barycenter();
Msg::Direct(" Barycenter: (%g,%g,%g)", pt[0], pt[1], pt[2]);
Msg::Direct(" Rho: %g", ele->rhoShapeMeasure());
Msg::Direct(" Gamma: %g", ele->gammaShapeMeasure());
Msg::Direct(" Eta: %g", ele->etaShapeMeasure());
double jmin, jmax; ele->scaledJacRange(jmin, jmax);
Msg::Direct(" Scaled Jacobian Range: %g %g", jmin, jmax);
Msg::Direct(" Inner / outer radius: %g / %g",
ele->getInnerRadius(), ele->getOuterRadius());
CTX::instance()->mesh.changed = ENT_ALL;
drawContext::global()->draw();
std::vector<std::string> info = getInfoStrings(ele);
for(unsigned int i = 0; i < info.size(); i++)
Msg::Direct("%s", info[i].c_str());
if(CTX::instance()->tooltips){
std::string str;
for(unsigned int i = 0; i < info.size(); i++)
str += info[i] + "\n";
FlGui::instance()->getCurrentOpenglWindow()->drawTooltip(str);
}
else
FlGui::instance()->showMessages();
}
}
......
......@@ -582,22 +582,13 @@ int openglWindow::handle(int event)
else if(faces.size()) ge = faces[0];
else if(regions.size()) ge = regions[0];
MElement *me = elements.size() ? elements[0] : 0;
static char text[1024] = "";
sprintf(text, "%s %s", ge ? ge->getInfoString().c_str() : "",
me ? me->getInfoString().c_str() : "");
if(CTX::instance()->tooltips){
Fl_Tooltip::exit(0);
double d1 = Fl_Tooltip::delay();
double d2 = Fl_Tooltip::hoverdelay();
Fl_Tooltip::delay(0);
Fl_Tooltip::hoverdelay(0);
if(strlen(text) > 3)
Fl_Tooltip::enter_area(this, _curr.win[0], _curr.win[1], 100, 50, text);
Fl_Tooltip::delay(d1);
Fl_Tooltip::hoverdelay(d2);
}
std::string text;
if(ge) text += ge->getInfoString();
if(me) text += me->getInfoString();
if(CTX::instance()->tooltips)
drawTooltip(text);
else
Msg::StatusBar(2, false, text);
Msg::StatusBar(2, false, text.c_str());
}
}
_prev.set(_ctx, Fl::event_x(), Fl::event_y());
......@@ -695,3 +686,20 @@ char openglWindow::selectEntity(int type,
}
}
}
void openglWindow::drawTooltip(const std::string &text)
{
static char str[1024];
strncpy(str, text.c_str(), sizeof(str));
Fl_Tooltip::exit(0);
bool enabled = Fl_Tooltip::enabled();
if(!enabled) Fl_Tooltip::enable();
double d1 = Fl_Tooltip::delay();
double d2 = Fl_Tooltip::hoverdelay();
Fl_Tooltip::delay(0);
Fl_Tooltip::hoverdelay(0);
Fl_Tooltip::enter_area(this, _curr.win[0], _curr.win[1], 100, 50, str);
Fl_Tooltip::delay(d1);
Fl_Tooltip::hoverdelay(d2);
if(!enabled) Fl_Tooltip::disable();
}
......@@ -50,6 +50,7 @@ class openglWindow : public Fl_Gl_Window {
std::vector<MElement*> &elements);
static openglWindow *getLastHandled(){ return _lastHandled; }
static void setLastHandled(openglWindow *w){ _lastHandled = w; }
void drawTooltip(const std::string &text);
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment