2012-07-06 58 views
2

我的目標是模擬特定城市的交通。我將使用Blender繪製汽車,讓他們在類似於曼哈頓配置的車道上移動。所有關於汽車在給定時刻的相對位置/方向和速度的信息均由XML文件確定。Feeding 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> 

回答

1

,如果你使用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() 

它使用minidom並分析xml文檔的節點。您可以使用getElemetsByTagName獲取節點或元素列表。代碼沒有空檢查等,所以確保你添加它們。

編碼快樂:-)

+0

非常感謝!我如何讓Blender使用它? – CyberShot 2012-07-06 07:20:40

+0

@Cyber​​Shot,在上面的代碼中導入攪拌器腳本API,'import bpy',其餘部分應該按原樣運行。 – 2012-07-06 07:35:00

1

攪拌機與Python的3,你的所有Python標準庫的模塊完全集成。其中包括幾個XML處理器。