Example #1
0
        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (this.listView1.SelectedItems.Count == 0)
            {
                return;
            }
            myListNode item = (myListNode)this.listView1.SelectedItems[0];

            item.Checked = true;
            switch (item.type)
            {
            case TreeNodeType.NT_TERRAINLAYER:
                this.axRenderControl1.Terrain.FlyTo(gviTerrainActionCode.gviFlyToTerrain);
                break;

            case TreeNodeType.NT_TerrainHole:
                ITerrainHole hole = item.obj as ITerrainHole;
                hole.Highlight(System.Drawing.Color.Yellow);
                this.axRenderControl1.Camera.FlyToObject(hole.Guid, gviActionCode.gviActionFlyTo);
                break;

            case TreeNodeType.NT_RenderGeomtry:
                IRenderGeometry geo = item.obj as IRenderGeometry;
                this.axRenderControl1.Camera.FlyToObject(geo.Guid, gviActionCode.gviActionFlyTo);
                break;
            }
        }
Example #2
0
        private void 生成地形挖洞ToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            myListNode selectNode = this.listView1.SelectedItems[0] as myListNode;

            if (selectNode != null)
            {
                IRenderPolygon rgeo    = selectNode.obj as IRenderPolygon;
                IPolygon       polygon = rgeo.GetFdeGeometry() as IPolygon;

                // 生成带洞polygon,可注释掉
                IEnvelope env    = rgeo.Envelope;
                IRing     ring   = (new GeometryFactory()).CreateGeometry(gviGeometryType.gviGeometryRing, gviVertexAttribute.gviVertexAttributeZ) as IRing;
                IPoint    center = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ);
                center.Position   = env.Center;
                center.SpatialCRS = crs as ISpatialCRS;
                ring.AppendPoint(center);
                center.Y = env.Center.Y - 50;
                ring.AppendPoint(center);
                center.X = env.Center.X + 50;
                ring.AppendPoint(center);
                center.Y = env.Center.Y;
                ring.AppendPoint(center);
                polygon.AddInteriorRing(ring);
                // To here

                ISurfaceSymbol sfbottom = new SurfaceSymbol();
                sfbottom.Color = System.Drawing.Color.Red;
                IRenderPolygon rgeoNew = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, sfbottom, rootId);

                TerrainHoleSettingForm form = new TerrainHoleSettingForm();
                if (form.ShowDialog() == DialogResult.OK)
                {
                    order = form.Order;

                    ITerrainHole hole = this.axRenderControl1.ObjectManager.CreateTerrainHole(polygon, rootId);
                    if (hole != null)
                    {
                        hole.DrawOrder = order;

                        // 添加节点到界面控件上
                        myListNode item = new myListNode(string.Format("TerrainHole_{0}", hole.Guid), TreeNodeType.NT_TerrainHole, hole);
                        item.Checked = true;
                        listView1.Items.Add(item);

                        // 添加节点到界面控件上
                        item         = new myListNode(string.Format("RenderPolygon_{0}", hole.Guid), TreeNodeType.NT_RenderGeomtry, rgeoNew);
                        item.Checked = true;
                        listView1.Items.Add(item);
                    }
                }
            }
        }
Example #3
0
        private void 属性ToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            myListNode selectNode = this.listView1.SelectedItems[0] as myListNode;

            if (selectNode != null)
            {
                ITerrainHole hole = selectNode.obj as ITerrainHole;
                if (hole == null)
                {
                    return;
                }
                int index = 0;
                TerrainHoleSettingForm form = new TerrainHoleSettingForm(hole.DrawOrder, index);
                if (form.ShowDialog() == DialogResult.OK)
                {
                    order          = form.Order;
                    hole.DrawOrder = order;
                }
            }
        }
Example #4
0
        void axRenderControl1_RcObjectEditFinish()
        {
            ITerrainHole hole = this.axRenderControl1.ObjectManager.CreateTerrainHole(currentGeometry as IPolygon, rootId);

            if (hole != null)
            {
                hole.DrawOrder = order;

                // 添加节点到界面控件上
                myListNode item = new myListNode(string.Format("TerrainHole_{0}", hole.Guid), TreeNodeType.NT_TerrainHole, hole);
                item.Checked = true;
                listView1.Items.Add(item);

                // 添加节点到界面控件上
                item         = new myListNode(string.Format("RenderPolygon_{0}", hole.Guid), TreeNodeType.NT_RenderGeomtry, currentRenderGeometry);
                item.Checked = true;
                listView1.Items.Add(item);
            }

            // 恢复漫游模式
            this.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal;
        }
