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

原创 2016年05月30日 12:58:19

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

版权声明:本文为博主原创文章,未经博主允许不得转载。海洪出品,必属精品。

CityMaker学习教程12 osg模型的创建

1、加载一个FDB文件到场景。 2、加载完绑定事件axRenderControl1.RcMouseClickSelect += AxRenderControl1_RcMouseClickSelect...
  • shh369
  • shh369
  • 2016年06月13日 16:36
  • 562

CityMaker学习教程11 创建和移动标签

1、加载一个FDB,并在加载结束的时候绑定函数RcMouseClickSelect: this.axRenderControl1.RcMouseClickSelect += new Gvit...
  • shh369
  • shh369
  • 2016年06月13日 14:43
  • 450

CityMaker学习教程09 一个示例,多窗体,画中画,多屏幕显示

1、CityMaker采用同一个父窗体,多个申请窗体的方式进行多屏功能,并非添加另一个控件,不存在另一个场景,只是在原来的场景中扩展,你可以想象为复制出来。 2、实现多屏幕很简单,主要靠一个属性来控...
  • shh369
  • shh369
  • 2016年05月30日 19:35
  • 716

CityMaker学习教程07 示例代码的使用CSharp

说明:目前针对学校和企业团体,只需要申请一个试用的授权License即可,配置到服务器上,别的机器在运行SDK的示例的时候,只需将网络授权添加即可。 ILicenseServer license =...
  • shh369
  • shh369
  • 2016年05月30日 08:57
  • 762

CityMaker学习教程14 水面图层的创建

在CityMaker中,图层的创建稍显麻烦,现在讲下如何创建水面层。 1、打开Builder并创建一个空的场景。 2、创建一个空的数据源或者选择一个没加载的数据源。 3、右键数据源,创建个数...
  • shh369
  • shh369
  • 2016年06月20日 08:57
  • 406

CityMaker学习教程06 数据的发布

CityMaker的网络发布工具CityMaker Server,和arcgis的server和skyline的gate+sfs有些相像,能直接将FDB(矢量和模型),ted(地形和影像)以服务方式进...
  • shh369
  • shh369
  • 2016年05月27日 19:31
  • 650

CityMaker学习教程02 软件的授权

CityMaker 学习教程第二节课 软件的授权和模块说明 软件授权: 打开任意一款款软件,会提示:未检测到单机锁或网络授权失败,请插单机锁或设置网络授权信息后,重启程序。 这时候你如果申请过软授...
  • shh369
  • shh369
  • 2016年05月25日 09:05
  • 1225

Android事件分发08——TouchDelegate的使用的一个示例与问题分析

Android事件分发08TouchDelegate的使用的一个示例与问题分析 一问题分析 1 如何实现 2 相交部分的坐标处理 二实现 mForginViewsetT...

MapServer6.4.1教程学习--缩放和漫游控件(2-1)

(http://demo.mapserver.org/cgi-bin/mapserv?map=/osgeo/mapserver/tutorial/htdocs/example2.map&layer=s...
  • asswclw
  • asswclw
  • 2015年01月26日 23:18
  • 458

CityMaker教程初级篇(一)如何加载三维控件

CityMaker教程初级篇(一). Net中如何加载CityMaker的三维控件自从使用COM开始,小编就遇到关于如何加载COM控件的诸多问题。毫不夸张的说这是每个在.NET使用COM的人都无可避免...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CityMaker学习教程08 一个示例,创建漫游路径
举报原因:
原因补充:

(最多只允许输入30个字)