Exemple #1
0
        /// <summary>
        /// 设置选择区域。
        /// 目前只支持IPolygon,后面会支持ClosedTrimesh和IMultiPolygon。
        /// 允许传入null,相当于把region清空,清空之后即使VisibleMask还是1也没有任何高亮区域。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSetRegion_Click(object sender, EventArgs e)
        {
            type = HelperType.PolygonRegion;

            this.label7.Text = "请鼠标点击画Polygon";
            this.btnSetCircleRegion.Enabled = false;
            this.btnSetSectorRegion.Enabled = false;
            this.btnSetRegion.Enabled       = false;
            isDrawing = true;

            axRenderControl1.HighlightHelper.SetRegion(null);  //清空之前的高亮区

            axRenderControl1.InteractMode          = gviInteractMode.gviInteractEdit;
            axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectAll;
            axRenderControl1.MouseSelectMode       = gviMouseSelectMode.gviMouseSelectClick;
            axRenderControl1.RcObjectEditing      += new _IRenderControlEvents_RcObjectEditingEventHandler(g_RcObjectEditing);
            axRenderControl1.RcObjectEditFinish   += new _IRenderControlEvents_RcObjectEditFinishEventHandler(g_RcObjectEditFinish);

            if (rpolygon != null)
            {
                axRenderControl1.ObjectManager.DeleteObject(rpolygon.Guid);
            }

            polygon  = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
            rpolygon = axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, null, rootId);
            axRenderControl1.ObjectEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator);
        }
        private void CreateRenderPolygon(IPoint point)
        {
            if (gfactory == null)
            {
                gfactory = new GeometryFactory();
            }

            fde_polygon            = (IPolygon)gfactory.CreateGeometry(i3dGeometryType.i3dGeometryPolygon, i3dVertexAttribute.i3dVertexAttributeZ);
            fde_polygon.SpatialCRS = crs;

            fde_point = (IPoint)gfactory.CreateGeometry(i3dGeometryType.i3dGeometryPoint, i3dVertexAttribute.i3dVertexAttributeZ);

            fde_point.SetCoords(point.X, point.Y, point.Z, 0, 0);
            fde_polygon.ExteriorRing.AppendPoint(fde_point);

            fde_point.SetCoords(point.X + 10, point.Y, point.Z, 0, 0);
            fde_polygon.ExteriorRing.AppendPoint(fde_point);

            fde_point.SetCoords(point.X + 10, point.Y + 10, point.Z, 0, 0);
            fde_polygon.ExteriorRing.AppendPoint(fde_point);

            fde_point.SetCoords(point.X, point.Y + 10, point.Z, 0, 0);
            fde_polygon.ExteriorRing.AppendPoint(fde_point);

            surfaceSymbol       = new SurfaceSymbolClass();
            surfaceSymbol.Color = 0xFF0000FF;  // 蓝色

            rpolygon = _axRenderControl.ObjectManager.CreateRenderPolygon(fde_polygon, surfaceSymbol);

            _axRenderControl.Camera.FlyToObject(rpolygon.Guid, i3dActionCode.i3dActionFlyTo);
        }
Exemple #3
0
        void preDraw(ISurfaceSymbol symbol)
        {
            this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing);

            this.axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish);

            this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit;

            this.axRenderControl1.ObjectEditor.FinishEdit();   //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时

            if (gfactory == null)
            {
                gfactory = new GeometryFactory();
            }

            fde_polygon = (IPolygon)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolygon,
                                                            gviVertexAttribute.gviVertexAttributeNone);
            rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, symbol, rootId);
            rpolygon.MaxVisibleDistance = 3000;
            rpolygon.MouseSelectMask    = gviViewportMask.gviViewNone;
            renderGeoToDel.Add(rpolygon);

            resultCode = this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator);
            if (!resultCode)
            {
                MessageBox.Show(this.axRenderControl1.GetLastError().ToString());
                return;
            }
        }
