|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件: dfPluginBase.h
|
|
|
//主要功能:
|
|
|
// 双狐格式读写插件标准接口文件头定义,该定义不能更改
|
|
|
// 由该接口文件形成的DLL库,需要复制到模块所在目录下的plugin目录下才能使用
|
|
|
// 使用时点击菜单“文件|从插件中打开”命令,选择需要导入的文件类型及文件
|
|
|
// 就可将其直接在中打开。
|
|
|
//
|
|
|
//程序编写: 2009-4-16
|
|
|
//
|
|
|
//
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#if !defined ( __DF_PLUGIN_FORMAT_BASE_H__ )
|
|
|
#define __DF_PLUGIN_FORMAT_BASE_H__
|
|
|
|
|
|
namespace NPluginFormat
|
|
|
{
|
|
|
|
|
|
namespace NPluginFormatElements
|
|
|
{
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//格式插件信息
|
|
|
struct dfPluginFormatInfo
|
|
|
{
|
|
|
//可读取格式的信息
|
|
|
short m_stMajor; //major version (e.g. 1.xx)
|
|
|
short m_stMinor; //minor version (e.g. x.12)
|
|
|
|
|
|
BOOL m_bCanRead; //是否可读该类文件
|
|
|
BOOL m_bCanWrite; //是否可写该类文件
|
|
|
|
|
|
const char* m_strName; //插件名称
|
|
|
const char* m_strDescription; //插件描述:制作人、日期等
|
|
|
const char* m_strExtension; //扩展名,格式如:*.dfd;*.dfg;*.dfb
|
|
|
};
|
|
|
struct dfPluginFormat
|
|
|
{
|
|
|
dfPluginFormatInfo* m_pFormatInfo;
|
|
|
int m_nFormatNum;
|
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//插件中常使用的元素类型
|
|
|
|
|
|
enum enumPlineType
|
|
|
{
|
|
|
plineDefault = 0, //缺省
|
|
|
plineSolid = 1, //充填
|
|
|
plineClose = 2, //闭合曲线
|
|
|
plineBezier = 3, //B样条显示
|
|
|
plineSpline = 4, //三次样条显示
|
|
|
plineTransparent = 5, //透明显示
|
|
|
plineBezierSolid = 6, //B样条+充填
|
|
|
plineBezierClose = 7, //B样条+闭合
|
|
|
plineSplineSolid = 8, //三次样条+充填
|
|
|
plineSplineClose = 9, //三次样条+闭合
|
|
|
plineTransSolid = 10 //透明+充填
|
|
|
};
|
|
|
|
|
|
class dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginElement(void)
|
|
|
{
|
|
|
memset(m_strName, 0, sizeof(char)*256);
|
|
|
m_color=0;
|
|
|
m_version=1; //为了后期的扩展
|
|
|
m_dWidth=0;
|
|
|
}
|
|
|
char m_strName[256]; //名称
|
|
|
long m_color; //颜色
|
|
|
int m_version; //版本号
|
|
|
double m_dWidth; //曲线宽度,文字的宽度
|
|
|
};
|
|
|
class dfPluginPline : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginPline(void)
|
|
|
{
|
|
|
x=y=z=l=NULL;
|
|
|
num=0;
|
|
|
m_nColNum=2;
|
|
|
m_nPlineType=plineDefault;
|
|
|
m_dWidth=0;
|
|
|
};
|
|
|
~dfPluginPline(void)
|
|
|
{
|
|
|
if(x!=NULL)
|
|
|
{
|
|
|
delete[] x;
|
|
|
x=y=z=l=NULL;
|
|
|
num=0;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
int Create(int nPointNum)
|
|
|
{
|
|
|
if(nPointNum<=0) return 0;
|
|
|
num=nPointNum;
|
|
|
x=new double[num*4];
|
|
|
y=x+nPointNum;
|
|
|
z=y+nPointNum;
|
|
|
l=z+nPointNum;
|
|
|
return nPointNum;
|
|
|
};
|
|
|
|
|
|
double *x, *y, *l, *z; //曲线坐标(X,Y,Z,桩号)
|
|
|
int num; //坐标点数
|
|
|
int m_nColNum; //列包含数,最小为2,为3时包含Z值,为4时包含L值
|
|
|
enumPlineType m_nPlineType; //曲线类型
|
|
|
};
|
|
|
|
|
|
class dfPluginPoint
|
|
|
{
|
|
|
public:
|
|
|
dfPluginPoint(void)
|
|
|
{
|
|
|
x=y=z=l=0;
|
|
|
};
|
|
|
double x,y,z,l;
|
|
|
};
|
|
|
|
|
|
class dfPluginRect
|
|
|
{
|
|
|
public:
|
|
|
dfPluginRect(void)
|
|
|
{
|
|
|
left=right=top=bottom=0;
|
|
|
};
|
|
|
double left,right,top,bottom;
|
|
|
};
|
|
|
|
|
|
class dfPluginPlineRect : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginPlineRect(void)
|
|
|
{
|
|
|
m_nPlineType=plineDefault;
|
|
|
m_dWidth=0;
|
|
|
};
|
|
|
dfPluginRect m_rect;
|
|
|
enumPlineType m_nPlineType; //曲线类型
|
|
|
};
|
|
|
|
|
|
class dfPluginText : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginText(void)
|
|
|
{
|
|
|
m_dWidth=m_dHeight=0;
|
|
|
m_nAlignH=2;
|
|
|
m_nAlignV=0;
|
|
|
angle = 0;
|
|
|
};
|
|
|
dfPluginPoint point; //坐标
|
|
|
double m_dHeight; //文字高度
|
|
|
int m_nAlignH; //水平对齐 (0=左对齐,1=居中对齐,2=右对齐)
|
|
|
int m_nAlignV; //垂直对齐 (0=上对齐,1=居中对齐,2=下对齐)
|
|
|
double angle;
|
|
|
};
|
|
|
|
|
|
class dfPluginEllipse : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginEllipse(void)
|
|
|
{
|
|
|
};
|
|
|
dfPluginRect m_rect;
|
|
|
};
|
|
|
|
|
|
class dfPluginArc : public dfPluginEllipse
|
|
|
{
|
|
|
public:
|
|
|
dfPluginArc(void)
|
|
|
{
|
|
|
m_arcType=drawArc;
|
|
|
m_dArc1=0;
|
|
|
m_dArc2=2;
|
|
|
};
|
|
|
enum enumArcType
|
|
|
{
|
|
|
drawArc = 0, //弧
|
|
|
drawChord = 1, //弦
|
|
|
drawPie = 2 //饼
|
|
|
};
|
|
|
enumArcType m_arcType;
|
|
|
double m_dArc1; //开始角度
|
|
|
double m_dArc2; //结束角度
|
|
|
};
|
|
|
class dfPluginImageBuffer : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginImageBuffer(void)
|
|
|
{
|
|
|
m_nLength=0;
|
|
|
m_pBuffer=NULL;
|
|
|
memset(m_strImageType, 0, 4);
|
|
|
};
|
|
|
char m_strImageType[4]; //图像类型可以为“BMP、JPG、GIF、TIF、WMF、EMF、PNG”等三个字节缩写的类型,文件指针中包含了文件所有的内容
|
|
|
dfPluginRect rect; //坐标及高宽
|
|
|
BYTE* m_pBuffer; //整个图像文件按照一定的格式保存的文件内容
|
|
|
UINT m_nLength; //文件长度,指的是m_pBuffer的长度
|
|
|
};
|
|
|
class dfPluginImage : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginImage(void)
|
|
|
{
|
|
|
m_nBPP=32;
|
|
|
m_nWidth=0;
|
|
|
m_nHeight=0;
|
|
|
m_pData=NULL;
|
|
|
};
|
|
|
dfPluginRect rect; //坐标及高宽
|
|
|
int m_nBPP; //颜色数,可以为8|16|32(1字节|2字节|4字节),一个颜色值所占用的字节数
|
|
|
int m_nWidth;
|
|
|
int m_nHeight; //图像的高宽
|
|
|
BYTE* m_pData; //根据m_nBPP指定的一个颜色值占的字节数进行读取数据,按照一行一行的像素保存
|
|
|
};
|
|
|
//插入符号
|
|
|
class dfPluginMark : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginMark(void)
|
|
|
{
|
|
|
m_strMarkName[0]=0;
|
|
|
};
|
|
|
dfPluginRect rect; //坐标及高宽
|
|
|
char m_strMarkName[256]; //符号名称
|
|
|
};
|
|
|
|
|
|
//外边框
|
|
|
class dfPluginFrame : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginFrame(void)
|
|
|
{
|
|
|
m_dThickness=0;
|
|
|
m_bBlackFrame=TRUE;
|
|
|
m_strMarkName[0]=0;
|
|
|
m_color=0;
|
|
|
};
|
|
|
dfPluginRect rect; //坐标及高宽
|
|
|
double m_dThickness; //边框厚度
|
|
|
BOOL m_bBlackFrame; //是否为黑线边框
|
|
|
char m_strMarkName[256]; //符号名称
|
|
|
long m_color; //边框颜色
|
|
|
};
|
|
|
|
|
|
//经纬网或直角网
|
|
|
class dfPluginGriding : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginGriding(void)
|
|
|
{
|
|
|
m_nGridingType=0; //缺省为直角网格
|
|
|
m_dStepX=0;
|
|
|
m_dStepY=0;
|
|
|
m_dTextHeight=3;
|
|
|
m_nFlags=showLine|markAllSide|showFrame|showText|textMath;
|
|
|
};
|
|
|
int m_nGridingType; //网格类型:0:直角网格,1=经纬网
|
|
|
|
|
|
dfPluginRect rect; //坐标及高宽
|
|
|
double m_dStepX, m_dStepY; //在经度、纬度网格的步长,以分为单位
|
|
|
double m_dTextHeight; //文字高度
|
|
|
DWORD m_nFlags; //网格风格
|
|
|
|
|
|
//网格风格
|
|
|
enum enumGridingStyle
|
|
|
{
|
|
|
markLeft = 0x00000001, //左边
|
|
|
markTop = 0x00000002, //上边
|
|
|
markRight = 0x00000004, //右边
|
|
|
markBottom = 0x00000008, //下边
|
|
|
|
|
|
markAllSide = (markLeft | markTop | markRight | markBottom), //所有边
|
|
|
markLeftTop = (markLeft | markTop), //左边+上边
|
|
|
markTopRight = (markTop | markRight), //上边+右边
|
|
|
markRightBottom = (markRight| markBottom), //右边+下边
|
|
|
markBottomLeft = (markLeft | markBottom), //下边+左边
|
|
|
|
|
|
showLine = 0x00000010, //显示曲线
|
|
|
showCrossPoint = 0x00000020, //显示交点
|
|
|
showNull = 0x00000040, //显示为空
|
|
|
|
|
|
textGeography = 0x00000100, //地理
|
|
|
textMath = 0x00000200, //数学
|
|
|
textGeography1 = 0x00000400, //地理1
|
|
|
textGeography2 = 0x00000800, //地理2(all)
|
|
|
textMathHor = 0x00020000, //数学水平
|
|
|
|
|
|
showFrame = 0x00001000, //是否标识边框
|
|
|
showText = 0x00002000 //是否标识文字
|
|
|
};
|
|
|
};
|
|
|
|
|
|
class dfPluginSurface : public dfPluginElement
|
|
|
{
|
|
|
public:
|
|
|
dfPluginSurface(void)
|
|
|
{
|
|
|
m_dx=0;
|
|
|
m_dy=0;
|
|
|
numx=0;
|
|
|
numy=0;
|
|
|
m_pData=0;
|
|
|
zmin=0;
|
|
|
zmax=0;
|
|
|
};
|
|
|
dfPluginPoint point; //坐标
|
|
|
double m_dx;
|
|
|
double m_dy; //X方向及Y方向的坐标间隔
|
|
|
int numx;
|
|
|
int numy; //网格的坐标点数
|
|
|
double* m_pData; //网格数据,该数据按照一行接一行的格式保存,每行的个数为numx,共有numy行
|
|
|
double zmin;
|
|
|
double zmax; //Z值的最大最小值,该范围之外的值都为无效值
|
|
|
};
|
|
|
|
|
|
typedef bool( *DF_SET_CURRENT_LAYER )( const char* strLayer ); //设置当前层
|
|
|
typedef bool( *DF_SET_PROJECTION )( const char* strProjection ); //设置投影,格式为双狐DFD格式
|
|
|
typedef bool( *DF_ELE_PLINE )( const dfPluginPline* ); //插入曲线
|
|
|
typedef bool( *DF_ELE_RECT )( const dfPluginPlineRect* ); //插入曲线矩形,可以使用曲线修饰
|
|
|
typedef bool( *DF_ELE_TEXT )( const dfPluginText* ); //插入文本
|
|
|
typedef bool( *DF_ELE_POINT )( dfPluginPoint dp, const char* strName, double angle ); //插入点类文字,如井位等,在双狐中可使用修饰控制
|
|
|
typedef bool( *DF_ELE_ELLIPSE)( const dfPluginEllipse* ); //插入圆或椭圆
|
|
|
typedef bool( *DF_ELE_ARC )( const dfPluginArc* ); //插入弧
|
|
|
typedef bool( *DF_ELE_IMAGE )( const dfPluginImage* ); //插入图像
|
|
|
typedef bool( *DF_ELE_IMAGE_BUFFER)(const dfPluginImageBuffer* ); //插入图像
|
|
|
typedef bool( *DF_ELE_IMAGE_FILE )( const char* strFileName, dfPluginRect rect); //插入图像
|
|
|
typedef bool( *DF_ELE_SURFACE)( const dfPluginSurface* ); //插入曲面
|
|
|
typedef bool( *DF_ELE_XYZ)( double x, double y, double z ); //插入散点文字
|
|
|
typedef bool( *DF_ELE_MERGE_DF_FILE )(const char* strFileNameOrData, BOOL bMemeryData); //合并双狐图件(如符号库等),bMemeryData为TRUE表示strFileNameOrData中直接为DFD格式的串,否则为文件名称
|
|
|
typedef bool( *DF_ELE_GRIDING)( const dfPluginGriding* ); //插入坐标网
|
|
|
typedef bool( *DF_ELE_FRAME)( const dfPluginFrame* ); //插入外边框
|
|
|
typedef bool( *DF_ELE_MARK)( const dfPluginMark* ); //插入符号
|
|
|
|
|
|
typedef bool( *DF_ELE_BEGIN_CREATE_MARK)( const char* strMarkName ); //开始符号生成
|
|
|
typedef bool( *DF_ELE_END_CREATE_MARK)( void ); //结束符号生成
|
|
|
|
|
|
typedef bool( *DF_ELE_SAVE_FILE)( const char* strFileName, int nSaveType); //将内容保存为指定扩展名的文件,nSaveType:1=dfd、2=dfb、3=dml
|
|
|
typedef bool( *DF_ELE_CLEAR_ALL)( void ); //清除所有内容,包括层位、元素等所有信息
|
|
|
|
|
|
};
|
|
|
|
|
|
using namespace NPluginFormatElements;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//格式插件的读接口
|
|
|
class dfPluginFormatReader
|
|
|
{
|
|
|
public:
|
|
|
dfPluginFormatReader(void)
|
|
|
{
|
|
|
m_nVersion=1;
|
|
|
funSetCurrentLayer=NULL;
|
|
|
funSetProjection=NULL;
|
|
|
funElePline=NULL;
|
|
|
funEleRect=NULL;
|
|
|
funEleText=NULL;
|
|
|
funElePoint=NULL;
|
|
|
funEleEllipse=NULL;
|
|
|
funEleArc=NULL;
|
|
|
funEleImage=NULL;
|
|
|
funEleImageFile=NULL;
|
|
|
funEleSurface=NULL;
|
|
|
funEleXyz=NULL;
|
|
|
funEleMergeDFFile=NULL;
|
|
|
funEleGriding=NULL;
|
|
|
funEleFrame=NULL;
|
|
|
funEleImageBuffer=NULL;
|
|
|
funEleMark=NULL;
|
|
|
funEleBeginCreateMark=NULL;
|
|
|
funEleEndCreateMark=NULL;
|
|
|
funSaveFile=NULL;
|
|
|
funClearAll=NULL;
|
|
|
};
|
|
|
|
|
|
int m_nVersion; //版本号,可以控制连接后使用哪些函数,为了扩展接口函数而设
|
|
|
|
|
|
//将使用dfSetReader函数设置以下接口,通过这些函数与双狐建立转换关系,实现实时读取转换功能
|
|
|
//版本为1时可使用的函数接口
|
|
|
DF_SET_CURRENT_LAYER funSetCurrentLayer;
|
|
|
DF_SET_PROJECTION funSetProjection;
|
|
|
DF_ELE_PLINE funElePline;
|
|
|
DF_ELE_RECT funEleRect;
|
|
|
DF_ELE_TEXT funEleText;
|
|
|
DF_ELE_POINT funElePoint;
|
|
|
DF_ELE_ELLIPSE funEleEllipse;
|
|
|
DF_ELE_ARC funEleArc;
|
|
|
DF_ELE_IMAGE funEleImage;
|
|
|
DF_ELE_IMAGE_FILE funEleImageFile;
|
|
|
DF_ELE_IMAGE_BUFFER funEleImageBuffer;
|
|
|
DF_ELE_SURFACE funEleSurface;
|
|
|
DF_ELE_XYZ funEleXyz;
|
|
|
DF_ELE_MERGE_DF_FILE funEleMergeDFFile;
|
|
|
DF_ELE_GRIDING funEleGriding;
|
|
|
DF_ELE_FRAME funEleFrame;
|
|
|
DF_ELE_MARK funEleMark;
|
|
|
|
|
|
DF_ELE_BEGIN_CREATE_MARK funEleBeginCreateMark;
|
|
|
DF_ELE_END_CREATE_MARK funEleEndCreateMark;
|
|
|
|
|
|
DF_ELE_SAVE_FILE funSaveFile;
|
|
|
DF_ELE_CLEAR_ALL funClearAll;
|
|
|
};
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//格式插件的写接口
|
|
|
class dfPluginFormatWriter
|
|
|
{
|
|
|
public:
|
|
|
dfPluginFormatWriter(void)
|
|
|
{
|
|
|
m_nVersion=1;
|
|
|
};
|
|
|
int m_nVersion; //版本号,可以控制连接后使用哪些函数,为了扩展接口函数而设
|
|
|
|
|
|
//将使用dfGetWriter函数获得以下接口,通过这些函数将双狐元素转换转换为指定格式
|
|
|
//版本为1时可使用的函数接口
|
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//用户需要从该类派生类重写ReadFile函数
|
|
|
class CPluginFormatBase
|
|
|
{
|
|
|
public:
|
|
|
CPluginFormatBase(void)
|
|
|
{
|
|
|
memset(&m_pluginFormat, 0, sizeof(m_pluginFormat));
|
|
|
};
|
|
|
|
|
|
//在该插件中仅需要调用该函数就可将其转换为双狐格式
|
|
|
virtual int ReadFile(const char* strFilePathName, int nFormatType)=0;
|
|
|
|
|
|
//在双狐中调用该函数就可将双狐格式导出为插件格式
|
|
|
|
|
|
//基本信息获得函数
|
|
|
virtual dfPluginFormat* GetFormatInfo(void)
|
|
|
{
|
|
|
return &m_pluginFormat;
|
|
|
};
|
|
|
//初始化信息,如调用对话框设置读取参数及内存申请等
|
|
|
virtual int Initialize(const char* strFilePathName)
|
|
|
{
|
|
|
return 1;
|
|
|
};
|
|
|
virtual void Shutdown(void) //结束转换,可以在些保存一些参数信息,释放内存等
|
|
|
{
|
|
|
}
|
|
|
virtual void SetReaderFun(dfPluginFormatReader* pReader) //在该插件中仅需要调用该函数就可将其转换为双狐格式
|
|
|
{
|
|
|
m_pFormatReader=pReader;
|
|
|
}
|
|
|
//virtual dfPluginFormatWriter* GetWriterFun(void)
|
|
|
//{
|
|
|
// return m_pFormatWrite;
|
|
|
//}
|
|
|
|
|
|
void FillFormat(int nFormatNum, dfPluginFormatInfo* pInfo)
|
|
|
{
|
|
|
m_pluginFormat.m_nFormatNum = nFormatNum;
|
|
|
m_pluginFormat.m_pFormatInfo = pInfo;
|
|
|
}
|
|
|
|
|
|
protected:
|
|
|
dfPluginFormat m_pluginFormat;
|
|
|
dfPluginFormatReader* m_pFormatReader = nullptr;
|
|
|
//dfPluginFormatWriter* m_pFormatWrite; //写函数接口
|
|
|
};
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
////在CPluginFormatBase类的派生类中的CPP文件中必须如下定义
|
|
|
//
|
|
|
////定义格式信息,可以为多条
|
|
|
//#define PLUGIN_FORMAT_NUM 1
|
|
|
//dfPluginFormatInfo pluginFI[PLUGIN_FORMAT_NUM] = {
|
|
|
// {1, 1, TRUE, FALSE, "XYZ Files(*.csv; *.xyz)", "DoubleFox format plugin test", "*.xyz;*.csv"},
|
|
|
//};
|
|
|
//
|
|
|
////定义全局变量
|
|
|
//CPluginFormatEx m_pluginFormatEx;
|
|
|
//
|
|
|
//CPluginFormatEx::CPluginFormatEx(void)
|
|
|
//{
|
|
|
// m_pluginFormat.m_nFormatNum=PLUGIN_FORMAT_NUM;
|
|
|
// m_pluginFormat.m_pFormatInfo=pluginFI;
|
|
|
// m_pPluginFormatBase=&m_pluginFormatXyz;
|
|
|
//}
|
|
|
//
|
|
|
////定义纯虚读函数
|
|
|
//int CPluginFormatEx::ReadFile(const char* strFilePathName, int nFormatType)
|
|
|
//{
|
|
|
// CXyz xyz;
|
|
|
// return xyz.Read(strFilePathName);
|
|
|
//}
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
//双狐插件的接口函数名称定义,在插件中必须定义这些CODE函数
|
|
|
#define DF_GET_PLUGIN_FORMAT_NAME "dfGetPluginFormat" //基本信息获得函数
|
|
|
#define DF_GET_PLUGIN_FORMAT_CODE dfGetPluginFormat
|
|
|
|
|
|
typedef CPluginFormatBase* ( *DF_GET_PLUGIN_FORMAT )( void ); //插件接口类指针
|
|
|
|
|
|
};
|
|
|
|
|
|
using namespace NPluginFormat;
|
|
|
|
|
|
#endif //__DF_PLUGIN_FORMAT_BASE_H__
|
|
|
|