Пример #1
0
        /// <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();

            }
        }
Пример #2
0
        /// <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
                    {
                    }
                }
            }
        }