📄 scapi.h
字号:
/**
* GPS事件
*/
typedef enum ScGPSEvent
{
SC_GPS_DETECTING = 0x0101, ///< 正在探测GPS
SC_GPSNOTFOUND = 0x0102, ///< 没有探测到GPS
SC_GPSFOUND = 0x0103, ///< 找到了GPS
SC_GPSMATCHING = 0x0104, ///< 正在进行GPS匹配
SC_GPSCONNECTING = 0x0105, ///< 正在连接GPS
SC_GPS_CONNECTED = 0x0106, ///< GPS已连接
SC_GPS_DISCONNECTED = 0x0107, ///< GPS已断开
SC_GPS_FIXING = 0x0108, ///< GPS正在定位中
SC_GPS_FIXED = 0x0109, ///< GPS已完成定位
SC_GPS_POSITION = 0x010a, ///< 报告GPS位置
} ScGPSEvent ;
/**
* 路径计算事件
*/
typedef enum ScRouteEvent
{
SC_ROUTE_CALCULATING = 0x0101, ///< 路径计算中
SC_ROUTE_RECALCULATING = 0x0102, ///< 路径重新计算中
SC_ROUTE_SUCCESS = 0x0103, ///< 路径计算成功
SC_ROUTE_WAYPOINTOK = 0x0104, ///< 航程点添加成功
SC_ROUTE_CANCELLED = 0x0105, ///< 路径计算已取消
SC_ROUTE_DELETED = 0x0106, ///< 路径已被删除
SC_ROUTE_FAILED = 0x0107, ///< 路径计算失败
Sc_ROUTE_CONSTRAINT_INVALID = 0x0108 ///< 避让路段无效
} ScRouteEvent;
/**
* 错误事件
*/
typedef enum ScErrorEvent
{
SC_ERR_OK = 0, ///< 没有错误
SC_ERR_UNKNOWNERROR = 0xffff0001, ///< 未知错误
SC_ERR_FAILEDTOREGISTERDLL = 0xffff0002, ///< 注册DLL失败
SC_ERR_FAILEDTOCREATEINSTANCE= 0xffff0003, ///< 生成COM实例失败
SC_ERR_FAILEDTOINITCONNECTION= 0xffff0004, ///< 初始化连接失败
SC_ERR_FAILEDTOCREATESTYLES = 0xffff0005, ///< 载入样式失败
SC_ERR_FAILEDTOINITIALIZEMAP = 0xffff0006, ///< 初始化地图失败
SC_ERR_FAILEDTOLOADMAPXML = 0xffff0007, ///< 载入地图xml失败
SC_ERR_FAILEDTOCREATEMAPCONTROL = 0xffff0008,///< 生成MapControl失败
SC_ERR_MANEUVER_CREATE = 0xffff0009, ///< 创建机动错误
SC_ERR_WAYPOINT_CREATE = 0xffff000a, ///< 航程点创建错误
SC_ERR_WAYPOINT_ADD = 0xffff000b, ///< 航程点添加错误
SC_ERR_ROUTECALC = 0xffff000c, ///< 路径计算错误
SC_ERR_MANEUVER_NEAR = 0xffff000d, ///< 取最近的机动时错误
SC_ERR_SHORTOFSTARTPOINT = 0xffff000e, ///< 路径计算时缺少起点
SC_ERR_SHORTOFENDPOINT = 0xffff000f, ///< 缺少目的地
SC_ERR_SHORTOFBOTH = 0xffff0010, ///< 缺少起点和目的地
SC_ERR_TOOMANYWAYPOINT = 0xffff0011, ///< 航程点添加失败,原因是航程点太多
SC_ERR_WPTPOSITIONTOONEAR = 0xffff0012, ///< 起点和终点位置太近
SC_ERR_GUIDNOROUTE = 0xffff0013, ///< 启动路径引导时没有路径
SC_ERR_ALREADYGUIDING = 0xffff0014, ///< 已经处于引导状态时不能再次启动引导
SC_ERR_GETMANEUVERHEAD = 0xffff0015, ///< 引导时取启动头失败
SC_ERR_INVALIDNAME = 0xffff0016, ///< 非法名称
SC_ERR_NULLPOINTER = 0xffff0017, ///< 空指针
SC_ERR_WAYPOINT_SETPOS = 0xffff0018, ///< 指定航程点位置时失败
SC_ERR_VERSIONEXPIRED = 0xffff0019, ///< 版本过期
};
/**
* 注册事件
*/
typedef enum ScRegisterEvent
{
// SC_REG_MACHINESN_REQUIRED = 0x01, ///< 需要机器码
SC_REG_PRODUCTSN_REQUIRED = 0x02, ///< 需要产品码
SC_REG_SURECODE_REQUIRED = 0x03, ///< 需要确认码,此时捎带有安装码
SC_REG_FAILED = 0x04, ///< 注册失败
SC_REG_OK = 0x05, ///< 注册成功
} ScRegisterEvent;
/**
* GPS状态
*/
enum ScGPSStatus
{
SC_GPS_SEARCHING = 1, ///< 搜索中
SC_GS_DISCONNECTED = 2, ///< 断开连接
SC_GS_ERROR = 3, ///< 连接失败
SC_GS_FIXING = 4, ///< 连接,未定位
SC_GS_FIXED = 5, ///< 连接,已定位
};
/**
* 系统状态
* 低16位为实际业务状态
* 高16位为SC_SS_RUNNING才为可正常进行业务操作的状态
* 高16位为SC_SS_DEADTHWARRANT表示需借助外部才能恢复到正常状态,暂未使用
* 如状态为0x00020000,即为正常运行状态
* 如状态为0x00020001,即为正常的地图浏览状态
*/
enum ScSystemStatus
{
SC_SS_BROWSER = 0x01, ///< 地图浏览状态
SC_SS_SIMGUIDING = 0x02, ///< 模拟引导状态
SC_SS_REALGUIDING = 0x04, ///< 真实引导
SC_SS_GPSTRACKING = 0x08, ///< GPS跟踪
SC_SS_SYSTEMMASK = 0xffff, ///< 状态掩码
SC_SS_UNINITIALIZED = 0x00, ///< 尚未初始化
SC_SS_INITIALIZING = 0x00010000, ///< 系统在初始化过程中
SC_SS_RUNNING = 0x00020000, ///< 系统正在正常运行中
SC_SS_SHUTDOWNING = 0x00040000, ///< 系统在关闭过程中
SC_SS_PAUSED = 0x00080000, ///< 系统处于暂停状态
SC_SS_DEADTHWARRANT = 0x00100000, ///< 系统因某种致命错误而无法自动恢复到正常状态
};
/**
* 消息来源
*/
enum ScMessageSource
{
SC_MS_SIMNAV = 1, ///< 模拟引导
SC_MS_REALNAV = 2, ///< 实际引导状态
SC_MS_PLAYBACK = 3, ///< 轨迹回放
};
///////////////////////////常量定义//////////////////////////////////
//SC_LOG: 只能SC内部使用
//外部请使用ScDebugMsg
//ScDebugMsg只能在ScInit之后调用才有效
//日志内容附带有产生日志时的时间戳和内存信息。
//日志文件名:debug.YYYYMMDD_HHMMSS.XXXXXXXX.txt,XXXXXXXX为SC本次运行产生的日志文件序号
//产生日志的条件:
//1.编译SC时必须使用SC_OP_LOG这个宏
//2.必须在工作目录下放置debug.log.txt文件,才能
//3.SC_OP_FILELOG: 在工作目录的log子目录下创建日志文件
//4.SC_OP_DEBUGLOG: 在WIN32下,生成调试信息(OutputDebugString)
//5.SC_OP_CONSOLELOG: 生成控制台信息
#ifdef SC_OP_LOG
#include "filelog.h"
#define SC_LOG CFileLog::LogIt
#else
#define SC_LOG Sc_NullLog
#endif
inline void Sc_NullLog(const ScChar *msg,...){}
inline void Sc_NullLog(const ScWChar *msg,...){}
SC_API void ScDebugMsg(const ScChar *, ...);
SC_API void ScDebugMsg(const ScWChar *, ...);
//////////////// POIInfo部分 //////////////////
// 要显示一个POIINFO,用户需要拥有两件武器:DisplayMode和PoiInfo对象
// 在程序开始后(各模块创建后),用户才可以创建自己的DisplayMode和PoiInfo。
// 概念上,一个DisplayMode是一种显示模式,这种显示模式下可以显示某一种
// 类型的多个POI。
// 例如用户需要显示很多图标POI,那么他需要创建一个图标的DisplayMode,
// 然后在合适的情况下调用新增POI函数
// 事实上PoiInfo不仅仅可以显示PoiInfo,还可以显示线。
enum {
POIINFO_POINT = 0x1, // 点POI,仅仅显示一个图标
POIINFO_POINTSTYLE=0x2, // 点POI
POIINFO_POINTTEXT=0x3, // 点POI,图标+文字
POIINFO_POINTSTYLETEXT=0x4, // 点POI,图标+文字
POIINFO_LINE=0x5, // 线POI
POIINFO_ROAD=0x6 // 路段POI,绘制某一个路段
}; /**< POIINFO的类型 */
/**
* POIINFO的基类,每个类型必须以这个基本类型为头。
*/
class ScPoiInfo {
public:
virtual ScInt GetType() const = 0;
};
/**
* POIINFO_POINT类型, 在地图某点位置绘制一个图标。
* 图标可以绘制在一个圆形上。
*/
class ScPointPoiInfo : public ScPoiInfo
{
public:
ScInt GetType() const { return POIINFO_POINT; }
ScLogPoint point; /**< 图标中心点位置 */
ScUChar iconindex; /**< 图标在图标文件种的索引值 */
ScUChar reserved[3];
};
/**
* POIINFO_POINTSTYLE类型,在地图某点位置绘制一个图标
*/
class ScPointStylePoiInfo : public ScPoiInfo
{
public:
ScInt GetType() const { return POIINFO_POINTSTYLE; }
ScLogPoint point; /**< 图标点位置 */
};
/**
* POIINFO_POINTTEXT类型,在地图某点位置绘制一个图标和文字
*/
class ScPointTextPoiInfo : public ScPoiInfo
{
public:
ScInt GetType() const { return POIINFO_POINTTEXT; }
ScLogPoint point; /**< 点位置 */
ScWChar name[32]; /**< 文字内容 */
ScUChar iconindex; /**< 图标在图标文件种的索引值 */
};
/**
* POIINFO_POINTSTYLETEXT类型,在地图某点位置绘制一个图标和文字
* 和POIINFO_POINTEXT类似,不同之处在于绘制图标时是用styleid指定。
*/
class ScPointStyleTextPoiInfo : public ScPoiInfo
{
public:
ScInt GetType() const { return POIINFO_POINTSTYLETEXT; }
ScLogPoint point;
ScWChar name[32];
};
/**
* POIINFO_LINE类型
*/
class ScLinePoiInfo : public ScPoiInfo
{
public:
ScLinePoiInfo() { numpoints = 0; points = NULL; selfcontain = 0;}
ScInt GetType() const { return POIINFO_LINE; }
ScUInt numpoints; /**< 点数目*/
ScLogPoint *points; /**< 点坐标 */
ScUInt selfcontain;
};
/**
* POIINFO_ROAD
*/
class ScRoadPoiInfo : public ScPoiInfo
{
public:
ScInt GetType() const { return POIINFO_ROAD; }
ScLong idhigh;
ScLong idlow;
};
struct DisplayMode
{
// 显示模式有两种调用模式,同步和异步。
// 在同步模式下,MD不会保存POIINFO对象。而是在MD需要绘制POI时,
// 给对应的模块发送SMG_MSG_DRAWPOI消息,然后在由该模块调用ScMDDrawPoi
// 来完成绘制工作。
// SC外部只能使用异步模式。此时任何ScMDPoiAdd加入的POI将保存在MD内部
// 在合适的时候绘制
enum {
CALLMODE_SYNC,
CALLMODE_ASYNC
};
ScUChar callmode; // 0 = sync, 1 = async
// POI显示的位置:或者在地图的最顶一层(在动态注记下)
// 或者在地图的顶部(在动态注记上)
enum {
PLACE_LAYER,
PLACE_TOP
};
ScUChar place; // 0 = in layer, or 1 = in after da
// POI只有在这个比例尺范围内才显示
ScUChar minscaleindex;
ScUChar maxscaleindex;
// 是否可见
ScUChar visible;
ScUChar reserved[3];
enum {
DISPLAY_POINT = 0x01,
DISPLAY_POINTSTYLE=0x02,
DISPLAY_TEXT = 0x04,
DISPLAY_TEXTSTYLE=0x08,
DISPLAY_LINE = 0x10,
DISPLAY_LINESTYLE=0x20
};
// 显示类型,注意实际上只有POINT和TEXT类型可以同时存在
// 这个类型和传入的POI类型必须匹配。
ScInt displaytype; // bit01=PointSetting, bit23 = TextSetting // bit45=LineSetting
union {
struct PointSettings {
ScWChar iconfile[16];
ScInt circlecolor;
ScInt circleradius;
} ps;
struct PointStyleSettings {
ScInt pointstyleid;
ScInt circlecolor;
ScInt circleradius;
} pss;
}pointu;
/** 有文字时,textflags的位标志 */
enum {
TEXT_HASBACKGROUND = 0x1,
TEXT_HASFRAME = 0x2
};
union {
struct TextSettings {
ScWChar fontname[16];
ScInt fontheight;
ScInt fontcolor;
ScInt backcolor;
ScInt framecolor;
ScInt flags; // MD_TEXT_HAS_BACKGROUND, MD_TEXT_HAS_FRAME
} ts;
struct TextStyleSetting {
ScInt labelstyleid;
} tss;
}textu;
union {
struct LineSetting {
ScInt linecolor;
ScUChar blendmode; // 0 =PEN, 1=XOR
ScUChar linewidth;
ScUChar arrowtype; // 0 = no arrow, 1 = arrow, 2=cross arrow
ScUChar reserved;
} ls;
struct LineStyleSetting {
ScInt linestyleid;
ScUChar blendmode;
ScUChar reserved[3];
} lss;
}lineu;
};
// predefined position
// layer
// 0 = 路径
// 1 = 路书和轨迹
// top
// 0 = 地址簿
// 1 = 事件点
// 2 = 周边设施
// 3 = 路书
#define MD_POS_ROUTE 0
#define MD_POS_TRACK_LINE 1
#define MD_POS_ADDRBOOK 0
#define MD_POS_EVENTPOS 1
#define MD_POS_ROUNDPOI 2
#define MD_POS_TRACk_ICON 3
SC_API ScInt ScMDRegisterDisplay(int position, const DisplayMode *dm);
SC_API ScInt ScMDUnregisterDisplay(ScInt handle);
SC_API ScInt ScMDModifyDisplay(ScInt handle, const DisplayMode *dm);
SC_API ScInt ScMDGetDisplay(ScInt handle, DisplayMode *dm);
SC_API ScInt ScMDPoiAdd(ScInt handle, ScPoiInfo *poi);
SC_API ScInt ScMDPoiRemoveAll(ScInt handle);
SC_API ScInt ScAddrBookIconFile(ScWChar *filename, ScInt maxlen);
///////////////////////////////// 路书相关 /////////////////////////////////////
//#ifdef SC_MOD_TRAVELOGUE
struct ScTvlInfo
{
ScWChar filename[32];
ScInt type;
ScWChar author[32];
ScInt starttime; /**< the time the first point of track is recorded, in elapsed seconds since Jan, 1st, 1970 */
ScLong edittime;
ScWChar startcity[10];
ScWChar endcity[10];
ScInt infopointcnt;
};
struct ScTvlAttr
{
ScUInt color;
ScUChar visible;
ScUChar reserved[3];
};
struct ScTvlPickInfo
{
ScInt tvlid;
ScInt pointid;
};
struct ScTvlPoint
{
ScWChar name[20];
enum {
TLP_HEAD,
TLP_POINT,
TLP_LINE
};
unsigned short type;
ScLong mileage;
ScLong iconIndex;
ScLong remindRadius;
ScLong lon;
ScLong lat;
ScLong desLen;
#define MAX_DESC_LENGTH 128
ScWChar pDes[MAX_DESC_LENGTH];
ScLong resLen;
ScWChar pRes[MAX_DESC_LENGTH];
};
/** 扫描目录,重新读取track文件 */
SC_API ScInt ScTvlScan();
/** 获得track数目 */
SC_API ScInt ScTvlGetTrackNum();
/** 删除序号为tvlid的track */
SC_API ScInt ScTvlRemoveTrack(ScInt tvlid);
/** 为序号为tvlid的track改名,newname为新的不带目录和后缀的名字 */
SC_API ScInt ScTvlRenameTrack(ScInt tvlid, const ScWChar *newname);
SC_API ScInt ScTvlGetInfo(ScInt tvlid, ScTvlInfo *info);
SC_API ScInt ScTvlZoomToTrack(ScInt tvlid);
SC_API ScInt ScTvlGetTrackPointNum(ScInt tvlid);
SC_API const ScLogPoint *ScTvlGetTrackPoint(ScInt tvlid);
/** 设定导航路径,如果tvlid为-1,那么设定为不导航 */
SC_API ScInt ScTvlSetGuideTrk(ScInt tvlid);
SC_API ScInt ScTvlGetGuideTrk();
SC_API ScInt ScTvlPointNum(ScInt tvlid);
SC_API ScInt ScTvlGetPoint(ScInt tvlid, ScInt pointid, ScTvlPoint *pnt);
SC_API ScInt ScTvlLocatePoint(ScInt tvlid, ScInt pointid);
SC_API ScInt ScTvlGetAttr(ScInt tvlid, ScTvlAttr *attr);
SC_API ScInt ScTvlSetAttr(ScInt tvlid, const ScTvlAttr *attr);
SC_API ScInt ScTvlPick(const ScDevPoint *pt, ScTvlPickInfo *info, ScInt maxnumpoints);
//#endif
/////////////////////////////////////////////////////////////////////////////////////////////////
/**
搜索相关定义&API
*/
//----------POI Type------------------------
/**
* POI类别
*/
struct ScPOIType {
ScInt nID; //POI类别ID 设施点类型编码/如果该类型下有子类型,改编码为最小设施点类型编码
ScInt nMaxID; // 最大设施点类型编码/如果该类型下没有子类型,改编码无用设为0
ScWChar sName[SC_POITYPENAME_MAXSIZE]; //POI类别名称
};
struct ScPOITypeRange{
ScInt nID; //POI类别ID 设施点类型编码/如果该类型下有子类型,改编码为最小设施点类型编码
ScInt nMaxID; // 最大设施点类型编码/如果该类型下没有子类型,改编码无用设为0
};
//返回结果
#define SC_SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
#define SC_FAILED(Status) ((HRESULT)(Status)<0)
enum ScResult
{
S_SC_OK = 0x0,
S_SC_NORESULT = 0x1000, //查询成功但无结果
E_ERROR_IN_PARA = 0x80001000, //输入参数错误
E_FAIL_OPERATION = 0x80001001, //操作失败,
E_FAIL_NOFUNTION = 0x80001002, //无此功能
E_FAIL_NOBUILD =0xFFFFFFFF, //未编译此功能
};
#define ScResult ScInt
enum SC_POITYPE_QUERYTYPE
{
SC_POITYPE_COMMON = 0x0, //常规POI <smge:Common>true</smge:Common>
SC_POITYPE_CLASS1 = 0x1, //取得第1等级类别
SC_POITYPE_CLASS2 = 0x2, //取得第2等级类别
SC_POITYPE_CLASS3 = 0x3, //取得第3等级类别
SC_POITYPE_CURRENT = 0x8, //取得当前设定POITYPE,或关系枚举,与SC_POITYPE_CLASS1/SC_POITYPE_CLASS2/SC_POITYPE_CLASS3联合使用
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -