CityMaker学习教程08 一个示例,创建漫游路径

来源:互联网 发布:淘宝优站9.9 编辑:程序博客网 时间:2024/06/08 06:40

1、在看完CS代码后可以自己写程序了,我刚写了一个由线创建动态路径的代码,给大家参考。
2、配置完场景,加载完FDB。
3、代码片段

 _axcontrol.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit;            crs = (new CRSFactory()).CreateFromWKT(_axcontrol.axRenderControl1.GetCurrentCrsWKT()) as ISpatialCRS;            if (crs.CrsType == gviCoordinateReferenceSystemType.gviCrsGeographic)                TYPE = gviObjectType.gviObjectTerrain;            else if (crs.CrsType == gviCoordinateReferenceSystemType.gviCrsProject                || crs.CrsType == gviCoordinateReferenceSystemType.gviCrsUnknown)                TYPE = gviObjectType.gviObjectReferencePlane;            IGeometryFactory _geoFactory = new GeometryFactory();            point = _geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ);            myline = _geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline;            myline.SpatialCRS = crs;            rootId = _axcontrol.axRenderControl1.ObjectManager.GetProjectTree().RootID;            _axcontrol.axRenderControl1.RcMouseClickSelect += AxRenderControl1_RcMouseClickSelect;            _axcontrol.axRenderControl1.RcRButtonUp += AxRenderControl1_RcRButtonUp;

4、上面是创建按钮里的代码,还有2个函数,一个是拾取函数代码,一个是右键结束代码

 //这个是鼠标点击拾取事件 point.SetCoords(e.intersectPoint.X, e.intersectPoint.Y, e.intersectPoint.Z, 0, 0);            myline.AppendPoint(point);            ICurveSymbol cs = new CurveSymbol();            cs.Color = 0xffff0000;            cs.Width = 1;            _axcontrol.axRenderControl1.ObjectManager.CreateRenderPolyline(myline, cs, rootId);
//这里是右键结束_axcontrol.axRenderControl1.RcMouseClickSelect -= AxRenderControl1_RcMouseClickSelect;            _axcontrol.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal;            //从线创建动态对象            ICameraTour tour = null;            tour = _axcontrol.axRenderControl1.ObjectManager.CreateCameraTour(rootId);            dynamicObject = _axcontrol.axRenderControl1.ObjectManager.CreateDynamicObject(rootId);            dynamicObject.CrsWKT = tour.CrsWKT;            for (int i = 0; i <myline.PointCount-1; i++)            {                IVector3 vector0 = new Vector3(),vector1=new Vector3();                vector0.Set(myline.GetPoint(i).X, myline.GetPoint(i).Y, myline.GetPoint(i).Z);                vector1.Set(myline.GetPoint(i+1).X, myline.GetPoint(i+1).Y, myline.GetPoint(i+1).Z);                tour.AddWaypoint(vector0, _axcontrol.axRenderControl1.Camera.GetAimingAngles(vector0, vector1), 0, gviCameraTourMode.gviCameraTourLinear);                dynamicObject.AddWaypoint(vector0, 10);            }            IGeometryFactory gf = new GeometryFactory();            IModelPoint mp = gf.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;            mp.ModelName = AppDomain.CurrentDomain.BaseDirectory + "Character\\QiYeYuanGong.X";            IMatrix matrix = new Matrix();             matrix.MakeIdentity();            matrix.SetTranslate(myline.GetPoint(0).Position);            mp.FromMatrix(matrix);            skinMesh = _axcontrol.axRenderControl1.ObjectManager.CreateSkinnedMesh(mp, rootId);            if (skinMesh == null)            {                MessageBox.Show("骨骼动画创建失败!");                return false;            }            skinMesh.Loop = true;            skinMesh.Play();            skinMesh.MaxVisibleDistance = 1000;            skinMesh.ViewingDistance = 10;            IMotionable m = skinMesh as IMotionable;            position.Set(0, 0, 0);            m.Bind2(dynamicObject, position, 0, 0, 0);            dynamicObject.Play();            _axcontrol.axRenderControl1.Camera.FlyToObject(skinMesh.Guid, gviActionCode.gviActionFollowBehind);            _axcontrol.axRenderControl1.RcRButtonUp -= AxRenderControl1_RcRButtonUp;            return false;

5、用到的变量

  private System.Guid rootId = new System.Guid();        private ISpatialCRS crs = null;        private gviObjectType TYPE = gviObjectType.gviObjectNone;        IPolyline myline = null;        private IVector3 position = new Vector3();        private IEulerAngle angle = new EulerAngle();        IPoint point = null;        private IDynamicObject dynamicObject = null;        private ISkinnedMesh skinMesh = null;

6、实现效果,绘制完自动跟随执行巡航
这里写图片描述

如需支持,请联系MrSun
sunhaihong@gvitech.com

1 0
原创粉丝点击