-
Notifications
You must be signed in to change notification settings - Fork 1
/
ScaleFBX.py
97 lines (87 loc) · 2.43 KB
/
ScaleFBX.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env python
"""scaleFBX.py: A script to scale the native size of the model defined by an ascii FBX file"""
import argparse
import re
import io
import os
from decimal import Decimal
__Author__ = "Daniel Kranich"
__License__ = "MIT"
parser = argparse.ArgumentParser(description="Scale an ascii FBX model")
parser.add_argument("fbxPath", type=str, help="Path to your ascii fbx file")
parser.add_argument("output", type=str, help="Where to save scaled fbx")
parser.add_argument("-s", "--scale", type=float, default=1.0, help="The ammount to scale the fbx model")
args = parser.parse_args()
isvertex = False
vstart = re.compile('Vertices: \*\d* {')
vend = re.compile('}\s*$')
nums = re.compile('[\de,.-]*')
wht = re.compile('\s*a:\s*')
twht = re.compile('\s*P:\s*"Lcl Translation", "Lcl Translation", "", "A",')
trans = re.compile('[\d-][\d,.-]*')
sci = re.compile('e[\d-]*$')
st = ""
try:
os.remove(args.output)
except OSError:
pass
with open(args.fbxPath, 'r') as fbx:
with open(args.output, 'w') as output:
for line in fbx:
vertices = []
if isvertex:
if vend.search(line):
isvertex = False
output.write(line)
else:
tabs = wht.findall(line)
vals = nums.findall(line.strip())
for val in vals:
if val:
vertices += val.split(',')
if tabs:
st += str(tabs[0])
for i, vertex in enumerate(vertices):
if vertex:
tail = ""
if sci.search(vertex):
tail = sci.findall(vertex)
vertex = vertex.replace(tail[0], "")
vertex = float(vertex)
vertex *= args.scale
vertex = ('%.12f' % vertex).rstrip('0').rstrip('.')
if i:
st += ','
st += str(vertex)
if tail:
st += str(tail[0])
output.write(st + '\n')
st = ""
else:
output.write(line)
if vstart.search(line):
isvertex = True
if twht.search(line):
tabs = twht.findall(line)
vals = trans.findall(line)
for val in vals:
if val:
vertices += val.split(',')
if tabs:
st += str(tabs[0])
for i, vertex in enumerate(vertices):
if vertex:
tail = ""
if sci.search(vertex):
tail = sci.findall(vertex)
vertex = vertex.replace(tail[0], "")
vertex = float(vertex)
vertex *= args.scale
vertex = ('%.8f' % vertex).rstrip('0').rstrip('.')
if i:
st += ','
st += str(vertex)
if tail:
st += str(tail[0])
output.write(st + '\n')
st = ""