Exemple #1
0
        /// <summary>
        /// 开始绘制线段
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_createLine_Click(object sender, EventArgs e)
        {
            this.label7.Text = "请在三维窗口中点两个点构造一条线";
            this.axRenderControl1.FeatureManager.UnhighlightAll();
            flagx = true;
            if (renderPolyline != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(renderPolyline.Guid);
                renderPolyline = null;
            }
            if (polyline != null)
            {
                polyline = null;
            }
            if (geoFactory == null)
            {
                geoFactory = new GeometryFactory();
            }
            if (polyline == null)
            {
                polyline            = (IPolyline)geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ);
                polyline.SpatialCRS = currentEnvCRS;
            }

            this.axRenderControl1.InteractMode          = gviInteractMode.gviInteractSelect;
            this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectAll;
            this.axRenderControl1.MouseSelectMode       = gviMouseSelectMode.gviMouseSelectClick;
            this.axRenderControl1.RcMouseClickSelect   += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect);
        }
Exemple #2
0
 private void SetInteractNormal()
 {
     axRenderControl1.InteractMode = i3dInteractMode.i3dInteractNormal;
     UnHightlightObj();
     selectedPoint    = null;
     selectedPolyline = null;
 }
Exemple #3
0
        private void btnBuildRoute_Click(object sender, System.EventArgs e)
        {
            clear();
            this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect);

            this.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal;

            switch (cbOrderPolicy.SelectedIndex)
            {
            case 0:
                routeSolver.LocationOrderPolicy = gviNetworkLocationOrderPolicy.gviSequence;
                break;

            case 1:
                routeSolver.LocationOrderPolicy = gviNetworkLocationOrderPolicy.gviFixStart;
                break;

            case 2:
                routeSolver.LocationOrderPolicy = gviNetworkLocationOrderPolicy.gviFixStartAndReturn;
                break;

            case 3:
                routeSolver.LocationOrderPolicy = gviNetworkLocationOrderPolicy.gviFixStartEnd;
                break;

            case 4:
                routeSolver.LocationOrderPolicy = gviNetworkLocationOrderPolicy.gviFree;
                break;
            }
            if (routeSolver.Solve())
            {
                INetworkRoute route = routeSolver.GetRoute();
                if (route != null)
                {
                    ICurveSymbol lineSym = new CurveSymbol();
                    lineSym.Color = System.Drawing.Color.Yellow;
                    lineSym.Width = -2;
                    IGeometry geo = route.GetRouteGeometry();
                    if (geo.GeometryType == gviGeometryType.gviGeometryPolyline)
                    {
                        IPolyline line = geo as IPolyline;
                        renderLine = this.axRenderControl1.ObjectManager.CreateRenderPolyline(line, lineSym, rootId);
                        renderLine.MaxVisibleDistance = 10000;
                    }
                    else if (geo.GeometryType == gviGeometryType.gviGeometryMultiPolyline)
                    {
                        IMultiPolyline line = geo as IMultiPolyline;
                        multiRenderLine = this.axRenderControl1.ObjectManager.CreateRenderMultiPolyline(line, lineSym, rootId);
                        multiRenderLine.MaxVisibleDistance = 10000;
                    }
                    btnNavigate.Enabled = true;

                    drawTempLine(route);
                }
            }
            else
            {
                MessageBox.Show("查找路径失败");
            }
        }
Exemple #4
0
        /// <summary>
        /// 拾取线
        /// </summary>
        /// <param name="PickResult"></param>
        /// <param name="IntersectPoint"></param>
        /// <param name="Mask"></param>
        /// <param name="EventSender"></param>
        void g_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender)
        {
            if (IntersectPoint == null)
            {
                return;
            }

            if (renderPolyline == null)
            {
                renderPolyline        = axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, null, rootId);
                renderPolyline.Symbol = new CurveSymbol()
                {
                    Color = System.Drawing.Color.Red, Width = 4
                };
            }

            if (polyline.PointCount < 2)
            {
                polyline.AppendPoint(IntersectPoint);
            }
            if (polyline.PointCount == 2)
            {
                axRenderControl1.InteractMode          = gviInteractMode.gviInteractNormal;
                axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectNone;
                axRenderControl1.MouseSelectMode       = gviMouseSelectMode.gviMouseSelectClick;
                axRenderControl1.RcMouseClickSelect   -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(g_RcMouseClickSelect);

                flagx = false;
            }
            renderPolyline.SetFdeGeometry(polyline);
        }
        private void CreateRenderPolyline(IPoint point)
        {
            if (gfactory == null)
            {
                gfactory = new GeometryFactory();
            }

            fde_polyline            = (IPolyline)gfactory.CreateGeometry(i3dGeometryType.i3dGeometryPolyline, i3dVertexAttribute.i3dVertexAttributeZ);
            fde_polyline.SpatialCRS = crs;

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

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

            fde_point.SetCoords(point.X + 20, point.Y, point.Z, 0, 0);
            fde_polyline.AppendPoint(fde_point);

            fde_point.SetCoords(point.X + 20, point.Y + 20, point.Z, 0, 0);
            fde_polyline.AppendPoint(fde_point);

            fde_point.SetCoords(point.X + 20, point.Y + 20, point.Z + 20, 0, 0);
            fde_polyline.AppendPoint(fde_point);

            lineSymbol       = new CurveSymbolClass();
            lineSymbol.Color = 0xffff00ff;  // 紫红色

            rpolyline = _axRenderControl.ObjectManager.CreateRenderPolyline(fde_polyline, lineSymbol);

            _axRenderControl.Camera.FlyToObject(rpolyline.Guid, i3dActionCode.i3dActionFlyTo);
        }
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);
 }
 private void ClearSightLine()
 {
     if (this._rLine != null)
     {
         this._3DControl.ObjectManager.DeleteObject(this._rLine.Guid);
         this._rLine = null;
     }
 }
