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.

327 lines
11 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD> BaseFunction.h
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "math.h"
#include "afxcmn.h"
#include "Point2D.h"
#include "afxtempl.h"
#ifndef PI
#define PI 3.1415926535897932384626433832795
#endif
#ifndef RHO
#define RHO 57.295779513082320876798154814114 //(180.0/PI)
#endif
#ifndef CODE_GB2321
#define CODE_GB2321 0x00000000
#define CODE_UTF8 0x00000001
#endif
//#ifndef MAX_LINE
// #define MAX_LINE 2048
//#endif
class AFX_EXT_CLASS CBaseFunction
{
public:
static int _compare_double(const void *d1,const void *d2);
//static char m_tempLine[MAX_LINE];
//static char m_tempText[MAX_LINE];
//char m_tempLine[MAX_LINE];
//char m_tempText[MAX_LINE];
public:
CBaseFunction(void);
virtual ~CBaseFunction(void);
//˫<><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void FloatToString(CString& result, double m_float);
void FloatToString(CString& result, double m_float, int n);
void FloatToString(char* result, double m_float);
void FloatToString(char *result, double m_float, int n);
void FloatToString(double m_float); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_tempLine<6E>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GetTempString()<29><><EFBFBD><EFBFBD>
void FloatToString(double m_float, int n);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>У<EFBFBD><D0A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>ȱʡ<C8B1>ǡ<EFBFBD><C7A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void PrintXYZ(char* string, double *v, int num, int digits, char split=',');
void PrintXYZ(CString& result, double *v, int num, int digits, char split=',');
void PrintXYZ(char* result, double *v, int num, char split=',');
void PrintXYZ(CString& result, double *v, int num, char split=',');
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
int BinarySearch(double key, int num, double *x);
double LineValue(double x0, double *x, double *y);// <20><><EFBFBD><EFBFBD><58><D6B5><EFBFBD><EFBFBD>ֵY
double LineValue(double x0, double x1, double x2, double y1, double y2);
double LineValue(double m,double n,double z1,double z2,double z3,double z4);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
void Rotate(double &x0, double &y0, double radians);
void Rotate(double &x, double &y, double cosa, double sina);
void Rotate(double &x0,double &y0,double &z0,double alfa,double beta);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD><EFBFBD>mode=0<><30><EFBFBD><EFBFBD>+ <20><><31><CEAA><EFBFBD><EFBFBD><32>ˣ<EFBFBD><33><CEAA>
void Arithmetic(double& val, double factor, int mode);
void SortCoordinate(double* x, double* y, int n); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB0B4><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double TotalDistance(double *a, double *b, int n); //<2F><><EFBFBD><EFBFBD><EFBFBD>ܵľ<DCB5><C4BE><EFBFBD><EFBFBD><EFBFBD>
int GetMinValueIndex(double* a, int n); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double Distance2(double x1,double y1,double x2,double y2);
double Distance(double x1,double y1,double x2,double y2);
double Distance3D(double x1, double y1, double z1, double x2,double y2,double z2);
double PointLineDistance(double x0,double y0,double k,double b); //<2F>㵽ֱ<E3B5BD>ߵľ<DFB5><C4BE><EFBFBD>
// <20><EFBFBD>߶ε<DFB6><CEB5><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> --whl
double PointLineDistance(double x0, double y0, double x1, double y1, double x2, double y2);
///////////////////////////////////////////////////////////////////////
//
// 1 <20>ϲ<EFBFBD>
// p1--------------------p2
// 2 <20>²<EFBFBD>
//
//
// p2
// |
// |
// 1 <20><><EFBFBD><EFBFBD> | 2 <20>Ҳ<EFBFBD>
// |
// |
// p1
// <20>жϵ<D0B6><CFB5><EFBFBD>ֱ<EFBFBD>ߵ<EFBFBD><DFB5>IJ<EFBFBD> 1-- <20><><EFBFBD><EFBFBD> 0--<2D><><EFBFBD><EFBFBD> 2---<2D>Ҳ<EFBFBD>
/////////////////////////////////////////////////////////////////////////
int PointInLine(double x0, double y0, double x1, double y1, double x2, double y2);
//<2F>ռ<EFBFBD><D5BC><EFBFBD>ռ<EFBFBD><D5BC>߶ε<DFB6><CEB5><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> --Wangcw
double PointSegmentDistance3D(double x0, double y0, double z0, double x1, double y1,double z1, double x2, double y2, double z2);
double GetAngle(double x1,double y1,double x2,double y2,double x3,double y3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>֮<EFBFBD><D6AE><EFBFBD>ļн<C4BC>
double GetAngle(double x1, double y1, double x2, double y2); //<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58>֮<EFBFBD><D6AE><EFBFBD>ļн<C4BC>
double GetAngle(double x, double y);
double GetAzimuth(double x1, double y1, double x2, double y2); //<2F><><EFBFBD>㷽λ<E3B7BD><CEBB>
double ToDegree(double dms); //<2F><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>
double ToDMS(double degree); //<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
void GetKB(double x1, double y1, double x2, double y2, double &k, double &b); //<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7>̲<EFBFBD><CCB2><EFBFBD>
BOOL GetKB(int num, double *x, double *y, double &k, double &b); //<2F><>С<EFBFBD><D0A1><EFBFBD>˷<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, num>2, <20><><EFBFBD><EFBFBD>ֱ<EFBFBD>߷<EFBFBD><DFB7><EFBFBD>(Y=kX+b)
int Offset(double k, double z, double &delt, double &h, BOOL bOffset); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5>ƫ<EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD>б<CEAA><D0B1>
int Offset(double &dx, double &dy, double &z, BOOL bOffset); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5>ƫ<EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD>dx<64><78>dxΪƫ<CEAA><C6AB>
//bOffset==TRUEʱ<45><CAB1><EFBFBD><EFBFBD>Offset2D<32><44>ΪFALSEʱ<45><CAB1><EFBFBD><EFBFBD>UnOffset2D
int Offset2D(double k, double z, double &delt, double &h); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5>ƫ<EFBFBD><C6AB>
int UnOffset2D(double k, double h, double &delt, double &z); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ㷴ƫ<E3B7B4><C6AB>
int Gauss(int n,double *a,double *c);
double GetAreaTrue(int num, double* x, double* y); //<2F><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵҲ<D6B5><D2B2><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>ֵ
double GetArea(int num,double *x,double *y); //<2F><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>,GetArea()=fabs(GetAreaTrue())
double GetFirstValue(double x,double step);
bool IsZero(const double& val); //<2F>ж<EFBFBD>val<61>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool IsZero(const double& val, double deps); //<2F>ж<EFBFBD>val<61>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
bool IsEqual(const double& x, const double& y, double deps = 1e-8); //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>õȱ߶<C8B1><DFB6><EFBFBD><EFBFBD>εĶ<CEB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// centerPoint <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
// endPoint <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD>
// polyNum <20>ȱ߶<C8B1><DFB6><EFBFBD><EFBFBD>εı<CEB5><C4B1><EFBFBD>
void GetEquilateralPolyPoints(CList<dfPoint, dfPoint>& pl, dfPoint &centerPoint, dfPoint &endPoint, int polyNum);
//<2F><><EFBFBD>ݽǶȻ<C7B6><C8BB><EFBFBD>Բ<EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dfPoint GetPointOnCircle(dfPoint& centerPoint, double r, double angle);
//<2F><><EFBFBD>ݽǶȻ<C7B6><C8BB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD><EFBFBD><EFBFBD>
bool GetPointOnEllipse(double &x, double& y, const CSize8& szRadius, double angle);
bool GetPointOnEllipse(double &x, double& y, const CPoint2D& centerPoint, const CSize8& szRadius, double angle);
//x1,y1,x2,y2,x3,y3Ϊ<33><CEAA><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣬x,y,r<>з<EFBFBD><D0B7>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL GetCircumcenter(double &x, double &y, double &r,
double x1, double y1,
double x2, double y2,
double x3, double y3);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD> --- wangcw
bool Smooth53(double* val, int n, int stimes = 100);
int GetArgument(CString cmd, CStringList &list);
int ScanfString(CStringArray &m_type, CString str, char split);
int ScanfString1(CStringArray &m_type, CString cmd, char split); //<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanfString1(CStringArray &m_type, char* cmd, int n, char split); //<2F><><EFBFBD><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>split<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanfString(CStringArray &m_type, char* cmd); //<2F><><EFBFBD><EFBFBD><EFBFBD>Թؼ<D4B9><D8BC>֣<EFBFBD><D6A3>ո񡢶<D5B8><F1A1A2B6>š<EFBFBD>TAB<41><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>Ĺؼ<C4B9><D8BC>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ReverseString(char *string, int n);
//ASCII<49><49><EFBFBD>ļ<EFBFBD><C4BC>Ķ<EFBFBD>д
int ReadString(CFile& fr, CString& str);
int GetString(CFile& fr, CString& str);
BOOL IsLineEnd_GetString(int result); //<2F>ж<EFBFBD>GetString<6E><67><EFBFBD>ص<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʾһ<CABE>еĽ<D0B5><C4BD><EFBFBD>
int ReadString(CFile & fr, char* str); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
int GetString(CFile& fr, char* str); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կո<D4BF><D5B8><EFBFBD><EFBFBD>س<EFBFBD>Ϊ<EFBFBD><CEAA>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
int ReadString(CFile & fr); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GetString(CFile& fr); //<2F><>ȡһ<C8A1><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կո<D4BF><D5B8><EFBFBD><EFBFBD>س<EFBFBD>Ϊ<EFBFBD><CEAA>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char* GetTempString(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
int GetTempStringLength(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><E9B3A4>
void ZeroTempString(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
int ReplaceChar(char* pString, char old_char, char new_char);
int FindString(char* pString, char* pSearchString);
int ReverseFind(const char* pString, char cFind); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
void SerializeString(CArchive& ar, CString& str, const short& ver);
void WriteLine(CFile &fw, CString str); //дһ<D0B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD>),<2C><>WriteString<6E><67>WriteReturn<72><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteString(CFile &fw, CString str); //дһ<D0B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteString(CFile &fw, double value, int n=6); //дһ<D0B4><D2BB>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteString(CFile &fw, long value); //дһ<D0B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void WriteReturn(CFile& fw); //дһ<D0B4><D2BB><EFBFBD>س<EFBFBD>
void WriteXY(CFile& fw, double x, double y, char cSplit=','); //дX,Y<><59><EFBFBD><EFBFBD>
void WriteXY(CFile& fw, double& x, double& y, double& z, char cSplit);
BOOL WriteFile(LPCTSTR lpSaveFileName, void* pBuffer, DWORD nBufferSize); //<2F><><EFBFBD>ٱ<EFBFBD><D9B1><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ScanDouble(char *line,double *x,int n,int m);
int ScanDouble1(char *line,double *x,int n,int m);
long FloatToLong(double value);
void SortDouble(int num,double *x);
void SetDecimalDigits(int digits);
int GetDecimalDigits(void);
int IsDigit(CString &line);
int IsDigit(char* line);
double GetCanonicalStep(double step); //<2F><><EFBFBD>ù淶<C3B9><E6B7B6><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ12<31><32><EFBFBD><EFBFBD>10<31><30>0.13=0.1
double ContourStep(double m_step);
int GetCycValue(int i,int T);
void ExchangeXY(double& x, double& y); //x,y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
void Swap(double& x, double& y); //x,y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
void Swap(float& x, float& y); //x,y<><79><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
//Ϊ<><CEAA>дԪ<D0B4><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(int <20><> short)<29><>
void WriteElementType(CArchive& ar, int nType, const short& ver);
void ReadElementType(CArchive& ar, int &nType, const short& ver);
HGLOBAL WINAPI CopyHandle(HGLOBAL h);
//Progress
void SetProgress(CProgressCtrl* pProgress);
CProgressCtrl* GetProgress(void);
void SetProgressPos(int nPos);
//ִ<><D6B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE ExecuteCommand(LPCTSTR lpFileCommand, LPCTSTR lpFileParameters, LPCTSTR lpFileDirectory, int nWinShow=SW_SHOW);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD GetCurveType(CString str);
CString GetCurveTypeString(DWORD type);
CString GetSplitPath(const CString sFullPathName, CString context=_T("ext"));
//<2F><>ɢ<EFBFBD><C9A2><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB1A3><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>x<EFBFBD><78>y<EFBFBD><79>
int GetOutline(int num, double *x, double *y);
//<2F><><EFBFBD><EFBFBD>/<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
void SetCodeType(DWORD nType);
DWORD GetCodeType();
COLORREF HexToColorRef(CString strHex);
RGBQUAD HexToRgbQuad(CString strHex);
CString RgbQuadToHex(RGBQUAD clr);
CString ColorRefToHex(COLORREF clr);
protected:
CProgressCtrl* m_pProgress;
int __DecimalDigits;//ȱʡ<C8B1>ı<EFBFBD><C4B1><EFBFBD>С<EFBFBD><D0A1>λ<EFBFBD><CEBB> void FloatToString(CString& result, double m_float);
DWORD m_nCodeType;
};
extern thread_local CBaseFunction bf;
AFX_INLINE int CBaseFunction::GetDecimalDigits(void)
{
return __DecimalDigits;
}
AFX_INLINE void CBaseFunction::SetDecimalDigits(int digits)
{
__DecimalDigits=digits;
}
AFX_INLINE int CBaseFunction::IsDigit(CString &line)
{
if(line.GetLength()==0)
return 0;
if(line[0]<='9'&&line[0]>='0')
return 1;
if((line[0]=='-'||line[0]=='.'||line[0]=='+') && line.GetLength()>1)
return 1;
return 0;
}
AFX_INLINE int CBaseFunction::IsDigit(char* line)
{
if(line[0]<='9'&&line[0]>='0')
return 1;
if((line[0]=='-'||line[0]=='.'||line[0]=='+') && strlen(line)>1)
return 1;
return 0;
}
AFX_INLINE double CBaseFunction::Distance2(double x1,double y1,double x2,double y2)
{
x1-=x2;
y1-=y2;
return x1*x1+y1*y1;
}
AFX_INLINE double CBaseFunction::Distance3D(double x1, double y1, double z1, double x2,double y2,double z2)
{
x1 -= x2;
y1 -= y2;
z1 -= z2;
return sqrt(x1*x1 + y1*y1 + z1*z1);
}
AFX_INLINE double CBaseFunction::Distance(double x1,double y1,double x2,double y2)
{
return sqrt(Distance2(x1,y1,x2,y2));
}
AFX_INLINE long CBaseFunction::FloatToLong(double value)
{
if(value<0) return (long)(value-0.5);
return (long)(value+0.5);
}
AFX_INLINE CProgressCtrl* CBaseFunction::GetProgress(void)
{
return m_pProgress;
}
AFX_INLINE void CBaseFunction::SetProgressPos(int nPos)
{
// if(m_pProgress) m_pProgress->SetPos(nPos);
}
extern "C" AFX_EXT_API CBaseFunction* WINAPI AfxGetBaseFunction();
extern "C" AFX_EXT_API BOOL * WINAPI AfxGetNo_Trim_Zero();
extern "C" AFX_EXT_API void WINAPI SetVert(TRIVERTEX &v, int x, int y, COLORREF cr);
//extern "C" TRIVERTEX AFX_EXT_DATA vert[5];
//extern "C" GRADIENT_TRIANGLE AFX_EXT_DATA gTRi[4];
//extern "C" double AFX_EXT_DATA __z[4];
extern "C"
{
AFX_EXT_API TRIVERTEX* WINAPI AfxGetvert();
AFX_EXT_API GRADIENT_TRIANGLE* WINAPI AfxGetgTRi();
AFX_EXT_API double* WINAPI AfxGet__z();
};