7 #ifndef MI_NEURAYLIB_ARGUMENT_EDITOR_H
8 #define MI_NEURAYLIB_ARGUMENT_EDITOR_H
63 Argument_editor( ITransaction* transaction,
const char* name, IMdl_factory* mdl_factory);
236 Sint32 get_value(
const char* parameter_name,
const char* field_name, T& value)
const;
343 Sint32 set_value(
const char* parameter_name,
const char* field_name,
const T& value);
420 const char*
get_call(
const char* parameter_name)
const;
455 Sint32 set_call(
const char* parameter_name,
const char* call_name);
488 void promote_to_edit_if_needed();
490 base::Handle<ITransaction> m_transaction;
491 base::Handle<IMdl_factory> m_mdl_factory;
492 base::Handle<IValue_factory> m_value_factory;
493 base::Handle<IExpression_factory> m_expression_factory;
494 base::Handle<const IScene_element> m_access;
495 base::Handle<const IScene_element> m_old_access;
496 base::Handle<IScene_element> m_edit;
513 = m_mdl_factory ? m_mdl_factory->create_value_factory( m_transaction.get()) : 0;
515 = m_mdl_factory ? m_mdl_factory->create_expression_factory( m_transaction.get()) : 0;
517 m_type = m_access ? m_access->get_element_type() :
static_cast<Element_type>( 0);
536 return mi->get_material_definition();
541 return fc->get_function_definition();
552 return mi->get_mdl_material_definition();
557 return fc->get_mdl_function_definition();
572 return fc->is_array_constructor();
583 return mi->get_parameter_count();
588 return fc->get_parameter_count();
599 return mi->get_parameter_name( parameter_index);
604 return fc->get_parameter_name( parameter_index);
615 return mi->get_parameter_index( name);
620 return fc->get_parameter_index( name);
635 return fc->get_return_type();
646 return mi->get_parameter_types();
651 return fc->get_parameter_types();
666 m_transaction.get(), m_value_factory.get(), mi.
get(), index, NULL));
669 return b->get_value();
675 m_transaction.get(), m_value_factory.get(), fc.
get(), index, NULL));
678 return b->get_value();
690 return mi->get_arguments();
695 return fc->get_arguments();
753 if( !argument_constant)
757 return result == 0 ? 0 : -5;
768 if( !argument_constant)
772 return result == 0 ? 0 : -5;
790 if( !argument_constant)
794 return result == 0 ? 0 : -5;
806 if( !argument_constant)
810 return result == 0 ? 0 : -5;
828 if( !argument_constant)
832 return result == 0 ? 0 : (result == -3 ? -3 : -5);
843 if( !argument_constant)
847 return result == 0 ? 0 : (result == -3 ? -3 : -5);
865 if( !argument_constant)
869 return result == 0 ? 0 : (result == -3 ? -3 : -5);
880 if( !argument_constant)
884 return result == 0 ? 0 : (result == -3 ? -3 : -5);
892 Size parameter_index,
const char* field_name, T& value)
const
903 if( !argument_constant)
907 return result == 0 ? 0 : (result == -3 ? -3 : -5);
918 if( !argument_constant)
922 return result == 0 ? 0 : (result == -3 ? -3 : -5);
930 const char* parameter_name,
const char* field_name, T& value)
const
941 if( !argument_constant)
945 return result == 0 ? 0 : (result == -3 ? -3 : -5);
956 if( !argument_constant)
960 return result == 0 ? 0 : (result == -3 ? -3 : -5);
969 promote_to_edit_if_needed();
984 m_expression_factory->create_constant( new_value.
get()));
985 result = mi->set_argument( parameter_index, new_expression.
get());
1002 m_expression_factory->create_constant( new_value.
get()));
1003 result = fc->set_argument( parameter_index, new_expression.
get());
1014 promote_to_edit_if_needed();
1029 m_expression_factory->create_constant( new_value.
get()));
1030 result = mi->set_argument( parameter_name, new_expression.
get());
1047 m_expression_factory->create_constant( new_value.
get()));
1048 result = fc->set_argument( parameter_name, new_expression.
get());
1059 promote_to_edit_if_needed();
1076 return result == -3 ? -3 : -5;
1077 result = mi->set_argument( parameter_index, new_argument.
get());
1086 return result == -3 ? -3 : -5;
1088 m_expression_factory->create_constant( new_value.
get()));
1089 result = mi->set_argument( parameter_index, new_expression.
get());
1109 return result == -3 ? -3 : -5;
1110 result = fc->set_argument( parameter_index, new_argument.
get());
1119 return result == -3 ? -3 : -5;
1121 m_expression_factory->create_constant( new_value.
get()));
1122 result = fc->set_argument( parameter_index, new_expression.
get());
1134 promote_to_edit_if_needed();
1151 return result == -3 ? -3 : -5;
1152 result = mi->set_argument( parameter_name, new_argument.
get());
1161 return result == -3 ? -3 : -5;
1163 m_expression_factory->create_constant( new_value.
get()));
1164 result = mi->set_argument( parameter_name, new_expression.
get());
1184 return result == -3 ? -3 : -5;
1185 result = fc->set_argument( parameter_name, new_argument.
get());
1194 return result == -3 ? -3 : -5;
1196 m_expression_factory->create_constant( new_value.
get()));
1197 result = fc->set_argument( parameter_name, new_expression.
get());
1208 Size parameter_index,
const char* field_name,
const T& value)
1210 promote_to_edit_if_needed();
1227 return result == -3 ? -3 : -5;
1228 result = mi->set_argument( parameter_index, new_argument.
get());
1237 return result == -3 ? -3 : -5;
1239 m_expression_factory->create_constant( new_value.
get()));
1240 result = mi->set_argument( parameter_index, new_expression.
get());
1260 return result == -3 ? -3 : -5;
1261 result = fc->set_argument( parameter_index, new_argument.
get());
1270 return result == -3 ? -3 : -5;
1272 m_expression_factory->create_constant( new_value.
get()));
1273 result = fc->set_argument( parameter_index, new_expression.
get());
1284 const char* parameter_name,
const char* field_name,
const T& value)
1286 promote_to_edit_if_needed();
1303 return result == -3 ? -3 : -5;
1304 result = mi->set_argument( parameter_name, new_argument.
get());
1313 return result == -3 ? -3 : -5;
1315 m_expression_factory->create_constant( new_value.
get()));
1316 result = mi->set_argument( parameter_name, new_expression.
get());
1336 return result == -3 ? -3 : -5;
1337 result = fc->set_argument( parameter_name, new_argument.
get());
1346 return result == -3 ? -3 : -5;
1348 m_expression_factory->create_constant( new_value.
get()));
1349 result = fc->set_argument( parameter_name, new_expression.
get());
1369 if( !argument_constant)
1374 size = value->get_size();
1386 if( !argument_constant)
1391 size = value->get_size();
1409 if( !argument_constant)
1414 size = value->get_size();
1426 if( !argument_constant)
1431 size = value->get_size();
1440 promote_to_edit_if_needed();
1458 Sint32 result = new_value->set_size( size);
1461 result = mi->set_argument( parameter_index, new_argument.
get());
1471 Sint32 result = new_value->set_size( size);
1475 m_expression_factory->create_constant( new_value.
get()));
1476 result = mi->set_argument( parameter_index, new_expression.
get());
1497 Sint32 result = new_value->set_size( size);
1500 result = fc->set_argument( parameter_index, new_argument.
get());
1510 Sint32 result = new_value->set_size( size);
1514 m_expression_factory->create_constant( new_value.
get()));
1515 result = fc->set_argument( parameter_index, new_expression.
get());
1526 promote_to_edit_if_needed();
1544 Sint32 result = new_value->set_size( size);
1547 result = mi->set_argument( parameter_name, new_argument.
get());
1557 Sint32 result = new_value->set_size( size);
1561 m_expression_factory->create_constant( new_value.
get()));
1562 result = mi->set_argument( parameter_name, new_expression.
get());
1583 Sint32 result = new_value->set_size( size);
1586 result = fc->set_argument( parameter_name, new_argument.
get());
1596 Sint32 result = new_value->set_size( size);
1600 m_expression_factory->create_constant( new_value.
get()));
1601 result = fc->set_argument( parameter_name, new_expression.
get());
1620 return argument->get_call();
1630 return argument->get_call();
1646 return argument->get_call();
1656 return argument->get_call();
1664 promote_to_edit_if_needed();
1672 return mi->set_argument( parameter_index, new_argument.get());
1680 return fc->set_argument( parameter_index, new_argument.get());
1688 promote_to_edit_if_needed();
1696 return mi->set_argument( parameter_name, new_argument.get());
1704 return fc->set_argument( parameter_name, new_argument.get());
1712 m_transaction->retain();
1713 return m_transaction.get();
1718 m_mdl_factory->retain();
1719 return m_mdl_factory.get();
1724 m_value_factory->retain();
1725 return m_value_factory.get();
1730 m_expression_factory->retain();
1731 return m_expression_factory.get();
1737 return m_access.get();
1742 promote_to_edit_if_needed();
1745 return m_edit.get();
1758 inline void Argument_editor::promote_to_edit_if_needed()
1764 m_old_access = m_access;
1772 #endif // MI_NEURAYLIB_ARGUMENT_EDITOR_H