Exemple #8
0
        private void ToolStripMenuItemCreateRenderPolyline_Click(object sender, EventArgs e)
        {
            motionPath = this.axRenderControl1.ObjectManager.CreateMotionPath(rootId);

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(Application.StartupPath + @"\MotionPath.xml");
            string wkt = xmlDoc.SelectSingleNode("root/WKT").InnerText;

            motionPath.CrsWKT = wkt;
            IPoint point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ);

            point.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS;
            IPolyline line = new GeometryFactory().CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;

            line.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS;

            XmlNodeList nodes = xmlDoc.SelectNodes("root/Waypoint");
            int         i     = 0;

            foreach (XmlNode node in nodes)
            {
                double x = double.Parse(node.SelectSingleNode("X").InnerText);
                double y = double.Parse(node.SelectSingleNode("Y").InnerText);
                double z = double.Parse(node.SelectSingleNode("Z").InnerText);
                position.Set(x, y, z);
                point.Position = position;
                if (line.PointCount == 0)
                {
                    line.StartPoint = point;
                }
                else
                {
                    line.AddPointAfter(i - 1, point);
                }
                i++;

                double heading = double.Parse(node.SelectSingleNode("Heading").InnerText);
                double tilt    = double.Parse(node.SelectSingleNode("Tilt").InnerText);
                double roll    = double.Parse(node.SelectSingleNode("Roll").InnerText);
                double when    = double.Parse(node.SelectSingleNode("When").InnerText);
                angle.Set(heading, tilt, roll);
                scale.Set(1, 1, 1);
                motionPath.AddWaypoint2(point, angle, scale, when);
            }

            IRenderPolyline rpl = this.axRenderControl1.ObjectManager.CreateRenderPolyline(line, null, selectedId);

            rpl.Name = "RenderPolyline";
            TreeNode treeNode = new TreeNode("RenderPolyline", 1, 1);

            treeNode.Tag     = rpl.Guid;
            treeNode.Checked = true;
            selectedNode.Nodes.Add(treeNode);
            this.treeView1.UpdateView();
        }
Exemple #9
0
        private void ToolStripMenuItemEditPolyline_Click(object sender, EventArgs e)
        {
            Guid            g   = this.axRenderControl1.ProjectTree.FindItem("root\\图标标签\\RenderPolyline");
            IRenderPolyline rpl = this.axRenderControl1.ObjectManager.GetObjectById(g) as IRenderPolyline;

            this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit;
            IObjectEditor objEditor = this.axRenderControl1.ObjectEditor;

            objEditor.StartEditRenderGeometry(rpl, gviGeoEditType.gviGeoEditVertex);
        }
Exemple #10
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._polyline  = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;
                     this._rPolyline = this._objectManager.CreateRenderPolyline(this._polyline, this._curveSymbol, this._rootID);
                     this._polyline.AppendPoint(pt1);
                     IPoint pt2 = pt1.Clone() as IPoint;
                     pt2.X += 0.000001;
                     this._polyline.AppendPoint(pt2);
                     this._isStarted  = true;
                     this._isFinished = false;
                 }
                 else
                 {
                     this._polyline.AppendPoint(pt1);
                 }
             }
             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._polyline.UpdatePoint(this._polyline.PointCount - 1, pt1);
                     this._rPolyline.SetFdeGeometry(this._polyline);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
Exemple #11
0
        private void clear()
        {
            if (renderLine != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(renderLine.Guid);
                renderLine = null;
            }
            if (multiRenderLine != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(multiRenderLine.Guid);
                multiRenderLine = null;
            }
            if (tour != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(tour.Guid);
                tour = null;
            }
            if (renderModelPoint != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(renderModelPoint.Guid);
                renderModelPoint = null;
            }
            if (skinMesh != null)
            {
                this.axRenderControl1.ObjectManager.DeleteObject(skinMesh.Guid);
                skinMesh = null;
            }

            if (renderLineArray.Count != 0)
            {
                foreach (IRenderPolyline line in renderLineArray)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(line.Guid);
                }
                renderLineArray.Clear();
            }
            if (multiRenderLineArray.Count != 0)
            {
                foreach (IRenderMultiPolyline line in multiRenderLineArray)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(line.Guid);
                }
                multiRenderLineArray.Clear();
            }
            if (tmpRenderLineArray.Count != 0)
            {
                foreach (IRenderPolyline line in tmpRenderLineArray)
                {
                    this.axRenderControl1.ObjectManager.DeleteObject(line.Guid);
                }
                tmpRenderLineArray.Clear();
            }
        }
Exemple #12
0
        /// <summary>
        /// 开始绘制线段
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCreatLine_Click(object sender, EventArgs e)
        {
            axRenderControl1.FeatureManager.UnhighlightAll();
            axRenderControl1.HighlightHelper.SetRegion(null);

            flagx = true;
            if (renderPolyline != null)
            {
                axRenderControl1.ObjectManager.DeleteObject(renderPolyline.Guid);
                renderPolyline = null;
            }
            if (polyline != null)
            {
                polyline = null;
            }
            if (_RenderPolygon != null)
            {
                _RenderPolygon.VisibleMask = gviViewportMask.gviViewNone;
            }
            if (this.trackBar1.Value > 0)
            {
                this.trackBar1.Value = 0;
            }
            if (this.textBox2.Text != null)
            {
                this.textBox2.Text = null;
            }
            if (this.textBox1.Text != null)
            {
                this.textBox1.Text = null;
            }
            if (this.dataGridView1.Rows != null)
            {
                this.dataGridView1.Rows.Clear();
            }
            if (geoFactory == null)
            {
                geoFactory = new GeometryFactory();
            }
            if (polyline == null)
            {
                polyline            = (IPolyline)geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ);
                polyline.SpatialCRS = currentCRS;
            }

            axRenderControl1.InteractMode          = gviInteractMode.gviInteractSelect;
            axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectAll;
            axRenderControl1.MouseSelectMode       = gviMouseSelectMode.gviMouseSelectClick;
            axRenderControl1.RcMouseClickSelect   += new _IRenderControlEvents_RcMouseClickSelectEventHandler(g_RcMouseClickSelect);
        }