Example #5
0
        private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            myListNode item = (myListNode)e.Item;

            switch (item.type)
            {
            case TreeNodeType.NT_TERRAINLAYER:
                ITerrain ted = item.obj as ITerrain;
                ted.VisibleMask = e.Item.Checked ? gviViewportMask.gviViewAllNormalView : gviViewportMask.gviViewNone;
                break;

            case TreeNodeType.NT_TerrainHole:
                ITerrainHole hole = item.obj as ITerrainHole;
                hole.VisibleMask = e.Item.Checked ? gviViewportMask.gviViewAllNormalView : gviViewportMask.gviViewNone;
                break;

            case TreeNodeType.NT_RenderGeomtry:
                IRenderGeometry geo = item.obj as IRenderGeometry;
                geo.VisibleMask = e.Item.Checked ? gviViewportMask.gviViewAllNormalView : gviViewportMask.gviViewNone;
                break;
            }
        }
Example #6
0
 private void toolStripButtonDeleteHole_Click(object sender, EventArgs e)
 {
     if (this.hole != null)
     {
         this.axRenderControl1.ObjectManager.DeleteObject(this.hole.Guid);
         this.hole = null;
     }
     if (this.rpolygon != null)
     {
         this.axRenderControl1.ObjectManager.DeleteObject(this.rpolygon.Guid);
         this.rpolygon = null;
     }
     if (this.rmpolygon != null)
     {
         this.axRenderControl1.ObjectManager.DeleteObject(this.rmpolygon.Guid);
         this.rmpolygon = null;
     }
     if (this.currentRenderGeometry != null)
     {
         this.axRenderControl1.ObjectManager.DeleteObject(currentRenderGeometry.Guid);
         this.currentRenderGeometry = null;
     }
 }
Example #7
0
        /// <summary>
        /// 挖洞
        /// </summary>
        /// <param name="polygon"></param>
        /// <param name="deep"></param>
        public void DrawTerrainHole(IPolygon polygon, double deep)
        {
            if (polygon == null)
            {
                return;
            }
            IRing ring = polygon.ExteriorRing;

            if (!ring.IsClosed)
            {
                return;
            }
            IPoint   point0      = ring.GetPoint(0);
            double   lowestPoint = this.axRenderControl1.Terrain.GetElevation(point0.X, point0.Y, gviGetElevationType.gviGetElevationFromDatabase);
            IPolygon pBottom     = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;

            pBottom.SpatialCRS = crs as ISpatialCRS;
            for (int i = 0; i < ring.PointCount; i++)
            {
                IPoint point = ring.GetPoint(i);
                point.Z = this.axRenderControl1.Terrain.GetElevation(point.X, point.Y, gviGetElevationType.gviGetElevationFromDatabase);
                if (point.Z < lowestPoint)
                {
                    lowestPoint = point.Z;
                }
                ring.UpdatePoint(i, point);
                point = point.Clone2(gviVertexAttribute.gviVertexAttributeZ) as IPoint;
                pBottom.ExteriorRing.AppendPoint(point);
            }
            //b、计算底面
            lowestPoint -= deep;
            for (int jj = 0; jj < pBottom.ExteriorRing.PointCount; jj++)
            {
                IPoint point1 = pBottom.ExteriorRing.GetPoint(jj);
                point1.Z = lowestPoint;
                pBottom.ExteriorRing.UpdatePoint(jj, point1);
            }
            ICurveSymbol cvSymbol = new CurveSymbol();

            cvSymbol.Color = System.Drawing.Color.Yellow;
            ISurfaceSymbol sfside = new SurfaceSymbol();

            sfside.BoundarySymbol = cvSymbol;
            sfside.Color          = System.Drawing.Color.BurlyWood;
            ISurfaceSymbol sfbottom = new SurfaceSymbol();

            sfbottom.BoundarySymbol = cvSymbol;
            sfbottom.Color          = System.Drawing.Color.Green;
            rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(pBottom, sfbottom, rootId);
            rpolygon.MaxVisibleDistance = 9999999;

            IMultiPolygon mpolygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeZ) as IMultiPolygon;

            mpolygon.SpatialCRS = crs as ISpatialCRS;
            for (int i = 0; i < ring.PointCount - 1; i++)
            {
                IPolygon pSide = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
                pSide.SpatialCRS = crs as ISpatialCRS;
                pSide.ExteriorRing.AppendPoint(polygon.ExteriorRing.GetPoint(i));
                pSide.ExteriorRing.AppendPoint(pBottom.ExteriorRing.GetPoint(i));
                pSide.ExteriorRing.AppendPoint(pBottom.ExteriorRing.GetPoint(i + 1));
                pSide.ExteriorRing.AppendPoint(polygon.ExteriorRing.GetPoint(i + 1));
                pSide.Close();
                mpolygon.AddPolygon(pSide);
                //renderControl.ObjectManager.CreateRenderPolygon(pSide, sfside);
            }
            rmpolygon = this.axRenderControl1.ObjectManager.CreateRenderMultiPolygon(mpolygon, sfside, rootId);
            rmpolygon.MaxVisibleDistance = 99999999;
            hole = this.axRenderControl1.ObjectManager.CreateTerrainHole(polygon, rootId);
            currentRenderGeometry.VisibleMask = gviViewportMask.gviViewNone;
        }
