4 /********************************************************************* 5 * Software License Agreement (BSD License) 7 * Copyright (c) 2013, University of Colorado, Boulder 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 14 * * Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * * Redistributions in binary form must reproduce the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer in the documentation and/or other materials provided 19 * with the distribution. 20 * * Neither the name of the Univ of CO, Boulder nor the names of its 21 * contributors may be used to endorse or promote products derived 22 * from this software without specific prior written permission. 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 30 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 31 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 33 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 35 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 *********************************************************************/ 42 from lxml
import etree
48 num_vector = shlex.split(values)
51 for num
in num_vector:
52 new_num = round(float(num),decimal_places)
53 print "Old:",num,
"New:",new_num
54 new_vector.append(str(new_num))
56 new =
" ".join(new_vector)
63 if __name__ ==
'__main__':
67 input_file = sys.argv[1]
68 output_file = sys.argv[2]
69 decimal_places = int(sys.argv[3])
70 assert( len(sys.argv) < 5 )
72 print '\nUsage: round_collada_numbers.py <input_dae> <output_dae> <decimal places>' 73 print 'Rounds all the numbers to <decimal places> places\n' 76 print '\nCollada Number Rounder' 77 print 'Rounding numbers to', decimal_places,
' decimal places\n' 80 f = open(input_file,
'r') 90 namespace =
'http://www.collada.org/2008/03/COLLADASchema' 91 dom = etree.parse(io.BytesIO(xml))
94 elements=dom.xpath(
'//ns:translate',namespaces={
'ns':namespace})
95 for i
in range(len(elements)):
96 elements[i].text =
doRound(elements[i].text,decimal_places)
99 elements=dom.xpath(
'//ns:rotate',namespaces={
'ns':namespace})
100 for i
in range(len(elements)):
101 elements[i].text =
doRound(elements[i].text,decimal_places)
104 elements=dom.xpath(
'//ns:min',namespaces={
'ns':namespace})
105 for i
in range(len(elements)):
106 elements[i].text =
doRound(elements[i].text,decimal_places)
109 elements=dom.xpath(
'//ns:max',namespaces={
'ns':namespace})
110 for i
in range(len(elements)):
111 elements[i].text =
doRound(elements[i].text,decimal_places)
114 elements=dom.xpath(
'//ns:float',namespaces={
'ns':namespace})
115 for i
in range(len(elements)):
116 elements[i].text =
doRound(elements[i].text,decimal_places)
119 f = open(output_file,
'w')
120 f.write(etree.tostring(dom))
def doRound(values, decimal_places)