10#include "utility/example_shared.h"
12#include <nv/index/icamera.h>
13#include <nv/index/iindex.h>
14#include <nv/index/iscene.h>
15#include <nv/index/isession.h>
21#include <nv/index/app/string_dict.h>
22#include <nv/index/app/forwarding_logger.h>
23#include <nv/index/app/index_connect.h>
25#include "utility/canvas_utility.h"
33 public nv::index::app::Index_connect
53 virtual bool evaluate_options(nv::index::app::String_dict& sdict) CPP11_OVERRIDE;
55 mi::neuraylib::INetwork_configuration* network_configuration,
56 nv::index::app::String_dict& options) CPP11_OVERRIDE
61 const bool is_unittest = nv::index::app::get_bool(options.get(
"unittest"));
64 info_cout(
"NETWORK: disabled networking mode.", options);
65 network_configuration->set_mode(mi::neuraylib::INetwork_configuration:
:MODE_OFF);
69 return initialize_networking_as_default_udp(network_configuration, options);
74 mi::neuraylib::IDice_configuration* configuration_interface,
75 nv::index::app::String_dict& options) CPP11_OVERRIDE
77 bool is_registered =
false;
78 is_registered = get_index_interface()->register_serializable_class<
Attribute_line_set>();
89 bool create_attribute_line_set(
90 nv::index::IScene* scene_edit,
91 mi::neuraylib::IDice_transaction* dice_transaction);
97 nv::index::IPerspective_camera* cam)
const;
103 nv::index::IFrame_results* render_frame(
104 const std::string& output_fname)
const;
108 mi::neuraylib::Tag m_session_tag;
110 mi::base::Handle<nv::index::ICluster_configuration> m_cluster_configuration;
112 mi::base::Handle<nv::index::app::canvas_infrastructure::IIndex_image_file_canvas> m_image_file_canvas;
114 std::string m_outfname;
116 std::string m_verify_image_fname;
123 mi::Sint32 exit_code = 0;
127 m_cluster_configuration =
128 get_index_interface()->get_api_component<nv::index::ICluster_configuration>();
132 m_image_file_canvas = create_image_file_canvas(get_application_layer_interface());
137 check_success(is_local_host_joined(m_cluster_configuration.get()));
141 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
142 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
147 m_index_session->create_session(dice_transaction.get());
149 mi::base::Handle< nv::index::ISession const > session(
150 dice_transaction->access< nv::index::ISession
const >(
154 mi::base::Handle< nv::index::IScene > scene_edit(
155 dice_transaction->edit< nv::index::IScene >(session->get_scene()));
162 check_success(create_attribute_line_set(scene_edit.get(), dice_transaction.get()));
167 mi::base::Handle< nv::index::IPerspective_camera > cam(
168 scene_edit->create_camera<nv::index::IPerspective_camera>());
170 setup_camera(cam.get());
172 const mi::neuraylib::Tag camera_tag = dice_transaction->store(cam.get());
175 const mi::math::Vector<mi::Uint32, 2> buffer_resolution(512, 512);
176 m_image_file_canvas->set_resolution(buffer_resolution);
179 mi::math::Bbox_struct< mi::Float32, 3 >
const xyz_roi_st = {
180 { 0.0f, 0.0f, 0.0f, },
181 { 500.0f, 500.0f, 500.0f, },
185 const mi::math::Bbox< mi::Float32, 3 > xyz_roi(xyz_roi_st);
187 scene_edit->set_clipped_bounding_box(xyz_roi_st);
191 mi::math::Matrix<mi::Float32, 4, 4> transform_mat(
192 1.0f, 0.0f, 0.0f, 0.0f,
193 0.0f, 1.0f, 0.0f, 0.0f,
194 0.0f, 0.0f, -1.0f, 0.0f,
195 0.0f, 0.0f, 0.0f, 1.0f
197 scene_edit->set_transform_matrix(transform_mat);
201 scene_edit->set_camera(camera_tag);
204 dice_transaction->commit();
209 mi::Sint32
const frame_idx = 0;
210 std::string
const fname = get_output_file_name(m_outfname, frame_idx);
211 mi::base::Handle<nv::index::IFrame_results> frame_results(render_frame(fname));
213 const mi::base::Handle<nv::index::IError_set> err_set(frame_results->get_error_set());
214 if (err_set->any_errors())
216 std::ostringstream os;
217 const mi::Uint32 nb_err = err_set->get_nb_errors();
218 for (mi::Uint32 e = 0; e < nb_err; ++e)
220 if (e != 0) os <<
'\n';
221 const mi::base::Handle<nv::index::IError> err(err_set->get_error(e));
222 os << err->get_error_string();
225 ERROR_LOG <<
"IIndex_rendering rendering call failed with the following error(s): " <<
'\n'
231 if (!(verify_canvas_result(get_application_layer_interface(),
232 m_image_file_canvas.get(), m_verify_image_fname, get_options())))
246 const std::string com_name = sdict.get(
"command:",
"<unknown_command>");
247 m_is_unittest = nv::index::app::get_bool(sdict.get(
"unittest",
"false"));
251 if (nv::index::app::get_bool(sdict.get(
"is_call_from_test",
"false")))
253 sdict.insert(
"is_dump_comparison_image_when_failed",
"0");
255 sdict.insert(
"outfname",
"");
256 sdict.insert(
"dice::verbose",
"2");
259 m_outfname = sdict.get(
"outfname");
260 m_verify_image_fname = sdict.get(
"verify_image_fname");
262 info_cout(std::string(
"running ") + com_name, sdict);
263 info_cout(
"outfname = [" + m_outfname +
264 "], verify_image_fname = [" + m_verify_image_fname +
265 "], dice::verbose = " + sdict.get(
"dice::verbose"), sdict);
268 if(sdict.is_defined(
"h"))
271 <<
"info: Usage: " << com_name <<
" [option]\n"
273 <<
" printout this message\n"
274 <<
" [-dice::verbose severity_level]\n"
275 <<
" verbose severity level (3 is info.). (default: " + sdict.get(
"dice::verbose")
277 <<
" [-outfname string]\n"
278 <<
" output ppm file base name. When empty, no output.\n"
279 <<
" A frame number and extension (.ppm) will be added.\n"
280 <<
" (default: [" << m_outfname <<
"])\n"
281 <<
" [-verify_image_fname [image_fname]]\n"
282 <<
" when image_fname exist, verify the rendering image. (default: ["
283 << m_verify_image_fname <<
"])\n"
284 <<
" [-unittest bool]\n"
285 <<
" when true, unit test mode (create smaller volume). "
286 <<
"(default: " << m_is_unittest <<
")"
294bool Create_attribute_line_set::create_attribute_line_set(
295 nv::index::IScene* scene_edit,
296 mi::neuraylib::IDice_transaction* dice_transaction)
302 mi::base::Handle<nv::index::ITransformed_scene_group> group_node(
303 scene_edit->create_scene_group<nv::index::ITransformed_scene_group>());
309 std::vector< mi::math::Vector_struct< mi::Float32, 3> > line_seg_vec[2];
310 std::vector< mi::Float32 > attribute_vec[2];
313 const mi::Sint32 column_count = 20;
314 const mi::Sint32 line_segment_count = 201;
315 const mi::Sint32 line_set_count = 2;
316 const mi::Float32 x_org = 0.0;
317 const mi::Float32 y_org = 0.0;
318 const mi::Float32 x_mag = 25.0;
319 const mi::Float32 y_mag = 25.0;
320 const mi::Float32 z = 30.0;
321 const mi::Float32 y_offset[2] = { 0.0f, 280.0f };
322 for(mi::Sint32 i = 0; i < line_segment_count; ++i)
324 mi::math::Vector_struct< mi::Float32, 3> pos[2];
325 for(mi::Sint32 j = 0; j < line_set_count; ++j)
327 pos[j].x = x_org +
static_cast< mi::Float32
>(i % column_count) * x_mag;
328 pos[j].y = y_org +
static_cast< mi::Float32
>(i / column_count) * y_mag + y_offset[j];
330 line_seg_vec[j]. push_back(pos[j]);
331 attribute_vec[j].push_back(
static_cast< mi::Float32
>(i));
336 for(mi::Sint32 j = 0; j < 2; ++j)
339 mi::base::Handle<Attribute_line_set> line_set(
343 mi::neuraylib::Tag
const line_set_scene_element_tag =
344 dice_transaction->store_for_reference_counting(line_set.get());
348 group_node->append(line_set_scene_element_tag, dice_transaction);
349 INFO_LOG <<
"Added line_set (size: " << line_set_count <<
") to the scene (tag id: "
350 << line_set_scene_element_tag.id <<
").";
353 mi::neuraylib::Tag group_node_tag = dice_transaction->store_for_reference_counting(group_node.get());
355 scene_edit->append(group_node_tag, dice_transaction);
361void Create_attribute_line_set::setup_camera(
362 nv::index::IPerspective_camera* cam)
const
367 mi::math::Vector< mi::Float32, 3 >
const from( 254.0f, 254.0f, 550.0f);
368 mi::math::Vector< mi::Float32, 3 >
const to ( 255.0f, 255.0f, -255.0f);
369 mi::math::Vector< mi::Float32, 3 >
const up ( 0.0f, 1.0f, 0.0f);
370 mi::math::Vector<mi::Float32, 3> viewdir = to - from;
373 cam->set(from, viewdir, up);
374 cam->set_aperture(0.033f);
375 cam->set_aspect(1.0f);
376 cam->set_focal(0.03f);
377 cam->set_clip_min(10.0f);
378 cam->set_clip_max(5000.0f);
386nv::index::IFrame_results* Create_attribute_line_set::render_frame(
387 const std::string& output_fname)
const
392 m_image_file_canvas->set_rgba_file_name(output_fname.c_str());
396 mi::base::Handle<mi::neuraylib::IDice_transaction> dice_transaction(
397 m_global_scope->create_transaction<mi::neuraylib::IDice_transaction>());
400 m_index_session->update(m_session_tag, dice_transaction.get());
402 mi::base::Handle<nv::index::IFrame_results> frame_results(
403 m_index_rendering->render(
405 m_image_file_canvas.get(),
406 dice_transaction.get()));
409 dice_transaction->commit();
411 frame_results->retain();
412 return frame_results.get();
416int main(
int argc,
const char* argv[])
418 nv::index::app::String_dict sdict;
419 sdict.insert(
"dice::verbose",
"3");
420 sdict.insert(
"dice::network::mode",
"OFF");
421 sdict.insert(
"outfname",
"frame_create_attribute_line_set");
422 sdict.insert(
"verify_image_fname",
"");
423 sdict.insert(
"unittest",
"0");
424 sdict.insert(
"is_dump_comparison_image_when_failed",
"1");
425 sdict.insert(
"is_call_from_test",
"0");
429 sdict.insert(
"index::config::set_monitor_performance_values",
"true");
430 sdict.insert(
"index::service",
"rendering_and_compositing");
431 sdict.insert(
"index::cuda_debug_checks",
"false");
434 sdict.insert(
"index::app::components::application_layer::component_name_list",
435 "canvas_infrastructure image io");
439 create_attribute_line_set.initialize(argc, argv, sdict);
443 const mi::Sint32 exit_code = create_attribute_line_set.
launch();
444 INFO_LOG <<
"Shutting down ...";
attribute line set as an example implementation
An example of line set that contains 3D line segments (stored as vertices in a array) and a color as ...
virtual bool evaluate_options(nv::index::app::String_dict &sdict) CPP11_OVERRIDE
virtual bool initialize_networking(mi::neuraylib::INetwork_configuration *network_configuration, nv::index::app::String_dict &options) CPP11_OVERRIDE
virtual ~Create_attribute_line_set()
Create_attribute_line_set()
virtual bool register_serializable_classes(mi::neuraylib::IDice_configuration *configuration_interface, nv::index::app::String_dict &options) CPP11_OVERRIDE
int main(int argc, const char *argv[])
#define check_success(expr)