Exemple #4
0
        void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender)
        {
            //获取水源点
            waterPoint = IntersectPoint;
            //设置参数
            this.numWaterHStart.Value = (decimal)IntersectPoint.Z;
            this.numWaterHEnd.Value   = (decimal)(IntersectPoint.Z + 30);
            //获取缓冲区bufPolygon\renderBufPolygon
            radius = (double)numBufferRadius.Value;
            ITopologicalOperator2D to = waterPoint as ITopologicalOperator2D;

            bufPolygon = to.Buffer2D(radius, gviBufferStyle.gviBufferCapround) as IPolygon;
            ISurfaceSymbol sf = new SurfaceSymbol();

            sf.Color = System.Drawing.Color.Yellow;
            ICurveSymbol cs = new CurveSymbol();

            cs.Color                     = System.Drawing.Color.Yellow;
            sf.BoundarySymbol            = cs;
            renderBufPolygon             = this.axRenderControl1.ObjectManager.CreateRenderPolygon(bufPolygon, sf, rootId);
            renderBufPolygon.HeightStyle = gviHeightStyle.gviHeightOnTerrain;

            this.axRenderControl1.InteractMode        = gviInteractMode.gviInteractNormal;
            this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect);

            this.btnOnProcess.Enabled = true;
            this.btnSimulate.Enabled  = true;
        }
Exemple #5
0
        public static void TestDrawTriangle(double offX, double offY, double offZ, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, ISurfaceSymbol sfSymbol)
        {
            IPolygon polygon    = null;
            IPoint   pointValue = null;

            polygon      = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
            pointValue   = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ);
            pointValue.X = offX + x1;
            pointValue.Y = offY + y1;
            pointValue.Z = offZ + z1;
            polygon.ExteriorRing.AppendPoint(pointValue);
            pointValue.X = offX + x2;
            pointValue.Y = offY + y2;
            pointValue.Z = offZ + z2;
            polygon.ExteriorRing.AppendPoint(pointValue);
            pointValue.X = offX + x3;
            pointValue.Y = offY + y3;
            pointValue.Z = offZ + z3;
            polygon.ExteriorRing.AppendPoint(pointValue);
            polygon.Close();
            IRenderPolygon item = Ocx.ObjectManager.CreateRenderPolygon(polygon, sfSymbol, Ocx.ProjectTree.RootID);

            item.MaxVisibleDistance = maxVisibleDis;
            tmpList.Add(item);
        }
Exemple #6
0
 public override void Close()
 {
     if (_rPoint != null)
     {
         this._objectManager.DeleteObject(_rPoint.Guid);
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint);
         _rPoint = null;
     }
     if (_rPolyline != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_rPolyline.Guid);
         _rPolyline = null;
     }
     if (_label != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_label.Guid);
         _label = null;
     }
     if (_rPolygon != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_rPolygon.Guid);
         _rPolygon = null;
     }
     this._3DControl.HighlightHelper.VisibleMask = 0;
     this._3DControl.HighlightHelper.SetRegion(null);
 }
Exemple #7
0
        /// <summary>
        /// 重置
        /// </summary>
        /// <remarks>不再使用时调用</remarks>
        public virtual void Reset()
        {
            if (_StartRenderPoint != null)
            {
                _AxRenderControl.ObjectManager.DeleteObject(_StartRenderPoint.Guid);
                _StartRenderPoint = null;
            }
            if (_EndRenderPoint != null)
            {
                _AxRenderControl.ObjectManager.DeleteObject(_EndRenderPoint.Guid);
                _EndRenderPoint = null;
            }
            if (_RenderPolygon != null)
            {
                _AxRenderControl.ObjectManager.DeleteObject(_RenderPolygon.Guid);
                _RenderPolygon = null;
            }
            if (_TableLabel != null)
            {
                _AxRenderControl.ObjectManager.DeleteObject(_TableLabel.Guid);
                _TableLabel = null;
            }

            return;
        }
Exemple #8
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);
                    }
                }
            }
        }
Exemple #9
0
        private void toolStripButtonCreateHole_Click(object sender, System.EventArgs e)
        {
            currentGeometry            = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
            currentGeometry.SpatialCRS = crs as ISpatialCRS;

            ISurfaceSymbol sfbottom = new SurfaceSymbol();

            sfbottom.Color        = System.Drawing.Color.Red;
            currentRenderGeometry = this.axRenderControl1.ObjectManager.CreateRenderPolygon(currentGeometry as IPolygon, sfbottom, rootId);
            currentRenderGeometry.ViewingDistance = 200;
            this.axRenderControl1.InteractMode    = gviInteractMode.gviInteractEdit;
            this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(currentRenderGeometry, gviGeoEditType.gviGeoEditCreator);
        }
