搜索
开启辅助访问

QQ登录

只需一步,快速开始

立即注册 找回密码
查看: 232|回复: 1

CityMaker如何从FDB中获取模型及贴图

[复制链接]

4

主题

4

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2016-10-27 16:40:06 | 显示全部楼层 |阅读模式
本帖最后由 墨染流年 于 2016-10-27 16:41 编辑

今天我们来看一下如何获取FDB中的模型及贴图,听起来很简单,但是对于初次接触citymaker的人来说,这还真是一个令人摸不到头脑的问题,下面我们来看一下步骤:

1.需要有一个IFeatureDataSet数据集

2.需要一个模型名称,这个可以从查询到的IModelPoint的ModelName属性中获得

3.获取精模和简模

4.获取精模贴图集合及简模贴图集合

大致步骤就是如此,接下来,干货来啦,干货只啥嘞,当然是获取模型的代码了,我不太提倡代码直接当代码的搬运工,重要的是自己能理解:


  1.         /// <summary>
  2.         /// 取出模型及模型贴图
  3.         /// </summary>
  4.         /// <param name="dataset">数据集</param>
  5.         /// <param name="modelName">模型名称</param>
  6.         /// <param name="fineModel">返回 精模</param>
  7.         /// <param name="simpleModel">返回 简模</param>
  8.         /// <param name="fineModelImages">返回 精模贴图数组</param>
  9.         /// <param name="fineModelImageNames">返回 精模贴图名称数组</param>
  10.         /// <param name="simpleModelImages">返回 简模贴图数组</param>
  11.         /// <param name="simpleModelImageNames">返回 简模贴图名称数组</param>
  12.         public static void GetModel(IFeatureDataSet dataset, string modelName, out IModel fineModel, out IModel simpleModel, out IImage[] fineModelImages, out string[] fineModelImageNames, out IImage[] simpleModelImages, out string[] simpleModelImageNames)
  13.         {
  14.                     fineModelImages = null;
  15.                     fineModelImageNames = null;
  16.                     simpleModelImages = null;
  17.                     simpleModelImageNames = null;
  18.                     IResourceManager rm = dataset as IResourceManager;

  19.                     fineModel = rm.GetModel(modelName);//获取精模
  20.                     simpleModel = rm.GetSimplifiedModel(modelName);//获取简模
  21.                     //判断贴图是否加密
  22.                     if (!rm.IsImageEncrypted)
  23.                     {
  24.                                 //获得模型贴图
  25.                                 fineModelImageNames = fineModel.GetImageNames();
  26.                                 if (fineModelImageNames.Length > 0)
  27.                                 {
  28.                                             fineModelImages = new IImage[fineModelImageNames.Length];
  29.                                             for (int i = 0; i < fineModelImageNames.Length; i++)
  30.                                             {
  31.                                                         fineModelImages[i] = rm.GetImage(fineModelImageNames[i]);
  32.                                             }
  33.                                 }
  34.                                 if (simpleModel != null)
  35.                                 {
  36.                                             simpleModelImageNames = simpleModel.GetImageNames();
  37.                                             if (simpleModelImageNames.Length > 0)
  38.                                             {
  39.                                                         simpleModelImages = new IImage[simpleModelImageNames.Length];
  40.                                                         for (int i = 0; i < simpleModelImageNames.Length; i++)
  41.                                                         {
  42.                                                                     simpleModelImages[i] = rm.GetImage(simpleModelImageNames[i]);
  43.                                                         }
  44.                                             }
  45.                                 }
  46.                     }
  47.         }
复制代码



5

主题

49

帖子

287

积分

版主

Rank: 7Rank: 7Rank: 7

积分
287
发表于 2016-11-3 07:43:33 | 显示全部楼层
学习了,怎么动态更换模型贴图

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

GMT+8, 2017-8-24 16:51 , Processed in 0.118326 second(s), 27 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2015 Comsenz Inc.

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