
// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the IVSDRAWER_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// IVSDRAWER_API functions as being imported from a DLL, wheras this DLL sees symbols
// defined with this macro as being exported.

#if  !defined(IVS_DRAWER_H)
#define IVS_DRAWER_H

#define IVSDRAWER_API

/*MACOS*/
#if defined(MAC)
#define DRAW_GL
#define CALLMETHOD 
#define WCHAR			wchar_t
#define IVS_BOOL        int

enum
{
	DRAW_PEN_DEFAULT = -1,
	DRAW_PEN_SOLID,
	DRAW_PEN_DASH,
};

typedef struct __IVS_MAC_WND
{
	int nWidth;
	int nHeight;
}IVS_WND;

/*WINDOWS*/
#elif defined(WIN32) || defined(WIN64)
#include <windows.h>

#define CALLMETHOD __stdcall
#define IVS_BOOL		BOOL

#define DRAW_PEN_SOLID            PS_SOLID
#define DRAW_PEN_DASH             PS_DASH       /* -------  */
#define DRAW_PEN_DOT              PS_DOT       /* .......  */
#define DRAW_PEN_DASHDOT          PS_DASHDOT       /* _._._._  */
#define DRAW_PEN_DASHDOTDOT       PS_DASHDOTDOT      /* _.._.._  */
#define DRAW_PEN_NULL             PS_NULL
#define DRAW_PEN_INSIDEFRAME      PS_INSIDEFRAME
#define DRAW_PEN_USERSTYLE        PS_USERSTYLE
#define DRAW_PEN_ALTERNATE        PS_ALTERNATE
#define DRAW_PEN_DEFAULT		  0xffffffff

/*LINUX*/
#elif defined(LINUX) || defined(__native_client__)
//#include <X11/X11.h>		
//#define CALLMETHOD 
#define DRAW_GL
#define CALLMETHOD 
#define WCHAR			wchar_t
#define IVS_BOOL        int

enum
{
	DRAW_PEN_DEFAULT = -1,
		DRAW_PEN_SOLID,
		DRAW_PEN_DASH,
};
#endif // MAC WIN32 LINUX		

/*Opengl 显示模式定义DRAW_GL*/
#if defined(DRAW_GL)
#define IVS_DC_REF      void*
#define IVS_WND_REF     void*

typedef struct __IVS_COLOR
{
    float cgred;
    float cggreen;
    float cgblue;
}IVS_COLOR, *IVS_COLOR_REF;

typedef struct __IVSPOINT
{
	float x;
	float y;
}IVSPOINT;

typedef struct __IVS_RECT
{
    float left;
    float bottom;
    float right;
    float top;
}IVS_RECT;

#else
#define IVS_COLOR		COLORREF
#define IVS_WND_REF 	HWND
#define IVS_DC_REF		HDC
#define IVS_RECT		RECT
typedef POINT			IVSPOINT;
#endif // DRAW_GL


#include "dhnetsdk.h"
#include <time.h>

#define IVS_DATA_DEFAULT		0xffffffff
#define IVS_MAX_EVENT_NUM 32
#define IVS_MAX_TTL				0xff
#define IVS_MAX_POLYLINE_NUM	32

enum
{
	SHOW_NONE = 0,
	SHOW_RULE = (1 << 0),
	SHOW_ALARM = (1 << 1),
	SHOW_TRACK = (1 << 2),
	SHOW_ALL = (SHOW_RULE | SHOW_ALARM | SHOW_TRACK),
};

enum{
	DRAW_JSON = 0,
	DRAW_TRACK,
	DRAW_ALARM,
	DRAW_RULE,
	DRAW_MOVE_CHECK = 7,		//Zhoujj 2013.11.19
	DATA_TEST = 9,				//Zhoujj 2014.02.15
	DATA_FLOW_INFO = 13,		//Zhoujj 2014.01.23
	DRAW_END = 20
};

enum
{
	IVS_LINGER = 0,				//int 
	IVS_TRACKTAIL,				//轨迹尾巴
	IVS_GET_OBJECT,
	IVS_DISABLE_VIDEO_TIME,		//禁止视频浓缩的时间 INT 默认开启
	IVS_DISABLE_VIDEO_OBJECT,
	IVS_MODIFY_OBJECT_RGB,		//Dword
	IVS_TRACK_OBJECT,
	IVS_SET_PEN_HEIGHT,
	IVS_SET_FONT_SIZE,
	IVS_SET_FONT_TYPE,
	IVS_SET_FONT_COLOR
};