Exemple #13
0
        private void LoadDynamicObjectAndLineFromFile()
        {
            ICameraTour tour     = null;
            string      tourPath = (strMediaPath + @"\xml\CameraTour_2.xml");

            if (File.Exists(tourPath))
            {
                StreamReader sr        = new StreamReader(tourPath);
                string       xmlstring = sr.ReadToEnd();
                sr.Close();
                tour = this.axRenderControl1.ObjectManager.CreateCameraTour(rootId);
                tour.FromXml(xmlstring);
            }
            if (tour == null)
            {
                MessageBox.Show("xml文件读取失败");
            }

            dynamicObject.CrsWKT = tour.CrsWKT;
            point.SpatialCRS     = new CRSFactory().CreateFromWKT(tour.CrsWKT) as ISpatialCRS;
            line.SpatialCRS      = new CRSFactory().CreateFromWKT(tour.CrsWKT) as ISpatialCRS;

            for (int i = 0; i < tour.WaypointsNumber; i++)
            {
                double            duration;
                gviCameraTourMode mode;
                tour.GetWaypoint(i, out position, out angle, out duration, out mode);
                dynamicObject.AddWaypoint(position, 10);

                point.Position = position;
                if (line.PointCount == 0)
                {
                    line.StartPoint = point;
                }
                else
                {
                    line.AddPointAfter(i - 1, point);
                }
            }

            ICurveSymbol cur = new CurveSymbol();

            cur.Color = System.Drawing.Color.Yellow;
            cur.Width = -2;
            rline     = this.axRenderControl1.ObjectManager.CreateRenderPolyline(line, cur, rootId);
        }
Exemple #14
0
        private void LoadMotionPathAndLineFromFile()
        {
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(Application.StartupPath + @"MotionPath.xml");
            wkt = xmlDoc.SelectSingleNode("root/WKT").InnerText;
            // 指定坐标系与xml里的相同
            motionPath.CrsWKT = xmlDoc.SelectSingleNode("root/WKT").InnerText;
            point.SpatialCRS  = new CRSFactory().CreateFromWKT(motionPath.CrsWKT) as ISpatialCRS;
            line.SpatialCRS   = new CRSFactory().CreateFromWKT(motionPath.CrsWKT) as ISpatialCRS;

            XmlNodeList nodes = xmlDoc.SelectNodes("root/Waypoint");
            int         i     = 0;

            foreach (XmlNode node in nodes)
            {
                double x       = double.Parse(node.SelectSingleNode("X").InnerText);
                double y       = double.Parse(node.SelectSingleNode("Y").InnerText);
                double z       = double.Parse(node.SelectSingleNode("Z").InnerText);
                double heading = double.Parse(node.SelectSingleNode("Heading").InnerText);
                double tilt    = double.Parse(node.SelectSingleNode("Tilt").InnerText);
                double roll    = double.Parse(node.SelectSingleNode("Roll").InnerText);
                double when    = double.Parse(node.SelectSingleNode("When").InnerText);
                position.Set(x, y, z);
                point.Position = position;
                if (line.PointCount == 0)
                {
                    line.StartPoint = point;
                }
                else
                {
                    line.AddPointAfter(i - 1, point);
                }
                i++;
                angle.Set(heading, tilt, roll);
                scale.Set(1, 1, 1);
                motionPath.AddWaypoint2(point, angle, scale, when);
                this.axRenderControl1.ObjectManager.CreateRenderPoint(point, null, rootId);
            }

            ICurveSymbol cur = new CurveSymbol();

            cur.Color = System.Drawing.Color.Red;
            cur.Width = -2;
            rline     = this.axRenderControl1.ObjectManager.CreateRenderPolyline(line, cur, rootId);
        }
Exemple #15
0
        public void RenderTrajectory(List <Trajectory> traceInfos, uint pointColor = 0xAA90EE90, uint lineColor = 0xAA0CE6E5)
        {
            try
            {
                symbol = new SimplePointSymbolClass()
                {
                    FillColor = pointColor,
                    Size      = 10
                };

                #region 创建线
                IPoint    point = _geoFactory.CreatePoint(i3dVertexAttribute.i3dVertexAttributeZ);
                IPolyline line  = (IPolyline)_geoFactory.CreateGeometry(i3dGeometryType.i3dGeometryPolyline, i3dVertexAttribute.i3dVertexAttributeZ);
                line.SpatialCRS = _spatialCRS;


                foreach (Trajectory trajectory in traceInfos)
                {
                    point.SetCoords(trajectory.LongitudeWgs84, trajectory.LatitudeWgs84, 1, 0, 0);
                    point.SpatialCRS = _spatialCRS;

                    line.AppendPoint(point);
                    var rPoint = _axRenderControl.ObjectManager.CreateRenderPoint(point, symbol);
                    rPoint.MaxVisibleDistance = 100000;
                    rPoint.ViewingDistance    = 500000;
                    AppendGuidToStringBuilder(rPoint.Guid);
                }
                //lineColor = 0xFF0CE6E5;
                tracePolyline = _axRenderControl.ObjectManager.CreateRenderPolyline(line, new CurveSymbol {
                    Color = lineColor, Width = -2
                });
                tracePolyline.VisibleMask        = i3dViewportMask.i3dViewAllNormalView;
                tracePolyline.MaxVisibleDistance = 100000;
                tracePolyline.HeightStyle        = i3dHeightStyle.i3dHeightAbsolute;

                AppendGuidToStringBuilder(tracePolyline.Guid);
                //_axRenderControl.Camera.FlyToObject(tracePolyline.Guid, i3dActionCode.i3dActionFollowAbove);
                #endregion
            }
            catch (Exception ex)
            {
                LoggerHelper.Logger.Error(ex, $"执行RenderTrajectory错误");
                throw ex;
            }
        }
Exemple #16
0
        /// <summary>
        /// 出沿街立面图
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripStreet_Click(object sender, EventArgs e)
        {
            this.axRenderControl1.FeatureManager.UnhighlightAll();
            MessageBox.Show("请沿街道画一条线");
            this.axRenderControl1.InteractMode     = gviInteractMode.gviInteractEdit;
            this.axRenderControl1.MouseSelectMode  = gviMouseSelectMode.gviMouseSelectClick;
            this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing);


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

            polyline            = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;
            polyline.SpatialCRS = dataset.SpatialReference;
            rpolyline           = this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, null, rootId);
            this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(rpolyline, gviGeoEditType.gviGeoEditCreator);
        }
