/// <summary> /// 左键单击事件 /// 获取建筑物信息 /// </summary> /// <param name="Flags"></param> /// <param name="X"></param>mo /// <param name="Y"></param> /// <param name="pbHandled"></param> void TE_OnLButtonDown(int Flags, int X, int Y, ref object pbHandled) { try { int modelLayerID = Hook.ProjectTree.FindItem(ConfigurationManager.AppSettings["LayerPath"]); // 模型复原 // 显示 int groupID = Hook.ProjectTree.FindItem(Pipe_Group_Name); if (groupID > 0) { Hook.ProjectTree.DeleteItem(groupID); } if (m_FeatureSelected != null) { //m_FeatureSelected.FeatureAttributes.GetFeatureAttribute("MODELNAME").Value = m_ModelName; if (modelLayerID > 0) { ILayer61 lyrModel = Hook.ProjectTree.GetLayer(modelLayerID); lyrModel.Filter = ""; //lyrModel.Refresh(); //lyrModel.Save(); //lyrModel.Refresh(); } } // 开始新的 // 取到模型 object longitude, latitude, objectID, height, objType; objType = 17; Program.pRender.ScreenToWorld(X, Y, ref objType, out longitude, out height, out latitude, out objectID); if (objectID.ToString() == "") { objType = 16; Program.pRender.ScreenToWorld(X, Y, ref objType, out longitude, out height, out latitude, out objectID); } if (objectID.ToString() == "") return; groupID = Hook.ProjectTree.CreateGroup(Pipe_Group_Name); ITerraExplorerObject61 teOjbect = Program.pCreator6.GetObject(objectID as string); m_FeatureSelected = teOjbect as IFeature61; if (m_FeatureSelected == null) { return; } m_ModelName = m_FeatureSelected.FeatureAttributes.GetFeatureAttribute(m_ModelField).Value; string strFile = System.IO.Path.Combine(ConfigurationManager.AppSettings["ModelPath"], m_ModelName); IPoint pSel = m_FeatureSelected.Geometry as IPoint; ITerrainModel61 m_Model =Hook.Creator.CreateModel( Hook.Creator.CreatePosition(pSel.X, pSel.Y),strFile,1,ModelTypeCode.MT_NORMAL,groupID,"Temp"); m_Model.Visibility.Show = false; if (m_Model == null) return; m_AnalysisResult=false; string strPipedFileList = ConfigurationManager.AppSettings["PipedFileList"]; strPipedFileList = strPipedFileList.ToLower(); m_HoleBox = m_Model.Terrain.BBox; Hook.Creator.DeleteObject(m_Model.ID); double[] points = { m_HoleBox.MinX,m_HoleBox.MinY,0, m_HoleBox.MaxX,m_HoleBox.MinY,0, m_HoleBox.MaxX,m_HoleBox.MaxY,0, m_HoleBox.MinX,m_HoleBox.MaxY,0 }; IPolygon polygonHole = Hook.Creator.GeometryCreator.CreatePolygonGeometry(points); Hook.Creator.CreateHoleOnTerrain(polygonHole as IGeometry, groupID, Pipe_Hole_Name); if (strPipedFileList.Contains(m_ModelName.ToLower())) { m_AnalysisResult = true; } // 隐藏 // m_FeatureSelected.FeatureAttributes.GetFeatureAttribute("MODELNAME").Value = ""; if (modelLayerID > 0) { ILayer61 lyrModel = Hook.ProjectTree.GetLayer(modelLayerID); //lyrModel.Save(); lyrModel.Filter = string.Format("{0} <> '{1}'",m_ModelField, m_ModelName); lyrModel.Refresh(); } } catch (Exception ex) { HasError = true; } finally { if (Analysised != null) Analysised.Invoke(); EndPipeAnalysis(); } }
/// <summary> /// 鼠标左键按下时发生的事件(建立缓冲区的主要方法) /// </summary> /// <param name="Flags"></param> /// <param name="X"></param> /// <param name="Y"></param> /// <param name="pbHandled"></param> void TE_OnLButtonDown(int Flags, int X, int Y, ref object pbHandled) { if (En == "DrawGeo") { } else if (En == "SelectModle") { // 2012-9-20 张航宇 // 若成功的完成了一次缓冲分析,则将状态释放,要求重新点击 IWorldPointInfo61 pIWorldPointInfo = this.SgWorld.Window.PixelToWorld(X, Y, WorldPointType.WPT_MODEL); if (pIWorldPointInfo.ObjectID != "" && pIWorldPointInfo.ObjectID != null) { try { ITerraExplorerObject61 pp = this.SgWorld.Creator.GetObject(pIWorldPointInfo.ObjectID); if (pp.ObjectType == ObjectTypeCode.OT_FEATURE) { IFeature61 pIF = pp as IFeature61; this.geo = pIF.GeometryZ.SpatialOperator.buffer((double)this.spinEdit1.Value); ITerrainPolygon61 polygon = this.SgWorld.Creator.CreatePolygon(this.geo, -16711936, -10197916, cbRelative.Checked?AltitudeTypeCode.ATC_TERRAIN_RELATIVE: AltitudeTypeCode.ATC_ON_TERRAIN, GroupID, "Buffer" + System.Guid.NewGuid().ToString().Substring(0, 6)); if (cbRelative.Checked) { polygon.Position.Altitude = (double)speHeight.Value; } this.En = null; this.Select.Checked = false; } else { ITerrainModel61 pITerrainModel = this.SgWorld.Creator.GetObject(pIWorldPointInfo.ObjectID) as ITerrainModel61; IBBox3D61 pBBox = pITerrainModel.Terrain.BBox; cVerticesArray = new double[] { pBBox.MaxX, pBBox.MinY, 0, pBBox.MaxX, pBBox.MaxY, 0, pBBox.MinX, pBBox.MaxY, 0, pBBox.MinX, pBBox.MinY, 0, }; ILinearRing cRing = this.SgWorld.Creator.GeometryCreator.CreateLinearRingGeometry(cVerticesArray); IPolygon cPolygonGeometry = this.SgWorld.Creator.GeometryCreator.CreatePolygonGeometry(cRing, null); //this.geo = cPolygonGeometry as IGeometry; ISpatialOperator _SpatialOperator = cPolygonGeometry.SpatialOperator; this.geo = _SpatialOperator.buffer((double)this.spinEdit1.Value); ITerrainPolygon61 polygon = this.SgWorld.Creator.CreatePolygon(this.geo, -16711936, -10197916, cbRelative.Checked ? AltitudeTypeCode.ATC_TERRAIN_RELATIVE : AltitudeTypeCode.ATC_ON_TERRAIN, GroupID, "Buffer" + System.Guid.NewGuid().ToString().Substring(0, 6)); if (cbRelative.Checked) { polygon.Position.Altitude = (double)speHeight.Value; } this.En = null; this.Select.Checked = false; } } catch { } } } }