您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页CityEngine使用Python脚本导出模型

CityEngine使用Python脚本导出模型

来源:测品娱乐


CityEngine使用Python脚本导出模型

在前一篇《CityEngine使用Python脚本按feature整体导出道路》中介绍了如何按照GIS道路数据的ObjectID将道路导出,用户在使用过程中提出几个问题,如:

1、 脚本的使用范围是CityEngine的整个场景,在数据量非常大的时候会卡死

2、 在对道路数据进行处理的时候,Name字段必须赋值为ObjectID,不够直观

3、 在道路数据表中记录道路的条数以便修改Python脚本的range()参数,不够智能

4、 导出道路的选择只能通过Range()的参数来控制,不方便而且很傻

为了解决以上问题,达到摆脱ObjectID的(Name字段可以赋值为道路名称,当然要是英文字符),并可以通过直接拉框选择进行模型分批导出的目的,现修改脚本如下:

'''''

Created on 2012-8-14

@author: YYX

'''

from scripting import *

# 获取CE实例

ce = CE()

SelectedObj = ce.getObjectsFrom(ce.selection(),ce.isGraphSegment)#在ce.selection集合中获取路网Segments集合

ce.setSelection(SelectedObj)#重新设置ce.selection为Segments集合

NumOfSelected = SelectedObj.__len__()#获取Segments集合objects个数

NameOfSelectedObj = []#创建空列表

'''''循环获取Segment集合中objects的名称,并通过set函数合并重复值 '''

for i in range(0,NumOfSelected):

NameOfSelectedObj.append(ce.getName(ce.selection()[i]))

UniqueSelectedObj = set(NameOfSelectedObj)#合并重复值后的Segments集合objects名称,即唯一的道路名称

'''''依据道路名称列表,循环获取某一道路对应的所有Segments,最后导出为一个obj模型文件'''

for Ojb in UniqueSelectedObj:

name= \"'\"\"'\"+ str(Ojb)+\"'\"#道路名称

#获取所有与道路名称相同的Segments对象,这些Segments对象组成了一条道路

TargetOjb = ce.getObjectsFrom(ce.selection(), ce.withName(name))

ce.setSelection(TargetOjb)#设置ce.selection为所选同名Segments

#设置导出参数

settings = OBJExportModelSettings()

settings.setGeneralLocation(\"d:/temp\")

settings.setGeneralName(name)

ce.export(ce.selection(), settings)#依据导出参数将所选Segments导出为一个Obj模型文件,该obj模型文件即为一条道路的模型

ce.setSelection(SelectedObj)#重新设置ce.selection为所有Segments集合,以便导出下一条道路

注:该脚本只对道路的导出有效,脚本最终会将选择的每条道路生成一个单独的Obj文件。

道路数据预处理方式与前文一样,需要新建Name字段,并对Name字段赋值,只是Name字段可以是英文名称,而不必一定是ObjectID

生成模型后,进行导出模型的选择时可以通过以下几种方式: 1、拉框选择

2、在Scene窗口中选择道路的Segments,通过Shift或Ctrl进行多选

同名的Segments为同一条道路的不同线段,如上图中的两个Major Edge 40062,这两个Segments组成一条名叫Major Edge 40062的道路。

运行脚本,脚本会将同名的Segments挑选出来并分别导出到一个Obj文件中,这样就得到了所选道路的模型,道路模型的名字与其对应的Name字段相同。

下面对脚本的一些方法进行说明:

1、ce.selection():当前CE实例所选择的Objects集合

2、ce.setSelection():通过该方法设置ce.selection()

3、ce.isGraphSegment:判断所选Objects是否为Segment,因本脚本要进行道路的导出,所以筛选的类型为Segment,若想要进行建筑物的导出则可以选择ce.isBlock或者ce.isShape,这取决于所选Objects的类型,见下图: 以Block为单位导出模型

以Shape为单位导出模型

所选Object的类型可以在Inspector中查看,如:

4、ce.getName():获取所选Objects的名字即Name

5、ce.withName():根据Name获取Objects

6、OBJExportModelSettings():设置OBJ模型导出参数

7、ce.export():依据OBJ模型导出参数导出ce.selection所选的Objects的模型

总结:

• 脱离了Name必须是ObjectID的,Name字段可以是非中文的字符

• 可以导出任意选择的道路模型

• 稍加修改即可用于建筑物的导出(修改ce.isGraphSegment为ce.isBlock或者

ce.isShape等)

• 在进行Objects选择后只需指定其Rules,不需要在Scene中生成Models,也可

以将模型导出

• 执行脚本可以在脚本窗口直接按F9执行

问题:

• 若框选的时候选中了某一条道路的部分Segments,则导出的该道路的模型不完整,

只包含选中的Segments

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务