Exemple #17
0
        private void btnCreatePolyline_Click(object sender, EventArgs e)
        {
            _geoEditor.FinishEdit();   //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时

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

            fde_polyline = (IPolyline)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolyline,
                                                              gviVertexAttribute.gviVertexAttributeZ);
            rpolyline = this.axRenderControl1.ObjectManager.CreateRenderPolyline(fde_polyline, null, rootId);

            resultCode = _geoEditor.StartEditRenderGeometry(rpolyline, gviGeoEditType.gviGeoEditCreator);
            if (!resultCode)
            {
                MessageBox.Show(this.axRenderControl1.GetLastError().ToString());
            }
        }
Exemple #18
0
        public static void TestDrawPolyline(double offX, double offY, double offZ, List <Vector> vLines, ICurveSymbol cvSymbol)
        {
            IPolyline polyline   = null;
            IPoint    pointValue = null;

            polyline = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;
            foreach (Vector vector in vLines)
            {
                pointValue   = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ);
                pointValue.X = offX + vector.X;
                pointValue.Y = offY + vector.Y;
                pointValue.Z = offZ + vector.Z;
                polyline.AppendPoint(pointValue);
            }
            IRenderPolyline item = Ocx.ObjectManager.CreateRenderPolyline(polyline, cvSymbol, Ocx.ProjectTree.RootID);

            item.MaxVisibleDistance = maxVisibleDis;
            tmpList.Add(item);
        }
Exemple #19
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._objectManager.DeleteObject(_rPolyline.Guid);
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPolyline);
         _rPolyline = null;
     }
     if (_polyline != null)
     {
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_polyline);
         _polyline = null;
     }
 }
Exemple #20
0
        /// <summary>
        /// 鼠标点击 拾取线段点
        /// </summary>
        /// <param name="PickResult"></param>
        /// <param name="IntersectPoint"></param>
        /// <param name="Mask"></param>
        /// <param name="EventSender"></param>
        void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender)
        {
            if (IntersectPoint == null)
            {
                return;
            }

            if (renderPolyline == null)
            {
                ICurveSymbol cs = new CurveSymbol();
                cs.Color       = System.Drawing.Color.Yellow;
                cs.Width       = -5;
                renderPolyline = this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cs, rootId);
            }

            if (polyline.PointCount < 2)
            {
                polyline.AppendPoint(IntersectPoint);
            }
            if (polyline.PointCount == 2)
            {
                this.axRenderControl1.InteractMode          = gviInteractMode.gviInteractNormal;
                this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectNone;
                this.axRenderControl1.MouseSelectMode       = gviMouseSelectMode.gviMouseSelectClick;
                this.axRenderControl1.RcMouseClickSelect   -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect);

                IPoint p = polyline.StartPoint;
                this.startX.Text = p.X.ToString();
                this.startY.Text = p.Y.ToString();
                this.startZ.Text = p.Z.ToString();
                p = polyline.EndPoint;
                this.endX.Text   = p.X.ToString();
                this.endY.Text   = p.Y.ToString();
                this.endZ.Text   = p.Z.ToString();
                flagx            = false;
                this.label7.Text = "线构造成功!请点击“通视分析”按钮";
                this.btnFlyToSourcePoint.Enabled = true;
                this.btnFlyToTargetPoint.Enabled = true;
            }
            renderPolyline.SetFdeGeometry(polyline);
        }
Exemple #21
0
        private void AxRenderControl1_RcMouseClickSelect(object sender, Axi3dRenderEngine._IRenderControlEvents_RcMouseClickSelectEvent e)
        {
            UnHightlightObj();
            ResetSelectedObj();

            var pickResult = e.pickResult;

            if (pickResult.Type == i3dObjectType.i3dObjectRenderPolyline)
            {
                var flpr = pickResult as IRenderPolylinePickResult;
                selectedPolyline = flpr.Polyline;
                selectedPolyline.Highlight(0xFFFF0000);
                prePolyline = selectedPolyline;
            }
            else if (pickResult.Type == i3dObjectType.i3dObjectRenderPoint)
            {
                var res = pickResult as IRenderPointPickResult;
                selectedPoint = res.Point;
                selectedPoint.Highlight(0xFFFF0000);
                prePoint = selectedPoint;
            }
        }
        private void DrawSightLine()
        {
            ClearSightLine();
            ClearRes();
            IPoint ptStart = this._geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ);

            ptStart.X = (double)this.seObserX.Value;
            ptStart.Y = (double)this.seObserY.Value;
            ptStart.Z = (double)this.seObserZ.Value + (double)this.seObserZOff.Value;
            IPoint ptEnd = this._geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ);

            ptEnd.X = (double)this.seObjX.Value;
            ptEnd.Y = (double)this.seObjY.Value;
            ptEnd.Z = (double)this.seObjZ.Value + (double)this.seObjZOff.Value;
            IPolyline line = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;

            line.AppendPoint(ptStart);
            line.AppendPoint(ptEnd);
            ICurveSymbol cs = new CurveSymbolClass();

            cs.Color    = 0xff00ff00;
            cs.Width    = -1;
            this._rLine = this._3DControl.ObjectManager.CreateRenderPolyline(line, cs, this._3DControl.ProjectTree.RootID);
        }
 public override void Close()
 {
     if (_rPoint != null)
     {
         this._objectManager.DeleteObject(_rPoint.Guid);
         System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint);
         _rPoint = null;
     }
     if (_rPolygon != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_rPolygon.Guid);
         _rPolygon = null;
     }
     if (_rPolyline != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_rPolyline.Guid);
         _rPolyline = null;
     }
     if (_label != null)
     {
         this._3DControl.ObjectManager.DeleteObject(_label.Guid);
         _label = null;
     }
 }
