bioops-twin / generate_obj.py
BioOps Team
Update centrifuge 3D model to v3 GLB with materials
17e2e1f
Raw
History Blame Contribute Delete
1.72 kB
import math
import os
filepath = "/mnt/36270add-d8d7-4990-b2b6-c9c5f803b31b/Hackatones/Transforming Enterprise Through AI/Repo/assets/centrifuge.obj"
segments = 32
radius = 1.0
height = 0.5
with open(filepath, "w") as f:
f.write("# Centrifuge Rotor (Cylinder)\n")
f.write("o Centrifuge\n")
# Vertices
# Top center
f.write(f"v 0.0 {height/2} 0.0\n")
# Bottom center
f.write(f"v 0.0 {-height/2} 0.0\n")
# Top circle
for i in range(segments):
theta = 2.0 * math.pi * i / segments
x = radius * math.cos(theta)
z = radius * math.sin(theta)
f.write(f"v {x} {height/2} {z}\n")
# Bottom circle
for i in range(segments):
theta = 2.0 * math.pi * i / segments
x = radius * math.cos(theta)
z = radius * math.sin(theta)
f.write(f"v {x} {-height/2} {z}\n")
# Faces
# Top face
top_center_idx = 1
bottom_center_idx = 2
top_start = 3
bottom_start = 3 + segments
for i in range(segments):
n1 = i
n2 = (i + 1) % segments
# top triangle
f.write(f"f {top_center_idx} {top_start + n1} {top_start + n2}\n")
# Bottom face (reverse winding)
for i in range(segments):
n1 = i
n2 = (i + 1) % segments
f.write(f"f {bottom_center_idx} {bottom_start + n2} {bottom_start + n1}\n")
# Sides
for i in range(segments):
n1 = i
n2 = (i + 1) % segments
t1 = top_start + n1
t2 = top_start + n2
b1 = bottom_start + n1
b2 = bottom_start + n2
# quad
f.write(f"f {t1} {b1} {b2} {t2}\n")
print("Generated centrifuge.obj")