搜索
开启辅助访问

QQ登录

只需一步,快速开始

立即注册 找回密码
查看: 383|回复: 0

创建动态对象

[复制链接]

141

主题

193

帖子

6281

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6281
发表于 2017-4-7 12:55:31 | 显示全部楼层 |阅读模式
1、传入的是一条线,通过线来创建动态对象,模型路径,默认车头方向,速度等参数。
  1.   public static void CreateDynamicByPolyline(IRenderPolyline pLine,string name,double scale,string heading,string dspeed)
  2.         {
  3.             //创建空对象
  4.             double yaw = 0;
  5.             double sp = 50;
  6.             double.TryParse(dspeed, out sp);
  7.             double.TryParse(heading, out yaw);
  8.             IDynamicObject dyObj = FrmMain._omanager.CreateDynamicObject(axRender.ProjectTree.RootID);
  9.             dyObj.CrsWKT = axRender.GetCurrentCrsWKT();
  10.             dyObj.Name = name;
  11.             dyObj.TurnSpeed = 1000;
  12.             dyObj.AutoRepeat = true;
  13.             IGeometry geo = pLine.GetFdeGeometry();
  14.             IPolyline line = geo as IPolyline;
  15.             IMatrix matrix = new Matrix();

  16.             matrix.MakeIdentity();
  17.             for (int i = 0; i < line.PointCount; i++)
  18.             {
  19.                 IPoint fdepoint = line.GetPoint(i);
  20.                 fdepoint.SpatialCRS = line.SpatialCRS;
  21.                 dyObj.AddWaypoint2(fdepoint, sp);
  22.                 if (i == 0)
  23.                 {
  24.                     matrix.SetTranslate(fdepoint.Position);
  25.                 }
  26.             }
复制代码
2、引用的函数
  1.   private static IRenderModelPoint CreateMP(string fileName,double scale,IDynamicObject dyObj,IMatrix matrix)
  2.         {
  3.             // 创建模型
  4.             IModelPoint  fde_modelpoint = _geofactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint,gviVertexAttribute.gviVertexAttributeZ) as IModelPoint;
  5.             fde_modelpoint.ModelName = fileName;
  6.             fde_modelpoint.FromMatrix(matrix);
  7.             fde_modelpoint.SelfScale(scale, scale, scale);
  8.             //*************
  9.             IRenderModelPoint rmodelpoint = FrmMain.axRender.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, FrmMain.axRender.ProjectTree.RootID);
  10.             if (rmodelpoint == null) return null;
  11.             rmodelpoint.MaxVisibleDistance = 10000;
  12.             rmodelpoint.ViewingDistance = 200;
  13.             return rmodelpoint;
  14.         }
复制代码


注意:如果是自己创建的线对象,那么一定要给线一个坐标参考,不然就等着报错吧,这点很隐蔽,很多人都注意不到,本来说一个场景的对象,都应该是默认一套坐标参考,但是目前CityMaker却没有默认,必须指定。
定义的方式:创建线的Geometry的时候,给定    Geometry.SpatialCRS = __crs;
至于后面的__crs,这里给大家一个获取当前场景参考的函数
  1.    public static ISpatialCRS GetCurrentSpatialCRS(string wkt)
  2.         {
  3.            
  4.             ICRSFactory coorFactory = new CRSFactory();
  5.             ICoordinateReferenceSystem ptrCoordsys = coorFactory.CreateFromWKT(wkt);  //得到CoordinateReferenceSystem对象
  6.             return ptrCoordsys as ISpatialCRS;
  7.         }
复制代码
再不会的请联系我。

QQ|Archiver|手机版|GIS3D 基地 ( 京ICP备16033688号

GMT+8, 2017-12-18 20:38 , Processed in 0.105546 second(s), 34 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表
 
Skyline中文社区-总群
帮主 gis3d 海洪