// gen_LevelSet - An automatic generator of meshes from level-sets
// Copyright (C) 2012-2026 Eric Bechet, Frederic Duboeuf
//
// See the LICENSE file for license information.
// Please report all bugs and problems to <bechet@cadxfem.org> or <duboeuf@outlook.com>.


#ifndef _GEN_LEVELSET_H_
#define _GEN_LEVELSET_H_

#include "levelSetDomain.h"
#include "mesh_cutter.h"

class genLevelSet
{
protected :
  GModel* model;
  GModel* cutModel;
  MeshCutter* meshCutter;
public :
  genLevelSet() : model(0), cutModel(0), meshCutter(0) {}
  virtual ~genLevelSet() {}
  virtual GModel* process(GModel* model, std::vector<LevelSetDomain*> &LSDomains, const std::string &fileName="");
  virtual GModel* getCutModel() {return cutModel;}
  virtual void writeCutModel(const std::string &fileName);
protected :
  virtual std::vector<LevelSetDomain*> selectLSforCutting(std::vector<LevelSetDomain*> &LSDomains);
  virtual GModel* cutmesh(GModel* model, std::vector<LevelSetDomain*> &LSforCutting);
  virtual void addLevelSet(LevelSetDomain* LS);
};

#endif //_GEN_LEVELSET_H_