Exemple #24
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 #25
0
        /// <summary>
        /// 轨迹回放
        /// </summary>
        /// <param name="traceInfo">轨迹数据</param>
        /// <param name="speedTimes">回放倍数</param>
        /// <param name="traceChanged">轨迹是否改变</param>
        public void RenderVehicleTrajectory(IList <Trajectory> traceInfos, int speedTimes, bool traceChanged = true)
        {
            try
            {
                if (traceChanged)
                {
                    if (traceDynamicObj == null)
                    {
                        traceDynamicObj            = _axRenderControl.ObjectManager.CreateDynamicObject();
                        traceDynamicObj.AutoRepeat = false;
                        traceDynamicObj.CrsWKT     = WKT;
                        traceDynamicObj.TurnSpeed  = 300;
                        AppendGuidToStringBuilder(traceDynamicObj.Guid);

                        symbol = new SimplePointSymbolClass()
                        {
                            FillColor = 0xff0000ff,
                            Size      = 10
                        };

                        #region 创建线
                        IPoint    point = _geoFactory.CreatePoint(i3dVertexAttribute.i3dVertexAttributeZ);
                        IPolyline line  = (IPolyline)_geoFactory.CreateGeometry(i3dGeometryType.i3dGeometryPolyline, i3dVertexAttribute.i3dVertexAttributeZ);
                        line.SpatialCRS = _spatialCRS;


                        foreach (Trajectory trajectory in traceInfos)
                        {
                            IVector3 position = new Vector3();
                            position.Set(trajectory.LongitudeWgs84, trajectory.LatitudeWgs84, 1);
                            point.Position   = position;
                            point.SpatialCRS = _spatialCRS;

                            line.AppendPoint(point);
                            traceDynamicObj.AddWaypoint2(point, Convert.ToDouble(30 * speedTimes));

                            var rPoint = _axRenderControl.ObjectManager.CreateRenderPoint(point, symbol);
                            rPoint.MaxVisibleDistance = 12500;
                            rPoint.ViewingDistance    = 50;

                            AppendGuidToStringBuilder(rPoint.Guid);
                            //_axRenderControl.Camera.FlyToObject(rPoint.Guid, i3dActionCode.i3dActionFollowBehindAndAbove);
                        }
                        tracePolyline = _axRenderControl.ObjectManager.CreateRenderPolyline(line, new CurveSymbol {
                            Color = 0xFFFFFF00, Width = -2
                        });
                        tracePolyline.VisibleMask        = i3dViewportMask.i3dViewAllNormalView;
                        tracePolyline.MaxVisibleDistance = 12500;
                        tracePolyline.HeightStyle        = i3dHeightStyle.i3dHeightAbsolute;

                        AppendGuidToStringBuilder(tracePolyline.Guid);
                        #endregion
                    }
                }
                else
                {
                    if (traceDynamicObj == null)
                    {
                        return;
                    }

                    traceDynamicObj.Stop();
                    traceDynamicObj.TurnSpeed = 300 * speedTimes;
                    for (int i = 0; i < traceInfos.Count; i++)
                    {
                        traceDynamicObj.GetWaypoint2(i, out IPoint point, out double speed);
                        traceDynamicObj.ModifyWaypoint2(i, point, 30);
                    }
                }

                TraceObjectsPlay("111", traceDynamicObj, true);
            }
            catch (Exception ex)
            {
                LoggerHelper.Logger.Error(ex, $"执行RenderVehicleTrajectory错误");
                throw ex;
            }
        }
