你好。我正在为一个非常具体的问题寻求帮助,我找不到答案。我找到的一个答案是 2017 年的,无论如何我都无法让它工作。我一直在寻找这个问题的答案,但找不到任何专门问过这个问题的人。
将模型导出到 FBX 时,有没有办法根据特定属性值将其导出?目前,它们都单独导出为属性列表中的任何 osm 名称,即 way_06780000293 或类似的东西。我希望能够根据不同的属性(如osm_id)或其他一些属性导出模型。
是 osm_id 属性是字符串/文本而不是被视为数字。那么我的下一个问题是,有没有办法让它按原样工作,或者批量向所有封装添加文本/字符串属性?
编辑:我已经导出了shp文件,将其添加到ArcPro中,完成了我需要对属性列表执行的操作,然后将其重新导入CityEngine,但是当应用相同的rpk时,它不会以相同的方式生成建筑物。
导出前:
导出后:
它们没有任何变化,除了添加一个属性,使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:
没有回复内容