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 "};"
|
||||
|
||||
def generate_model(group_name):
|
||||
def generate_model(group_name, obj_file):
|
||||
yield f"const struct model {group_name}_model = {{"
|
||||
yield f".position = {group_name}_position,"
|
||||
yield f".texture = {group_name}_texture,"
|
||||
@ -62,6 +62,10 @@ def generate_model(group_name):
|
||||
yield "};"
|
||||
|
||||
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, "texture", generate_vec2, obj_file.texture)
|
||||
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_array(group_name, obj_file)
|
||||
yield from generate_model(group_name)
|
||||
yield from generate_model(group_name, obj_file)
|
||||
|
||||
if __name__ == "__main__":
|
||||
obj_file = parse_obj_file(sys.argv[1])
|
||||
|
23
obj.py
23
obj.py
@ -1,29 +1,30 @@
|
||||
from dataclasses import dataclass
|
||||
import sys
|
||||
import os
|
||||
|
||||
@dataclass
|
||||
@dataclass(frozen=True)
|
||||
class VertexPosition:
|
||||
x: float
|
||||
y: float
|
||||
z: float
|
||||
|
||||
@dataclass
|
||||
@dataclass(frozen=True)
|
||||
class VertexNormal:
|
||||
x: float
|
||||
y: float
|
||||
z: float
|
||||
|
||||
@dataclass
|
||||
@dataclass(frozen=True)
|
||||
class VertexTexture:
|
||||
x: float
|
||||
y: float
|
||||
z: float
|
||||
|
||||
@dataclass
|
||||
@dataclass(frozen=True)
|
||||
class ObjectEvent:
|
||||
name: str
|
||||
|
||||
@dataclass
|
||||
@dataclass(frozen=True)
|
||||
class FacePTN:
|
||||
position: int
|
||||
texture: int
|
||||
@ -70,7 +71,15 @@ def parse_float(s):
|
||||
f_digits = len(f)
|
||||
i = int(i, 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):
|
||||
assert len(line) == n
|
||||
@ -151,7 +160,7 @@ def parse_obj_lines(lines):
|
||||
if object.faces:
|
||||
assert object.name != None
|
||||
file.objects.append(object)
|
||||
object = Object(x.name)
|
||||
object = Object(x.name.replace('-', '_').replace('.', '_'))
|
||||
elif type(x) is Face:
|
||||
object.faces.append(x)
|
||||
elif type(x) is Material:
|
||||
|
Loading…
x
Reference in New Issue
Block a user