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); } }
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); } }
/// <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; } }