Exemple #10
0
        private void buttonClearProfile_Click(object sender, EventArgs e)
        {
            if (renderpolygonDraw != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(renderpolygonDraw.Guid);
                renderpolygonDraw = null;
            }

            if (RenderPolygonList.Count > 0)
            {
                for (int i = 0; i < RenderPolygonList.Count; i++)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(RenderPolygonList[i].Guid);
                }
                RenderPolygonList.Clear();
            }

            if (RenderMPExteriorList.Count > 0)
            {
                for (int i = 0; i < RenderMPExteriorList.Count; i++)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(RenderMPExteriorList[i].Guid);
                }
                RenderMPExteriorList.Clear();
            }
            if (RenderMPInteriorList.Count > 0)
            {
                for (int i = 0; i < RenderMPInteriorList.Count; i++)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(RenderMPInteriorList[i].Guid);
                }
                RenderMPInteriorList.Clear();
            }
            if (RenderMPProfileList.Count > 0)
            {
                for (int i = 0; i < RenderMPProfileList.Count; i++)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(RenderMPProfileList[i].Guid);
                }
                RenderMPProfileList.Clear();
            }

            PolygonList.Clear();

            if (label != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(label.Guid);
                label = null;
            }
        }
Exemple #11
0
        private IRenderPolygon CreateRenderPolygon(IPolygon poly)
        {
            Random         randObj = new Random(nPolygon);
            int            aColor  = randObj.Next(0, 255);
            int            gColor  = randObj.Next(0, 255);
            int            rColor  = randObj.Next(0, 255);
            uint           ranCor  = (uint)(rColor | gColor << 8 | aColor << 16 | 255 << 24);
            ISurfaceSymbol ss      = new SurfaceSymbol();

            ss.Color = ColorHelper.UintToColor(ranCor);
            IRenderPolygon rtm2 = this.axRenderControl1.ObjectManager.CreateRenderPolygon(poly, ss, rootId);

            nPolygon++;
            return(rtm2);
        }
Exemple #12
0
        /// <summary>
        /// 选择水源点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButtonSelectWaterSource_Click(object sender, System.EventArgs e)
        {
            if (renderBufPolygon != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(renderBufPolygon.Guid);
                renderBufPolygon = null;
            }
            deleteMPolygon();

            this.axRenderControl1.InteractMode        = gviInteractMode.gviInteractSelect;
            this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect);

            this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectTerrain;
            this.axRenderControl1.MouseSelectMode       = gviMouseSelectMode.gviMouseSelectClick;
        }
Exemple #13
0
        private void toolStripButtonDeleteHole_Click(object sender, EventArgs e)
        {
            this.axRenderControl1.FeatureManager.ResetAllVisibleMask();

            if (this.currentRenderGeometry != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(currentRenderGeometry.Guid);
                this.currentRenderGeometry = null;
            }

            for (int i = 0; i < lll.Count; i++)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(lll[i].Guid);
            }
            lll.Clear();
        }
Exemple #14
0
        private void btnCreatePolygon_Click(object sender, EventArgs e)
        {
            this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing);

            this.axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish);

            this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit;

            fde_polygon = (IPolygon)_geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ);
            rpolygon    = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, null, rootId);

            if (!_geoEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator))
            {
                MessageBox.Show(this.axRenderControl1.GetLastError().ToString());
                return;
            }
        }
