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

pull/42/head
cbwu 10 months ago
parent a9d976abb9
commit cdd403e5e0

@ -414,4 +414,26 @@ extern "C" void WINAPI OnShowTargetPoint(double lon, double lat, int 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);
//功能:显示自主着陆点与飞机的连线
//输入飞机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

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

@ -953,6 +953,7 @@ void CGISDlg::OnMapZoomOut()
m_bLDSetPoint = FALSE;
m_bSelectFeatureFlag = false;
}
//地图漫游
@ -974,7 +975,6 @@ void CGISDlg::OnMapMove()
m_bLDSetPoint = FALSE;
m_bSelectFeatureFlag = false;
}
@ -4618,22 +4618,14 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
//Label集合
CLabels labesPtr;
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.SetAlignment(1);
labesPtr.SetFontBold(true);
labesPtr.SetFontName(LPCTSTR("黑体"));
labesPtr.SetFontSize(16);
labesPtr.put_FontSize2(16);
labesPtr.SetFontSize(12);
labesPtr.put_FontSize2(12);
labesPtr.SetFrameVisible(false);
labesPtr.SetAvoidCollisions(FALSE);
labesPtr.SetAvoidCollisions(false);
CString strText = _T("");
@ -4644,7 +4636,7 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
//标注信息
if ( 14 ==lineData.lineID)
{
strText.Format(_T("自主着陆点") /*lineData.lineID, */ /*lineData.pts[i].nPt*/);
strText.Format(_T("着陆点") /*lineData.lineID, */ /*lineData.pts[i].nPt*/);
}
else
{
@ -4715,10 +4707,10 @@ void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData)
labesPtr.SetAlignment(1);
labesPtr.SetFontBold(true);
labesPtr.SetFontName(LPCTSTR("黑体"));
labesPtr.SetFontSize(16);
labesPtr.put_FontSize2(16);
labesPtr.SetFontSize(12);
labesPtr.put_FontSize2(12);
labesPtr.SetFrameVisible(false);
labesPtr.SetAvoidCollisions(FALSE);
labesPtr.SetAvoidCollisions(false);
CString strText = _T("");
@ -4729,7 +4721,7 @@ void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData)
//标注信息
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
{
@ -5124,6 +5116,8 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID)
OnShowGivenLine(str);
if (g_b981AMulti)
{
if (lineIndex == 13) return;//自主着陆点
CString tmp;
m_bShowCopyLine = true;
for (int i=2;i<=10;++i)
@ -5237,10 +5231,10 @@ void CGISDlg::OnShowGivenLine(const CString 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);
@ -8738,7 +8732,48 @@ void CGISDlg::OnShowTargetPoint(double lon,double lat,int pixelSize)
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);
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_subLinePtLayerID; //子航线点图层号
map<int,long> m_TempLine14LayerID; //存储自主着陆点与飞机的连线图层
map<int,Point2D> m_CoordinateBindLine14; //存储已装订的自主着陆点坐标,用于与飞机连线
long m_subLineLayerID[20][255]; //子航线线图层号
long m_subLinePtLayerID[20][255]; //子航线点图层号
bool m_pHaveDrawCopyLineFlag[20][255];

Loading…
Cancel
Save