bool GMSH_CutPlanePlugin::geometricalFilter(fullMatrix<double> *node_positions) const { const double l0 = levelset((*node_positions)(0, 0), (*node_positions)(0, 1), (*node_positions)(0, 2), 1); for (int i = 1; i < node_positions->size1(); i++) if (levelset((*node_positions)(i, 0), (*node_positions)(i, 1), (*node_positions)(i, 2), 1) * l0 < 0) return true; return false; }
LevelsetScreen::LevelsetScreen(const std::string& basedir, const std::string& level_filename, Savegame& savegame) : m_basedir(basedir), m_level_filename(level_filename), m_savegame(savegame), m_level_started(false), m_solved(false) { Levelset levelset(basedir); for (int i = 0; i < levelset.get_num_levels(); ++i) { std::string lev = levelset.get_level_filename(i); m_savegame.set_levelset_state(m_basedir, lev, false); } LevelsetState state = m_savegame.get_levelset_state(basedir); LevelState level_state = state.get_level_state(level_filename); m_solved = level_state.solved; }
inline double& levelset_workspace(int ii,int jj){ return levelset()->workspace(ii,jj);}
int main(int argc, char** argv) { std::vector<Pathname> files; enum { kTitle = (1<<0), kDescription = (1<<1), kLevels = (1<<2), kFilename = (1<<3) }; unsigned int mode = 0; CommandLine argp; argp.add_usage("[OPTIONS]... [FILE]..."); argp.add_option('h', "help", "", "Displays this help"); argp.add_option('t', "title", "", "Display title of the levelset"); argp.add_option('d', "description", "", "Display description of the levelset"); argp.add_option('l', "levels", "", "Display levels in this levelset"); argp.add_option('f', "filename", "", "Display filename of the level"); argp.parse_args(argc, argv); argp.set_help_indent(20); while (argp.next()) { switch (argp.get_key()) { case 'h': argp.print_help(); exit(EXIT_SUCCESS); break; case 't': mode |= kTitle; break; case 'd': mode |= kDescription; break; case 'l': mode |= kLevels; break; case 'f': mode |= kFilename; break; case CommandLine::REST_ARG: files.push_back(Pathname(argp.get_argument(), Pathname::SYSTEM_PATH)); break; } } if (files.empty()) { argp.print_help(); exit(EXIT_SUCCESS); } else { // FIXME: a little ugly that levelset loads sprites and savegames g_path_manager.set_path("data/"); SavegameManager savegame_manager("savegames/savegames.scm"); StatManager stat_manager("savegames/variables.scm"); Resource::init(); globals::framebuffer_type = NULL_FRAMEBUFFER; Display::set_video_mode(Size(), false); for(auto it = files.begin(); it != files.end(); ++it) { const Pathname& path = *it; Levelset levelset(path); if (mode == 0) { std::cout << "filename : " << path << std::endl; std::cout << "title : " << levelset.get_title() << std::endl; std::cout << "description : " << levelset.get_description() << std::endl; std::cout << "levels : " << std::endl; for(int i = 0; i < levelset.get_level_count(); ++i) { std::cout << " " << levelset.get_level(i)->resname << std::endl; } std::cout << std::endl; } else { if (mode & kFilename) { std::cout << path << ": "; } if (mode & kTitle) { std::cout << levelset.get_title() << std::endl; } if (mode & kDescription) { std::cout << levelset.get_description() << std::endl; } if (mode & kLevels) { for(int i = 0; i < levelset.get_level_count(); ++i) { std::cout << " " << levelset.get_level(i)->resname << std::endl; } std::cout << std::endl; } } } Resource::deinit(); } return 0; }
PView *GMSH_LevelsetPlugin::execute(PView *v) { // for adapted views we can only run the plugin on one step at a time if(v->getData()->getAdaptiveData()){ PViewOptions *opt = v->getOptions(); v->getData()->getAdaptiveData()->changeResolution (opt->timeStep, _recurLevel, _targetError, this); v->setChanged(true); } PViewData *vdata = getPossiblyAdaptiveData(v), *wdata; if(_valueView < 0) { wdata = vdata; } else if(_valueView > (int)PView::list.size() - 1){ Msg::Error("View[%d] does not exist: reverting to View[%d]", _valueView, v->getIndex()); wdata = vdata; } else{ wdata = getPossiblyAdaptiveData(PView::list[_valueView]); } // sanity checks if(vdata->getNumEntities() != wdata->getNumEntities() || vdata->getNumElements() != wdata->getNumElements()){ Msg::Error("Incompatible views"); return v; } if(_valueTimeStep >= wdata->getNumTimeSteps()) { Msg::Error("Wrong time step %d in view", _valueTimeStep); return v; } // Force creation of one view per time step if we have multi meshes if(vdata->hasMultipleMeshes()) _valueIndependent = 0; double x[8], y[8], z[8], levels[8]; double scalarValues[8] = {0., 0., 0., 0., 0., 0., 0., 0.}; if(_valueIndependent) { // create a single output view containing the (possibly // multi-step) levelset int firstNonEmptyStep = vdata->getFirstNonEmptyTimeStep(); PViewDataList *out = getDataList(new PView()); for(int ent = 0; ent < vdata->getNumEntities(firstNonEmptyStep); ent++){ for(int ele = 0; ele < vdata->getNumElements(firstNonEmptyStep, ent); ele++){ if(vdata->skipElement(firstNonEmptyStep, ent, ele)) continue; for(int nod = 0; nod < vdata->getNumNodes(firstNonEmptyStep, ent, ele); nod++){ vdata->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]); levels[nod] = levelset(x[nod], y[nod], z[nod], 0.); } _cutAndAddElements(vdata, wdata, ent, ele, -1, _valueTimeStep, x, y, z, levels, scalarValues, out); } } out->setName(vdata->getName() + "_Levelset"); out->setFileName(vdata->getFileName() + "_Levelset.pos"); out->finalize(); } else{ // create one view per timestep for(int step = 0; step < vdata->getNumTimeSteps(); step++){ if(!vdata->hasTimeStep(step)) continue; PViewDataList *out = getDataList(new PView()); for(int ent = 0; ent < vdata->getNumEntities(step); ent++){ for(int ele = 0; ele < vdata->getNumElements(step, ent); ele++){ if(vdata->skipElement(step, ent, ele)) continue; for(int nod = 0; nod < vdata->getNumNodes(step, ent, ele); nod++){ vdata->getNode(step, ent, ele, nod, x[nod], y[nod], z[nod]); vdata->getScalarValue(step, ent, ele, nod, scalarValues[nod]); levels[nod] = levelset(x[nod], y[nod], z[nod], scalarValues[nod]); } int wstep = (_valueTimeStep < 0) ? step : _valueTimeStep; _cutAndAddElements(vdata, wdata, ent, ele, step, wstep, x, y, z, levels, scalarValues, out); } } char tmp[246]; sprintf(tmp, "_Levelset_%d", step); out->setName(vdata->getName() + tmp); out->setFileName(vdata->getFileName() + tmp + ".pos"); out->finalize(); } } return 0; }
void dataconfigs::loadWorldLevels() { unsigned int i; obj_w_level slevel; unsigned long levels_total=0; QString level_ini = config_dir + "wld_levels.ini"; if(!QFile::exists(level_ini)) { addError(QString("ERROR LOADING wld_levels.ini: file does not exist"), QtCriticalMsg); return; } QSettings levelset(level_ini, QSettings::IniFormat); levelset.setIniCodec("UTF-8"); main_wlevels.clear(); //Clear old index_wlvl.clear(); levelset.beginGroup("levels-main"); levels_total = levelset.value("total", "0").toInt(); marker_wlvl.path = levelset.value("path", "0").toInt(); marker_wlvl.bigpath = levelset.value("bigpath", "0").toInt(); total_data +=levels_total; levelset.endGroup(); emit progressMax(levels_total); emit progressTitle(QApplication::tr("Loading Level images...")); ConfStatus::total_wlvl = levels_total; //creation of empty indexes of arrayElements wLevelIndexes levelIndex; for(i=0;i<=levels_total; i++) { levelIndex.i=i; levelIndex.type=0; levelIndex.ai=0; index_wlvl.push_back(levelIndex); } if(ConfStatus::total_wlvl==0) { addError(QString("ERROR LOADING wld_levels.ini: number of items not define, or empty config"), QtCriticalMsg); return; } for(i=0; i<=levels_total; i++) { emit progressValue(i); QString errStr; levelset.beginGroup( QString("level-"+QString::number(i)) ); slevel.group = levelset.value("group", "_NoGroup").toString(); slevel.category = levelset.value("category", "_Other").toString(); slevel.image_n = levelset.value("image", "").toString(); /***************Load image*******************/ GraphicsHelps::loadMaskedImage(wlvlPath, slevel.image_n, slevel.mask_n, slevel.image, slevel.mask, errStr); if(!errStr.isEmpty()) { addError(QString("LEVEL-%1 %2").arg(i).arg(errStr)); goto skipLevel; } /***************Load image*end***************/ slevel.grid = levelset.value("grid", default_grid).toInt(); slevel.animated = (levelset.value("animated", "0").toString()=="1"); slevel.frames = levelset.value("frames", "1").toInt(); slevel.framespeed = levelset.value("frame-speed", "175").toInt(); slevel.frame_h = (slevel.animated? qRound(qreal(slevel.image.height())/ slevel.frames) : slevel.image.height()); slevel.display_frame = levelset.value("display-frame", "0").toInt(); slevel.id = i; main_wlevels.push_back(slevel); /************Add to Index***************/ if(i <= (unsigned int)index_wlvl.size()) { index_wlvl[i].i = i; } /************Add to Index***************/ skipLevel: levelset.endGroup(); if( levelset.status() != QSettings::NoError ) { addError(QString("ERROR LOADING wld_levels.ini N:%1 (level-%2)").arg(levelset.status()).arg(i), QtCriticalMsg); } } if((unsigned int)main_wlevels.size()<levels_total) { addError(QString("Not all Level images loaded! Total: %1, Loaded: %2").arg(levels_total).arg(main_wlevels.size())); } }