Esempio n. 1
0
 private void LoadPeople(IDynamicObject dynamicObject)
 {
     if (skinMesh == null)
     {
         // 构造ModelPoint
         mp = geoFac.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;
         string modelName = (strMediaPath + @"\x\Character\QiYeYuanGong.X");
         mp.ModelName  = modelName;
         mp.SpatialCRS = dataset_Road.SpatialReference;
         // 设置位置
         IMatrix matrix = new Matrix();
         matrix.MakeIdentity();
         IPoint startPoint = null;
         double speed      = 0.0;
         dynamicObject.GetWaypoint2(0, out startPoint, out speed);
         matrix.SetTranslate(startPoint.Position);
         mp.FromMatrix(matrix);
         mp.SelfScale(5, 5, 5);
         // 创建骨骼动画
         skinMesh = this.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId);
         if (skinMesh == null)
         {
             MessageBox.Show("骨骼动画创建失败!");
             return;
         }
         skinMesh.Loop = true;
         skinMesh.Play();
         skinMesh.MaxVisibleDistance = 10000;
         skinMesh.ViewingDistance    = 100;
         // 绑定到运动路径
         IMotionable m = skinMesh as IMotionable;
         pos.Set(0, 0, 0);
         m.Bind2(dynamicObject, pos, 0, 0, 0);
     }
 }
Esempio n. 2
0
 private void LoadCar(IDynamicObject dynamicObject)
 {
     if (renderModelPoint == null)
     {
         // 构造ModelPoint
         mp = geoFac.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;
         string modelName = (strMediaPath + @"\osg\Vehicles\Car\TCJ006.osg");
         mp.ModelName  = modelName;
         mp.SpatialCRS = dataset_Road.SpatialReference;
         // 设置位置
         IMatrix matrix = new Matrix();
         matrix.MakeIdentity();
         IPoint startPoint = null;
         double speed      = 0.0;
         dynamicObject.GetWaypoint2(0, out startPoint, out speed);
         matrix.SetTranslate(startPoint.Position);
         mp.FromMatrix(matrix);
         mp.SelfScale(0.05, 0.05, 0.05);
         // 创建骨骼动画
         renderModelPoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(mp, null, rootId);
         renderModelPoint.MaxVisibleDistance = 10000;
         renderModelPoint.ViewingDistance    = 200;
         // 绑定到运动路径
         IMotionable m = renderModelPoint as IMotionable;
         pos.Set(0, 0, 0);
         m.Bind2(dynamicObject, pos, 90, 0, 0);
     }
 }
Esempio n. 3
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;
            }
        }