我的目标是模拟特定城市的交通。我将使用Blender绘制汽车,并让它们在类似于曼哈顿配置的车道上移动。有关汽车在给定时刻的相对位置/方向和速度的所有信息都由XML文件确定。
如何在Blender中读取此XML文件,以便汽车获得有关如何在道路上行驶的有用信息?
编辑:Python可能是一个很好的起点。但是我真的必须解析字符串吗?或者与Blender有简单的XML兼容性吗?
我需要导入的 XML 基本上如下所示:
<sumo-netstate>
<timestep time="0.00">
<edge id="34403897">
<lane id="34403897_0">
<vehicle id="t0" pos="5.10" speed="0.00"/>
</lane>
</edge>
</timestep>
<timestep time="1.00">
<edge id="-10745949#5">
<lane id="-10745949#5_0">
<vehicle id="t1" pos="5.10" speed="0.00"/>
</lane>
</edge>
<edge id="34403897">
<lane id="34403897_0">
<vehicle id="t0" pos="6.54" speed="1.44"/>
</lane>
</edge>
</timestep>
..
..
..
</sumo-netstate>
如果你使用python的xml dom解析器,这应该不难。尝试下面的代码,应该可以正常工作。我在电脑上测试了它。
from xml.dom.minidom import parse
from xml.dom.minidom import Node
domData = parse("XMLFile.xml")
lanes = domData.getElementsByTagName("lane")
for lane in lanes:
#print lane id
laneId = lane.getAttribute("id")
print "LaneID: " + laneId
#print vehicle id, position and speed
vehicles = lane.getElementsByTagName("vehicle")
for vehicle in vehicles:
vehicleId = vehicle.getAttribute("id")
vehiclePos = vehicle.getAttribute("pos")
vehicleSpeed = vehicle.getAttribute("speed")
print "tVehicleID: " + vehicleId, "VehiclePos: " + vehiclePos, "VehicleSpeed: " + vehicleSpeed
domData.unlink()
这将使用迷你并解析 xml 文档的节点。您可以使用 getElemetsByTagName 获取节点或元素列表。代码没有空检查等,因此请确保添加它们。
快乐编码:-)
Blender与Python-3完全集成,并且您拥有Python标准库中的所有模块。其中包括几个 XML 处理器。