Exemple #15
0
        void draw(IGeometry geo)
        {
            if (geo == null)
            {
                return;
            }
            //清空上一次计算的结果
            foreach (IRenderPolygon rpoly in rpolyToDel)
            {
                if (rpoly != null)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(rpoly.Guid);
                }
            }
            rpolyToDel.Clear();

            switch (geo.GeometryType)
            {
            case gviGeometryType.gviGeometryPolygon:
            {
                ISurfaceSymbol sym = new SurfaceSymbol();
                sym.Color = System.Drawing.Color.Yellow;
                IRenderPolygon rpoly = this.axRenderControl1.ObjectManager.CreateRenderPolygon(geo as IPolygon, sym, rootId);
                rpolyToDel.Add(rpoly);
            }
            break;

            case gviGeometryType.gviGeometryMultiPolygon:
            {
                IMultiPolygon multiPolygon = geo as IMultiPolygon;
                for (int i = 0; i < multiPolygon.GeometryCount; i++)
                {
                    IPolygon       polygon = multiPolygon.GetGeometry(i) as IPolygon;
                    ISurfaceSymbol sym     = new SurfaceSymbol();
                    sym.Color = System.Drawing.Color.Yellow;
                    IRenderPolygon rpoly = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, sym, rootId);
                    rpolyToDel.Add(rpoly);
                }
            }
            break;
            }
            setHide();
        }
 public override void Close()
 {
     if (_rPoint != null)
     {
         this._objectManager.DeleteObject(_rPoint.Guid);
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint);
         _rPoint = null;
     }
     if (_polygon != null)
     {
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_polygon);
         _polygon = null;
     }
     if (_rPolygon != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_rPolygon.Guid);
         _rPolygon = null;
     }
 }
Exemple #17
0
        private void btnCreatePolygon_Click(object sender, EventArgs e)
        {
            _geoEditor.FinishEdit();   //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时

            if (gfactory == null)
            {
                gfactory = new GeometryFactory();
            }

            fde_polygon = (IPolygon)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolygon,
                                                            gviVertexAttribute.gviVertexAttributeZ);
            rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, null, rootId);

            resultCode = _geoEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator);
            if (!resultCode)
            {
                MessageBox.Show(this.axRenderControl1.GetLastError().ToString());
            }
        }
Exemple #18
0
        /// <summary>
        /// 进行缓冲
        /// </summary>
        /// <param name="distance">缓冲距离</param>
        /// <returns>缓冲形成的多边形</returns>
        private IRenderPolygon DrawBufferPolygon(double distance)
        {
            IPolygon bufferPolygon = GetBufferPolygon(distance);

            axRenderControl1.HighlightHelper.SetRegion(bufferPolygon);

            if (_RenderPolygon != null)
            {
                _RenderPolygon.SetFdeGeometry(bufferPolygon);
            }
            else
            {
                _RenderPolygon = axRenderControl1.ObjectManager.CreateRenderPolygon(bufferPolygon, _SurfaceSymbol, rootId);
                _RenderPolygon.MaxVisibleDistance = double.MaxValue;
                _RenderPolygon.MinVisiblePixels   = 3;
                _RenderPolygon.HeightStyle        = gviHeightStyle.gviHeightAbsolute;
            }
            _RenderPolygon.VisibleMask = gviViewportMask.gviViewAllNormalView;

            return(_RenderPolygon);
        }
Exemple #19
0
        void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender)
        {
            if (PickResult == null)
            {
                return;
            }

            IRenderPolygonPickResult rpPickResult = PickResult as IRenderPolygonPickResult;

            if (rpPickResult != null)
            {
                IRenderPolygon rp        = rpPickResult.Polygon;
                string         strToShow = rp.GetClientData("Name");

                if (label == null)
                {
                    label = this.axRenderControl1.ObjectManager.CreateLabel(rootId);
                }
                label.Text     = strToShow;
                label.Position = IntersectPoint;
            }
        }
Exemple #20
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;
     }
 }
Exemple #21
0
        public void Clear()
        {
            if (this._drawTool != null)
            {
                this._drawTool.Close();
            }
            DF3DApplication app = DF3DApplication.Application;

            if (app == null || app.Current3DMapControl == null)
            {
                return;
            }
            if (this._renderBox != null)
            {
                app.Current3DMapControl.ObjectManager.DeleteObject(this._renderBox.Guid);
                this._renderBox = null;
            }
            if (this._renderPolygon != null)
            {
                app.Current3DMapControl.ObjectManager.DeleteObject(this._renderPolygon.Guid);
                this._renderPolygon = null;
            }
        }
Exemple #22
0
        private void toolStripButtonCreatePolygon_Click(object sender, System.EventArgs e)
        {
            //创建日志文件
            Logger.Create(Application.StartupPath);

            if (renderpolygonDraw != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(renderpolygonDraw.Guid);
                renderpolygonDraw = null;
            }

            polygonDraw            = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
            polygonDraw.SpatialCRS = crs as ISpatialCRS;
            ISurfaceSymbol sf = new SurfaceSymbol();

            sf.Color = Color.FromArgb(Convert.ToInt32("0x55ffff80", 16));
            ICurveSymbol cs = new CurveSymbol();

            cs.Color          = Color.FromArgb(Convert.ToInt32("0x55ffff80", 16));
            sf.BoundarySymbol = cs;
            renderpolygonDraw = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygonDraw as IPolygon, sf, rootId);
            this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit;
            this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(renderpolygonDraw, gviGeoEditType.gviGeoEditCreator);
        }
