7 #ifndef MI_NEURAYLIB_ARGUMENT_EDITOR_H
8 #define MI_NEURAYLIB_ARGUMENT_EDITOR_H
27 class IMdl_execution_context;
70 ITransaction* transaction,
72 IMdl_factory* mdl_factory,
73 bool intent_to_edit =
false);
308 Sint32 get_value(
const char* parameter_name,
const char* field_name, T& value)
const;
421 Sint32 set_value(
const char* parameter_name,
const char* field_name,
const T& value);
500 const char*
get_call(
const char* parameter_name)
const;
535 Sint32 set_call(
const char* parameter_name,
const char* call_name);
563 const std::string&
get_name()
const;
568 void promote_to_edit_if_needed();
570 base::Handle<ITransaction> m_transaction;
571 base::Handle<IMdl_factory> m_mdl_factory;
572 base::Handle<IValue_factory> m_value_factory;
573 base::Handle<IExpression_factory> m_expression_factory;
574 base::Handle<const IScene_element> m_access;
575 base::Handle<const IScene_element> m_old_access;
576 base::Handle<IScene_element> m_edit;
593 = m_mdl_factory ? m_mdl_factory->create_value_factory( m_transaction.get()) : 0;
595 = m_mdl_factory ? m_mdl_factory->create_expression_factory( m_transaction.get()) : 0;
597 if( intent_to_edit) {
600 m_old_access = m_edit;
604 m_type = m_access ? m_access->get_element_type() :
static_cast<Element_type>( 0);
619 return mi->is_valid(context);
624 return fc->is_valid(context);
632 promote_to_edit_if_needed();
635 return mi->repair(flags, context);
640 return fc->repair(flags, context);
656 return mi->get_material_definition();
661 return fc->get_function_definition();
672 return mi->get_mdl_material_definition();
677 return fc->get_mdl_function_definition();
692 return fc->is_array_constructor();
712 return mi->get_parameter_count();
717 return fc->get_parameter_count();
728 return mi->get_parameter_name( parameter_index);
733 return fc->get_parameter_name( parameter_index);
744 return mi->get_parameter_index( name);
749 return fc->get_parameter_index( name);
764 return fc->get_return_type();
775 return mi->get_parameter_types();
780 return fc->get_parameter_types();
795 m_transaction.get(), m_value_factory.get(), mi.
get(), index, NULL));
798 return b->get_value();
804 m_transaction.get(), m_value_factory.get(), fc.
get(), index, NULL));
807 return b->get_value();
815 promote_to_edit_if_needed();
820 return mi->reset_argument( index);
825 return fc->reset_argument( index);
833 promote_to_edit_if_needed();
838 return mi->reset_argument( name);
843 return fc->reset_argument( name);
855 return mi->get_arguments();
860 return fc->get_arguments();
918 if( !argument_constant)
922 return result == 0 ? 0 : -5;
933 if( !argument_constant)
937 return result == 0 ? 0 : -5;
955 if( !argument_constant)
959 return result == 0 ? 0 : -5;
971 if( !argument_constant)
975 return result == 0 ? 0 : -5;
993 if( !argument_constant)
997 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1008 if( !argument_constant)
1012 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1030 if( !argument_constant)
1034 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1045 if( !argument_constant)
1049 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1057 Size parameter_index,
const char* field_name, T& value)
const
1068 if( !argument_constant)
1072 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1083 if( !argument_constant)
1087 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1095 const char* parameter_name,
const char* field_name, T& value)
const
1106 if( !argument_constant)
1110 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1121 if( !argument_constant)
1125 return result == 0 ? 0 : (result == -3 ? -3 : -5);
1134 promote_to_edit_if_needed();
1139 if( mi->is_default())
1151 m_expression_factory->create_constant( new_value.
get()));
1152 result = mi->set_argument( parameter_index, new_expression.
get());
1159 if( fc->is_default())
1171 m_expression_factory->create_constant( new_value.
get()));
1172 result = fc->set_argument( parameter_index, new_expression.
get());
1183 promote_to_edit_if_needed();
1188 if( mi->is_default())
1200 m_expression_factory->create_constant( new_value.
get()));
1201 result = mi->set_argument( parameter_name, new_expression.
get());
1208 if( fc->is_default())
1220 m_expression_factory->create_constant( new_value.
get()));
1221 result = fc->set_argument( parameter_name, new_expression.
get());
1232 promote_to_edit_if_needed();
1237 if( mi->is_default())
1251 return result == -3 ? -3 : -5;
1252 result = mi->set_argument( parameter_index, new_argument.
get());
1261 return result == -3 ? -3 : -5;
1263 m_expression_factory->create_constant( new_value.
get()));
1264 result = mi->set_argument( parameter_index, new_expression.
get());
1272 if( fc->is_default())
1286 return result == -3 ? -3 : -5;
1287 result = fc->set_argument( parameter_index, new_argument.
get());
1296 return result == -3 ? -3 : -5;
1298 m_expression_factory->create_constant( new_value.
get()));
1299 result = fc->set_argument( parameter_index, new_expression.
get());
1311 promote_to_edit_if_needed();
1316 if( mi->is_default())
1330 return result == -3 ? -3 : -5;
1331 result = mi->set_argument( parameter_name, new_argument.
get());
1340 return result == -3 ? -3 : -5;
1342 m_expression_factory->create_constant( new_value.
get()));
1343 result = mi->set_argument( parameter_name, new_expression.
get());
1351 if( fc->is_default())
1365 return result == -3 ? -3 : -5;
1366 result = fc->set_argument( parameter_name, new_argument.
get());
1375 return result == -3 ? -3 : -5;
1377 m_expression_factory->create_constant( new_value.
get()));
1378 result = fc->set_argument( parameter_name, new_expression.
get());
1389 Size parameter_index,
const char* field_name,
const T& value)
1391 promote_to_edit_if_needed();
1396 if( mi->is_default())
1410 return result == -3 ? -3 : -5;
1411 result = mi->set_argument( parameter_index, new_argument.
get());
1420 return result == -3 ? -3 : -5;
1422 m_expression_factory->create_constant( new_value.
get()));
1423 result = mi->set_argument( parameter_index, new_expression.
get());
1431 if( fc->is_default())
1445 return result == -3 ? -3 : -5;
1446 result = fc->set_argument( parameter_index, new_argument.
get());
1455 return result == -3 ? -3 : -5;
1457 m_expression_factory->create_constant( new_value.
get()));
1458 result = fc->set_argument( parameter_index, new_expression.
get());
1469 const char* parameter_name,
const char* field_name,
const T& value)
1471 promote_to_edit_if_needed();
1476 if( mi->is_default())
1490 return result == -3 ? -3 : -5;
1491 result = mi->set_argument( parameter_name, new_argument.
get());
1500 return result == -3 ? -3 : -5;
1502 m_expression_factory->create_constant( new_value.
get()));
1503 result = mi->set_argument( parameter_name, new_expression.
get());
1511 if( fc->is_default())
1525 return result == -3 ? -3 : -5;
1526 result = fc->set_argument( parameter_name, new_argument.
get());
1535 return result == -3 ? -3 : -5;
1537 m_expression_factory->create_constant( new_value.
get()));
1538 result = fc->set_argument( parameter_name, new_expression.
get());
1558 if( !argument_constant)
1563 size = value->get_size();
1575 if( !argument_constant)
1580 size = value->get_size();
1598 if( !argument_constant)
1603 size = value->get_size();
1615 if( !argument_constant)
1620 size = value->get_size();
1629 promote_to_edit_if_needed();
1634 if( mi->is_default())
1649 Sint32 result = new_value->set_size( size);
1652 result = mi->set_argument( parameter_index, new_argument.
get());
1662 Sint32 result = new_value->set_size( size);
1666 m_expression_factory->create_constant( new_value.
get()));
1667 result = mi->set_argument( parameter_index, new_expression.
get());
1675 if( fc->is_default())
1690 Sint32 result = new_value->set_size( size);
1693 result = fc->set_argument( parameter_index, new_argument.
get());
1703 Sint32 result = new_value->set_size( size);
1707 m_expression_factory->create_constant( new_value.
get()));
1708 result = fc->set_argument( parameter_index, new_expression.
get());
1719 promote_to_edit_if_needed();
1724 if( mi->is_default())
1739 Sint32 result = new_value->set_size( size);
1742 result = mi->set_argument( parameter_name, new_argument.
get());
1752 Sint32 result = new_value->set_size( size);
1756 m_expression_factory->create_constant( new_value.
get()));
1757 result = mi->set_argument( parameter_name, new_expression.
get());
1765 if( fc->is_default())
1780 Sint32 result = new_value->set_size( size);
1783 result = fc->set_argument( parameter_name, new_argument.
get());
1793 Sint32 result = new_value->set_size( size);
1797 m_expression_factory->create_constant( new_value.
get()));
1798 result = fc->set_argument( parameter_name, new_expression.
get());
1817 return argument->get_call();
1827 return argument->get_call();
1843 return argument->get_call();
1853 return argument->get_call();
1861 promote_to_edit_if_needed();
1869 return mi->set_argument( parameter_index, new_argument.get());
1877 return fc->set_argument( parameter_index, new_argument.get());
1885 promote_to_edit_if_needed();
1893 return mi->set_argument( parameter_name, new_argument.get());
1901 return fc->set_argument( parameter_name, new_argument.get());
1909 m_transaction->retain();
1910 return m_transaction.get();
1915 m_mdl_factory->retain();
1916 return m_mdl_factory.get();
1921 m_value_factory->retain();
1922 return m_value_factory.get();
1927 m_expression_factory->retain();
1928 return m_expression_factory.get();
1934 return m_access.get();
1939 promote_to_edit_if_needed();
1942 return m_edit.get();
1955 inline void Argument_editor::promote_to_edit_if_needed()
1961 m_old_access = m_access;
1969 #endif // MI_NEURAYLIB_ARGUMENT_EDITOR_H