From 566e0d21293a5fe6423fd7a16541bce00eeb2e38 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期五, 27 九月 2024 11:15:21 +0800 Subject: [PATCH] OK --- TEWin/FrmWin.cs | 193 ++++++++++++++++++++++++++++++++++------------- 1 files changed, 139 insertions(+), 54 deletions(-) diff --git a/TEWin/FrmWin.cs b/TEWin/FrmWin.cs index e837577..49a0a95 100644 --- a/TEWin/FrmWin.cs +++ b/TEWin/FrmWin.cs @@ -38,6 +38,10 @@ ITerrainLabel71 angleLabel; + ITerrainLabel71 aLabel; + + ITerrainLabel71 bLabel; + ITerrainPolyline71 angleLine; string startName = "OnStart"; @@ -109,7 +113,6 @@ // this.WindowState = FormWindowState.Maximized; // tree.WindowState = FormWindowState.Maximized; //} - } catch (Exception ex) { @@ -138,6 +141,7 @@ void FrmWin_FormClosing(object sender, FormClosingEventArgs e) { ExecCmd(new List<string> { "taskkill /f /t /im OSGBLab.exe" }); + ExecCmd(new List<string> { "taskkill /f /t /im MeshLayerTool.exe" }); LogOut.Info("鍏抽棴绋嬪簭."); } #endregion @@ -183,12 +187,7 @@ case 0xc5: // 鍦板舰鏁版嵁(榛樿涓�*.tif) SG.Command.Execute(1014, 26); break; case 0xc6: // 妯″瀷鏁版嵁(*.osgb) - ExecCmd(new List<string> { "taskkill /f /t /im MeshLayerTool.exe" }); // SG.Command.Execute(2342, null); - //RunExe(Path.Combine(ConfigurationManager.AppSettings["tePath"], "MeshLayerTool.exe"), " -RunConvertor -Mode ImportMeshLayer -Type osgb", false); // -RunApp TerraExplorer - RunExe(Path.Combine(ConfigurationManager.AppSettings["tePath"], "MeshLayerTool.exe"), " -RunApp TerraExplorer -RunConvertor -Mode ImportMeshLayer -Type osgb", false); // -RunApp TerraExplorer - timer.Stop(); - timer.Start(); - break; + ExportOsgb(); break; case 0xc7: // 妯″瀷鏁版嵁(*.obj) SG.Command.Execute(1012, 13); break; case 0xc8: // 缂栬緫鏁版嵁(閫夋嫨瀵硅薄锛屽紑鍚紪杈�) @@ -236,7 +235,41 @@ Open(); break; case 0xdd: // 鍙﹀瓨涓� SaveAs(); break; + case 0xde: // 閫夋嫨瀵硅薄 + SG.Command.Execute(1021, 0); break; + case 0xdf: // 瀵煎嚭妯″瀷(鍏跺畠) + ExportOther(); break; + case 0xe0: // 鍒锋柊鍥惧眰 + SG.Command.Execute(1087, 0); break; + case 0xe1: // 淇濆瓨鍥惧眰 + SG.Command.Execute(1088, 0); break; + case 0xe2: // 澶嶅埗 + SG.Command.Execute(1031, 0); break; + case 0xe3: // 鍓垏 + SG.Command.Execute(1032, 0); break; + case 0xe4: // 鍒犻櫎 + SG.Command.Execute(1033, 0); break; + case 0xe5: // 绮樿创鑷冲睆骞曚腑蹇� + SG.Command.Execute(1030, 0); break; } + } + + private void ExportOsgb() + { + ExecCmd(new List<string> { "taskkill /f /t /im MeshLayerTool.exe" }); // SG.Command.Execute(2342, null); + //RunExe(Path.Combine(ConfigurationManager.AppSettings["tePath"], "MeshLayerTool.exe"), " -RunConvertor -Mode ImportMeshLayer -Type osgb", false); // -RunApp TerraExplorer + RunExe(Path.Combine(ConfigurationManager.AppSettings["tePath"], "MeshLayerTool.exe"), " -RunApp TerraExplorer -RunConvertor -Mode ImportMeshLayer -Type osgb", false); // -RunApp TerraExplorer + timer.Stop(); + timer.Start(); + } + + private void ExportOther() + { + ExecCmd(new List<string> { "taskkill /f /t /im MeshLayerTool.exe" }); + //RunExe(Path.Combine(ConfigurationManager.AppSettings["tePath"], "slmeshconverter.exe"), " -cmd convert -in \"D:/SEM/osgb/xizhan.3dml\" -f 3dml -out \"C:/Export.3dml\" -vdat convert_z -wktout -ui 1", false); + RunExe(Path.Combine(ConfigurationManager.AppSettings["tePath"], "MeshLayerTool.exe"), " -RunApp TerraExplorer -RunConvertor -Mode ExportMeshLayer", false); + timer.Stop(); + timer.Start(); } #endregion @@ -544,26 +577,16 @@ if (angleCount % 3 == 2) { - IPoint firstPoint = (IPoint)line.Points[line.Points.Count - 3]; - IPoint secondPoint = (IPoint)line.Points[line.Points.Count - 2]; - IPoint nowPoint = (IPoint)line.Points[line.Points.Count - 1]; - var firstPosition = SG.Creator.CreatePosition(firstPoint.X, firstPoint.Y); - var secondPosition = SG.Creator.CreatePosition(secondPoint.X, secondPoint.Y); - var nowPosition = SG.Creator.CreatePosition(nowPoint.X, nowPoint.Y); + IPoint p1 = (IPoint)line.Points[0]; + IPoint p2 = (IPoint)line.Points[1]; + IPoint p3 = (IPoint)line.Points[2]; + var pos1 = SG.Creator.CreatePosition(p1.X, p1.Y); + var pos2 = SG.Creator.CreatePosition(p2.X, p2.Y); + var pos3 = SG.Creator.CreatePosition(p3.X, p3.Y); - nowPosition = SG.CoordServices.GetAimingAngles(nowPosition, secondPosition); - secondPosition = SG.CoordServices.GetAimingAngles(firstPosition, secondPosition); - if (secondPosition.Yaw > nowPosition.Yaw) - { - angleSize = secondPosition.Yaw - nowPosition.Yaw; - if (angleSize > 180) angleSize = 360 - secondPosition.Yaw + nowPosition.Yaw; - } - else - { - angleSize = nowPosition.Yaw - secondPosition.Yaw; - if (angleSize > 180) angleSize = 360 + secondPosition.Yaw - nowPosition.Yaw; - } - angleSize = Math.Round(angleSize, 2); + var first = SG.CoordServices.GetAimingAngles(pos1, pos2); + var sencod = SG.CoordServices.GetAimingAngles(pos2, pos3); + angleSize = getAngle(first, sencod); angleLabel.Text = angleSize.ToString() + "掳"; } } @@ -571,6 +594,25 @@ { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); } + } + + private double getAngle(IPosition71 first, IPosition71 sencod) + { + /*double angle = 0; + if (sencod.Yaw > first.Yaw) + { + angle = sencod.Yaw - first.Yaw; + if (angle > 180) angle = 360 - sencod.Yaw + first.Yaw; + } + else + { + angle = first.Yaw - sencod.Yaw; + if (angle > 180) angle = 360 + sencod.Yaw - first.Yaw; + }*/ + + double angle = sencod.Yaw > first.Yaw ? sencod.Yaw - first.Yaw : first.Yaw - sencod.Yaw; + + return Math.Round(angle, 2); } bool Angle_OnLButtonDown(int Flags, int X, int Y) @@ -583,45 +625,41 @@ var gid = GetGroupId(angleGroupName); if (angleLine == null) { - IList<double> lineVertex = new List<double>(); - lineVertex.Add(CursorCoord.Position.X); - lineVertex.Add(CursorCoord.Position.Y); - lineVertex.Add(0); - lineVertex.Add(CursorCoord.Position.X); - lineVertex.Add(CursorCoord.Position.Y); - lineVertex.Add(0); - - double[] px = new double[lineVertex.Count]; - lineVertex.CopyTo(px, 0); - var myGeometry = SG.Creator.GeometryCreator.CreateLineStringGeometry(px); - - angleLine = SG.Creator.CreatePolyline(myGeometry, SG.Creator.CreateColor(255, 255, 0, 255), AltitudeTypeCode.ATC_TERRAIN_RELATIVE, gid, angleCount.ToString()); - angleLine.LineStyle.Width = -2; + angleLine = CreateLine(CursorCoord.Position, gid); angleLine.Geometry.StartEdit(); angleCount++; return true; } + ILineString line = (ILineString)(angleLine.Geometry); if (angleCount % 3 == 1) { - angleLabel = SG.Creator.CreateLabel(CursorCoord.Position, angleSize.ToString(), "", null, gid, angleCount.ToString()); - var LableColor = SG.Creator.CreateColor(); - LableColor.FromHTMLColor("#FFFF00"); - LableColor.SetAlpha(0.6); - angleLabel.Style.TextColor = LableColor; - angleLabel.Style.Bold = true; - angleLabel.Style.FontName = "榛戜綋"; - angleLabel.Style.FontSize = 12; - // angleLabel.Style.LineToGround = true; - angleLabel.Style.LineToGroundType = LineType.LINE_TYPE_TO_GROUND; - angleLabel.Style.Scale = 5000; + angleLabel = CreateLabel(CursorCoord.Position, gid, "#FFFF00"); + + IPoint firstPoint = (IPoint)line.Points[0]; + IPoint secondPoint = (IPoint)line.Points[1]; + var firstPos = SG.Creator.CreatePosition(firstPoint.X, firstPoint.Y); + var secondPos = SG.Creator.CreatePosition(secondPoint.X, secondPoint.Y); + + aLabel = CreateLabel(firstPos, gid, "#00FFFF"); + aLabel.Text = Math.Round(SG.CoordServices.GetAimingAngles(firstPos, secondPos).Yaw, 2) + "掳"; } - if (angleCount % 3 == 2) angleLabel.Text = angleSize.ToString() + "掳"; + if (angleCount % 3 == 2) + { + IPoint secondPoint = (IPoint)line.Points[line.Points.Count - 2]; + IPoint nowPoint = (IPoint)line.Points[line.Points.Count - 1]; + var secondPos = SG.Creator.CreatePosition(secondPoint.X, secondPoint.Y); + var newPos = SG.Creator.CreatePosition(nowPoint.X, nowPoint.Y); + + bLabel = CreateLabel(newPos, GetGroupId(angleGroupName), "#00FFFF"); + bLabel.Text = Math.Round(SG.CoordServices.GetAimingAngles(secondPos, newPos).Yaw, 2) + "掳"; + + angleLabel.Text = angleSize.ToString() + "掳"; + } angleCount++; - ILineString line = (ILineString)(angleLine.Geometry); IPoint p = (IPoint)line.Points[line.Points.Count - 1]; p.X = CursorCoord.Position.X; ; p.Y = CursorCoord.Position.Y; @@ -633,6 +671,8 @@ angleCount = 0; angleLine = null; angleLabel = null; + aLabel = null; + bLabel = null; } } catch (Exception ex) @@ -641,6 +681,44 @@ } return true; + } + + private ITerrainPolyline71 CreateLine(IPosition71 pos, String gid) + { + IList<double> lineVertex = new List<double>(); + lineVertex.Add(pos.X); + lineVertex.Add(pos.Y); + lineVertex.Add(0); + lineVertex.Add(pos.X); + lineVertex.Add(pos.Y); + lineVertex.Add(0); + + double[] px = new double[lineVertex.Count]; + lineVertex.CopyTo(px, 0); + var myGeometry = SG.Creator.GeometryCreator.CreateLineStringGeometry(px); + + var line = SG.Creator.CreatePolyline(myGeometry, SG.Creator.CreateColor(255, 255, 0, 255), AltitudeTypeCode.ATC_TERRAIN_RELATIVE, gid, angleCount.ToString()); + line.LineStyle.Width = -2; + + return line; + } + + private ITerrainLabel71 CreateLabel(IPosition71 pos, String gid, String color) + { + var lableColor = SG.Creator.CreateColor(); + lableColor.FromHTMLColor(color); + lableColor.SetAlpha(0.6); + + var label = SG.Creator.CreateLabel(pos, "0", "", null, gid, ""); + label.Style.TextColor = lableColor; + label.Style.Bold = true; + label.Style.FontName = "榛戜綋"; + label.Style.FontSize = 12; + // label.Style.LineToGround = true; + label.Style.LineToGroundType = LineType.LINE_TYPE_TO_GROUND; + label.Style.Scale = 5000; + + return label; } bool Angle_OnRButtonUp(int Flags, int X, int Y) @@ -665,7 +743,7 @@ private void SpaceStatistics() { - this.ShowHtml("绌洪棿缁熻", mainUrl + @"\Resources\SpaceStatistics\SpaceStatistics.html", 20, 20, 420, 285); + this.ShowHtml("绌洪棿缁熻", mainUrl + @"\Resources\SpaceStatistics\SpaceStatistics.html", 20, 20, 420, 305); } private void SpatialAnalysis() @@ -791,6 +869,13 @@ #region 鏂规绠$悊 private void Save() { + string emptyFly = Path.Combine(Application.StartupPath, "Resources", "empty.fly"); + if (emptyFly.Equals(this.fly)) + { + SaveAs(); + return; + } + SaveLocation(); this.SG.Command.Execute(1019, 0); // Capture Tree State SG.Command.Execute(1003, 0); // this.SG.Project.Save(); // -- Gitblit v1.9.3