vcglib/apps/nexus/nexusmt.h

56 lines
1.0 KiB
C
Raw Normal View History

2004-09-17 17:25:59 +02:00
#ifndef NXS_NEXUS_MT_H
#define NXS_NEXUS_MT_H
#include "nexus.h"
2004-09-28 12:26:35 +02:00
#include <vector>
#include <queue>
2004-09-17 17:25:59 +02:00
2004-09-28 12:26:35 +02:00
#include <wrap/gui/frustum.h>
2004-09-17 17:25:59 +02:00
2004-09-28 12:26:35 +02:00
namespace nxs {
2004-09-17 17:25:59 +02:00
2004-09-28 12:26:35 +02:00
class Frag:public std::vector<unsigned int> {};
struct Node {
std::vector<Node *> in;
std::vector<Node *> out;
std::vector<Frag> frags;
float error;
bool visited;
};
class Policy {
public:
virtual bool Expand(unsigned int patch, Nexus::Entry &entry) = 0;
virtual void Visit(Node *node, std::queue<Node *> &qnode);
};
2004-09-17 17:25:59 +02:00
2004-09-28 12:26:35 +02:00
class FrustumPolicy: public Policy {
public:
vcg::Frustumf frustum;
float error;
void GetView() { frustum.GetView(); }
bool Expand(unsigned int patch, Nexus::Entry &entry);
};
class NexusMt: public Nexus {
private:
2004-09-17 17:25:59 +02:00
std::vector<Node> nodes;
2004-09-28 12:26:35 +02:00
2004-09-17 17:25:59 +02:00
public:
void LoadHistory();
void ClearHistory();
void ExtractFixed(std::vector<unsigned int> &selected, float error);
2004-09-28 12:26:35 +02:00
void Extract(std::vector<unsigned int> &selected, Policy *policy);
2004-09-17 17:25:59 +02:00
2004-09-28 12:26:35 +02:00
protected:
void Select(std::vector<unsigned int> &selected);
2004-09-17 17:25:59 +02:00
};
}
2004-09-28 12:26:35 +02:00
2004-09-17 17:25:59 +02:00
#endif