#define IVS_MAX_ACTION_NUM	4
#define MAX_OBJECT_NUM		16
#define MAX_RULE_NUM		32
#define IVS_NAME_NUM		128

typedef struct IVS_CONFIG_EVENT
{
	char					szEventName[IVS_NAME_NUM];			// 事件名称,详见"事件类型列表"
	char					szRuleName[IVS_NAME_NUM];			// 规则名称,不同规则不能重名
	DH_MSG_OBJECT			stuObject;
	char					Context[28];
	int						alarmAction;					//netsdk一致
	int						alarmType;
	
} IVS_CONFIG_EVENT_INFO;

typedef struct IVS_CONFIG_EVENTEX
{
	char					szEventName[IVS_NAME_NUM];			// 事件名称,详见"事件类型列表"
	char					szRuleName[IVS_NAME_NUM];			// 规则名称,不同规则不能重名
	char					Context[28];					
	int						alarmAction;					//netsdk一致				
	int						alarmType;
	int						nObjectNum;
	DH_MSG_OBJECT			stuObject[MAX_OBJECT_NUM];						// 检测到的物体
	int						nContext; // 该字段未用，作为大类字段
	void*					pContext;
} IVS_CONFIG_EVENT_INFOEX;

typedef struct 
{
	int						nEventsNum;								// 视频分析规则数
	IVS_CONFIG_EVENT_INFO	stuEventInfo[IVS_MAX_EVENT_NUM]; //事件信息
	
} IVS_CFG_ANALYSEVENTS_INFO;

typedef struct 
{
	int						nEventsNum;								// 视频分析规则数
	IVS_CONFIG_EVENT_INFOEX stuEventInfo[IVS_MAX_EVENT_NUM]; //事件信息
	
} IVS_CFG_ANALYSEVENTS_INFOEX;

typedef struct
{
	int						nX; //0~8191
	int						nY;		
} IVS_CFG_POLYLINE;

typedef struct  __IVS_WEB_RULE
{
	int						size;
	int						nRuleType;
	int						nRuleEnable;
	int						ndirect1;
	int						ndirect2;
	int						nPoint1;
	int						nPoint2;
	unsigned char			bActionType[4];
	DH_MSG_OBJECT			objectMsg;
	char					szRuleName[IVS_NAME_NUM];
	IVS_CFG_POLYLINE		stuDetectLine1[IVS_MAX_POLYLINE_NUM];
	IVS_CFG_POLYLINE		stuDetectLine2[IVS_MAX_POLYLINE_NUM];
	char					szRevered[256];
}IVS_WEB_RULE;

typedef struct __IVS_WEB_RULE_ARRAY
{
	int						size;
	int						nCount;
	IVS_WEB_RULE*			pRule;
}IVS_WEB_RULE_ARRAY;

typedef struct
{
	int						objectid;
	struct tm				startTime;
	struct tm				endTime;
	INT64				nBeginFileOffset;				// 开始时文件偏移, 单位: 字节（物体开始出现时，视频帧在原始视频文件中相对于文件起始处的偏移）
	INT64				nEndFileOffset;					// 结束时文件偏移, 单位: 字节（物体消逝时，视频帧在原始视频文件中相对于文件起始处的偏移）
	int						classid;
}IVSOBJECT;


typedef struct
{
	IVS_BOOL trackex2objtype;  //是否显示物体类型，0:否,1:显示.默认不显示
    IVS_BOOL trackex2attribute88;//是否显示88属性包，0:否,1:显示.默认显示
    
}TrackEx2Configure;

union ObjectContex
{
	IVSOBJECT				object;
	IVSPOINT				xPt;
	char					szReverd[128];
};

typedef struct _DH_IVS_POINT
{
	short 		x; 
	short 		y; 
	short		xSize;
	short		ySize;
	//轨迹点是物体外接矩形的中心，根据X，Y及XSize，YSize计算出的物体外接矩形坐标（left，top，right，bottom）：
	//RECT=(X-XSize, Y-YSize, X+XSize, Y+YSize)
	
}DH_IVS_POINT; 

typedef struct  _RuleColor
{
	int ruletype;
	IVS_COLOR crColor;
		
}RuleColor;

