1 #include <vtestbed/assets/convert.hh> 2 #include <vtestbed/config/real_type.hh> 3 #include <vtestbed/core/compartment.hh> 4 #include <vtestbed/core/hull.hh> 5 #include <vtestbed/geometry/polyhedron.hh> 6 #include <vtestbed/guile/assets.hh> 7 #include <vtestbed/guile/base.hh> 8 #include <vtestbed/guile/macros.hh> 9 #include <vtestbed/guile/traits.hh> 10 #include <vtestbed/guile/wrapper.hh> 20 SCM sym_gnuplot, sym_obj, sym_vsl, sym_bsp, sym_stl, sym_igs, sym_rms;
21 SCM kw_format, kw_options;
25 while (s_options != SCM_EOL) {
26 SCM pair = scm_car(s_options);
27 options.read(
to_string(scm_symbol_to_string(scm_car(pair))),
29 s_options = scm_cdr(s_options);
40 SCM any_traits_type::type() { return ::any_type; }
53 SCM s_options = SCM_EOL;
54 scm_c_bind_keyword_arguments(
"import-asset", rest,
55 scm_t_keyword_arguments_flags{},
56 kw_options, &s_options, SCM_UNDEFINED);
58 read_options(options, s_options);
73 SCM s_options = SCM_EOL;
74 scm_c_bind_keyword_arguments(
"export-asset", rest,
75 scm_t_keyword_arguments_flags{},
76 kw_options, &s_options, SCM_UNDEFINED);
78 read_options(options, s_options);
79 auto&& asset = get_wrapper<std::any>(s_asset)->get();
81 return SCM_UNSPECIFIED;
95 SCM s_options = SCM_EOL;
96 scm_c_bind_keyword_arguments(
"convert-asset", rest,
97 scm_t_keyword_arguments_flags{},
98 kw_options, &s_options, SCM_UNDEFINED);
100 read_options(options, s_options);
101 auto&& asset = get_wrapper<std::any>(s_asset)->get();
102 auto&& result = convert(std::move(asset), std::move(options));
118 SCM s_format = SCM_UNDEFINED, s_options = SCM_EOL;
119 scm_c_bind_keyword_arguments(
"import-polyhedron", rest,
120 scm_t_keyword_arguments_flags{},
121 kw_format, &s_format,
122 kw_options, &s_options, SCM_UNDEFINED);
123 auto filename = to_string(path);
124 if (is_bound(s_format)) {
125 format = string_to_format(to_c_string(scm_symbol_to_string(s_format)).get());
126 }
else { format = filename_to_format(filename); }
127 Options options{{
"input-path",filename}, {
"input-format",format}};
128 read_options(options, s_options);
130 auto&& polyhedron = vtb::assets::convert<polyhedron_type>(
object, options);
145 using vtb::assets::export_asset;
146 auto* wrapper = get_wrapper<polyhedron_type>(polyhedron);
148 SCM s_format = SCM_UNDEFINED, s_options = SCM_EOL;
149 scm_c_bind_keyword_arguments(
"export-polyhedron", rest,
150 scm_t_keyword_arguments_flags{},
151 kw_format, &s_format,
152 kw_options, &s_options, SCM_UNDEFINED);
153 auto filename = to_string(path);
154 if (is_bound(s_format)) {
155 format = string_to_format(to_c_string(scm_symbol_to_string(s_format)).get());
156 }
else { format = filename_to_format(filename); }
157 Options options{{
"output-path",filename}, {
"output-format",format}};
158 read_options(options, s_options);
159 export_asset<polyhedron_type>(*wrapper->get(), options);
160 return SCM_UNSPECIFIED;
176 SCM s_format = SCM_UNDEFINED, s_options = SCM_EOL;
177 scm_c_bind_keyword_arguments(
"import-hull", rest,
178 scm_t_keyword_arguments_flags{},
179 kw_format, &s_format,
180 kw_options, &s_options, SCM_UNDEFINED);
181 auto filename = to_string(path);
182 if (is_bound(s_format)) {
183 format = string_to_format(to_c_string(scm_symbol_to_string(s_format)).get());
184 }
else { format = filename_to_format(filename); }
185 Options options{{
"input-path",filename}, {
"input-format",format}};
186 read_options(options, s_options);
201 SCM s_format = SCM_UNDEFINED, s_options = SCM_EOL;
202 scm_c_bind_keyword_arguments(
"import-compartments", rest,
203 scm_t_keyword_arguments_flags{},
204 kw_format, &s_format,
205 kw_options, &s_options, SCM_UNDEFINED);
206 auto filename = to_string(path);
207 if (is_bound(s_format)) {
208 format = string_to_format(to_c_string(scm_symbol_to_string(s_format)).get());
209 }
else { format = filename_to_format(filename); }
210 Options options{{
"input-path",filename}, {
"input-format",format}};
211 read_options(options, s_options);
213 auto&& rooms = convert<compartment_array>(
object, options);
214 SCM s_rooms = SCM_EOL;
215 for (
auto& room : rooms) {
216 s_rooms = scm_cons(traits_type::make(std::move(room)), s_rooms);
218 s_rooms = scm_reverse(s_rooms);
222 void assets_define() {
223 ::any_type = define_type<std::any>(
"<any>");
224 sym_gnuplot = scm_from_utf8_symbol(
"gnuplot");
225 sym_obj = scm_from_utf8_symbol(
"obj");
226 sym_stl = scm_from_utf8_symbol(
"stl");
227 sym_vsl = scm_from_utf8_symbol(
"vsl");
228 sym_bsp = scm_from_utf8_symbol(
"bsp");
229 sym_igs = scm_from_utf8_symbol(
"igs");
230 sym_rms = scm_from_utf8_symbol(
"rms");
231 kw_format = scm_from_utf8_keyword(
"format");
232 kw_options = scm_from_utf8_keyword(
"options");
233 define_procedure(
"import-asset", 0, 0, 1, VTB_GUILE_1(
import_asset));
234 define_procedure(
"export-asset", 1, 0, 1, VTB_GUILE_2(
export_asset));
235 define_procedure(
"convert-asset", 1, 0, 1, VTB_GUILE_2(
convert_asset));
238 define_procedure(
"import-hull", 1, 0, 1, VTB_GUILE_2(
import_hull));
SCM import_polyhedron(SCM path, SCM rest)
Import polyhedron from file path using options. Options are specified as rest argument.
SCM import_hull(SCM path, SCM rest)
Import ship hull from file path using options. Options are specified as rest argument.
Import/convert/export 3-d objects.
SCM export_asset(SCM s_asset, SCM rest)
Export asset asset to file using options. Options are specified as rest argument. File path is specif...
SCM export_polyhedron(SCM polyhedron, SCM path, SCM rest)
Export polyhedron polyhedron to file path using options. Options are specified as rest argument.
SCM import_compartments(SCM path, SCM rest)
Import ship compartments from file path using options. Options are specified as rest argument.
SCM import_asset(SCM rest)
Import an asset from file using options. Options are specified as rest argument. File path is specifi...
SCM convert_asset(SCM s_asset, SCM rest)
Convert asset asset using options. Options are specified as rest argument. Output format is specified...