Exemple #23
0
 public static void TestDrawPolygon(double offX, double offY, double offZ, double[] vtxs, ISurfaceSymbol sfSymbol)
 {
     if ((vtxs.Length >= 9) && ((vtxs.Length % 3) == 0))
     {
         IPolygon polygon    = null;
         IPoint   pointValue = null;
         polygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
         for (int i = 0; i < (vtxs.Length / 3); i++)
         {
             pointValue   = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ);
             pointValue.X = offX + vtxs[i * 3];
             pointValue.Y = offY + vtxs[(i * 3) + 1];
             pointValue.Z = offZ + vtxs[(i * 3) + 2];
             polygon.ExteriorRing.AppendPoint(pointValue);
         }
         if (!polygon.IsClosed)
         {
             polygon.Close();
         }
         IRenderPolygon item = Ocx.ObjectManager.CreateRenderPolygon(polygon, sfSymbol, Ocx.ProjectTree.RootID);
         item.MaxVisibleDistance = maxVisibleDis;
         tmpList.Add(item);
     }
 }
Exemple #24
0
        private void _3DControl_RcMouseClickSelect(object sender, _IRenderControlEvents_RcMouseClickSelectEvent e)
        {
            try
            {
                if (e.intersectPoint != null)
                {
                    IPoint pt1 = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ) as IPoint;
                    pt1.X = e.intersectPoint.X;
                    pt1.Y = e.intersectPoint.Y;
                    pt1.Z = e.intersectPoint.Z;
                    if (e.eventSender == gviMouseSelectMode.gviMouseSelectClick)
                    {
                        if (!this._isStarted)
                        {
                            this.Close();
                            if (this._onStartDraw != null)
                            {
                                this._onStartDraw();
                            }
                            this._polygon = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
                            this._polygon.ExteriorRing.AppendPoint(pt1);
                            IPoint pt2 = pt1.Clone() as IPoint;
                            pt2.X += 0.015;
                            this._polygon.ExteriorRing.AppendPoint(pt2);
                            _rPolygon             = this._3DControl.ObjectManager.CreateRenderPolygon(this._polygon, this._surfaceSymbol, this._rootID);
                            _rPolygon.HeightStyle = this._heightStyle;

                            this._3DControl.HighlightHelper.SetRegion(this._polygon);
                            this._3DControl.HighlightHelper.VisibleMask = 1;
                            //this._polygon.ExteriorRing.Close();
                            this._isStarted  = true;
                            this._isFinished = false;
                        }
                        else
                        {
                            this._polygon.ExteriorRing.AppendPoint(pt1);
                            this._polygon.ExteriorRing.Close();
                            this._rPolygon.SetFdeGeometry(this._polygon);
                            this._3DControl.HighlightHelper.SetRegion(this._polygon);
                        }
                    }
                    else if (e.eventSender == gviMouseSelectMode.gviMouseSelectMove)
                    {
                        if (_rPoint != null)
                        {
                            this._objectManager.DeleteObject(_rPoint.Guid);
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint);
                            _rPoint = null;
                        }
                        _rPoint = this._objectManager.CreateRenderPoint(pt1, this._simplePointSymbol, this._rootID);
                        if (this._isStarted)
                        {
                            this._polygon.ExteriorRing.UpdatePoint(this._polygon.ExteriorRing.PointCount - 1, pt1);
                            this._rPolygon.SetFdeGeometry(this._polygon);
                            this._3DControl.HighlightHelper.SetRegion(this._polygon);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #25
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 - 10;
                ring.AppendPoint(center);
                center.X = env.Center.X + 10;
                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);

                TerrainModifierSettingForm form = new TerrainModifierSettingForm();
                if (form.ShowDialog() == DialogResult.OK)
                {
                    order = form.Order;
                    switch (form.Strtype)
                    {
                    case "用定义了高程的多边形替代相应地形区域中大于多边形高程部分的高程值":
                        mode = gviElevationBehaviorMode.gviElevationBehaviorAbove;
                        break;

                    case "用定义了高程的多边形替代相应地形区域中小于多边形高程部分的高程值":
                        mode = gviElevationBehaviorMode.gviElevationBehaviorBelow;
                        break;

                    case "用定义了高程的多边形替代相应的地形区域的高程值":
                        mode = gviElevationBehaviorMode.gviElevationBehaviorReplace;
                        break;
                    }

                    ITerrainModifier modifier = this.axRenderControl1.ObjectManager.CreateTerrainModifier(polygon, rootId);
                    if (modifier != null)
                    {
                        modifier.DrawOrder         = order;
                        modifier.ElevationBehavior = mode;

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

                        // 添加节点到界面控件上
                        item         = new myListNode(string.Format("RenderPolygon_{0}", modifier.Guid), TreeNodeType.NT_RenderGeomtry, rgeoNew);
                        item.Checked = true;
                        listView1.Items.Add(item);
                    }
                }
            }
        }
