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); } }
public virtual IModelPoint GetModelPoint() { IModelPoint point = geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; if (point == null) { return(null); } point.ModelName = this._modelname; point.SetCoords(this._x, this._y, this._z, double.NaN, -1); point.SelfScale(this._scaleX, this._scaleY, this._scaleZ); point.SelfRotate(1.0, 0.0, 0.0, this._rotateX); point.SelfRotate(0.0, 1.0, 0.0, this._rotateY); point.SelfRotate(0.0, 0.0, 1.0, this._rotateZ); return(point); }
private void tsb_Update_Click(object sender, EventArgs e) { this.cmdManager.StartCommand(); //获取当前选中要素,将其放大一倍,作为新的行进行更新 IRowBuffer row = curSelectFc.GetRow(curSelectFid); int geoPos = curSelectFc.GetFields().IndexOf("Geometry"); if (geoPos != -1) { IModelPoint geo = row.GetValue(geoPos) as IModelPoint; geo.SelfScale(2, 2, 2); row.SetValue(geoPos, geo); } this.cmdManager.UpdateFeature(curSelectFc as IObjectClass, row); this.axRenderControl1.FeatureManager.EditFeature(curSelectFc, row); this.tsb_Redo.Enabled = this.cmdManager.CanRedo; this.tsb_Undo.Enabled = this.cmdManager.CanUndo; this.tsb_Update.Enabled = false; }
/// <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; } } }