|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "MLPlNode.h"
|
|
|
|
|
|
#include "MLPoint.h"
|
|
|
|
|
|
#include "MLRect.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define MLDPline MLPline
|
|
|
|
|
|
|
|
|
|
|
|
class MLPointAry;
|
|
|
|
|
|
class MLRect;
|
|
|
|
|
|
class MLMICROSTRUCTURE_EXPORT MLPline
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
MLPline(void);
|
|
|
|
|
|
MLPline(const QPolygonF& polygonf);
|
|
|
|
|
|
MLPline(const QVector<MLPlNode>& nodeAry);
|
|
|
|
|
|
~MLPline(void);
|
|
|
|
|
|
|
|
|
|
|
|
// Ԫ<><D4AA><EFBFBD><EFBFBD>
|
|
|
|
|
|
__declspec(property(get=getName, put = setName)) char* name;
|
|
|
|
|
|
__declspec(property(get=getNodeAry, put = setNodeAry)) QVector<MLPlNode> nodeAry;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
const char* getName() const;
|
|
|
|
|
|
void setName(const char* name);
|
|
|
|
|
|
|
|
|
|
|
|
QVector<MLPlNode>& getNodeAry();
|
|
|
|
|
|
void setNodeAry(const QVector<MLPlNode>& nodeAry);
|
|
|
|
|
|
void setNodeAry(const QPolygonF& polygon);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int getCount() const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
|
|
|
|
|
|
bool isEmpty();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD>Ϊ<EFBFBD>պ<EFBFBD><D5BA><EFBFBD>
|
|
|
|
|
|
bool isClose(double dis = 20.0);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void addHeadPt(const MLPlNode& node);
|
|
|
|
|
|
void addHeadPt(const MLPoint& point);
|
|
|
|
|
|
void addHeadPt(double x, double y, double z=0);
|
|
|
|
|
|
void addHeadPt(const MLPline& pline);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>(ԭ<><D4AD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>)
|
|
|
|
|
|
void addHeadPtRev(const MLPline& pline);
|
|
|
|
|
|
void addHeadPtRev(const MLPointAry& pointAry);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void addTailPt(const MLPlNode& node);
|
|
|
|
|
|
void addTailPt(const MLPoint& point);
|
|
|
|
|
|
void addTailPt(double x,double y,double z=0);
|
|
|
|
|
|
void addTailPt(const MLPline& pline);
|
|
|
|
|
|
void addTailPt(const QPoint& point);
|
|
|
|
|
|
void addTailPt(const QPointF& point);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>(ԭ<><D4AD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>)
|
|
|
|
|
|
void addTailPtRev(const MLPline& pline);
|
|
|
|
|
|
void addTailPtRev(const MLPointAry& pointAry);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>е<EFBFBD>ͷ<EFBFBD><CDB7>
|
|
|
|
|
|
const MLPlNode& getHeadPt() const;
|
|
|
|
|
|
MLPlNode& getHeadPt();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD>β<EFBFBD><CEB2>
|
|
|
|
|
|
const MLPlNode& getTailPt() const;
|
|
|
|
|
|
MLPlNode& getTailPt();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
const MLPlNode& getAtPt(int index) const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
|
|
|
|
|
void setAtPt(int index, const MLPlNode& node);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
|
void insertAfter(int index, const MLPlNode& node);
|
|
|
|
|
|
void insertBefore(int index, const MLPlNode& node);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD>ͷ<EFBFBD><CDB7>
|
|
|
|
|
|
void removeHead();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD>β<EFBFBD><CEB2>
|
|
|
|
|
|
void removeTail();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void removeAt(int index);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void removeRt(const MLRect& dRect);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD>С<EFBFBD>ڽǶȵ㣨<C8B5><E3A3A8><EFBFBD>ȣ<EFBFBD>
|
|
|
|
|
|
void removeAtFrAngle(double angle);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD>С<EFBFBD>ڽǶȵ㣨<C8B5>Ƕȣ<C7B6>
|
|
|
|
|
|
void removeAtFrAngle2(double angle);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
|
|
|
|
|
|
void removeAll();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void resize(int count);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>߽ڵ㷴<DAB5><E3B7B4>
|
|
|
|
|
|
void reversePt();
|
|
|
|
|
|
|
|
|
|
|
|
MLPlNode& operator[]( int index );
|
|
|
|
|
|
const MLPlNode& operator[]( int index ) const;
|
|
|
|
|
|
|
|
|
|
|
|
const MLPlNode* getData() const;
|
|
|
|
|
|
|
|
|
|
|
|
MLPline* clone();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
void copy(const MLPline& pline);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>
|
|
|
|
|
|
void copyPt(const QVector<MLPlNode>& noteAry);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>
|
|
|
|
|
|
void copyPt(const MLPline& pline);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ӱպϵ<D5BA>
|
|
|
|
|
|
void closeHeadPt();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>ӱպϵ<D5BA>
|
|
|
|
|
|
void closeTailPt();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
MLPointAry getPointAry(int beginIndex ,int endIndex);
|
|
|
|
|
|
MLPline getPline(int beginIndex ,int endIndex);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>
|
|
|
|
|
|
MLRect calculateBox();
|
|
|
|
|
|
void resetBox();
|
|
|
|
|
|
MLRect getBox();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>
|
|
|
|
|
|
double getLength();
|
|
|
|
|
|
double getLength(int index);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double getArea();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>
|
|
|
|
|
|
void calculateLength();
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void calculateArea() ;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ƕ<EFBFBD>
|
|
|
|
|
|
void calculateAngle();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
|
MLPoint calculateCentroid();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
|
|
|
|
|
|
void redundant(double error=1.0);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int findIndex(const MLPoint& point, double delt=0.1);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool contains(const MLPoint& point);
|
|
|
|
|
|
bool contains(const MLPlNode& node);
|
|
|
|
|
|
bool contains(double x, double y);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool containsWhole(const MLPline& other);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool read(const QString& Path);
|
|
|
|
|
|
bool read(QFile& fr); //
|
|
|
|
|
|
void read(QDataStream &in);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void write(const QString& Path);
|
|
|
|
|
|
void write(QFile& fw);
|
|
|
|
|
|
void write(QDataStream &out);
|
|
|
|
|
|
void write(QTextStream& out);
|
|
|
|
|
|
|
|
|
|
|
|
// תָ<D7AA><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void toXyData(double*& pX, double*& pY, int& count);
|
|
|
|
|
|
|
|
|
|
|
|
// תΪQt <20><>ʽ
|
|
|
|
|
|
void toQPolygonF(QPolygonF&);
|
|
|
|
|
|
QPolygonF toQPolygonF()const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
|
|
|
|
|
void sampling(MLPline &curve, double step);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>
|
|
|
|
|
|
double getHeadTailDistance() const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5>㵽<EFBFBD><E3B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶δ<DFB6>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
|
|
|
|
|
|
double getNearest(const MLPlNode& node, int& index, MLPlNode& dptDest);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double getDistance(const MLPlNode& node1, const MLPlNode& node2) const;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
|
double getDistance(int index1, int index2);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>㴹ֱ<E3B4B9><D6B1>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double getVerticalDistance(const MLPlNode& dPoint1, const MLPlNode& dPoint2);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>㴹ֱ<E3B4B9><D6B1>֮<EFBFBD>䷴<EFBFBD><E4B7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double getReverseDistance(const MLPlNode& dPoint1, const MLPlNode& dPoint2);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>Ƕ<EFBFBD>תΪ<D7AA><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
void toSinglePline(QList<MLPline *>& singleCurveList, double Angle);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void createEllipse(const MLPoint& point, double radius);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
char m_name[64]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
QVector<MLPlNode> m_nodeAry;// <20><><EFBFBD>߽ڵ<DFBD><DAB5>б<EFBFBD>
|
|
|
|
|
|
double m_dLength;
|
|
|
|
|
|
double m_dArea;
|
|
|
|
|
|
|
|
|
|
|
|
MLRect m_box;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
class MLMICROSTRUCTURE_EXPORT MLDPlineRedundant
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
MLDPlineRedundant(void);
|
|
|
|
|
|
MLDPlineRedundant(double *oldx, double *oldy, double *oldz, double *oldl, int oldnum, int *mark);
|
|
|
|
|
|
MLDPlineRedundant(double *oldx, double *oldy, int oldnum, int *mark);
|
|
|
|
|
|
~MLDPlineRedundant(void);
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ദ<EFBFBD><E0B4A6>
|
|
|
|
|
|
void execute(double dbError = -1.0);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ദ<EFBFBD><E0B4A6><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>
|
|
|
|
|
|
int getMarkNum();
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
void getNewPoint(int n1,int n2);
|
|
|
|
|
|
int m_nMarkNum;
|
|
|
|
|
|
int *m_pMark;
|
|
|
|
|
|
double m_dbMinDistance; //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|
|
|
|
|
int num;
|
|
|
|
|
|
double *x,*y,*z,*l;
|
|
|
|
|
|
};
|