You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.7 KiB
C

1 month ago
#pragma once
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD> CurveEx.h
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2005-12-07 19:50:08
/////////////////////////////////////////////////////////////////////////////
#include "DrawModel\curve.h"
#include "CurveType.h"
#include "rect8ex.h"
#include "afxdb.h"
#include "CurveMark.h"
using namespace NCurveEmbellish;
#define PLINE_EMBELLISH_ALL (PLINE_NODRAW|PLINE_SOLID|PLINE_CLOSE|PLINE_BEZIER|PLINE_SPLINE|PLINE_OFFSET|PLINE_TRANSPARENT|PLINE_TRANSPARENT_VALUE|PLINE_WAVE) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PLINE_TYPE_ALL (PLINE_W|PLINE_MIDLE|/*PLINE_VIRTUAL|*/PLINE_DESIGN|PLINE_EMBELLISH_ALL) //<2F><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct stuCurveWave
{
double T; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double A; //<2F><><EFBFBD><EFBFBD>
long dnum; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷִ<EFBFBD>п<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD> CCurve û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
class AFX_EXT_CLASS CCurveEx : public CCurve
{
public:
CCurveEx(int n);
CCurveEx(void);
CCurveEx(const CCurveEx& other);
virtual ~CCurveEx(void);
int64_t GetId() const;
void SetId(int64_t id);
virtual void Initial(void);
virtual void Clear(void);
void Serialize(CArchive& ar, const short &ver) override;
virtual int Read(CFile &fr, const short& ver);
virtual void Write(CFile& fw, const short& ver, double dRedundantError/*=-1.0*/);
virtual void GetRange(CRect8& range,void *HowToViewCurve=NULL);
virtual void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint);
virtual BOOL IsInRange(CRect8& range,void *HowToViewCurve=NULL);
// typeΪУ<CEAA><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Уλ<D0A3><CEBB><EFBFBD>ĵ<EFBFBD>Уλ<D0A3><CEBB>;pValueΪ<65><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC>CCalibrate2<65><32>CCalibrate4<65><34>
virtual void Calibrate(int type, void* pValue);
virtual void ScaleProperty(double sx, double sy);
virtual void ScaleCoor(double xs, double ys, double dx, double dy);
virtual void ScaleCoordinate(double sx, double sy, int mode); //mode=0:<3A>ӣ<EFBFBD>1:<3A><><EFBFBD><EFBFBD>2:<3A>ˣ<EFBFBD>3:<3A><>
virtual void WriteDML(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadDML(CFile &fr, const short &ver);
virtual void WritePCG(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadPCG(CFile &fr, const short &ver);
int ReadPCG2(CFile &fr, const short &ver);
virtual void ExchangeXY(void); //<2F><><EFBFBD><EFBFBD>XY<58><59><EFBFBD><EFBFBD>
virtual void ExchangeXY(void* pProjection); //ת<><D7AA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>,CPrljectio* pProjection
virtual BOOL SetPoints(CPointList &dp, int nnPoint, BOOL IsAutoLocation=TRUE);
void TransferFrom(CCurve& cv); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CCurve<76><65><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
BOOL bAutoLocation = FALSE;
int midle = 0;
double width = 0.0;
double m_SmoothStep = 0.0;
double m_dOffset = 0.0;
CCurveType VirtualType;
CCurveMark* mark = nullptr;
stuCurveWave m_stuCurveWave; //Ϊ<>˲<EFBFBD><CBB2><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>Σ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD>
void operator=(const CCurveEx& curve);
void CloneOtherParameter(const CCurveEx& curve);
dfPoint MidleFilter(int i);
BOOL EnableClose(BOOL bEnable); //<2F>ɹ<EFBFBD><C9B9>޸ĺ<DEB8><C4BA>ŷ<EFBFBD><C5B7><EFBFBD>TRUE
void WriteXYZ(CFile& fw, char split=',', BOOL bWithName=TRUE);
void WriteXYZ(CFile& fw, long nID, CString layer, char split=',');
void WritePure(CFile& fw);
// void WriteNodeToDB(CDatabase &db, CString &strTableName, CString &Maker, CString &Date, CString &projection, CString &layer);
// void WriteToDB(CDatabase &db, CString &strTableName, CString &Maker, CString &Date, CString &projection, CString &layer);
void WriteBezier(CFile& fw, double sd, int bIsClose);
void WriteSpline(CFile& fw, double sd, int bIsClose);
int GetArrow(CCurveEx& curveArrow, double dArrowHeight, int nHeadTail); //<2F><><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD>ͷ<EFBFBD><CDB7>β<EFBFBD><CEB2>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CreateCurve(double x1, double y1, double x2, double y2, double bulge);
private:
void CopyFrom(const CCurveEx& other);
int64_t m_id = -1;
public:
virtual int ReadPCG(void *pxp, const short &ver);
int ReadPCG2(void *pxp, const short &ver);
};