Exemple #26
0
 private void ResetSelectedObj()
 {
     selectedPoint    = null;
     selectedPolyline = null;
 }
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
        void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender)
        {
            if (PickResult.Type == gviObjectType.gviObjectLabel)
            {
                ILabelPickResult tlpr = PickResult as ILabelPickResult;
                gviObjectType    type = tlpr.Type;
                ILabel           fl   = tlpr.Label;
                MessageBox.Show("拾取到" + type + "类型,内容为" + fl.Text);
            }
            else if (PickResult.Type == gviObjectType.gviObjectRenderModelPoint)
            {
                IRenderModelPointPickResult tlpr = PickResult as IRenderModelPointPickResult;
                gviObjectType     type           = tlpr.Type;
                IRenderModelPoint fl             = tlpr.ModelPoint;
                MessageBox.Show("拾取到" + type + "类型,模型名称为" + fl.ModelName);
            }
            else if (PickResult.Type == gviObjectType.gviObjectRenderPoint)
            {
                IRenderPointPickResult tlpr = PickResult as IRenderPointPickResult;
                gviObjectType          type = tlpr.Type;
                IRenderPoint           fl   = tlpr.Point;
                MessageBox.Show("拾取到" + type + "类型,大小为" + fl.Symbol.Size);
            }
            else if (PickResult.Type == gviObjectType.gviObjectRenderPolyline)
            {
                IRenderPolylinePickResult tlpr = PickResult as IRenderPolylinePickResult;
                gviObjectType             type = tlpr.Type;
                IRenderPolyline           fl   = tlpr.Polyline;
                MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid);
            }
            else if (PickResult.Type == gviObjectType.gviObjectRenderPolygon)
            {
                IRenderPolygonPickResult tlpr = PickResult as IRenderPolygonPickResult;
                gviObjectType            type = tlpr.Type;
                IRenderPolygon           fl   = tlpr.Polygon;
                MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid);
            }
            else if (PickResult.Type == gviObjectType.gviObjectRenderPOI)
            {
                IRenderPOIPickResult tlpr = PickResult as IRenderPOIPickResult;
                gviObjectType        type = tlpr.Type;
                IRenderPOI           fl   = tlpr.POI;
                MessageBox.Show("拾取到" + type + "类型,名称为" + ((IPOI)fl.GetFdeGeometry()).Name);
            }
            else if (PickResult.Type == gviObjectType.gviObjectTerrainRegularPolygon)
            {
                ITerrainRegularPolygonPickResult regPolygonPick = PickResult as ITerrainRegularPolygonPickResult;
                gviObjectType          type       = regPolygonPick.Type;
                ITerrainRegularPolygon regPolygon = regPolygonPick.TerrainRegularPolygon;
                MessageBox.Show("拾取到" + type + "类型,geometryCount为" + regPolygon.GetFdeGeometry().GeometryType);
            }
            else if (PickResult.Type == gviObjectType.gviObjectTerrainArrow)
            {
                ITerrainArrowPickResult arrowPickResult = PickResult as ITerrainArrowPickResult;
                gviObjectType           type            = arrowPickResult.Type;
                ITerrainArrow           arrow           = arrowPickResult.TerrainArrow;
                MessageBox.Show("拾取到" + type + "类型,geometryType" + arrow.GetFdeGeometry().GeometryType);
            }
            else if (PickResult.Type == gviObjectType.gviObjectReferencePlane)
            {
                switch (this.toolStripComboBoxObjectManager.Text)
                {
                case "CreateLabel":
                {
                    label                     = this.axRenderControl1.ObjectManager.CreateLabel(rootId);
                    label.Text                = "我是testlabel";
                    label.Position            = IntersectPoint;
                    textSymbol                = new TextSymbol();
                    textAttribute             = new TextAttribute();
                    textAttribute.TextColor   = System.Drawing.Color.Yellow;
                    textAttribute.TextSize    = 20;
                    textAttribute.Underline   = true;
                    textAttribute.Font        = "楷体";
                    textSymbol.TextAttribute  = textAttribute;
                    textSymbol.VerticalOffset = 10;
                    textSymbol.DrawLine       = true;
                    textSymbol.MarginColor    = System.Drawing.Color.Yellow;
                    label.TextSymbol          = textSymbol;
                    this.axRenderControl1.Camera.FlyToObject(label.Guid, gviActionCode.gviActionFlyTo);
                }
                break;

                case "CreateRenderModelPoint":
                {
                    if (gfactory == null)
                    {
                        gfactory = new GeometryFactory();
                    }

                    string tmpOSGPath = (strMediaPath + @"\osg\Buildings\Apartment\Apartment.osg");
                    fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint,
                                                             gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;
                    fde_modelpoint.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0);
                    fde_modelpoint.ModelName = tmpOSGPath;
                    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(IntersectPoint.Position, 100, angle);
                }
                break;

                case "CreateRenderPoint":
                {
                    if (gfactory == null)
                    {
                        gfactory = new GeometryFactory();
                    }

                    fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint,
                                                                gviVertexAttribute.gviVertexAttributeZ);
                    fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0);

                    pointSymbol           = new SimplePointSymbol();
                    pointSymbol.FillColor = System.Drawing.Color.Red;
                    pointSymbol.Size      = 10;
                    rpoint             = this.axRenderControl1.ObjectManager.CreateRenderPoint(fde_point, pointSymbol, rootId);
                    rpoint.ShowOutline = checkShowOutline.Checked;
                    this.axRenderControl1.Camera.FlyToObject(rpoint.Guid, gviActionCode.gviActionFlyTo);
                }
                break;

                case "CreateRenderPolyline":
                {
                    if (gfactory == null)
                    {
                        gfactory = new GeometryFactory();
                    }

                    fde_polyline = (IPolyline)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolyline,
                                                                      gviVertexAttribute.gviVertexAttributeZ);
                    fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint,
                                                                gviVertexAttribute.gviVertexAttributeZ);
                    fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0);
                    fde_polyline.AppendPoint(fde_point);
                    fde_point.SetCoords(IntersectPoint.X + 20, IntersectPoint.Y, IntersectPoint.Z, 0, 0);
                    fde_polyline.AppendPoint(fde_point);
                    fde_point.SetCoords(IntersectPoint.X + 20, IntersectPoint.Y + 20, IntersectPoint.Z, 0, 0);
                    fde_polyline.AppendPoint(fde_point);
                    fde_point.SetCoords(IntersectPoint.X + 20, IntersectPoint.Y + 20, IntersectPoint.Z + 20, 0, 0);
                    fde_polyline.AppendPoint(fde_point);

                    lineSymbol            = new CurveSymbol();
                    lineSymbol.Color      = System.Drawing.Color.Red;     // 紫红色
                    rpolyline             = this.axRenderControl1.ObjectManager.CreateRenderPolyline(fde_polyline, lineSymbol, rootId);
                    rpolyline.ShowOutline = checkShowOutline.Checked;
                    this.axRenderControl1.Camera.FlyToObject(rpolyline.Guid, gviActionCode.gviActionFlyTo);
                }
                break;

                case "CreateRenderPolygon":
                {
                    if (gfactory == null)
                    {
                        gfactory = new GeometryFactory();
                    }

                    fde_polygon = (IPolygon)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolygon,
                                                                    gviVertexAttribute.gviVertexAttributeZ);

                    fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint,
                                                                gviVertexAttribute.gviVertexAttributeZ);
                    fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0);
                    fde_polygon.ExteriorRing.AppendPoint(fde_point);
                    fde_point.SetCoords(IntersectPoint.X + 10, IntersectPoint.Y, IntersectPoint.Z, 0, 0);
                    fde_polygon.ExteriorRing.AppendPoint(fde_point);
                    fde_point.SetCoords(IntersectPoint.X + 10, IntersectPoint.Y + 10, IntersectPoint.Z, 0, 0);
                    fde_polygon.ExteriorRing.AppendPoint(fde_point);
                    fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y + 10, IntersectPoint.Z, 0, 0);
                    fde_polygon.ExteriorRing.AppendPoint(fde_point);

                    surfaceSymbol        = new SurfaceSymbol();
                    surfaceSymbol.Color  = System.Drawing.Color.Blue;         // 蓝色
                    rpolygon             = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, surfaceSymbol, rootId);
                    rpolygon.ShowOutline = checkShowOutline.Checked;
                    this.axRenderControl1.Camera.FlyToObject(rpolygon.Guid, gviActionCode.gviActionFlyTo);
                }
                break;

                case "CreateRenderPOI":
                {
                    if (gfactory == null)
                    {
                        gfactory = new GeometryFactory();
                    }

                    fde_poi = (IPOI)gfactory.CreateGeometry(gviGeometryType.gviGeometryPOI, gviVertexAttribute.gviVertexAttributeZ);
                    fde_poi.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0);
                    fde_poi.ImageName = "#(1)";
                    fde_poi.Name      = (++poiCount).ToString();
                    fde_poi.Size      = 50;
                    rpoi             = this.axRenderControl1.ObjectManager.CreateRenderPOI(fde_poi);
                    rpoi.ShowOutline = checkShowOutline.Checked;
                    this.axRenderControl1.Camera.FlyToObject(rpoi.Guid, gviActionCode.gviActionFlyTo);
                }
                break;

                case "CreateFixedBillboard":
                {
                    TextAttribute ta = new TextAttribute();
                    ta.TextSize  = 10;
                    ta.TextColor = System.Drawing.Color.Yellow;
                    IImage image     = null;
                    IModel model     = null;
                    string imageName = "";
                    this.axRenderControl1.Utility.CreateFixedBillboard("I'm fixed billboard!", 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 GeometryFactory();
                    }
                    fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint,
                                                             gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;
                    fde_modelpoint.SetCoords(IntersectPoint.X, IntersectPoint.Y, 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(IntersectPoint.Position, 100, angle);
                }
                break;

                case "CreateRegularPolygon":
                {
                    IPosition pos = new Position();
                    pos.X        = IntersectPoint.X;
                    pos.Y        = IntersectPoint.Y;
                    pos.Altitude = IntersectPoint.Z;
                    ITerrainRegularPolygon regPolygon = this.axRenderControl1.ObjectManager.CreateRegularPolygon(pos, 10, 10, System.Drawing.Color.Red, System.Drawing.Color.White, rootId);
                    this.axRenderControl1.Camera.FlyToObject(regPolygon.Guid, gviActionCode.gviActionFlyTo);
                }
                break;

                case "CreateArrow":
                {
                    IPosition pos = new Position();
                    pos.X        = IntersectPoint.X;
                    pos.Y        = IntersectPoint.Y;
                    pos.Altitude = IntersectPoint.Z;
                    ITerrainArrow regArrow = this.axRenderControl1.ObjectManager.CreateArrow(pos, 30, 4, System.Drawing.Color.Red, System.Drawing.Color.White, rootId);
                    this.axRenderControl1.Camera.FlyToObject(regArrow.Guid, gviActionCode.gviActionFlyTo);
                }
                break;
                }
            }
        }
