【提问】FBX 模型基于对象属性导出文件名-CityEngine使用论坛-软件技术-ArcGIS CityEngine AI
幻灯片-ArcGIS CityEngine AI

提问FBX 模型基于对象属性导出文件名

你好。我正在为一个非常具体的问题寻求帮助,我找不到答案。我找到的一个答案是 2017 年的,无论如何我都无法让它工作。我一直在寻找这个问题的答案,但找不到任何专门问过这个问题的人。

将模型导出到 FBX 时,有没有办法根据特定属性值将其导出?目前,它们都单独导出为属性列表中的任何 osm 名称,即 way_06780000293 或类似的东西。我希望能够根据不同的属性(如osm_id)或其他一些属性导出模型。

是 osm_id 属性是字符串/文本而不是被视为数字。那么我的下一个问题是,有没有办法让它按原样工作,或者批量向所有封装添加文本/字符串属性?

编辑:我已经导出了shp文件,将其添加到ArcPro中,完成了我需要对属性列表执行的操作,然后将其重新导入CityEngine,但是当应用相同的rpk时,它不会以相同的方式生成建筑物。

导出前:

04b91d0ec820240614170056

 

 

导出后:

cd64b8233e20240614170056

 

 

它们没有任何变化,除了添加一个属性,使osm_id文本/字符串。

 

 

回复:

 

这是 Building_From_OpenStreetMap.cga 规则的 RPK 吗?此规则需要一些 float 类型的对象属性才能正常工作:

"building__levels", "roof__height", "roof__direction", "building__levels__underground", "building__min_level", "min_heigh"

在 python 中,您可以使用 type() 检查属性的类型,然后根据需要使用 float() 或 str() 强制转换为特定类型。对于OSM id,您可能希望在将其转换为字符串之前删除小数,这可以通过首先将其转换为int()来完成

def initExport(exportContextOID):
    ctx = ScriptExportModelSettings(exportContextOID)
    
    shapes = ce.getObjectsFrom(ce.selection, ce.isShape)
    
    for s in shapes:
        osmId = ce.getAttribute(s, "osm_id")
        ce.setName(s, str(int(osmId)))

 

您还可以使用 python 直接设置/获取许多对象的对象属性,而无需使用导出脚本:

shapes = ce.getObjectsFrom(ce.selection, ce.isShape)
ce.setAttribute(shapes, 'myName', 'myValue')

本教程介绍了如何在 CityEngine 中使用 python:

请登录后发表评论

    没有回复内容