Python修改Mitsuba的XML相关参数
生活随笔
收集整理的這篇文章主要介紹了
Python修改Mitsuba的XML相关参数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自https://github.com/SXHSine/Mitsuba-Usage-with-Python27
# -*- coding: UTF-8 -*-
import os
import sys
# NOTE: remember to specify paths using FORWARD slashes (i.e. '/' instead of
# '\' to avoid pitfalls with string escaping)
# Configure the search path for the Python extension module
sys.path.append('D:/ProgramFiles/Mitsuba 0.5.0/python/2.7')
# Ensure that Python will be able to find the Mitsuba core libraries
os.environ['PATH'] = 'path-to-mitsuba-directory' + \os.pathsep + os.environ['PATH']import mitsuba
from mitsuba.core import *
from mitsuba.core import Point3ffrom xml.etree.ElementTree import ElementTree, Elementdef read_xml(in_path):'''讀取并解析xml文件in_path: xml路徑return: ElementTree'''tree = ElementTree()tree.parse(in_path)return treedef write_xml(tree, out_path):'''將xml文件寫出tree: xml樹out_path: 寫出路徑'''tree.write(out_path, encoding="utf-8", xml_declaration=True)def getTheShape(filename):for s in root.findall('shape'):for pro in s:if pro.tag == "string" and pro.attrib["value"] == filename:return sreturn Nonedef setTranslate(shape, Point):if shape == None:print("None such filename")returntrans = shape.findall("transform/translate")[0]shape.findall("transform/translate")[0].attrib['x'] = str(float(Point[0]))shape.findall("transform/translate")[0].attrib['y'] = str(float(Point[1]))shape.findall("transform/translate")[0].attrib['z'] = str(float(Point[2]))def setRotate(shape, angle):if shape == None:print("None such filename")returnrotate = shape.findall("transform/rotate")[0]shape.findall("transform/rotate")[0].attrib['angle'] = str(float(angle))def setLookat(camera, point_origin, point_target):list_point_origin, list_point_target = [point_origin[0], point_origin[1], point_origin[2]], [point_target[0], point_target[1], point_target[2]]list_point_origin, list_point_target = [str(x) for x in list_point_origin], [str(x) for x in list_point_target]if camera == None:print ("None such typename")returnlookat = camera.findall("transform/lookat")[0]lookat.attrib['origin'] = ','.join(list_point_origin)lookat.attrib['target'] = ','.join(list_point_target)def changeXML_translate(path_xml, filename, Point):tree = read_xml(path_xml)root = tree.getroot()shape = Nonefor s in root.findall('shape'):for pro in s:if pro.tag == "string" and pro.attrib["value"] == filename:shape = ssetTranslate(shape, Point)write_xml(tree, path_xml)def changeXML_rotate(path_xml, filename, angle):tree = read_xml(path_xml)root = tree.getroot()shape = Nonefor s in root.findall('shape'):for pro in s:if pro.tag == "string" and pro.attrib["value"] == filename:shape = ssetRotate(shape, angle)write_xml(tree, path_xml)def changeXML_lookat(path_xml, typename, point_origin, point_target):tree = read_xml(path_xml)root = tree.getroot()camera = Nonefor s in root.findall('sensor'):if s.attrib['type'] == typename:camera = ssetLookat(camera, point_origin, point_target)write_xml(tree, path_xml)##USAGE##
# changeXML_translate("scene_objs _test.xml", "cow.obj", Point(0,0,0))if __name__ == '__main__':tree = read_xml("xxx.xml")root = tree.getroot()for s in root.findall('shape'):print (s.findall('transform/translate')[0].attrib)shape = getTheShape("cow.obj")setTranslate(shape, Point3f(0, 0, 0))print (shape.findall('transform/translate')[0].attrib)for s in root.findall('shape'):print (s.findall('transform/translate')[0].attrib)write_xml(tree, "xxx.xml")
總結
以上是生活随笔為你收集整理的Python修改Mitsuba的XML相关参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中extern使用
- 下一篇: Python调整图像亮度和饱和度