DoubleGisWindow命令流程图
2023-11-24 09:18:19 5 举报
登录查看完整内容
DoubleGisWindow命令流程图
作者其他创作
大纲/内容
该类为DoubleGsiWindow命令的基类,定义了两个纯虚解析函数,内部有发送和接收函数,初始化时自动调用SouthToolSocket进行注册,析构时注销。发送函数对json数据进行再次封装(cmdName、data)并转换为字符串,使用CSouthToolSocket类进行发送。接收函数对json数据进行提取,提取data部分,调用子类进行解析处理。
const QJsonObject msgData
数据解析函数recvMsg
TRUE
程序关闭命令类CSouthSocketClose(子类)
闭合m_pPolygon删除线段实体
结束
purgeSendMsg
内部成员变量AcDbObjectId m_entID
SouthToolSocket->Close();ads_printf(_T(\"\ 客户端已关闭,tcp连接已断开\\"));
取消dragStatus == kKW2 || dragStatus == kCancel
Start(const AcGePoint2d& point)
数据包装与发送sendMsg
setPolygonID
调用子类数据包装函数purgeSendMsg
内部成员变量m_minPtm_maxPt
FALSE
基类AcEdJig(基类)
QJsonObject msgData;
定义一个CSouthDrawPolygonJig对象obj调用obj的SetCallBackObj传入本命令的对象指针的接口对象调用obj的doIt()开始绘制面积线
命令基类CSouthSocketCommand(基类)
动态绘制面积线命令类CSouthDrawPolygonDyamic(子类)
设置命令名称m_cmdName=cmdName
回调obj->Stop()闭合面积线结束循环
命令
调用子类数据解析函数purgeRecvMsg
成员变量QString m_beginCmd;QString m_moveCmd;QString m_appendCmd;QString m_stopCmd;QString m_cancelCmd;AcGePoint2d m_point;SouthGeoJson geoJson;AcGePoint2d m_spt;AcGePoint2d m_ept;AcDbLine *m_pLine;AcDbPolyline *m_pPolygon;
结束返回m_cmdName
(面积线更新,线段更新起点)设置m_pLine起点为m_ept将m_ept添加到 m_pPloygon里面刷新图像
Tcp是否连接
CSouthSocketViewControl(子类)继承于CSouthSocketCommand(基类)首先调用UpdataView设置左下和右上点坐标再调用父类的方法sendMsg,即可发送视口信息当有数据接收时,父类根据命令名调用子类的purgeRecvMsg函数,解析数据并刷新视口
Stop()
//发送绘制面积线结束的命令geoJson.m_geometry.m_type = m_stopCmd;sendMsg();
动态绘制面积线反应器类CSouthDrawPolygonJig(子类)
数据包装函数purgeSendMsg
调用父类构造函数CSouthSocketCommand(\"GisDoubleWindow_DrawPolygonDynamic\")
//发送移动的命令m_point = point;geoJson.m_geometry.m_type = m_moveCmd;sendMsg();
调用父类构造函数CSouthSocketCommand(\"GisDoubleWindow_Close\")
解析json数据,取出msgData字符串转换为SouthGeoJson,取出所有坐标点使用CSouthDrawManager::DrawPolyline绘制面积线
CAD命令函数SouthToolSouthDWDrawPolygonDynamic
结束minPt = m_minPt;maxPt = m_maxPt;
画一个多段线,获取AcDbObjectId entID调用setPolygonID(entID)再调用sendMsg() 发送多段线数据
删除线段实体和面积线实体
Stop
返回实体*entity
将json数据转换为字符串调用SouthToolSocket->SendMsg(str);
采样sampler
const AcDbObjectId &entID
QJsonObject &msgData
闭合面积线dragStatus == kKW1
Cancel()
动态绘制面积线,有五个步骤Start、MoveTo、Append、Stop、Cancel,这几个方法继承于CSouthDrawPolygonDynamicCom(接口),在动态绘制面积线反应器类CSouthDrawPolygonJig中被调用,从而实现动态绘制面积线,并通过五个接口发送数据,实现在gis里面同步绘制面积线的功能
CAD命令函数SouthToolSouthDWDrawPolygon
Append(const AcGePoint2d& point)
退出
构造函数
UpdataView
CSouthSocketClose(子类)继承于CSouthSocketCommand(基类)直接调用父类的方法sendMsg,即可发送close命令当有数据接收时,父类根据命令名调用子类的purgeRecvMsg函数,服务端自动断开连接
通过m_entID获取多段线顶点并添加到SouthGeoJson的m_geometry.m_coordinates里面,将SouthGeoJson转换为字符串再转换为QJsonObject添加到msgData里面
axisPointTemp != tpt
Append
const AcGePoint2d &point
MoveTo(const AcGePoint2d& point)
SetCallBackObj
dragStatus = drag()
设置坐标m_minPt=minPtm_maxPt=maxPt
动态绘制面积线接口CSouthDrawPolygonDynamicCom(接口)
//发送取消绘制的命令geoJson.m_geometry.m_type = m_cancelCmd;sendMsg();
调用父类构造函数CSouthSocketCommand(\"GisDoubleWindow_Extents\")
Cancel
输入视口的坐标(左下点minPt,右上点maxPt)
视口控制命令类CSouthSocketViewControl(子类)
内部成员变量m_cmdName
获取当前范围GetLastExtents
执行绘制doIt
注册命令与对象SouthToolSocket->AddNotify(this);
CSouthDrawPolygon(子类)继承于CSouthSocketCommand(基类)该命令需要调用一个注册好的静态函数执行绘制面积线,将面积线id发送给本对象,再调用sendmsg把面积线顶点信息发送出去接收到消息时,将json数据转换为字符串,再解析为SouthGeoJson,提取出所有的顶点信息,绘制面积线
包装数据QJsonObject data;data[QS(\"cmdName\")] = m_cmdName;data[QS(\"data\")] = msgData;
关闭m_pPolygon实体
析构函数
purgeRecvMsg
CSouthDrawPolygonDynamicCom *obj
定义字符串m_beginCmd = \"beginDrawPolygon\";m_moveCmd = \"moveDrawPolygon\";m_appendCmd = \"appendPolygonPoint\";m_stopCmd = \"stopDrawPolygon\";m_cancelCmd = \"cancelDrawPolygon\";定义geojson的TypegeoJson.m_geometry.m_type = \"Point\";
获取命令名称getCmdName
type==m_beginCmd
将pt1添加到m_pPolygon刷新视图回调obj->Append(pt1)设置m_pLine起点为pt1
ads_getpoint获取起点pt1初始化m_pLine并设置起点为平pt1初始化m_pPolygon并添加顶点pt1将m_pPolygon添加到实体空间回调obj->Start(pt1)
清空geojson里面的m_coordinates数据将m_point添加到geoJson里面转换为字符串再转换为QJsonObject赋值给msgData
数据解析函数purgeRecvMsg
设置m_pLine终点为m_ept刷新图像(线段终点跟随鼠标移动)
结束返回m_pLine
回调obj->Cancel()删除m_pLine删除m_pPolygon退出函数
包装数据类型msgData[\"type\"] = kCadWindows;
type==m_appendCmd
注销命令SouthToolSocket->RemoveNotify(this);
bool showDispPrompt;AcGePoint2d m_spt,m_ept;AcDbLine *m_pLine;AcDbPolyline *m_pPolyline;CSouthDrawPolygonDynamicCom *m_obj;
type==m_moveCmd
命令名称cmdName
type==m_stopCmd
//发送开始画面积线的命令m_point = point;geoJson.m_geometry.m_type = m_beginCmd;sendMsg();
static AcGePoint3d axisPointTemp;setKeywordList(_T(\"C Q\"));if(true == showDispPrompt) { setDispPrompt(_T(\"\指定起点或[闭合(C)/取消(Q)]:\
Start
m_entID = entID;
设置线段终点为tpt回调obj->MoveTo(tpt)
m_obj = obj
MoveTo
msgData[\"Type\"]==kCadWindows
type==m_cancelCmd
绘制面积线命令类CSouthDrawPolygon(子类)
const AcGePoint2d &point
取出msgData[\"data\"]
QJsonObject &msgData
将msgData转换为字符串,再转换为SouthGeoJson取出第一个点数据赋值给m_ept和geoJson.m_geometry.m_type赋值给type
//发送每一个面积线的端点m_point = point;geoJson.m_geometry.m_type = m_appendCmd;sendMsg();
0 条评论
回复 删除
下一页