10#include "utility/example_shared.h"
12#include <nv/index/icamera.h>
13#include <nv/index/iindex.h>
14#include <nv/index/iline_set.h>
15#include <nv/index/iscene.h>
16#include <nv/index/isession.h>
18#include <nv/index/app/index_connect.h>
19#include <nv/index/app/string_dict.h>
21#include "utility/canvas_utility.h"
22#include "utility/app_rendering_context.h"
29 public nv::index::app::Index_connect
49 virtual bool evaluate_options(nv::index::app::String_dict& sdict) CPP11_OVERRIDE;
52 mi::neuraylib::INetwork_configuration* network_configuration,
53 nv::index::app::String_dict& options) CPP11_OVERRIDE
58 const bool is_unittest = nv::index::app::get_bool(options.get(
"unittest"));
61 info_cout(
"NETWORK: disabled networking mode.", options);
62 network_configuration->set_mode(mi::neuraylib::INetwork_configuration:
:MODE_OFF);
66 return initialize_networking_as_default_udp(network_configuration, options);
73 mi::math::Color_struct get_color_from_attribute(mi::Sint32 attrib)
const;
78 mi::Float32 get_width_from_attribute(mi::Float32 attrib)
const;
86 nv::index::IScene* scene_edit,
87 mi::neuraylib::IDice_transaction* dice_transaction)
const;
92 void setup_camera(nv::index::IPerspective_camera* cam)
const;
94 nv::index::IFrame_results* render_frame(
const std::string& output_fname)
const;
98 mi::neuraylib::Tag m_session_tag;
100 mi::base::Handle<nv::index::ICluster_configuration> m_cluster_configuration;
102 mi::base::Handle<nv::index::app::canvas_infrastructure::IIndex_image_file_canvas> m_image_file_canvas;
104 std::string m_outfname;
106 std::string m_verify_image_fname;
112 mi::Sint32 exit_code = 0;
116 m_cluster_configuration =
117 get_index_interface()->get_api_component<nv::index::ICluster_configuration>();
121 m_image_file_canvas = create_image_file_canvas(get_application_layer_interface());
126 check_success(is_local_host_joined(m_cluster_configuration.get()));
129 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
130 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
135 m_index_session->create_session(dice_transaction.get());
137 mi::base::Handle< nv::index::ISession const > session(
138 dice_transaction->access< nv::index::ISession
const >(
142 mi::base::Handle< nv::index::IScene > scene_edit(
143 dice_transaction->edit<nv::index::IScene>(session->get_scene()));
150 check_success(create_line_set(scene_edit.get(), dice_transaction.get()));
155 mi::base::Handle< nv::index::IPerspective_camera > cam(
156 scene_edit->create_camera<nv::index::IPerspective_camera>());
158 setup_camera(cam.get());
159 const mi::neuraylib::Tag camera_tag = dice_transaction->store(cam.get());
162 const mi::math::Vector<mi::Uint32, 2> buffer_resolution(512, 512);
163 m_image_file_canvas->set_resolution(buffer_resolution);
166 mi::math::Bbox_struct< mi::Float32, 3 >
const xyz_roi_st = {
167 { 0.0f, 0.0f, 0.0f, },
168 { 500.0f, 500.0f, 500.0f, },
172 const mi::math::Bbox< mi::Float32, 3 > xyz_roi(xyz_roi_st);
174 scene_edit->set_clipped_bounding_box(xyz_roi_st);
178 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(
179 1.0f, 0.0f, 0.0f, 0.0f,
180 0.0f, 1.0f, 0.0f, 0.0f,
181 0.0f, 0.0f, -1.0f, 0.0f,
182 0.0f, 0.0f, 0.0f, 1.0f
184 scene_edit->set_transform_matrix(transform_mat);
188 scene_edit->set_camera(camera_tag);
190 dice_transaction->commit();
195 const mi::Sint32 frame_idx = 0;
196 const std::string fname = get_output_file_name(m_outfname, frame_idx);
197 mi::base::Handle<nv::index::IFrame_results> frame_results(render_frame(fname));
198 const mi::base::Handle<nv::index::IError_set> err_set(frame_results->get_error_set());
199 if (err_set->any_errors())
201 std::ostringstream os;
202 const mi::Uint32 nb_err = err_set->get_nb_errors();
203 for (mi::Uint32 e = 0; e < nb_err; ++e)
205 if (e != 0) os <<
'\n';
206 const mi::base::Handle<nv::index::IError> err(err_set->get_error(e));
207 os << err->get_error_string();
210 ERROR_LOG <<
"IIndex_rendering rendering call failed with the following error(s): " <<
'\n'
217 if (!(verify_canvas_result(get_application_layer_interface(),
218 m_image_file_canvas.get(), m_verify_image_fname, get_options())))
231 const std::string com_name = sdict.get(
"command:",
"<unknown_command>");
232 m_is_unittest = nv::index::app::get_bool(sdict.get(
"unittest",
"false"));
236 if (nv::index::app::get_bool(sdict.get(
"is_call_from_test",
"false")))
238 sdict.insert(
"is_dump_comparison_image_when_failed",
"0");
240 sdict.insert(
"outfname",
"");
241 sdict.insert(
"dice::verbose",
"2");
244 m_outfname = sdict.get(
"outfname",
"");
245 m_verify_image_fname = sdict.get(
"verify_image_fname",
"");
247 info_cout(std::string(
"running ") + com_name, sdict);
248 info_cout(
"outfname = [" + m_outfname +
249 "], verify_image_fname = [" + m_verify_image_fname +
250 "], dice::verbose = " + sdict.get(
"dice::verbose"), sdict);
253 if(sdict.is_defined(
"h"))
256 <<
"info: Usage: " << com_name <<
" [option]\n"
258 <<
" printout this message\n"
259 <<
" [-dice::verbose severity_level]\n"
260 <<
" verbose severity level (3 is info.). (default: " + sdict.get(
"dice::verbose")
262 <<
" [-outfname string]\n"
263 <<
" output ppm file base name. When empty, no output.\n"
264 <<
" A frame number and extension (.ppm) will be added.\n"
265 <<
" (default: [" << m_outfname <<
"])\n"
266 <<
" [-verify_image_fname [image_fname]]\n"
267 <<
" when image_fname exist, verify the rendering image. (default: ["
268 << m_verify_image_fname <<
"])\n"
269 <<
" [-unittest bool]\n"
270 <<
" when true, unit test mode (create smaller volume). "
271 <<
"(default: " << m_is_unittest <<
")"
279mi::math::Color_struct Create_line_set::get_color_from_attribute(mi::Sint32 attrib)
const
281 mi::math::Color_struct col;
282 const mi::Float32 coef = 1.0f / 15.0f;
283 col.r = coef *
static_cast< mi::Float32
>(attrib & 15);
284 col.g = coef *
static_cast< mi::Float32
>((attrib >> 4) & 15);
285 col.b = coef *
static_cast< mi::Float32
>((attrib >> 8) & 15);
292mi::Float32 Create_line_set::get_width_from_attribute(mi::Float32 attrib)
const
294 const mi::Float32 width =
295 static_cast< mi::Float32
>(
static_cast< mi::Sint32
>(fabs(attrib)) % 16);
300bool Create_line_set::create_line_set(
301 nv::index::IScene* scene_edit,
302 mi::neuraylib::IDice_transaction* dice_transaction)
const
308 mi::base::Handle<nv::index::ITransformed_scene_group> group_node(
309 scene_edit->create_scene_group<nv::index::ITransformed_scene_group>());
315 std::vector< mi::math::Vector_struct< mi::Float32, 3> > line_seg_vec[2];
316 std::vector< mi::math::Color_struct > color_vec[2];
317 std::vector< mi::Float32 > width_vec[2];
320 const mi::Sint32 column_count = 20;
321 const mi::Sint32 line_segment_count = 200;
322 const mi::Sint32 line_set_count = 2;
323 const mi::Float32 x_org = 0.0;
324 const mi::Float32 y_org = 0.0;
325 const mi::Float32 x_mag = 25.0;
326 const mi::Float32 y_mag = 25.0;
327 const mi::Float32 z = 30.0;
328 const mi::Float32 y_offset[2] = { 0.0f, 280.0f };
329 mi::Sint32 idx_p = 0;
331 for(mi::Sint32 i = 0; i < line_segment_count; ++i)
334 for(mi::Sint32 k = 0; k < 2; ++k){
335 mi::math::Vector_struct< mi::Float32, 3> pos[2];
336 for(mi::Sint32 j = 0; j < line_set_count; ++j){
337 pos[j].x = x_org +
static_cast< mi::Float32
>(idx_p % column_count) * x_mag;
338 pos[j].y = y_org +
static_cast< mi::Float32
>(idx_p / column_count) * y_mag + y_offset[j];
340 line_seg_vec[j].push_back(pos[j]);
344 for(mi::Sint32 j = 0; j < line_set_count; ++j){
345 color_vec[j].push_back(get_color_from_attribute(i));
346 width_vec[j].push_back(get_width_from_attribute(
static_cast<mi::Float32
>(i)));
351 for(mi::Sint32 j = 0; j < 2; ++j)
354 mi::base::Handle<nv::index::ILine_set> line_set(scene_edit->create_shape<nv::index::ILine_set>());
356 line_set->set_line_type(nv::index::ILine_set:
:LINE_TYPE_SEGMENTS);
359 line_set->set_lines(&(line_seg_vec[j][0]), line_seg_vec[j].size() / 2);
360 line_set->set_colors(&(color_vec[j][0]), color_vec[j].size());
361 line_set->set_widths(&(width_vec[j][0]), width_vec[j].size());
364 const mi::neuraylib::Tag line_set_tag = dice_transaction->store_for_reference_counting(line_set.get());
368 group_node->append(line_set_tag, dice_transaction);
369 INFO_LOG <<
"Added line_set (size: " << line_set_count <<
") to the scene (tag id: "
370 << line_set_tag.id <<
").";
373 mi::neuraylib::Tag group_node_tag = dice_transaction->store_for_reference_counting(group_node.get());
375 scene_edit->append(group_node_tag, dice_transaction);
381void Create_line_set::setup_camera(nv::index::IPerspective_camera* cam)
const
386 mi::math::Vector< mi::Float32, 3 >
const from( 254.0f, 254.0f, 550.0f);
387 mi::math::Vector< mi::Float32, 3 >
const to ( 255.0f, 255.0f, -255.0f);
388 mi::math::Vector< mi::Float32, 3 >
const up ( 0.0f, 1.0f, 0.0f);
389 mi::math::Vector<mi::Float32, 3> viewdir = to - from;
392 cam->set(from, viewdir, up);
393 cam->set_aperture(0.033f);
394 cam->set_aspect(1.0f);
395 cam->set_focal(0.03f);
396 cam->set_clip_min(10.0f);
397 cam->set_clip_max(5000.0f);
401nv::index::IFrame_results* Create_line_set::render_frame(
402 const std::string& output_fname)
const
407 m_image_file_canvas->set_rgba_file_name(output_fname.c_str());
411 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
412 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
415 m_index_session->update(m_session_tag, dice_transaction.get());
417 mi::base::Handle<nv::index::IFrame_results> frame_results(
418 m_index_rendering->render(
420 m_image_file_canvas.get(),
421 dice_transaction.get()));
424 dice_transaction->commit();
426 frame_results->retain();
427 return frame_results.get();
432int main(
int argc,
const char* argv[])
434 nv::index::app::String_dict sdict;
435 sdict.insert(
"dice::verbose",
"3");
436 sdict.insert(
"outfname",
"frame_create_line_set");
437 sdict.insert(
"verify_image_fname",
"");
438 sdict.insert(
"unittest",
"0");
439 sdict.insert(
"is_dump_comparison_image_when_failed",
"1");
440 sdict.insert(
"is_call_from_test",
"0");
443 sdict.insert(
"dice::network::mode",
"OFF");
446 sdict.insert(
"index::config::set_monitor_performance_values",
"true");
447 sdict.insert(
"index::service",
"rendering_and_compositing");
448 sdict.insert(
"index::cuda_debug_checks",
"false");
451 sdict.insert(
"index::app::components::application_layer::component_name_list",
452 "canvas_infrastructure image io");
456 create_line_set.initialize(argc, argv, sdict);
460 const mi::Sint32 exit_code = create_line_set.
launch();
461 INFO_LOG <<
"Shutting down ...";
virtual bool initialize_networking(mi::neuraylib::INetwork_configuration *network_configuration, nv::index::app::String_dict &options) CPP11_OVERRIDE
virtual bool evaluate_options(nv::index::app::String_dict &sdict) CPP11_OVERRIDE
virtual ~Create_line_set()
int main(int argc, const char *argv[])
#define check_success(expr)