CityEngine使用Python脚本导出模型
在前一篇《CityEngine使用Python脚本按feature整体导出道路》中介绍了如何按照GIS道路数据的ObjectID将道路导出,用户在使用过程中提出几个问题,如:
1、 脚本的使用范围是CityEngine的整个场景,在数据量非常大的时候会卡死
2、 在对道路数据进行处理的时候,Name字段必须赋值为ObjectID,不够直观
3、 在道路数据表中记录道路的条数以便修改Python脚本的range()参数,不够智能
4、 导出道路的选择只能通过Range()的参数来控制,不方便而且很傻
为了解决以上问题,达到摆脱ObjectID的限制(Name字段可以赋值为道路名称,当然要是英文字符),并可以通过直接拉框选择进行模型分批导出的目的,现修改脚本如下:
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