Exemple #29
0
        private void _3DControl_RcMouseClickSelect(object sender, Gvitech.CityMaker.Controls._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();
                            }
                            if (_polyline != null)
                            {
                                _polyline = null;
                            }
                            startPoint = pt1;
                            double radius = 0.0000001;
                            this._geo             = (startPoint as ITopologicalOperator2D).Buffer2D(radius, gviBufferStyle.gviBufferCapround);
                            _rPolygon             = this._3DControl.ObjectManager.CreateRenderPolygon(this._geo as IPolygon, this._surfaceSymbol, this._rootID);
                            _rPolygon.HeightStyle = this._heightStyle;

                            this._3DControl.HighlightHelper.SetRegion(this._geo);
                            this._3DControl.HighlightHelper.VisibleMask = 1;

                            _polyline = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;
                            _polyline.AppendPoint(pt1);
                            IPoint pt2 = pt1.Clone() as IPoint;
                            pt2.X += 0.000001;
                            _polyline.AppendPoint(pt2);
                            _rPolyline      = this._3DControl.ObjectManager.CreateRenderPolyline(_polyline, this._curveSymbol, this._3DControl.ProjectTree.RootID);
                            _label          = this._3DControl.ObjectManager.CreateLabel(this._3DControl.ProjectTree.RootID);
                            _label.Position = _polyline.Midpoint;
                            _label.Text     = _polyline.Length.ToString("0.00") + " 米";
                            ITextSymbol   ts = new TextSymbolClass();
                            TextAttribute ta = new TextAttribute();
                            ta.TextColor      = Convert.ToUInt32(SystemInfo.Instance.TextColor, 16);
                            ta.TextSize       = SystemInfo.Instance.TextSize;
                            ts.TextAttribute  = ta;
                            _label.TextSymbol = ts;
                            this._isStarted   = true;
                            this._isFinished  = false;
                        }
                        else
                        {
                            //this.End();
                            this._isStarted  = false;
                            this._isFinished = true;

                            _polyline.UpdatePoint(1, pt1);
                            _rPolyline.SetFdeGeometry(_polyline);

                            _label.Position = _polyline.Midpoint;
                            _label.Text     = _polyline.Length.ToString("0.00") + " 米";


                            double radius = Math.Sqrt((startPoint.X - pt1.X) * (startPoint.X - pt1.X)
                                                      + (startPoint.Y - pt1.Y) * (startPoint.Y - pt1.Y) + (startPoint.Z - pt1.Z) * (startPoint.Z - pt1.Z));
                            this._geo = (startPoint as ITopologicalOperator2D).Buffer2D(radius, gviBufferStyle.gviBufferCapround);
                            _rPolygon.SetFdeGeometry(this._geo);
                            this._3DControl.HighlightHelper.SetRegion(this._geo);
                            this._geo = this._geo.Clone2(gviVertexAttribute.gviVertexAttributeNone);
                            if (this._onFinishedDraw != null)
                            {
                                this._onFinishedDraw();
                            }
                        }
                    }
                    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)
                        {
                            _polyline.UpdatePoint(1, pt1);
                            _rPolyline.SetFdeGeometry(_polyline);

                            _label.Position = _polyline.Midpoint;
                            _label.Text     = _polyline.Length.ToString("0.00") + " 米";

                            double radius = Math.Sqrt((startPoint.X - pt1.X) * (startPoint.X - pt1.X)
                                                      + (startPoint.Y - pt1.Y) * (startPoint.Y - pt1.Y) + (startPoint.Z - pt1.Z) * (startPoint.Z - pt1.Z));
                            this._geo = (startPoint as ITopologicalOperator2D).Buffer2D(radius, gviBufferStyle.gviBufferCapround);
                            _rPolygon.SetFdeGeometry(this._geo);
                            this._3DControl.HighlightHelper.SetRegion(this._geo);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace);
            }
        }
