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.
54 lines
1.4 KiB
54 lines
1.4 KiB
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()
|
|
|