static void highordertools_runp_cb(Fl_Widget *w, void *data) { highOrderToolsWindow *o = FlGui::instance()->highordertools; int order = (int)o->value[0]->value(); bool linear = !(bool)o->butt[2]->value(); bool incomplete = (bool)o->butt[0]->value(); bool onlyVisible = (bool)o->butt[1]->value(); if (order == 1) SetOrder1(GModel::current()); else SetOrderN(GModel::current(), order, linear, incomplete, onlyVisible); /* distanceFromMeshToGeometry_t dist; computeDistanceFromMeshToGeometry (GModel::current(), dist); for (std::map<GEntity*, double> ::iterator it = dist.d2.begin(); it !=dist.d2.end();++it){ printf("GEntity %d of dim %d : dist %12.5E\n", it->first->tag(), it->first->dim(), it->second); } */ CTX::instance()->mesh.changed |= (ENT_LINE | ENT_SURFACE | ENT_VOLUME); drawContext::global()->draw(); }
void RefineMesh(GModel *m, bool linear, bool splitIntoQuads, bool splitIntoHexas) { Msg::StatusBar(true, "Refining mesh..."); double t1 = Cpu(); // Create 2nd order mesh (using "2nd order complete" elements) to // generate vertex positions SetOrderN(m, 2, linear, false); // only used when splitting tets into hexes faceContainer faceVertices; // Subdivide the second order elements to create the refined linear // mesh for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it) Subdivide(*it); for(GModel::fiter it = m->firstFace(); it != m->lastFace(); ++it){ Subdivide(*it, splitIntoQuads, splitIntoHexas, faceVertices); if (splitIntoQuads){ recombineIntoQuads(*it,true,true); } } for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it) Subdivide(*it, splitIntoHexas, faceVertices); double t2 = Cpu(); Msg::StatusBar(true, "Done refining mesh (%g s)", t2 - t1); }
highOrderTools::highOrderTools (GModel *gm, GModel *mesh, int order) : _gm(gm), _tag(111), _dim(2) { GeomMeshMatcher::instance()->forceTomatch(gm,mesh,1.e-5); GeomMeshMatcher::instance()->destroy(); SetOrderN(gm, order, false, false); computeStraightSidedPositions(); }