Example #8
0
        private void CreateTerrainHole()
        {
            try
            {
                IGeometry geo = this._drawTool.GetGeo();
                if (geo == null)
                {
                    return;
                }
                IPolygon region = geo as IPolygon;
                region.Close();

                IPolygon region2   = geo.Clone2(gviVertexAttribute.gviVertexAttributeNone) as IPolygon;
                double   refheight = d3.Terrain.GetElevation(region2.Centroid.X, region2.Centroid.Y, gviGetElevationType.gviGetElevationFromMemory) - 30;

                ITerrainHole terrainHole = d3.ObjectManager.CreateTerrainHole(region, d3.ProjectTree.RootID);
                this._listRGuids.Add(terrainHole.Guid);

                IPolygon bottom = region.Clone() as IPolygon;
                for (int i = 0; i < bottom.ExteriorRing.PointCount; i++)
                {
                    IPoint pointValue = bottom.ExteriorRing.GetPoint(i);
                    pointValue.Z = refheight;
                    bottom.ExteriorRing.UpdatePoint(i, pointValue);
                }
                ICurveSymbol cs = new CurveSymbol();
                cs.Color = 0x00ffffff;
                ISurfaceSymbol bottomSS = new SurfaceSymbol();
                bottomSS.ImageName      = System.Windows.Forms.Application.StartupPath + "\\..\\Resource\\Images\\TerrainHole\\TextureBottom.jpg";
                bottomSS.RepeatLengthU  = 5;
                bottomSS.RepeatLengthV  = 5;
                bottomSS.EnableLight    = true;
                bottomSS.BoundarySymbol = cs;
                IRenderPolygon rBottom = d3.ObjectManager.CreateRenderPolygon(bottom, bottomSS, d3.ProjectTree.RootID);
                this._listRGuids.Add(rBottom.Guid);

                IGeometryFactory geoFact = new GeometryFactoryClass();
                IMultiPolygon    side    = geoFact.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeZ) as IMultiPolygon;
                for (int i = 0; i < region.ExteriorRing.PointCount - 1; i++)
                {
                    IPolygon gon     = geoFact.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
                    IPoint   pt1     = region.ExteriorRing.GetPoint(i);
                    IPoint   pt1temp = pt1.Clone() as IPoint;
                    if (pt1temp.Z < refheight)
                    {
                        pt1temp.Z = refheight;
                    }
                    IPoint pt2     = region.ExteriorRing.GetPoint(i + 1);
                    IPoint pt2temp = pt2.Clone() as IPoint;
                    if (pt2temp.Z < refheight)
                    {
                        pt2temp.Z = refheight;
                    }
                    IPoint pt3 = pt2.Clone() as IPoint;
                    pt3.Z = refheight;
                    IPoint pt4 = pt1.Clone() as IPoint;
                    pt4.Z = refheight;
                    gon.ExteriorRing.AppendPoint(pt1temp);
                    gon.ExteriorRing.AppendPoint(pt2temp);
                    gon.ExteriorRing.AppendPoint(pt3);
                    gon.ExteriorRing.AppendPoint(pt4);
                    gon.Close();
                    side.AddPolygon(gon);
                }
                ISurfaceSymbol sideSS = new SurfaceSymbol();
                sideSS.ImageName      = System.Windows.Forms.Application.StartupPath + "\\..\\Resource\\Images\\TerrainHole\\TextureSide.jpg";
                sideSS.RepeatLengthU  = 5;
                sideSS.RepeatLengthV  = 5;
                sideSS.EnableLight    = true;
                sideSS.BoundarySymbol = cs;
                IRenderMultiPolygon rSide = d3.ObjectManager.CreateRenderMultiPolygon(side, sideSS, d3.ProjectTree.RootID);
                this._listRGuids.Add(rSide.Guid);
            }
            catch (Exception ex)
            {
            }
        }