You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.4 KiB

2 years ago
import json
import copy
import math
import sys
import context
import fixture_utils
from meshes.large_arch import large_arch
def main():
num_stones = 25
if len(sys.argv) > 1:
num_stones = int(sys.argv[1])
V = large_arch(nsegs=num_stones)
arch_min = V.min(axis=0)
arch_max = V.max(axis=0)
plane_dims = 125 / 91.41345433982721 * (arch_max - arch_min)
plane_dims[1] = 0
plane_dims[2] = 100
scene = {
"scene_type": "distance_barrier_rb_problem",
"solver": "ipc_solver",
"timestep": 0.01,
"max_time": 20.0,
"friction_constraints": {
"iterations": 1
},
"rigid_body_problem": {
"coefficient_friction": 0.5,
"gravity": [0, -9.8, 0],
"rigid_bodies": [{
"mesh": "plane.obj",
"position": [0, 0, 0],
"dimensions": plane_dims.tolist(),
"is_dof_fixed": True
}]
}
}
rbs = scene["rigid_body_problem"]["rigid_bodies"]
rbs.extend([{"mesh": f"arch/num_stones={num_stones:d}/stone-{i+1:02d}.obj"}
for i in range(num_stones)])
filename = f"arch-{num_stones:d}-stones.json"
fixture_utils.save_fixture(
scene, fixture_utils.get_fixture_dir_path() / "3D" / "friction" / "arch" / filename)
if __name__ == "__main__":
main()