#ifdef __cplusplus
extern "C" {
#endif

/********************************************************************
*	Funcname: 	    	DRAW_Startup
*	Purpose:			启动IVSDraw(只调用一次)
*   InputParam:         void
*   OutputParam:        void
*   Return:             int:  0 为成功, !0 为失败 
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
*********************************************************************/
IVSDRAWER_API int CALLMETHOD DRAW_Startup();
/********************************************************************
*	Funcname: 	    	DRAW_Cleanup
*	Purpose:			退出IVSDraw
*   InputParam:         void
*   OutputParam:        void
*   Return:             void 
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
*********************************************************************/

IVSDRAWER_API void CALLMETHOD DRAW_Cleanup();

/********************************************************************
*	Funcname: 	    	DRAW_Open
*	Purpose:			打开作图端口
*   InputParam:         int nPort: 作图端口
*   OutputParam:        void
*   Return:             BOOL,成功返回TRUE,失败返回FALSE. 
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
*********************************************************************/
IVSDRAWER_API BOOL CALLMETHOD DRAW_Open(int nPort);

/********************************************************************
*	Funcname: 	    	DRAW_Close
*	Purpose:			关闭作图端口
*   InputParam:         int nPort: 作图端口
*   OutputParam:        void
*   Return:             void
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
*********************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_Close(int nPort);

/*********************************************************************
*	Funcname: 			DRAW_Reset	
*	Purpose:			重置作图端口
*   InputParam:         nPort,作图端口: ntype,类型
*   OutputParam:        void
*   Return:             BOOL,成功返回TRUE,失败返回FALSE. 
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
**********************************************************************/
IVSDRAWER_API BOOL CALLMETHOD DRAW_Reset(int nPort,int type);

/**********************************************************************
*	Funcname: 			DRAW_InputJsonData    	
*	Purpose:			导入字符串数据
*   InputParam:         nPort:端口号(Range)
*						pJsonData:字符串数据内存地址
*						nDataLen:数据长度
*						nFrame: 帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
***********************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputJsonData(int nPort, unsigned char* pJsonData, int nDataLen,int nFrame);

/**********************************************************************
*	Funcname: 	        DRAW_SetRuleColor		    	
*	Purpose:			设置规则颜色
*   InputParam:         nRuleColor:规则名称和规则颜色
*						nRuleNum:规则数
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2016:09:13  
*   Revision Record:    2016/9/13:wangguojian:modify......
***********************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_SetRuleColor(int nPort,RuleColor* nRuleColor, int nRuleNum);

/***********************************************************************
*	Funcname: 			DRAW_InputRuleData	
*	Purpose:			导入规则数据
*   InputParam:         nPort:端口号(Range)
*						pRuleData:规则数据内存地址
*						nframe:帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputRuleData(int nPort, int nType, unsigned char* pRuleData, int nframe);

/************************************************************************
*	Funcname: 	    	DRAW_InputTrackData
*	Purpose:			导入轨迹数据
*   InputParam:         nPort:端口号
*						pTrackData:字轨迹数据内存地址
*						nDataLen:数据长度
*						nFrameNum: 帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
*************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputTrackData(int nPort, int nType, unsigned char* pTrackData, int nDataLen,int nFrameNum);
IVSDRAWER_API int  CALLMETHOD DRAW_InputTrackDataEx2(int nPort, int nType, unsigned char* pTrackData, int nDataLen,int nFrameNum);

/*************************************************************************
*	Funcname: 	    	DRAW_InputAlarmData
*	Purpose:			导入警报数据
*   InputParam:         nPort:端口号
*						pJsonData:警报数据内存地址
*						nDataLen:数据长度
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
***************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputAlarmData(int nPort, int nType, unsigned char* pAlarmData, int nDataLen);

/***************************************************************************
*	Funcname: 	    	DRAW_InputAlarmDataEx
*	Purpose:			导入警报数据
*   InputParam:         nPort:端口号
*						pJsonData:警报数据内存地址
*						nDataLen:数据长度
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:20  
*   Revision Record:    2012/12/20:YeYamin:modify......
****************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputAlarmDataEx(int nPort, int nType, unsigned char* pAlarmData, int nDataLen);

/***************************************************************************
*	Funcname: 	    	DRAW_InputMoveCheckData
*	Purpose:			导入动检信息数据
*   InputParam:         nPort:端口号
*						nType:类型
*						pData:动检信息数据
*						nDataLen:动检数据长度
*						nFrameNum:帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2013/09/23  
*   Revision Record:    2013/09/23:Zhoujj:modify......
****************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputMoveCheckData(int nPort, int nType, unsigned char* pData, int nDataLen, int nFrameNum);

/***************************************************************************

*	Funcname: 	    	DRAW_InputTextData
*	Purpose:			指定位置显示一串字符串（可多行，以\n结尾）
*   InputParam:         nPort:端口号
*						pText:要显示的字符串
*                       nTextNumPos:字符串个数 
*                       hPos:字符串显示位置 
*						nFontsize:字体大小
*						red green blue:字体颜色
*						nAlignMode:对齐方式，0：左对齐，1：居中对齐，2：右对齐
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2013/09/23  
*   Revision Record:    2013/09/23:Zhoujj:modify......
****************************************************************************/

typedef struct
{
	const char* pText;
	IVSPOINT hPos;
	int nFontsize;
	int nRed;
	int nGreen;
	int nBlue;
    int nAlignMode;
}TextData;



IVSDRAWER_API int  CALLMETHOD DRAW_InputTextData(int nPort, TextData* pTextData, int nTextNumPos);

/****************************************************************************
*	Funcname: 	    	DRAW_Draw
*	Purpose:			执行作图操作
*   InputParam:         nPort:作图端口
*						hDC:	作图设备句柄
*						hwnd:	窗口句柄
*						Frame:	帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
****************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_Draw(int nPort, IVS_DC_REF hDC,IVS_WND_REF hwnd,int nFrameNum);

/****************************************************************************
*	Funcname: 			DRAW_SetLifeCount    	
*	Purpose:			设置生存时间
*   InputParam:         nPort: 作图端口
*						type:	类型
*						nLifeCount:	生存时间
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*****************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_SetLifeCount(int nPort, int type,int nLifeCount);

/*****************************************************************************
*	Funcname: 			DRAW_SetEnable	
*	Purpose:			设置使能
*   InputParam:         nPort: 作图端口
*						type:	类型
*						bEnable:	使能
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
******************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_SetEnable(int nPort, int nType, IVS_BOOL bEnable);

/******************************************************************************
*	Funcname: 			DRAW_SetPen	
*	Purpose:			创建画笔
*   InputParam:         nPort: 作图端口
*						nType:	规则类型
*						nPenStyle: 画笔格式（实线or虚线）
*						nWidth: 画笔宽度
*						crColor: 画笔颜色
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*******************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_SetPen(int nPort, int nType, int nPenStyle, int nWidth, IVS_COLOR crColor);

/*******************************************************************************
*	Funcname: 			DRAW_GetLastError	
*	Purpose:			获取最后的错误码
*   InputParam:         nPort: 作图端口
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*******************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_GetLastError(int nPort);

/*******************************************************************************
*	Funcname: 			DRAW_Ioctl	
*	Purpose:			执行命令操作
*   InputParam:         nPort: 作图端口
*						cmdType:	命令类型
*						context: 命令参数地址
*						len: 命令参数长度
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
********************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_Ioctl(int nPort,int cmdType,void* context,int len);

/********************************************************************************
*	Funcname: 			DRAW_InputJpegData	
*	Purpose:			导入JPEG数据
*   InputParam:         nPort: 作图端口
*						nType:	未使用
*						pJpegData: JPEG数据内存地址
*						nDataLen: 数据长度
*						nFrameNum: 帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*********************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_InputJpegData(int nPort, int nType, unsigned char* pJpegData, int nDataLen,int nFrameNum);

/*********************************************************************************
*	Funcname: 			DRAW_Refresh	
*	Purpose:			刷新帧序号
*   InputParam:         nPort: 作图端口
*						nFrameNum:	帧序号
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*********************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_Refresh(int nPort,int nFrameNum);

/*********************************************************************************
*	Funcname: 			DRAW_Idle	
*	Purpose:			没用
*   InputParam:         nPort: 作图端口			
*   Return:             void
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*********************************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_Idle(int nPort);

/*********************************************************************************
*	Funcname: 			DRAW_Clean	
*	Purpose:			清除作图内容
*   InputParam:         nPort: 作图端口
*						nRevered:	预留参数
*   Return:             void
*   Created:	        2012:12:19  
*   Revision Record:    2012/12/19:YeYamin:modify......
*********************************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_Clean(int nPort,int nRevered);

/*********************************************************************************
*	Funcname: 			DRAW_SetTime	
*	Purpose:			设置轨迹开始时间（视频浓缩）
*   InputParam:         nPort: 作图端口
*						nTime: 时间
*						nObjectId: 物体ID
*   Return:             int: 成功返回0， 失败返回 -1；
*   Created:	        2013:11:19  
*   Revision Record:    2013/11/19:Zhoujj:modify......
*********************************************************************************/
IVSDRAWER_API int CALLMETHOD DRAW_SetTime(int nPort,int nTime, int nObjectId);

/*********************************************************************************
*	Funcname: 			DRAW_SetShowType	
*	Purpose:			设置显示类型，现在的类型有rule，alarm，track
*   InputParam:         nPort: 作图端口
*						ntype: 要显示的类型，多种类型可使用“与”操作符（"|"）
*   Return:             void
*   Created:	        2014:11:17  
*   Revision Record:    2014:11:17:wj8:created......
*********************************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_SetShowType(int nPort, int ntype);

/*********************************************************************************
*	Funcname: 			DRAW_SetDrawOneTrackCallback
*	Purpose:			画track回调
*   InputParam:         nPort: 作图端口
*   Return:             void
*   Created:	        2015:04:24  
*   Revision Record:    2015:04:24:wj8:created......
*********************************************************************************/
typedef void (CALLMETHOD* OnDrawOneTrack)(int nClassID, int nObjID, DH_IVS_POINT* pPoints, int nPointNum, void* pUD);
IVSDRAWER_API void CALLMETHOD DRAW_SetDrawOneTrackCallback(int nPort, OnDrawOneTrack pCB, void* pUD);

/*********************************************************************************
*	Funcname: 			DRAW_SetRuleTrackAlarm
*	Purpose:			由此规则产生的track报警会被忽略
*   InputParam:         nPort: 作图端口
*						pRuleName： 规则名
*						bEnable: 是否开启
*   Return:             void
*   Created:	        2015:04:24  
*   Revision Record:    2015:04:24:wj8:created......
*********************************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_SetRuleTrackAlarm(int nPort, const char* pRuleName, bool bEnable);

/*********************************************************************************
*	Funcname: 			DRAW_SetShowTrackType
*	Purpose:			设置track的显示规则
*   InputParam:         nPort: 作图端口
*						type: 0：显示所有track（默认方式），1：只显示有报警的track
*   Return:             void
*   Created:	        2015:04:24
*   Revision Record:    2015:04:24:wj8:created......
*********************************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_SetShowTrackType(int nPort, int type);

IVSDRAWER_API void CALLMETHOD DRAW_SetFrameNum(int nPort, int frameno);

/******************************************************************************
*	Funcname: 			DRAW_SetTrackObjectColor	
*	Purpose:			根据{大类ID, 物体ID}设置跟踪物体颜色, 形状
*   InputParam:         nPort: 作图端口
*						nClassId: 大类id
*						nObjectId: 物体id
*						crColor: 画笔颜色
*						bSpecialShape:1:特殊形状, 0:默认矩形.
*                       bSpecialSingle:1:只保留当前跟踪框的特殊形状，其他跟踪框回到默认形状 0：形状不变。
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*******************************************************************************/
IVSDRAWER_API int  CALLMETHOD DRAW_SetTrackObjectColor(int nPort, int nClassId, int nObjectId, IVS_COLOR crColor, bool bSpecialShape,bool bSpecialSingle);
/******************************************************************************
*	Funcname: 			DRAW_SetTrackEX2Sharp	
*	Purpose:			根据bSpecialShape标志，设置车辆识别跟踪框形状
*   InputParam:         nPort: 作图端口
*						bSpecialShape:1:特殊形状, 0:默认矩形.
*   Return:             int : 是否成功，成功返回0，不成功返回-1
*******************************************************************************/
IVSDRAWER_API int CALLMETHOD DRAW_SetTrackEX2Sharp(int nPort, bool bSpecialShape);
/******************************************************************************
*	Funcname: 			DRAW_SetTrackEx2Config	
*	Purpose:			根据trackex2config的设置来显示某些字段，默认是不显示的
*   InputParam:         nPort: 作图端口
*						trackex2config:控制是否显示某些字段
*   Return:             void
*******************************************************************************/
IVSDRAWER_API void CALLMETHOD DRAW_SetTrackEx2Config(int nPort, TrackEx2Configure trackex2config);

#ifdef NACL
IVSDRAWER_API void CALLMETHOD DRAW_SetDrawSurfaceParam(int nPort, int nx, int ny, int nwidth, int nheight);
#endif

#ifdef __cplusplus
}
#endif

#endif