Exemple #26
0
        private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            DevExpress.XtraEditors.Controls.EditorButton btn = e.Button;
            switch (btn.Caption)
            {
            case "定位":
                DF3DApplication app = DF3DApplication.Application;
                if (app == null || app.Current3DMapControl == null)
                {
                    return;
                }
                int focusedRowHandle = this.gridView1.FocusedRowHandle;
                if (focusedRowHandle == -1)
                {
                    return;
                }
                DataRow dr = this.gridView1.GetDataRow(focusedRowHandle);
                if (dr["geo"] != null && dr["Name"] != null && dr["fcName"] != null)
                {
                    ISurfaceSymbol ss = new SurfaceSymbolClass();
                    ss.Color = 0xcc00ff00;
                    ICurveSymbol cs = new CurveSymbolClass();
                    cs.Color          = 0xff00ff00;
                    cs.Width          = -5;
                    ss.BoundarySymbol = cs;
                    ISimplePointSymbol ps = new SimplePointSymbol();
                    ps.Size      = SystemInfo.Instance.SymbolSize;
                    ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16);
                    IGeometry objGeo = dr["geo"] as IGeometry;
                    IPoint    pt     = null;
                    if (objGeo.GeometryType == gviGeometryType.gviGeometryMultiPolyline)
                    {
                        double         x         = 0;
                        double         y         = 0;
                        double         z         = 0;
                        IMultiPolyline mPolyline = objGeo as IMultiPolyline;
                        for (int m = 0; m < mPolyline.GeometryCount; m++)
                        {
                            IPolyline polyline = mPolyline.GetPolyline(m);
                            IPoint    pttemp   = polyline.Midpoint;
                            x += pttemp.X;
                            y += pttemp.Y;
                            z += pttemp.Z;
                        }
                        x    = x / mPolyline.GeometryCount;
                        y    = y / mPolyline.GeometryCount;
                        z    = z / mPolyline.GeometryCount;
                        pt   = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ);
                        pt.X = x;
                        pt.Y = y;
                        pt.Z = z;
                        IRenderMultiPolyline rMPolyline = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolyline(mPolyline, cs, app.Current3DMapControl.ProjectTree.RootID);
                        rMPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything;
                        rMPolyline.Glow(8000);
                        this._listRender.Add(rMPolyline.Guid);
                    }
                    else if (objGeo.GeometryType == gviGeometryType.gviGeometryMultiPolygon)
                    {
                        double        x        = 0;
                        double        y        = 0;
                        double        z        = 0;
                        IMultiPolygon mPolygon = objGeo as IMultiPolygon;
                        for (int m = 0; m < mPolygon.GeometryCount; m++)
                        {
                            IPolygon polygon = mPolygon.GetPolygon(m);
                            IPoint   pttemp  = polygon.Centroid;
                            x += pttemp.X;
                            y += pttemp.Y;
                            z += pttemp.Z;
                        }
                        x    = x / mPolygon.GeometryCount;
                        y    = y / mPolygon.GeometryCount;
                        z    = z / mPolygon.GeometryCount;
                        pt   = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ);
                        pt.X = x;
                        pt.Y = y;
                        pt.Z = z;
                        IRenderMultiPolygon rMPolygon = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolygon(mPolygon, ss, app.Current3DMapControl.ProjectTree.RootID);
                        rMPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything;
                        rMPolygon.Glow(8000);
                        this._listRender.Add(rMPolygon.Guid);
                    }
                    else if (objGeo.GeometryType == gviGeometryType.gviGeometryPolyline)
                    {
                        IPolyline polyline = objGeo as IPolyline;
                        pt = polyline.Midpoint;
                        IRenderPolyline rPolyline = app.Current3DMapControl.ObjectManager.CreateRenderPolyline(polyline, cs, app.Current3DMapControl.ProjectTree.RootID);
                        rPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything;
                        rPolyline.Glow(8000);
                        this._listRender.Add(rPolyline.Guid);
                    }
                    else if (objGeo.GeometryType == gviGeometryType.gviGeometryPoint)
                    {
                        IPoint point = objGeo as IPoint;
                        pt = point;
                        IRenderPoint rPoint = app.Current3DMapControl.ObjectManager.CreateRenderPoint(point, ps, app.Current3DMapControl.ProjectTree.RootID);
                        rPoint.Glow(8000);
                        this._listRender.Add(rPoint.Guid);
                    }
                    else if (objGeo.GeometryType == gviGeometryType.gviGeometryPolygon)
                    {
                        IPolygon polygon = objGeo as IPolygon;
                        pt = polygon.Centroid;
                        IRenderPolygon rPolygon = app.Current3DMapControl.ObjectManager.CreateRenderPolygon(polygon, ss, app.Current3DMapControl.ProjectTree.RootID);
                        rPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything;
                        rPolygon.Glow(8000);
                        this._listRender.Add(rPolygon.Guid);
                    }
                    else
                    {
                        return;
                    }

                    ITableLabel tl = DrawTool.CreateTableLabel1(1);
                    tl.TitleText = dr["fcName"].ToString();
                    tl.SetRecord(0, 0, dr["Name"].ToString());
                    tl.Position = pt;

                    this._listRender.Add(tl.Guid);

                    app.Current3DMapControl.Camera.FlyToObject(tl.Guid, gviActionCode.gviActionFlyTo);
                }
                break;
            }
        }
