/// <summary> /// 加载人物骨骼动画 /// </summary> private void LoadXFileCharacter() { string fileName = (strMediaPath + @"\x\Character\QiYeYuanGong.X"); if (skinMeshCharacter == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(gugeX, gugeY, gugeZ); matrix.SetTranslate(v3); mp.FromMatrix(matrix); // 创建骨骼动画 skinMeshCharacter = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshCharacter == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshCharacter.Duration = 1; //人物的那个骨骼动画播放速度调快一倍 skinMeshCharacter.Loop = true; skinMeshCharacter.Play(); skinMeshCharacter.MaxVisibleDistance = 1000; } }
/// <summary> /// 加载直升机骨骼动画 /// </summary> private void LoadXFilePlane() { string fileName = (strMediaPath + @"\x\Vehicles\wrj.X"); if (skinMeshPlane == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(planeX, planeY, planeZ); matrix.SetTranslate(v3); mp.FromMatrix(matrix); // 创建骨骼动画 skinMeshPlane = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshPlane == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshPlane.Loop = true; skinMeshPlane.Play(); skinMeshPlane.MaxVisibleDistance = 1000; } }
private void LoadPlane() { // 加载直升飞机 string fileName = (strMediaPath + @"\x\Vehicles\wrj.X"); if (skinMeshPlane == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); matrix.SetTranslate(line.GetPoint(0).Position); mp.FromMatrix(matrix); // 创建骨骼动画 skinMeshPlane = this.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshPlane == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshPlane.Loop = true; skinMeshPlane.Play(); skinMeshPlane.MaxVisibleDistance = 1000; skinMeshPlane.ViewingDistance = 100; // 绑定到运动路径 IMotionable m = skinMeshPlane as IMotionable; position.Set(0, 0, 0); m.Bind2(dynamicObject, position, 0, 0, 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); } }
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(); } }
/// <summary> /// 骨骼动画定位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLocateSkinmesh_Click(object sender, EventArgs e) { if (comboBox2.SelectedIndex == 0) { if (skinMeshCharacter != null) { CommonUnity.RenderHelper.Camera.FlyToObject(this.skinMeshCharacter.Guid, gviActionCode.gviActionFlyTo); curSkinMesh = skinMeshCharacter; } } else if (comboBox2.SelectedIndex == 1) { if (skinMeshTree != null) { position.SetCoords(treeX, treeY, treeZ, 0, 0); angle.Set(0, -45, 0); CommonUnity.RenderHelper.Camera.LookAt2(position, 20, angle); //CommonUnity.RenderHelper.Camera.FlyToObject(this.skinMeshTree.Guid, gviActionCode.gviActionFlyTo); curSkinMesh = skinMeshTree; } } else if (comboBox2.SelectedIndex == 2) { if (skinMeshTree1 != null) { position.SetCoords(tree1X, tree1Y, tree1Z, 0, 0); angle.Set(0, -45, 0); CommonUnity.RenderHelper.Camera.LookAt2(position, 20, angle); //CommonUnity.RenderHelper.Camera.FlyToObject(this.skinMeshTree1.Guid, gviActionCode.gviActionFlyTo); curSkinMesh = skinMeshTree1; } } else if (comboBox2.SelectedIndex == 3) { if (skinMeshTree2 != null) { position.SetCoords(tree2X, tree2Y, tree2Z, 0, 0); angle.Set(0, -45, 0); CommonUnity.RenderHelper.Camera.LookAt2(position, 20, angle); //CommonUnity.RenderHelper.Camera.FlyToObject(this.skinMeshTree2.Guid, gviActionCode.gviActionFlyTo); curSkinMesh = skinMeshTree2; } } else if (comboBox2.SelectedIndex == 4) { if (skinMeshPlane != null) { CommonUnity.RenderHelper.Camera.FlyToObject(this.skinMeshPlane.Guid, gviActionCode.gviActionFlyTo); curSkinMesh = skinMeshPlane; } } }
private void LoadSkinMeshAndViewshed() { string fileName = (strMediaPath + @"\x\Character\QiYeYuanGong.X"); if (skinMesh == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = new CRSFactory().CreateFromWKT(wkt) as ISpatialCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); matrix.SetTranslate(line.GetPoint(0).Position); mp.FromMatrix(matrix); // 创建骨骼动画 skinMesh = this.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMesh == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMesh.Loop = true; skinMesh.Play(); skinMesh.MaxVisibleDistance = 1000; skinMesh.ViewingDistance = 50; // 绑定到运动路径 IMotionable m = skinMesh as IMotionable; position.Set(0, 0, 0); m.Bind2(dynamicObject, position, 0, 0, 0); this.axRenderControl1.Camera.FlyToObject(skinMesh.Guid, gviActionCode.gviActionFollowBehind); } if (tv == null) { tv = this.axRenderControl1.ObjectManager.CreateViewshed(line.GetPoint(0), rootId); IMotionable tvm = tv as IMotionable; position.Set(0, 0, 0); tvm.Bind2(dynamicObject, position, 0, 0, 0); } }
/// <summary> /// 加载动态树骨骼动画 /// </summary> private void LoadXFileTrees() { { string fileName = (strMediaPath + @"\x\Trees\tree.X"); if (skinMeshTree == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(treeX, treeY, treeZ); matrix.SetTranslate(v3); mp.FromMatrix(matrix); mp.SelfScale(0.75, 0.75, 0.75); // 创建骨骼动画 skinMeshTree = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshTree == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshTree.Duration = 4; skinMeshTree.Loop = true; skinMeshTree.Play(); skinMeshTree.MaxVisibleDistance = 1000; } } { string fileName = (strMediaPath + @"\x\Trees\tree1.X"); if (skinMeshTree1 == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(tree1X, tree1Y, tree1Z); matrix.SetTranslate(v3); mp.FromMatrix(matrix); mp.SelfScale(0.5, 0.5, 0.5); // 创建骨骼动画 skinMeshTree1 = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshTree == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshTree1.Duration = 3; skinMeshTree1.Loop = true; skinMeshTree1.Play(); skinMeshTree1.MaxVisibleDistance = 1000; } } { string fileName = (strMediaPath + @"\x\Trees\tree2.X"); if (skinMeshTree2 == null) { // 构造ModelPoint IGeometryFactory gf = new GeometryFactory(); IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.ModelName = fileName; mp.SpatialCRS = datasetCRS; // 设置位置 IMatrix matrix = new Matrix(); matrix.MakeIdentity(); v3.Set(tree2X, tree2Y, tree2Z); matrix.SetTranslate(v3); mp.FromMatrix(matrix); mp.SelfScale(0.25, 0.25, 0.25); // 创建骨骼动画 skinMeshTree2 = CommonUnity.RenderHelper.ObjectManager.CreateSkinnedMesh(mp, rootId); if (skinMeshTree2 == null) { MessageBox.Show("骨骼动画创建失败!"); return; } skinMeshTree2.Loop = true; skinMeshTree2.Play(); skinMeshTree2.MaxVisibleDistance = 1000; } } }