1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
struct Node
{
double x;
double y;
double dir;
double corner;
double state;
}
class Curve
{
public:
Curve();
void addNode(idouble x, double y);
void insertNode(int index, double x, double y);
void deleteNode(int index);
void moveNode(int index, double x, double y);
void setCorner(int index, double corner);
void setIncDir(int index, double dir);
void setOutDir(int index, double dir);
void setState(int index, int state);
void setIncState(int index, int state);
void setOutState(int index, int state);
void setClosed(int index, bool closed);
//Transformations
void translate(double x, double y);
void rotate(double angle, double pivotX, double pivotY);
void enlarge(double scaleFactor, double pivotX, double pivotY);
//Optimization
void S_splineFeasible();
void S_splineFeasibleSmart();
void optimize(bool flag_coarse, bool full_refresh);
int S_Curve(int index, double *rx, double *ry);
int save(fstream &file);
int load(fstream &file);
//Getters
int getCount() {return count;};
bool isClosed() {return closed;};
double* getNode(int index) {return nodes[index];};
private:
void pointChanged(int index);
Node* nodes;
int count, coarseRes;
bool closed;
bool *flag_feasible, *flag_optimal;
};
|