Exemple #27
0
        void axRenderControl1_RcMouseClickSelect(object sender, Gvitech.CityMaker.Controls._IRenderControlEvents_RcMouseClickSelectEvent e)
        {
            if (e.pickResult.Type == gviObjectType.gviObjectLabel)
            {
                ILabelPickResult tlpr = e.pickResult as ILabelPickResult;
                gviObjectType    type = tlpr.Type;
                ILabel           fl   = tlpr.Label;
                MessageBox.Show("拾取到" + type + "类型,内容为" + fl.Text);
            }
            else if (e.pickResult.Type == gviObjectType.gviObjectRenderModelPoint)
            {
                IRenderModelPointPickResult tlpr = e.pickResult as IRenderModelPointPickResult;
                gviObjectType     type           = tlpr.Type;
                IRenderModelPoint fl             = tlpr.ModelPoint;
                MessageBox.Show("拾取到" + type + "类型,模型名称为" + fl.ModelName);
            }
            else if (e.pickResult.Type == gviObjectType.gviObjectRenderPoint)
            {
                IRenderPointPickResult tlpr = e.pickResult as IRenderPointPickResult;
                gviObjectType          type = tlpr.Type;
                IRenderPoint           fl   = tlpr.Point;
                MessageBox.Show("拾取到" + type + "类型,大小为" + fl.Symbol.Size);
            }
            else if (e.pickResult.Type == gviObjectType.gviObjectRenderPolyline)
            {
                IRenderPolylinePickResult tlpr = e.pickResult as IRenderPolylinePickResult;
                gviObjectType             type = tlpr.Type;
                IRenderPolyline           fl   = tlpr.Polyline;
                MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid);
            }
            else if (e.pickResult.Type == gviObjectType.gviObjectRenderPolygon)
            {
                IRenderPolygonPickResult tlpr = e.pickResult as IRenderPolygonPickResult;
                gviObjectType            type = tlpr.Type;
                IRenderPolygon           fl   = tlpr.Polygon;
                MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid);
            }
            else if (e.pickResult.Type == gviObjectType.gviObjectRenderPOI)
            {
                IRenderPOIPickResult tlpr = e.pickResult as IRenderPOIPickResult;
                gviObjectType        type = tlpr.Type;
                IRenderPOI           fl   = tlpr.POI;
                MessageBox.Show("拾取到" + type + "类型,名称为" + ((IPOI)fl.GetFdeGeometry()).Name);
            }
            else if (e.pickResult.Type == gviObjectType.gviObjectReferencePlane)
            {
                //ta = new TextAttribute();
                ta.TextSize = Convert.ToInt32(this.toolstripFontSize.Text.ToString());
                //  ta.TextColor = olec;
                IImage image     = null;
                IModel model     = null;
                string imageName = "";
                this.axRenderControl1.Utility.CreateFixedBillboard(label.Text, ta, 50, 100, true, out model, out image, out imageName);
                this.axRenderControl1.ObjectManager.AddModel("fixedModel", model);
                this.axRenderControl1.ObjectManager.AddImage(imageName, image);

                if (gfactory == null)
                {
                    gfactory = new GeometryFactoryClass();
                }
                fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint,
                                                         gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;
                fde_modelpoint.SetCoords(e.intersectPoint.X, e.intersectPoint.Y, e.intersectPoint.Z, 0, 0);
                fde_modelpoint.ModelName = "fixedModel";
                rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId);
                rmodelpoint.MaxVisibleDistance = double.MaxValue;
                rmodelpoint.MinVisiblePixels   = 0;
                rmodelpoint.ShowOutline        = checkShowOutline.Checked;
                IEulerAngle angle = new EulerAngle();
                angle.Set(0, -20, 0);
                this.axRenderControl1.Camera.LookAt(e.intersectPoint.Position, 100, angle);
            }
        }
