fix: 修复多机自主着陆点显示问题,对外新增自主着陆点与飞机连线接口 #42

Merged
WuChengbo merged 1 commits from dev/cbwu into master 10 months ago

@ -414,4 +414,26 @@ extern "C" void WINAPI OnShowTargetPoint(double lon, double lat, int pixelSize)
{ {
g_mapShowDlg.OnShowTargetPoint(lon,lat,pixelSize); g_mapShowDlg.OnShowTargetPoint(lon,lat,pixelSize);
} }
}
//功能:显示自主着陆点与飞机的连线
//输入飞机ID飞机经纬度显示/清除bShow为false时uavLonuavLat随意设置无实际作用
extern "C" void WINAPI ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow)
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
if (g_bCreateMap)
{
g_mapShowDlg.ShowLine14Ex(uavID,uavLon,uavLat,bShow);
}
}
//功能:设置装订的自主着陆点坐标
//输入飞机ID自主着陆点经纬度
extern "C" void WINAPI SetBindLine14Coordinate(int uavID,double lon,double lat)
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
if (g_bCreateMap)
{
g_mapShowDlg.SetBindLine14Coordinate(uavID,lon,lat);
}
} }

@ -111,7 +111,12 @@ extern "C" _declspec(dllexport) void DrawCallBackPoint(const BYTE callbackMode,
extern "C" _declspec(dllexport) void OnShowTargetPoint(double lon, double lat, int pixelSize); extern "C" _declspec(dllexport) void OnShowTargetPoint(double lon, double lat, int pixelSize);
//功能:显示自主着陆点与飞机的连线
//输入飞机ID飞机经纬度显示/清除bShow为false时uavLonuavLat随意设置无实际作用
extern "C" _declspec(dllexport) void ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow);
//功能:设置装订的自主着陆点坐标
//输入飞机ID自主着陆点经纬度
extern "C" _declspec(dllexport) void SetBindLine14Coordinate(int uavID,double lon,double lat);
//#endif //#endif

@ -61,6 +61,7 @@
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Template|Win32'" /> <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Template|Win32'" />
<OutDir Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">..\$(Configuration)\</OutDir> <OutDir Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">..\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">$(Configuration)\</IntDir> <IntDir Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">$(Configuration)\</IntDir>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">GISControlDlgUAV</TargetName>
</PropertyGroup> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl> <Midl>

