diff --git a/scripts/obj_to_png (minimap).py b/scripts/minimap/obj_to_png.py similarity index 60% rename from scripts/obj_to_png (minimap).py rename to scripts/minimap/obj_to_png.py index 690b257..2967b9e 100644 --- a/scripts/obj_to_png (minimap).py +++ b/scripts/minimap/obj_to_png.py @@ -5,23 +5,49 @@ from OpenGL.GLU import * import pywavefront from PIL import Image -scene = pywavefront.Wavefront(r"D:\Users\RC606\Desktop\Programme\MKWF-Install\test\Track-WU8\map_model.obj", - collect_faces=True) -scene_box = (scene.vertices[0], scene.vertices[0]) -for vertex in scene.vertices: - min_v = [min(scene_box[0][i], vertex[i]) for i in range(3)] - max_v = [max(scene_box[1][i], vertex[i]) for i in range(3)] - scene_box = (min_v, max_v) - -scene_size = [scene_box[1][i] - scene_box[0][i] for i in range(3)] -max_scene_size = max(scene_size) -scaled_size = 5 -scene_scale = [scaled_size / max_scene_size for i in range(3)] -scene_trans = [-(scene_box[1][i] + scene_box[0][i]) / 2 for i in range(3)] +def render_top_view(obj_file: str): + scene_data = load_scene(obj_file) + return get_display(scene_data) -def model(): +def load_scene(obj_file: str) -> tuple: + scene = pywavefront.Wavefront(obj_file, collect_faces=True) + + scene_box = (scene.vertices[0], scene.vertices[0]) + for vertex in scene.vertices: + min_v = [min(scene_box[0][i], vertex[i]) for i in range(3)] + max_v = [max(scene_box[1][i], vertex[i]) for i in range(3)] + scene_box = (min_v, max_v) + + scene_size = [scene_box[1][i] - scene_box[0][i] for i in range(3)] + max_scene_size = max(scene_size) + scaled_size = 5 + scene_scale = [scaled_size / max_scene_size for i in range(3)] + scene_trans = [-(scene_box[1][i] + scene_box[0][i]) / 2 for i in range(3)] + + return scene_scale, scene_trans, scene + + +def get_display(scene_data: tuple) -> Image: + display = (600, 600) + pygame.display.set_mode(display, DOUBLEBUF | OPENGL) + gluPerspective(45, (display[0] / display[1]), 1, 500.0) + glTranslatef(0.0, 0.0, -6.5) + glRotatef(90, 1, 0, 0) + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) + draw_model(*scene_data) + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) + + pix = glReadPixels(0, 0, *display, GL_RGB, GL_UNSIGNED_BYTE) + image = Image.frombytes(mode="RGB", size=display, data=pix) + return image + + +def draw_model(scene_scale, scene_trans, scene): glPushMatrix() glScalef(*scene_scale) glTranslatef(*scene_trans) @@ -53,24 +79,3 @@ def model(): glPopMatrix() - -def main(): - display = (600, 600) - window = pygame.display.set_mode(display, DOUBLEBUF | OPENGL) - gluPerspective(45, (display[0] / display[1]), 1, 500.0) - glTranslatef(0.0, 0.0, -6.5) - glRotatef(90, 1, 0, 0) - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) - - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) - model() - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) - - pix = glReadPixels(0, 0, *display, GL_RGB, GL_UNSIGNED_BYTE) - image = Image.frombytes(mode="RGB", size=display, data=pix) - image.save("test.png") - exit() - - -main()