Exemple #28
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;
        }
Exemple #29
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)
            {
            }
        }
        private void _3DControl_RcMouseClickSelect(object sender, _IRenderControlEvents_RcMouseClickSelectEvent e)
        {
            try
            {
                if (e.intersectPoint != null)
                {
                    IPoint pt1 = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ) as IPoint;
                    pt1.X = e.intersectPoint.X;
                    pt1.Y = e.intersectPoint.Y;
                    pt1.Z = e.intersectPoint.Z;
                    if (e.eventSender == gviMouseSelectMode.gviMouseSelectClick)
                    {
                        if (!this._isStarted)
                        {
                            this.Close();
                            if (this._onStartDraw != null)
                            {
                                this._onStartDraw();
                            }
                            this._polygon = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon;
                            this._polygon.ExteriorRing.AppendPoint(pt1);
                            IPoint pt2 = pt1.Clone() as IPoint;
                            pt2.X += 0.015;
                            this._polygon.ExteriorRing.AppendPoint(pt2);

                            ISurfaceSymbol ss = new SurfaceSymbolClass();
                            ss.Color = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16);
                            ICurveSymbol cs = new CurveSymbolClass();
                            cs.Color              = Convert.ToUInt32(SystemInfo.Instance.LineColor, 16);
                            ss.BoundarySymbol     = cs;
                            _rPolygon             = this._3DControl.ObjectManager.CreateRenderPolygon(this._polygon, ss, this._3DControl.ProjectTree.RootID);
                            _rPolygon.HeightStyle = this._heightStyle;
                            //this._polygon.ExteriorRing.Close();
                            this._isStarted  = true;
                            this._isFinished = false;
                        }
                        else
                        {
                            this._polygon.ExteriorRing.AppendPoint(pt1);
                            this._polygon.ExteriorRing.Close();
                            this._rPolygon.SetFdeGeometry(this._polygon);
                        }
                    }
                    else if (e.eventSender == gviMouseSelectMode.gviMouseSelectMove)
                    {
                        if (_rPoint != null)
                        {
                            this._objectManager.DeleteObject(_rPoint.Guid);
                            System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint);
                            _rPoint = null;
                        }
                        _rPoint = this._objectManager.CreateRenderPoint(pt1, this._simplePointSymbol, this._rootID);
                        if (this._isStarted)
                        {
                            this._polygon.ExteriorRing.UpdatePoint(this._polygon.ExteriorRing.PointCount - 1, pt1);
                            this._rPolygon.SetFdeGeometry(this._polygon);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace);
            }
        }