Virtual Testbed
Ship dynamics simulator for extreme conditions
guile/compartment.cc
1 #include <vtestbed/config/real_type.hh>
2 #include <vtestbed/core/compartment.hh>
3 #include <vtestbed/guile/macros.hh>
4 #include <vtestbed/guile/traits.hh>
5 
12 
13 namespace {
14  SCM type;
15  SCM kw_name;
16 }
17 
18 
19 namespace vtb {
20 
21  namespace guile {
22 
23  template <> SCM traits_type::type() { return ::type; }
24 
32  SCM make_compartment(SCM polyhedron, SCM rest) {
33  auto* polyhedron_wrapper = get_wrapper<polyhedron_type>(polyhedron);
34  SCM name = SCM_UNDEFINED;
35  scm_c_bind_keyword_arguments("make-compartment", rest,
36  scm_t_keyword_arguments_flags{},
37  kw_name, &name, SCM_UNDEFINED);
38  auto* wrapper = make_wrapper<object_type>();
39  if (is_bound(name)) { wrapper->get()->name(to_string(name)); }
40  wrapper->get()->polyhedron(*polyhedron_wrapper->get());
41  return make_object<object_type>(traits_type::type(), wrapper);
42  }
43 
53  SCM generate_compartments(SCM hull, SCM nrooms) {
55  auto* polyhedron_wrapper = get_wrapper<polyhedron_type>(hull);
56  auto size = to_vector<int,3>(nrooms);
57  auto&& rooms = compartment_array::generate(*polyhedron_wrapper->get(), size);
58  SCM s_rooms = SCM_EOL;
59  for (auto& room : rooms) {
60  s_rooms = scm_cons(traits_type::make(std::move(room)), s_rooms);
61  }
62  s_rooms = scm_reverse(s_rooms);
63  return s_rooms;
64  }
65 
66  template <> void
67  traits_type::define() {
68  ::type = define_type<object_type>("<compartment>");
69  kw_name = scm_from_utf8_keyword("name");
70  define_procedure("make-compartment", 1, 0, 1, VTB_GUILE_2(make_compartment));
71  define_procedure("generate-compartments", 2, 0, 0,
72  VTB_GUILE_2(generate_compartments));
73  }
74 
75  }
76 
77 }
SCM make_compartment(SCM polyhedron, SCM rest)
Construct ship compartment using polyhedron and optional name.
SCM generate_compartments(SCM hull, SCM nrooms)
Generate ship compartments for hull using 3-d grid of size nrooms.
OBJ importer/exporter.
Definition: object.hh:28
Main namespace.
Definition: convert.hh:9