Path: blob/devel/ElmerGUI/netgen/libsrc/stlgeom/stlline.hpp
3206 views
#ifndef FILE_STLLINE1#define FILE_STLLINE234/**************************************************************************/5/* File: stlline.hh */6/* Author: Joachim Schoeberl */7/* Author2: Johannes Gerstmayr */8/* Date: 20. Nov. 99 */9/**************************************************************************/1011class STLGeometry;12class STLTopology;1314class STLEdge15{16public:17int pts[2];18int trigs[2]; //left and right trig1920STLEdge (const int * apts) {pts[0] = apts[0]; pts[1] = apts[1];}21STLEdge (int v1, int v2) {pts[0] = v1; pts[1] = v2;}22STLEdge () {pts[0]=0;pts[1]=0;}23int PNum(int i) const {return pts[(i-1)];}2425int LeftTrig() const {return trigs[0];}26int RightTrig() const {return trigs[1];}27void SetLeftTrig(int i) {trigs[0] = i;}28void SetRightTrig(int i) {trigs[1] = i;}29};3031enum STL_ED_STATUS { ED_EXCLUDED, ED_CONFIRMED, ED_CANDIDATE, ED_UNDEFINED };323334/*3536class STLEdgeData37{38public:39// float angle;40int p1;41int p2;42int lt; //left trig43int rt; //right trig44// int status;4546STLTopology * top; // pointer to stl topology47int topedgenr; // number of corresponding topology edge4849STLEdgeData() {};50STLEdgeData(float anglei, int p1i, int p2i, int lti, int rti)51{52// angle = anglei;53p1 = p1i; p2 = p2i;54lt = lti; rt = rti;55}5657int GetStatus () const;58void SetStatus (int stat);5960void SetExcluded() { SetStatus (ED_EXCLUDED); }61void SetConfirmed() { SetStatus (ED_CONFIRMED); }62void SetCandidate() { SetStatus (ED_CANDIDATE); }63void SetUndefined() { SetStatus (ED_UNDEFINED); }6465int Excluded() const {return GetStatus() == ED_EXCLUDED;}66int Confirmed() const {return GetStatus() == ED_CONFIRMED;}67int Candidate() const {return GetStatus() == ED_CANDIDATE;}68int Undefined() const {return GetStatus() == ED_UNDEFINED;}69int ConfCand() const {return GetStatus() == ED_CONFIRMED || GetStatus() == ED_CANDIDATE;}7071float CosAngle() const;7273void Write(ofstream& of) const;74void Read(ifstream& ifs);75};7677class STLEdgeDataList78{79private:80INDEX_2_HASHTABLE<int> hashtab;81ARRAY<STLEdgeData> edgedata;82TABLE<int> edgesperpoint;8384public:8586STLEdgeDataList():edgedata(),hashtab(1),edgesperpoint() {};87const STLEdgeDataList& operator=(const STLEdgeDataList& edl);88void SetSize(int size)89{90edgedata.SetSize(size);91hashtab.SetSize(size);92edgesperpoint.SetSize(size);93}94void Clear() {SetSize(0);}95int Size() const {return edgedata.Size();}96const STLEdgeData& Get(int i) const {return edgedata.Get(i);}97STLEdgeData& Elem(int i) {return edgedata.Elem(i);}98void Add(const STLEdgeData& ed, int i);99100int GetNEPP(int pn) const101{102return edgesperpoint.EntrySize(pn);103};104int GetEdgePP(int pn, int vi) const105{106return edgesperpoint.Get(pn,vi);107};108void AddEdgePP(int pn, int vn) {edgesperpoint.Add(pn,vn);};109110void ResetAll();111void ResetCandidates();112void ConfirmCandidates();113int GetEdgeNum(int np1, int np2) const;114115int GetNConfEdges() const;116117void Write(ofstream& of) const;118void Read(ifstream& ifs);119120void BuildLineWithEdge(int ep1, int ep2, ARRAY<twoint>& line);121122int GetNEPPStat(int p, int status) const;123int GetNConfCandEPP(int p) const;124};125*/126127128129130131132133134135136137138139140141142//a line defined by several points (polyline)143class STLLine144{145private:146const STLGeometry * geometry;147ARRAY<int> pts;148ARRAY<int> lefttrigs;149ARRAY<int> righttrigs;150ARRAY<double> dists;151int split;152153public:154STLLine(const STLGeometry * ageometry);155void AddPoint(int i) {pts.Append(i);}156int PNum(int i) const {return pts.Get(i);}157int NP() const {return pts.Size();}158int GetNS() const;159void GetSeg(int nr, int& p1, int& p2) const;160double GetSegLen(const ARRAY<Point<3> >& ap, int nr) const;161int GetLeftTrig(int nr) const;162int GetRightTrig(int nr) const;163double GetDist(int nr) const { return dists.Get(nr);};164void GetBoundingBox (const ARRAY<Point<3> > & ap, Box<3> & box) const;165166void AddLeftTrig(int nr) {lefttrigs.Append(nr);}167void AddRightTrig(int nr) {righttrigs.Append(nr);}168void AddDist (double dist) {dists.Append(dist); }169int StartP() const {return pts.Get(1);}170int EndP() const {return pts.Get(pts.Size());}171172double GetLength(const ARRAY<Point<3> >& ap) const;173174//suche punkt in entfernung (in linienkoordinaten) dist175//in index ist letzter punkt VOR dist (d.h. max pts.Size()-1)176Point<3> GetPointInDist(const ARRAY<Point<3> >& ap, double dist, int& index) const;177178//return a meshed polyline179STLLine* Mesh(const ARRAY<Point<3> >& ap,180ARRAY<Point3d>& mp, double ghi,181class Mesh& mesh) const;182183void DoSplit() {split = 1;}184int ShouldSplit() const {return split;}185};186187#endif188189190