Exemple #30
0
        private void ClickQuery()
        {
            DF3DApplication app = DF3DApplication.Application;

            if (app == null || app.Current3DMapControl == null)
            {
                return;
            }
            try
            {
                IFeatureLayer fl = this._drawTool.GetSelectFeatureLayerPickResult().FeatureLayer;
                if (fl == null)
                {
                    return;
                }
                int           featureId = this._drawTool.GetSelectFeatureLayerPickResult().FeatureId;
                FacilityClass facc      = Dictionary3DTable.Instance.GetFacilityClassByDFFeatureClassID(fl.FeatureClassId.ToString());
                if (facc == null || facc.Name != "PipeNode")
                {
                    XtraMessageBox.Show("您选中的不是管点设施,请选择管点设施。", "提示");
                    return;
                }
                DF3DFeatureClass dffc = DF3DFeatureClassManager.Instance.GetFeatureClassByID(fl.FeatureClassId.ToString());
                if (dffc == null || dffc.GetFeatureClass() == null)
                {
                    return;
                }
                IFeatureClass fc = dffc.GetFeatureClass();
                if (this._bFinished)
                {
                    Clear();
                    this._startFCGuid = fc.Guid.ToString();
                    this._startOid    = featureId;
                    this._bFinished   = false;

                    ILabel label = app.Current3DMapControl.ObjectManager.CreateLabel(app.Current3DMapControl.ProjectTree.RootID);
                    label.Text = "起点";
                    ITextSymbol ts = new TextSymbol();
                    ts.TextAttribute.TextSize  = SystemInfo.Instance.TextSize;
                    ts.TextAttribute.TextColor = Convert.ToUInt32(SystemInfo.Instance.TextColor, 16);
                    label.TextSymbol           = ts;
                    label.Position             = this._drawTool.GetSelectPoint();
                    this._listRGuid.Add(label.Guid);
                }
                else
                {
                    if (this._startFCGuid == fc.Guid.ToString() && this._startOid == featureId)
                    {
                        XtraMessageBox.Show("您选中的是同一个管点设施。", "提示");
                        return;
                    }
                    this._bFinished = true;
                    ILabel label = app.Current3DMapControl.ObjectManager.CreateLabel(app.Current3DMapControl.ProjectTree.RootID);
                    label.Text = "终点";
                    ITextSymbol ts = new TextSymbol();
                    ts.TextAttribute.TextSize  = SystemInfo.Instance.TextSize;
                    ts.TextAttribute.TextColor = Convert.ToUInt32(SystemInfo.Instance.TextColor, 16);
                    label.TextSymbol           = ts;
                    label.Position             = this._drawTool.GetSelectPoint();
                    this._listRGuid.Add(label.Guid);
                    if (this._startFCGuid != fc.Guid.ToString())
                    {
                        XtraMessageBox.Show("您选中的不是同一类管点设施。", "提示");
                        return;
                    }
                    else
                    {
                        WaitForm.Start("正在分析...", "请稍后");
                        FacClassReg reg = FacilityInfoService.GetFacClassRegByFeatureClassID(fc.Guid.ToString());
                        if (reg == null)
                        {
                            return;
                        }
                        TopoClass tc = FacilityInfoService.GetTopoClassByFacClassCode(reg.FacClassCode);
                        if (tc == null)
                        {
                            return;
                        }
                        TopoNetwork net = tc.GetNetwork();
                        if (net == null)
                        {
                            XtraMessageBox.Show("构建拓扑网络失败!", "提示");
                            return;
                        }
                        else
                        {
                            string        startId = this._startFCGuid + "_" + this._startOid.ToString();
                            string        endId   = fc.Guid.ToString() + "_" + featureId.ToString();
                            List <string> path;
                            double        shortestLength = net.SPFA(startId, endId, out path);
                            if ((shortestLength > 0.0 && shortestLength != double.MaxValue) || (path != null && path.Count > 0))
                            {
                                List <IPoint> listPt = new List <IPoint>();
                                foreach (string nodeId in path)
                                {
                                    int              index    = nodeId.LastIndexOf("_");
                                    string           fcguid   = nodeId.Substring(0, index);
                                    string           oid      = nodeId.Substring(index + 1, nodeId.Length - index - 1);
                                    DF3DFeatureClass dffcTemp = DF3DFeatureClassManager.Instance.GetFeatureClassByID(fcguid);
                                    if (dffcTemp == null || dffcTemp.GetFeatureClass() == null)
                                    {
                                        continue;
                                    }
                                    if (dffcTemp.GetFacilityClassName() != "PipeNode")
                                    {
                                        continue;
                                    }
                                    IQueryFilter filter = new QueryFilter();
                                    filter.WhereClause = "oid = " + oid;
                                    filter.SubFields   = "oid,Shape";
                                    IRowBuffer row    = null;
                                    IFdeCursor cursor = null;
                                    try
                                    {
                                        cursor = dffcTemp.GetFeatureClass().Search(filter, false);
                                        while ((row = cursor.NextRow()) != null)
                                        {
                                            if (!row.IsNull(1) && (row.GetValue(1) is IGeometry))
                                            {
                                                IGeometry geo = row.GetValue(1) as IGeometry;
                                                switch (geo.GeometryType)
                                                {
                                                case gviGeometryType.gviGeometryPoint:
                                                    IPoint pt = geo as IPoint;
                                                    pt.Z = pt.Z + 1;
                                                    listPt.Add(pt);
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                    }
                                    finally
                                    {
                                        if (cursor != null)
                                        {
                                            System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);
                                            cursor = null;
                                        }
                                        if (row != null)
                                        {
                                            System.Runtime.InteropServices.Marshal.ReleaseComObject(row);
                                            row = null;
                                        }
                                    }
                                }
                                IPolyline polyline = (new GeometryFactory()).CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;
                                foreach (IPoint pt in listPt)
                                {
                                    ISimplePointSymbol ps = new SimplePointSymbol();
                                    ps.Size      = 5;
                                    ps.Style     = gviSimplePointStyle.gviSimplePointCircle;
                                    ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16);
                                    IRenderPoint rp = app.Current3DMapControl.ObjectManager.CreateRenderPoint(pt, ps, app.Current3DMapControl.ProjectTree.RootID);
                                    rp.Glow(5000);
                                    polyline.AppendPoint(pt);
                                    this._listRGuid.Add(rp.Guid);
                                }
                                ICurveSymbol cs = new CurveSymbol();
                                cs.Color = Convert.ToUInt32(SystemInfo.Instance.LineColor, 16);
                                cs.Width = -5;
                                IRenderPolyline rpl = app.Current3DMapControl.ObjectManager.CreateRenderPolyline(polyline, cs, app.Current3DMapControl.ProjectTree.RootID);
                                rpl.Glow(5000);
                                this._listRGuid.Add(rpl.Guid);
                            }
                            else
                            {
                                XtraMessageBox.Show("两点不连通!", "提示");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show("分析出错!", "提示");
            }
            finally
            {
                WaitForm.Stop();
            }
        }