frozen dataclasses
This commit is contained in:
parent
00e7d75fda
commit
f326071861
@ -52,7 +52,7 @@ def generate_object_array(group_name, obj_file):
|
|||||||
yield f"&{group_name}_{object.name},"
|
yield f"&{group_name}_{object.name},"
|
||||||
yield "};"
|
yield "};"
|
||||||
|
|
||||||
def generate_model(group_name):
|
def generate_model(group_name, obj_file):
|
||||||
yield f"const struct model {group_name}_model = {{"
|
yield f"const struct model {group_name}_model = {{"
|
||||||
yield f".position = {group_name}_position,"
|
yield f".position = {group_name}_position,"
|
||||||
yield f".texture = {group_name}_texture,"
|
yield f".texture = {group_name}_texture,"
|
||||||
@ -62,6 +62,10 @@ def generate_model(group_name):
|
|||||||
yield "};"
|
yield "};"
|
||||||
|
|
||||||
def generate_obj_file(group_name, obj_file):
|
def generate_obj_file(group_name, obj_file):
|
||||||
|
yield "#pragma once"
|
||||||
|
yield '#include "../model.h"'
|
||||||
|
yield ''
|
||||||
|
|
||||||
yield from generate_vec(group_name, "position", generate_vec3, obj_file.position)
|
yield from generate_vec(group_name, "position", generate_vec3, obj_file.position)
|
||||||
yield from generate_vec(group_name, "texture", generate_vec2, obj_file.texture)
|
yield from generate_vec(group_name, "texture", generate_vec2, obj_file.texture)
|
||||||
yield from generate_vec(group_name, "normal", generate_vec3, obj_file.normal)
|
yield from generate_vec(group_name, "normal", generate_vec3, obj_file.normal)
|
||||||
@ -73,7 +77,7 @@ def generate_obj_file(group_name, obj_file):
|
|||||||
yield from generate_object(group_name, object)
|
yield from generate_object(group_name, object)
|
||||||
|
|
||||||
yield from generate_object_array(group_name, obj_file)
|
yield from generate_object_array(group_name, obj_file)
|
||||||
yield from generate_model(group_name)
|
yield from generate_model(group_name, obj_file)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
obj_file = parse_obj_file(sys.argv[1])
|
obj_file = parse_obj_file(sys.argv[1])
|
||||||
|
23
obj.py
23
obj.py
@ -1,29 +1,30 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
@dataclass
|
@dataclass(frozen=True)
|
||||||
class VertexPosition:
|
class VertexPosition:
|
||||||
x: float
|
x: float
|
||||||
y: float
|
y: float
|
||||||
z: float
|
z: float
|
||||||
|
|
||||||
@dataclass
|
@dataclass(frozen=True)
|
||||||
class VertexNormal:
|
class VertexNormal:
|
||||||
x: float
|
x: float
|
||||||
y: float
|
y: float
|
||||||
z: float
|
z: float
|
||||||
|
|
||||||
@dataclass
|
@dataclass(frozen=True)
|
||||||
class VertexTexture:
|
class VertexTexture:
|
||||||
x: float
|
x: float
|
||||||
y: float
|
y: float
|
||||||
z: float
|
z: float
|
||||||
|
|
||||||
@dataclass
|
@dataclass(frozen=True)
|
||||||
class ObjectEvent:
|
class ObjectEvent:
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
@dataclass
|
@dataclass(frozen=True)
|
||||||
class FacePTN:
|
class FacePTN:
|
||||||
position: int
|
position: int
|
||||||
texture: int
|
texture: int
|
||||||
@ -70,7 +71,15 @@ def parse_float(s):
|
|||||||
f_digits = len(f)
|
f_digits = len(f)
|
||||||
i = int(i, 10)
|
i = int(i, 10)
|
||||||
f = int(f, 10)
|
f = int(f, 10)
|
||||||
return sign * (i + (f / 10 ** f_digits))
|
|
||||||
|
if 'ROUND_PRECISION' in os.environ:
|
||||||
|
max_digits = 4
|
||||||
|
if f_digits > max_digits:
|
||||||
|
f = int(f / (f_digits - max_digits))
|
||||||
|
f_digits = max_digits
|
||||||
|
|
||||||
|
f_10 = (f / 10 ** f_digits)
|
||||||
|
return sign * (i + f_10)
|
||||||
|
|
||||||
def parse_vertex(line, n, type):
|
def parse_vertex(line, n, type):
|
||||||
assert len(line) == n
|
assert len(line) == n
|
||||||
@ -151,7 +160,7 @@ def parse_obj_lines(lines):
|
|||||||
if object.faces:
|
if object.faces:
|
||||||
assert object.name != None
|
assert object.name != None
|
||||||
file.objects.append(object)
|
file.objects.append(object)
|
||||||
object = Object(x.name)
|
object = Object(x.name.replace('-', '_').replace('.', '_'))
|
||||||
elif type(x) is Face:
|
elif type(x) is Face:
|
||||||
object.faces.append(x)
|
object.faces.append(x)
|
||||||
elif type(x) is Material:
|
elif type(x) is Material:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user