@ -953,6 +953,7 @@ void CGISDlg::OnMapZoomOut()
m_bLDSetPoint = FALSE; m_bLDSetPoint = FALSE;
m_bSelectFeatureFlag = false; m_bSelectFeatureFlag = false;
} }
//地图漫游 //地图漫游
@ -974,7 +975,6 @@ void CGISDlg::OnMapMove()
m_bLDSetPoint = FALSE; m_bLDSetPoint = FALSE;
m_bSelectFeatureFlag = false; m_bSelectFeatureFlag = false;
} }
@ -4618,22 +4618,14 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
//Label集合 //Label集合
CLabels labesPtr; CLabels labesPtr;
labesPtr = (m_map.GetShapefile(m_ppPlanLineShpLayerIDArr[lineID][0])).GetLabels(); labesPtr = (m_map.GetShapefile(m_ppPlanLineShpLayerIDArr[lineID][0])).GetLabels();
//CLabelCategory labelCategory = labesPtr.AddCategory(_T("红色"));
//labelCategory.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]);
//labelCategory.SetAlignment(1);
//labelCategory.SetFontBold(TRUE);
//labelCategory.SetFontName(LPCTSTR("黑体"));
//labelCategory.SetFontSize(12);
//labesPtr.SetAvoidCollisions(FALSE);
labesPtr.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]); labesPtr.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]);
labesPtr.SetAlignment(1); labesPtr.SetAlignment(1);
labesPtr.SetFontBold(true); labesPtr.SetFontBold(true);
labesPtr.SetFontName(LPCTSTR("黑体")); labesPtr.SetFontName(LPCTSTR("黑体"));
labesPtr.SetFontSize(16); labesPtr.SetFontSize(12);
labesPtr.put_FontSize2(16); labesPtr.put_FontSize2(12);
labesPtr.SetFrameVisible(false); labesPtr.SetFrameVisible(false);
labesPtr.SetAvoidCollisions(FALSE); labesPtr.SetAvoidCollisions(false);
CString strText = _T(""); CString strText = _T("");
@ -4644,7 +4636,7 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
//标注信息 //标注信息
if ( 14 ==lineData.lineID) if ( 14 ==lineData.lineID)
{ {
strText.Format(_T("自主着陆点") /*lineData.lineID, */ /*lineData.pts[i].nPt*/); strText.Format(_T("着陆点") /*lineData.lineID, */ /*lineData.pts[i].nPt*/);
} }
else else
{ {
@ -4715,10 +4707,10 @@ void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData)
labesPtr.SetAlignment(1); labesPtr.SetAlignment(1);
labesPtr.SetFontBold(true); labesPtr.SetFontBold(true);
labesPtr.SetFontName(LPCTSTR("黑体")); labesPtr.SetFontName(LPCTSTR("黑体"));
labesPtr.SetFontSize(16); labesPtr.SetFontSize(12);
labesPtr.put_FontSize2(16); labesPtr.put_FontSize2(12);
labesPtr.SetFrameVisible(false); labesPtr.SetFrameVisible(false);
labesPtr.SetAvoidCollisions(FALSE); labesPtr.SetAvoidCollisions(false);
CString strText = _T(""); CString strText = _T("");
@ -4729,7 +4721,7 @@ void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData)
//标注信息 //标注信息
if ( 14 ==lineData.lineID) if ( 14 ==lineData.lineID)
{ {
strText.Format(_T("自主着陆点(%d)") /*lineData.lineID, */ /*lineData.pts[i].nPt*/,lineData.pts[0].nV); strText.Format(_T("着陆点%d") /*lineData.lineID, */ /*lineData.pts[i].nPt*/,lineData.pts[0].nV);
} }
else else
{ {
@ -5124,6 +5116,8 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID)
OnShowGivenLine(str); OnShowGivenLine(str);
if (g_b981AMulti) if (g_b981AMulti)
{ {
if (lineIndex == 13) return;//自主着陆点
CString tmp; CString tmp;
m_bShowCopyLine = true; m_bShowCopyLine = true;
for (int i=2;i<=10;++i) for (int i=2;i<=10;++i)
@ -5237,10 +5231,10 @@ void CGISDlg::OnShowGivenLine(const CString strLineFileName)
} }
m_lineFullPathName[lineDataGroup.lineID] = strLineFileName; m_lineFullPathName[lineDataGroup.lineID] = strLineFileName;
if (lineDataGroup.pts[0].nV>1) if (lineDataGroup.pts[0].nV>0) //多机ID号
{ {
//清除标绘的航线 //清除标绘的航线
ClearDrawedCopyLine(lineDataGroup.lineID-1,lineDataGroup.pts[0].nV); ClearDrawedCopyLine(lineDataGroup.lineID-1,lineDataGroup.pts[0].nV-1);
//标绘航线 //标绘航线
DrawCopyFlyLine(lineDataGroup); DrawCopyFlyLine(lineDataGroup);
@ -8738,7 +8732,48 @@ void CGISDlg::OnShowTargetPoint(double lon,double lat,int pixelSize)
m_map.Redraw(); m_map.Redraw();
} }
//显示自主着陆点与飞机的连线
void CGISDlg::ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow)
{
if (bShow)
{
//图层已存在,先删除
auto it = m_TempLine14LayerID.find(uavID);
if (it!=m_TempLine14LayerID.end())
{
m_map.ClearDrawing((*it).second);
m_TempLine14LayerID.erase(it);
}
//自主着陆点坐标
auto it1 = m_CoordinateBindLine14.find(uavID);
if (it1==m_CoordinateBindLine14.end()) return;
//绘制连线
long layer = m_map.NewDrawing(1);
m_map.DrawLineEx(layer,uavLon,uavLat,(*it1).second.x,(*it1).second.y,2,LineClr[13]);
m_TempLine14LayerID[uavID] = layer;
m_map.Redraw2(mapWindow::RedrawMinimal);
}
else
{
//图层已存在,先删除
auto it = m_TempLine14LayerID.find(uavID);
if (it!=m_TempLine14LayerID.end())
{
m_map.ClearDrawing((*it).second);
m_map.Redraw2(mapWindow::RedrawMinimal);
m_TempLine14LayerID.erase(it);
}
}
}
//设置装订的自主着陆点坐标
void CGISDlg::SetBindLine14Coordinate(int uavID,double lon,double lat)
{
Point2D pt;
pt.x = lon;
pt.y = lat;
m_CoordinateBindLine14[uavID] = pt;
}

@ -247,9 +247,16 @@ public:
*/ */
void ZoomToLocation(double lon,double lat); void ZoomToLocation(double lon,double lat);
private: // by Wu //显示自主着陆点与飞机的连线
void ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow);
//设置装订的自主着陆点坐标
void SetBindLine14Coordinate(int uavID,double lon,double lat);
private:
//map<int,map<long,long>> m_subLineLayerID; //子航线线图层号 //map<int,map<long,long>> m_subLineLayerID; //子航线线图层号
//map<int,map<long,long>> m_subLinePtLayerID; //子航线点图层号 //map<int,map<long,long>> m_subLinePtLayerID; //子航线点图层号
map<int,long> m_TempLine14LayerID; //存储自主着陆点与飞机的连线图层
map<int,Point2D> m_CoordinateBindLine14; //存储已装订的自主着陆点坐标,用于与飞机连线
long m_subLineLayerID[20][255]; //子航线线图层号 long m_subLineLayerID[20][255]; //子航线线图层号
long m_subLinePtLayerID[20][255]; //子航线点图层号 long m_subLinePtLayerID[20][255]; //子航线点图层号
bool m_pHaveDrawCopyLineFlag[20][255]; bool m_pHaveDrawCopyLineFlag[20][255];

Loading…
Cancel
Save