|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Shinya Kitaoka |
810553 |
|
|
Shinya Kitaoka |
810553 |
#if !defined(TOONZ_PLUGIN_PARAM_TRAITS_H__)
|
|
Toshihiro Shimizu |
890ddd |
#define TOONZ_PLUGIN_PARAM_TRAITS_H__
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include <toonz_params.h></toonz_params.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <functional></functional>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename first,="" second="" typename=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
struct param_bind_t {
|
|
Shinya Kitaoka |
120a6e |
typedef First traittype;
|
|
Shinya Kitaoka |
120a6e |
typedef Second realtype;
|
|
Shinya Kitaoka |
120a6e |
typedef typename std::is_compound<typename first::valuetype="">::value_type</typename>
|
|
Shinya Kitaoka |
120a6e |
complextype;
|
|
Shinya Kitaoka |
120a6e |
typedef typename First::valuetype valuetype;
|
|
Shinya Kitaoka |
120a6e |
static const int RANGED = First::RANGED;
|
|
Shinya Kitaoka |
120a6e |
static const size_t valuesize = sizeof(typename First::valuetype);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_double_t, tdoubleparam=""> tpbind_dbl_t;</toonz_param_traits_double_t,>
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_range_t, trangeparam=""> tpbind_rng_t;</toonz_param_traits_range_t,>
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_color_t, tpixelparam=""> tpbind_col_t;</toonz_param_traits_color_t,>
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_point_t, tpointparam=""> tpbind_pnt_t;</toonz_param_traits_point_t,>
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_enum_t, tintenumparam=""> tpbind_enm_t;</toonz_param_traits_enum_t,>
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_int_t, tintparam=""> tpbind_int_t;</toonz_param_traits_int_t,>
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_bool_t, tboolparam=""> tpbind_bool_t;</toonz_param_traits_bool_t,>
|
|
Shinya Kitaoka |
120a6e |
typedef param_bind_t<toonz_param_traits_spectrum_t, tspectrumparam=""></toonz_param_traits_spectrum_t,>
|
|
Shinya Kitaoka |
120a6e |
tpbind_spc_t;
|
|
Toshihiro Shimizu |
890ddd |
typedef param_bind_t<toonz_param_traits_string_t, tstringparam=""> tpbind_str_t;</toonz_param_traits_string_t,>
|
|
Shinya Kitaoka |
120a6e |
typedef param_bind_t<toonz_param_traits_tonecurve_t, ttonecurveparam=""></toonz_param_traits_tonecurve_t,>
|
|
Shinya Kitaoka |
120a6e |
tpbind_tcv_t;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline bool is_type_of(const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
if (desc->traits_tag == T::E) return true;
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* Complex なパラメータは直接 setRangeValue()
|
|
Shinya Kitaoka |
120a6e |
* などを持たず、集約しているサブタイプを返すものがあるので、そのサブタイプを得る関数を取得する
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Toshihiro Shimizu |
890ddd |
template <typename f="TDoubleParamP" rt,="" typename=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline F &get_func_a(RT *t) {
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
template <typename f="TDoubleParamP" rt,="" typename=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline F &get_func_b(RT *t) {
|
|
Shinya Kitaoka |
120a6e |
assert(false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* TRangeParam */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline TDoubleParamP &get_func_a<trangeparam, tdoubleparamp="">(TRangeParam *t) {</trangeparam,>
|
|
Shinya Kitaoka |
120a6e |
printf("get_func_a< TRangeParam, TDoubleParamP& >(TRangeParam* t)\n");
|
|
Rozhuk Ivan |
823a31 |
return std::mem_fn(&TRangeParam::getMin)(t);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
inline TDoubleParamP &get_func_b<trangeparam, tdoubleparamp="">(TRangeParam *t)</trangeparam,>
|
|
Shinya Kitaoka |
120a6e |
// template<> std::mem_fun_ref_t< TDoubleParamP&, TRangeParam > get_func_b<
|
|
Shinya Kitaoka |
120a6e |
// TRangeParam, std::mem_fun_ref_t< TDoubleParamP&, TRangeParam > >(TRangeParam*
|
|
Shinya Kitaoka |
120a6e |
// t)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
printf("get_func_b< TRangeParam, TDoubleParamP& >(TRangeParam* t)\n");
|
|
Rozhuk Ivan |
823a31 |
return std::mem_fn(&TRangeParam::getMax)(t);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* TPointParam */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
inline TDoubleParamP &get_func_a<tpointparam, tdoubleparamp="">(TPointParam *t)</tpointparam,>
|
|
Shinya Kitaoka |
120a6e |
// template<> std::mem_fun_ref_t< TDoubleParamP&, TPointParam > get_func_a<
|
|
Shinya Kitaoka |
120a6e |
// TPointParam, std::mem_fun_ref_t< TDoubleParamP&, TPointParam > >(TPointParam*
|
|
Shinya Kitaoka |
120a6e |
// t)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
printf("get_func_a< TPointParam, TDoubleParamP& >(TPointParam* t)\n");
|
|
Rozhuk Ivan |
823a31 |
return std::mem_fn(&TPointParam::getX)(t);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
inline TDoubleParamP &get_func_b<tpointparam, tdoubleparamp="">(TPointParam *t)</tpointparam,>
|
|
Shinya Kitaoka |
120a6e |
// template<> std::mem_fun_ref_t< TDoubleParamP&, TPointParam > get_func_b<
|
|
Shinya Kitaoka |
120a6e |
// TPointParam, std::mem_fun_ref_t< TDoubleParamP&, TPointParam > >(TPointParam*
|
|
Shinya Kitaoka |
120a6e |
// t)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
printf("get_func_b< TPointParam, TDoubleParamP& >(TPointParam* t)\n");
|
|
Rozhuk Ivan |
823a31 |
return std::mem_fn(&TPointParam::getY)(t);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* valuetype が集約型の場合、 スカラを取得するための関数 */
|
|
Toshihiro Shimizu |
890ddd |
template <typename t,="" typename="" v=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
inline V get_1st_value(const T &) {}
|
|
Toshihiro Shimizu |
890ddd |
template <typename t,="" typename="" v=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
inline V get_2nd_value(const T &) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline double get_1st_value(const toonz_param_traits_range_t::valuetype &r) {
|
|
Shinya Kitaoka |
120a6e |
return r.a;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline double get_2nd_value(const toonz_param_traits_range_t::valuetype &r) {
|
|
Shinya Kitaoka |
120a6e |
return r.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline double get_1st_value(const toonz_param_traits_point_t::valuetype &p) {
|
|
Shinya Kitaoka |
120a6e |
return p.x;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline double get_2nd_value(const toonz_param_traits_point_t::valuetype &p) {
|
|
Shinya Kitaoka |
120a6e |
return p.y;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
template
|
|
Shinya Kitaoka |
120a6e |
typename Comp =
|
|
Shinya Kitaoka |
120a6e |
typename std::is_compound<typename bind::valuetype="">::type,</typename>
|
|
Shinya Kitaoka |
120a6e |
int Ranged = Bind::RANGED>
|
|
Shinya Kitaoka |
120a6e |
// template < int Ranged, typename Comp, typename Bind >
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_range_t {
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_range(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
/* 範囲を持たない(Ranged == std::false_type)なら何もすることはない */
|
|
Shinya Kitaoka |
120a6e |
printf("(none)set_param_range: p:%p type:%s (Comp:%s Ranged:%d)\n", param,
|
|
Shinya Kitaoka |
120a6e |
typeid(Bind).name(), typeid(Comp).name(), Ranged);
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// static_assert(std::is_compound< const char* >(), "false");
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* ranged complextype */
|
|
Toshihiro Shimizu |
890ddd |
template <typename bind=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_range_t<bind, 1="" std::true_type,=""> {</bind,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_range(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
typename Bind::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<typename *="" bind::realtype="">(smartptr.getPointer());</typename>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const typename Bind::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" bind::traittype="" typename="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
auto subtype_a = get_func_a<typename bind::realtype="">(p);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto subtype_b = get_func_b<typename bind::realtype="">(p);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto a_minval = get_1st_value<typename bind::valuetype,="" double="">(t.min);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto a_maxval = get_2nd_value<typename bind::valuetype,="" double="">(t.min);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto b_minval = get_1st_value<typename bind::valuetype,="" double="">(t.max);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto b_maxval = get_2nd_value<typename bind::valuetype,="" double="">(t.max);</typename>
|
|
Shinya Kitaoka |
120a6e |
printf("a->set_param_range: (%g, %g)\n", a_minval, a_maxval);
|
|
Shinya Kitaoka |
120a6e |
printf("b->set_param_range: (%g, %g)\n", b_minval, b_maxval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_a)->setValueRange(a_minval, a_maxval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_b)->setValueRange(b_minval, b_maxval);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* range
|
|
Shinya Kitaoka |
120a6e |
のとき、スライダの左と右それぞれに限界が設定できるように見えるが、そうではない.
|
|
Toshihiro Shimizu |
890ddd |
getMin(), getMax() の結果それぞれに range を設定できるように見えて
|
|
Shinya Kitaoka |
120a6e |
実際は getMin() には (min, max) のうち min, getMax() には (min, max) のうち
|
|
Shinya Kitaoka |
120a6e |
max しか有効でないように見える.
|
|
Toshihiro Shimizu |
890ddd |
このため range に対しても特殊版を用意するハメになった. */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_range_t<tpbind_rng_t, 1="" std::true_type,=""> {</tpbind_rng_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_range(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_rng_t::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<tpbind_rng_t::realtype *="">(smartptr.getPointer());</tpbind_rng_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_rng_t::traittype &t = desc->traits.rd;
|
|
Shinya Kitaoka |
120a6e |
auto subtype_a = get_func_a<tpbind_rng_t::realtype>(p);</tpbind_rng_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
auto subtype_b = get_func_b<tpbind_rng_t::realtype>(p);</tpbind_rng_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
auto a_minval = get_1st_value<tpbind_rng_t::valuetype, double="">(t.minmax);</tpbind_rng_t::valuetype,>
|
|
Shinya Kitaoka |
120a6e |
auto a_maxval = get_2nd_value<tpbind_rng_t::valuetype, double="">(t.minmax);</tpbind_rng_t::valuetype,>
|
|
Shinya Kitaoka |
120a6e |
(subtype_a)->setValueRange(a_minval, a_maxval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_b)->setValueRange(a_minval, a_maxval);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_range_t< tpbind_pnt_t, std::true_type, 1 > {
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_range(Param* param, const toonz_param_desc_t*
|
|
Shinya Kitaoka |
120a6e |
desc)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_pnt_t::realtype* p = reinterpret_cast<
|
|
Shinya Kitaoka |
120a6e |
tpbind_pnt_t::realtype* >(smartptr.getPointer());
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_pnt_t::traittype& t = *reinterpret_cast<
|
|
Shinya Kitaoka |
120a6e |
const tpbind_pnt_t::traittype* >(&desc->traits.d);
|
|
Shinya Kitaoka |
120a6e |
auto subtype_a = get_func_a< tpbind_pnt_t::realtype
|
|
Shinya Kitaoka |
120a6e |
>(p);
|
|
Shinya Kitaoka |
120a6e |
auto subtype_b = get_func_b< tpbind_pnt_t::realtype
|
|
Shinya Kitaoka |
120a6e |
>(p);
|
|
Shinya Kitaoka |
120a6e |
auto a_minval = get_1st_value< tpbind_pnt_t::valuetype,
|
|
Shinya Kitaoka |
120a6e |
double >(t.min);
|
|
Shinya Kitaoka |
120a6e |
auto a_maxval = get_2nd_value< tpbind_pnt_t::valuetype,
|
|
Shinya Kitaoka |
120a6e |
double >(t.min);
|
|
Shinya Kitaoka |
120a6e |
auto b_minval = get_1st_value< tpbind_pnt_t::valuetype,
|
|
Shinya Kitaoka |
120a6e |
double >(t.max);
|
|
Shinya Kitaoka |
120a6e |
auto b_maxval = get_2nd_value< tpbind_pnt_t::valuetype,
|
|
Shinya Kitaoka |
120a6e |
double >(t.max);
|
|
Shinya Kitaoka |
120a6e |
printf("a->set_param_range: pnt(%g, %g)\n", a_minval,
|
|
Shinya Kitaoka |
120a6e |
a_maxval);
|
|
Shinya Kitaoka |
120a6e |
printf("b->set_param_range: pnt(%g, %g)\n", b_minval,
|
|
Shinya Kitaoka |
120a6e |
b_maxval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_a)->setValueRange(a_minval, a_maxval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_b)->setValueRange(b_minval, b_maxval);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* ranged primitive: */
|
|
Toshihiro Shimizu |
890ddd |
template <typename bind=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_range_t<bind, 1="" std::false_type,=""> {</bind,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_range(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
if (!is_type_of<typename bind::traittype="">(desc)) return false;</typename>
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
typename Bind::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<typename *="" bind::realtype="">(smartptr.getPointer());</typename>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const typename Bind::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" bind::traittype="" typename="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
printf("p(%p)->set_param_range: typeid:%s desc:%p (%p)\n", p,
|
|
Shinya Kitaoka |
120a6e |
typeid(typename Bind::traittype).name(), desc, &desc->traits.d);
|
|
Shinya Kitaoka |
120a6e |
p->setValueRange(t.min, t.max);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename bind=""></typename>
|
|
Shinya Kitaoka |
120a6e |
bool set_param_range(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
if (!is_type_of<typename bind::traittype="">(desc)) return false;</typename>
|
|
Shinya Kitaoka |
120a6e |
return set_param_range_t<bind>::set_param_range(param, desc);</bind>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
template
|
|
Shinya Kitaoka |
120a6e |
typename Comp =
|
|
Shinya Kitaoka |
120a6e |
typename std::is_compound<typename bind::valuetype="">::type></typename>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t {
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* Default complextype */
|
|
Toshihiro Shimizu |
890ddd |
/* Point/Range */
|
|
Toshihiro Shimizu |
890ddd |
template <typename bind=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<bind, std::true_type=""> {</bind,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
typename Bind::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<typename *="" bind::realtype="">(smartptr.getPointer());</typename>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const typename Bind::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" bind::traittype="" typename="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
auto subtype_a = get_func_a<typename bind::realtype="">(p);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto subtype_b = get_func_b<typename bind::realtype="">(p);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto a_defval = get_1st_value<typename bind::valuetype,="" double="">(t.def);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto b_defval = get_2nd_value<typename bind::valuetype,="" double="">(t.def);</typename>
|
|
Shinya Kitaoka |
120a6e |
printf("a->set_param_default: double (%g, %g)\n", a_defval, b_defval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_a)->setDefaultValue(a_defval);
|
|
Shinya Kitaoka |
120a6e |
(subtype_b)->setDefaultValue(b_defval);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* Default Color */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<tpbind_col_t, std::true_type=""> {</tpbind_col_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_col_t::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<tpbind_col_t::realtype *="">(smartptr.getPointer());</tpbind_col_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_col_t::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" tpbind_col_t::traittype="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
p->setDefaultValue(TPixel32(t.def.c0, t.def.c1, t.def.c2, t.def.m));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* Default String */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<tpbind_str_t, std::true_type=""> {</tpbind_str_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_str_t::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<tpbind_str_t::realtype *="">(smartptr.getPointer());</tpbind_str_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_str_t::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" tpbind_str_t::traittype="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
printf("a->set_param_default: str\n");
|
|
Shinya Kitaoka |
120a6e |
std::wstring wstr = QString::fromStdString(t.def).toStdWString();
|
|
Shinya Kitaoka |
120a6e |
p->setDefaultValue(wstr);
|
|
Shinya Kitaoka |
120a6e |
p->setValue(wstr, false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* Default Spectrum */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<tpbind_spc_t, std::true_type=""> {</tpbind_spc_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
luz paz |
6454c4 |
/* unfortunately, TSpectrumParam's default values must be set within the
|
|
Shinya Kitaoka |
120a6e |
constructor, for now.
|
|
Shinya Kitaoka |
120a6e |
see param_factory_< TSpectrumParam >() */
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* Default ToneCurve */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<tpbind_tcv_t, std::true_type=""> {</tpbind_tcv_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_tcv_t::realtype* p = reinterpret_cast< tpbind_tcv_t::realtype*
|
|
Shinya Kitaoka |
120a6e |
>(smartptr.getPointer());
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_tcv_t::traittype& t = *reinterpret_cast< const
|
|
Shinya Kitaoka |
120a6e |
tpbind_tcv_t::traittype* >(&desc->traits.d);
|
|
Shinya Kitaoka |
120a6e |
printf("a->set_param_default: spec\n");
|
|
Shinya Kitaoka |
120a6e |
QList< TPointD > pt;
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < t.cps; i ++) {
|
|
Shinya Kitaoka |
120a6e |
pt.push_back(TPointD(t.array[i].x, t.array[i].y));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
p->setDefaultValue(pt);
|
|
Shinya Kitaoka |
120a6e |
p->setIsLinear(!(t.intep));
|
|
Shinya Kitaoka |
120a6e |
}*/
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* primitive: TDoubleParam */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<tpbind_dbl_t, std::false_type=""> {</tpbind_dbl_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_dbl_t::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<tpbind_dbl_t::realtype *="">(smartptr.getPointer());</tpbind_dbl_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_dbl_t::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" tpbind_dbl_t::traittype="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
printf("p(%p)->set_param_default: typeid:%s desc:%p (%p)\n", p,
|
|
Shinya Kitaoka |
120a6e |
typeid(tpbind_dbl_t::traittype).name(), desc, &desc->traits.d);
|
|
Shinya Kitaoka |
120a6e |
p->setDefaultValue(t.def);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* primitive: TNotAnimatableParam */
|
|
Toshihiro Shimizu |
890ddd |
template <typename bind=""></typename>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<bind, std::false_type=""> {</bind,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
typename Bind::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<typename *="" bind::realtype="">(smartptr.getPointer());</typename>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const typename Bind::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" bind::traittype="" typename="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
printf("p(%p)->set_param_default: typeid:%s desc:%p (%p)\n", p,
|
|
Shinya Kitaoka |
120a6e |
typeid(typename Bind::traittype).name(), desc, &desc->traits.d);
|
|
Shinya Kitaoka |
120a6e |
p->setDefaultValue(t.def);
|
|
Shinya Kitaoka |
120a6e |
p->setValue(t.def, false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* Default Enum */
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Toshihiro Shimizu |
890ddd |
struct set_param_default_t<tpbind_enm_t, std::false_type=""> {</tpbind_enm_t,>
|
|
Shinya Kitaoka |
120a6e |
static bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
auto smartptr = param->param();
|
|
Shinya Kitaoka |
120a6e |
tpbind_enm_t::realtype *p =
|
|
Shinya Kitaoka |
120a6e |
reinterpret_cast<tpbind_enm_t::realtype *="">(smartptr.getPointer());</tpbind_enm_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
if (p) {
|
|
Shinya Kitaoka |
120a6e |
const tpbind_enm_t::traittype &t =
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<const *="" tpbind_enm_t::traittype="">(&desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < t.enums; i++) {
|
|
Shinya Kitaoka |
120a6e |
p->addItem(i, t.array[i]);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
p->setValue(t.def, false);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename bind=""></typename>
|
|
Shinya Kitaoka |
120a6e |
bool set_param_default(Param *param, const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
if (!is_type_of<typename bind::traittype="">(desc)) return false;</typename>
|
|
Shinya Kitaoka |
120a6e |
return set_param_default_t<bind>::set_param_default(param, desc);</bind>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline T *param_factory_(const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
return new T;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline TPointParam *param_factory_(const toonz_param_desc_t *desc) {
|
|
luz paz |
6454c4 |
return new TPointParam(TPointD(), true /* instantiate from plugin */);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline TSpectrumParam *param_factory_(const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_traits_spectrum_t &t = desc->traits.g;
|
|
Shinya Kitaoka |
120a6e |
if (t.points) {
|
|
Shinya Kitaoka |
120a6e |
std::vector<tspectrum::colorkey> keys(t.points);</tspectrum::colorkey>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < t.points; i++) {
|
|
Shinya Kitaoka |
120a6e |
keys[i].first = t.array[i].w;
|
|
Shinya Kitaoka |
120a6e |
keys[i].second = toPixel32(
|
|
Shinya Kitaoka |
120a6e |
TPixelD(t.array[i].c0, t.array[i].c1, t.array[i].c2, t.array[i].m));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Tact Yoshida |
1d7cf9 |
return new TSpectrumParam(keys);
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
return new TSpectrumParam(); /* use default constructor: デフォルトでは
|
|
Shinya Kitaoka |
120a6e |
[black:white] の単純なものが設定される */
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
inline TParam *parameter_factory(const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
switch (desc->traits_tag) {
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_DOUBLE:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tdoubleparam>(desc);</tdoubleparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_RANGE:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<trangeparam>(desc);</trangeparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_PIXEL:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tpixelparam>(desc);</tpixelparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_POINT:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tpointparam>(desc);</tpointparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_ENUM:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tintenumparam>(desc);</tintenumparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_INT:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tintparam>(desc);</tintparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_BOOL:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tboolparam>(desc);</tboolparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_SPECTRUM:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tspectrumparam>(desc);</tspectrumparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_STRING:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<tstringparam>(desc);</tstringparam>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_TONECURVE:
|
|
Shinya Kitaoka |
120a6e |
return param_factory_<ttonecurveparam>(desc);</ttonecurveparam>
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return NULL;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline int check_pollution_(const T &t) {
|
|
Shinya Kitaoka |
120a6e |
if (t.reserved_) return TOONZ_PARAM_ERROR_POLLUTED;
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline int check_traits_sanity_(const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
const T &t = reinterpret_cast<const &="" t="">(desc->traits.d);</const>
|
|
Shinya Kitaoka |
120a6e |
return check_pollution_<t>(t);</t>
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline int check_traits_sanity_<toonz_param_traits_double_t>(</toonz_param_traits_double_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
int err = 0;
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_traits_double_t &t = desc->traits.d;
|
|
Shinya Kitaoka |
120a6e |
err |= check_pollution_(t);
|
|
Shinya Kitaoka |
120a6e |
if (t.min > t.max) err |= TOONZ_PARAM_ERROR_MIN_MAX;
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline int check_traits_sanity_<toonz_param_traits_range_t>(</toonz_param_traits_range_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
int err = 0;
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_traits_range_t &t = desc->traits.rd;
|
|
Shinya Kitaoka |
120a6e |
err |= check_pollution_(t);
|
|
Shinya Kitaoka |
120a6e |
if (t.minmax.a == 0 && t.minmax.b == 0)
|
|
Shinya Kitaoka |
120a6e |
return err; /* range に興味がない場合の 0,0 を許す */
|
|
Shinya Kitaoka |
120a6e |
if (t.minmax.a > t.minmax.b) err |= TOONZ_PARAM_ERROR_MIN_MAX;
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline int check_traits_sanity_<toonz_param_traits_enum_t>(</toonz_param_traits_enum_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
int err = 0;
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_traits_enum_t &t = desc->traits.e;
|
|
Shinya Kitaoka |
120a6e |
err |= check_pollution_(t);
|
|
Shinya Kitaoka |
120a6e |
if (t.enums == 0) return err;
|
|
Shinya Kitaoka |
120a6e |
if (t.enums < 0) err |= TOONZ_PARAM_ERROR_ARRAY_NUM;
|
|
Shinya Kitaoka |
120a6e |
if (t.array == NULL) err |= TOONZ_PARAM_ERROR_ARRAY;
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline int check_traits_sanity_<toonz_param_traits_spectrum_t>(</toonz_param_traits_spectrum_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
int err = 0;
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_traits_spectrum_t &t = desc->traits.g;
|
|
Shinya Kitaoka |
120a6e |
err |= check_pollution_(t);
|
|
Shinya Kitaoka |
120a6e |
if (t.points == 0) return err;
|
|
Shinya Kitaoka |
120a6e |
if (t.points < 0) err |= TOONZ_PARAM_ERROR_ARRAY_NUM;
|
|
Shinya Kitaoka |
120a6e |
if (t.array == NULL) err |= TOONZ_PARAM_ERROR_ARRAY;
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Shinya Kitaoka |
120a6e |
template <> int check_traits_sanity_< toonz_param_traits_tonecurve_t >(const
|
|
Shinya Kitaoka |
120a6e |
toonz_param_desc_t* desc)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
int err = 0;
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_traits_tonecurve_t& t = desc->traits.tcv;
|
|
Shinya Kitaoka |
120a6e |
err |= check_pollution_(t);
|
|
Shinya Kitaoka |
120a6e |
if (t.points == 0)
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Shinya Kitaoka |
120a6e |
if (t.points < 0)
|
|
Shinya Kitaoka |
120a6e |
err |= TOONZ_PARAM_ERROR_ARRAY_NUM;
|
|
Shinya Kitaoka |
120a6e |
if (t.array == NULL)
|
|
Shinya Kitaoka |
120a6e |
err |= TOONZ_PARAM_ERROR_ARRAY;
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
inline int check_traits_sanity(const toonz_param_desc_t *desc) {
|
|
Shinya Kitaoka |
120a6e |
int err = 0;
|
|
Shinya Kitaoka |
120a6e |
switch (desc->traits_tag) {
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_DOUBLE:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_double_t>(desc);</toonz_param_traits_double_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_RANGE:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_range_t>(desc);</toonz_param_traits_range_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_PIXEL:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_color_t>(desc);</toonz_param_traits_color_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_POINT:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_point_t>(desc);</toonz_param_traits_point_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_ENUM:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_enum_t>(desc);</toonz_param_traits_enum_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_INT:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_int_t>(desc);</toonz_param_traits_int_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_BOOL:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_bool_t>(desc);</toonz_param_traits_bool_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_SPECTRUM:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_spectrum_t>(desc);</toonz_param_traits_spectrum_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_STRING:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_string_t>(desc);</toonz_param_traits_string_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_TONECURVE:
|
|
Shinya Kitaoka |
120a6e |
err = check_traits_sanity_<toonz_param_traits_tonecurve_t>(desc);</toonz_param_traits_tonecurve_t>
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
err = TOONZ_PARAM_ERROR_TRAITS;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return err;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_type_check_(TParam *p, const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
size_t &vsz) {
|
|
Shinya Kitaoka |
120a6e |
if (typename T::realtype *d = dynamic_cast<typename *="" t::realtype="">(p)) {</typename>
|
|
Shinya Kitaoka |
120a6e |
if (is_type_of<typename t::traittype="">(desc)) {</typename>
|
|
Shinya Kitaoka |
120a6e |
vsz = sizeof(typename T::traittype::iovaluetype);
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
inline bool parameter_type_check(TParam *p, const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
size_t &vsz) {
|
|
Shinya Kitaoka |
120a6e |
switch (desc->traits_tag) {
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_DOUBLE:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_dbl_t>(p, desc, vsz);</tpbind_dbl_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_RANGE:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_rng_t>(p, desc, vsz);</tpbind_rng_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_PIXEL:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_col_t>(p, desc, vsz);</tpbind_col_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_POINT:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_pnt_t>(p, desc, vsz);</tpbind_pnt_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_ENUM:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_enm_t>(p, desc, vsz);</tpbind_enm_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_INT:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_int_t>(p, desc, vsz);</tpbind_int_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_BOOL:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_bool_t>(p, desc, vsz);</tpbind_bool_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_SPECTRUM:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_spc_t>(p, desc, vsz);</tpbind_spc_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_STRING:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_str_t>(p, desc, vsz);</tpbind_str_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_TONECURVE:
|
|
Shinya Kitaoka |
120a6e |
return param_type_check_<tpbind_tcv_t>(p, desc, vsz);</tpbind_tcv_t>
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <typename t=""></typename>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_(TParam *p, const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame, size_t isize,
|
|
Shinya Kitaoka |
120a6e |
size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
/* isize は iovaluetype の size でなく count になったのでサイズチェックは無効
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
// if (isize == sizeof(typename T::traittype::iovaluetype)) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<typename *="" t::realtype="">(p);</typename>
|
|
Shinya Kitaoka |
120a6e |
auto v = r->getValue();
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<typename *="" t::traittype::iovaluetype="">(ptr) = v;</typename>
|
|
Shinya Kitaoka |
120a6e |
osize = 1;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
//}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_dbl_t>(TParam *p,</tpbind_dbl_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
// if (isize == sizeof(tpbind_dbl_t::traittype::iovaluetype)) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_dbl_t::realtype *="">(p);</tpbind_dbl_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
auto v = r->getValue(frame);
|
|
Shinya Kitaoka |
120a6e |
*reinterpret_cast<tpbind_dbl_t::traittype::iovaluetype *="">(ptr) = v;</tpbind_dbl_t::traittype::iovaluetype>
|
|
Shinya Kitaoka |
120a6e |
osize = 1;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
//}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_str_t>(TParam *p,</tpbind_str_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_str_t::realtype *="">(p);</tpbind_str_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
const std::string str = QString::fromStdWString(r->getValue()).toStdString();
|
|
Shinya Kitaoka |
120a6e |
std::size_t len = str.length() + 1;
|
|
Shinya Kitaoka |
120a6e |
/* get_type() の返す大きさも文字列長+1 を含んでいる */
|
|
Shinya Kitaoka |
120a6e |
if (isize < len)
|
|
Shinya Kitaoka |
38fd86 |
len = isize; /* 要求サイズが実際の長さより短くても良いが切り詰める(ただし 1
|
|
Shinya Kitaoka |
38fd86 |
以上であること) */
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (len > 0) {
|
|
Shinya Kitaoka |
120a6e |
auto dst = reinterpret_cast<char *="">(ptr);</char>
|
|
Shinya Kitaoka |
120a6e |
strncpy(dst, str.c_str(), len - 1);
|
|
Shinya Kitaoka |
120a6e |
dst[len - 1] = '\0';
|
|
Shinya Kitaoka |
120a6e |
osize = len;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_rng_t>(TParam *p,</tpbind_rng_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
// if (isize == sizeof(tpbind_rng_t::traittype::iovaluetype)) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_rng_t::realtype *="">(p);</tpbind_rng_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
auto v = r->getValue(frame);
|
|
Shinya Kitaoka |
120a6e |
auto dst = reinterpret_cast<tpbind_rng_t::traittype::iovaluetype *="">(ptr);</tpbind_rng_t::traittype::iovaluetype>
|
|
Shinya Kitaoka |
120a6e |
dst->a = v.first;
|
|
Shinya Kitaoka |
120a6e |
dst->b = v.second;
|
|
Shinya Kitaoka |
120a6e |
osize = 1;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
//}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_col_t>(TParam *p,</tpbind_col_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
// if (isize == sizeof(tpbind_col_t::traittype::iovaluetype)) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_col_t::realtype *="">(p);</tpbind_col_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
/* getValueD() だと 16bit * 4 が返る */
|
|
Shinya Kitaoka |
120a6e |
// auto v = r->getValueD(frame);
|
|
Shinya Kitaoka |
120a6e |
auto v = r->getValue(frame);
|
|
Shinya Kitaoka |
120a6e |
auto dst = reinterpret_cast<tpbind_col_t::traittype::iovaluetype *="">(ptr);</tpbind_col_t::traittype::iovaluetype>
|
|
Shinya Kitaoka |
120a6e |
dst->c0 = v.r;
|
|
Shinya Kitaoka |
120a6e |
dst->c1 = v.g;
|
|
Shinya Kitaoka |
120a6e |
dst->c2 = v.b;
|
|
Shinya Kitaoka |
120a6e |
dst->m = v.m;
|
|
Shinya Kitaoka |
120a6e |
osize = 1;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
//}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_pnt_t>(TParam *p,</tpbind_pnt_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
// if (isize == sizeof(tpbind_pnt_t::traittype::iovaluetype)) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_pnt_t::realtype *="">(p);</tpbind_pnt_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
auto v = r->getValue(frame);
|
|
Shinya Kitaoka |
120a6e |
auto dst = reinterpret_cast<tpbind_pnt_t::traittype::iovaluetype *="">(ptr);</tpbind_pnt_t::traittype::iovaluetype>
|
|
Shinya Kitaoka |
120a6e |
dst->x = v.x;
|
|
Shinya Kitaoka |
120a6e |
dst->y = v.y;
|
|
Shinya Kitaoka |
120a6e |
osize = 1;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
//}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_spc_t>(TParam *p,</tpbind_spc_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
// if (isize == sizeof(tpbind_spc_t::traittype::iovaluetype)) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_spc_t::realtype *="">(p);</tpbind_spc_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
auto dst = reinterpret_cast<tpbind_spc_t::traittype::iovaluetype *="">(ptr);</tpbind_spc_t::traittype::iovaluetype>
|
|
Shinya Kitaoka |
120a6e |
/* getValue64() だと 1channle 16bit が返るがデフォルト型に合わせる */
|
|
Shinya Kitaoka |
120a6e |
auto v = r->getValue(frame).getValue(dst->w);
|
|
Shinya Kitaoka |
120a6e |
dst->c0 = v.r;
|
|
Shinya Kitaoka |
120a6e |
dst->c1 = v.g;
|
|
Shinya Kitaoka |
120a6e |
dst->c2 = v.b;
|
|
Shinya Kitaoka |
120a6e |
dst->m = v.m;
|
|
Shinya Kitaoka |
120a6e |
osize = 1;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
//}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <>
|
|
Shinya Kitaoka |
120a6e |
inline bool param_read_value_<tpbind_tcv_t>(TParam *p,</tpbind_tcv_t>
|
|
Shinya Kitaoka |
120a6e |
const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame,
|
|
Shinya Kitaoka |
120a6e |
size_t isize, size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
auto r = reinterpret_cast<tpbind_tcv_t::realtype *="">(p);</tpbind_tcv_t::realtype>
|
|
Shinya Kitaoka |
120a6e |
QList<tpointd> points = r->getValue(frame);</tpointd>
|
|
Shinya Kitaoka |
120a6e |
size_t ps = points.size();
|
|
Shinya Kitaoka |
120a6e |
/* コントロールポイントのリストしか戻って来ない! */
|
|
Shinya Kitaoka |
120a6e |
if (isize >= ps) {
|
|
Shinya Kitaoka |
120a6e |
int channel = r->getCurrentChannel();
|
|
Shinya Kitaoka |
120a6e |
int interp = !r->isLinear();
|
|
Shinya Kitaoka |
120a6e |
int c = isize < points.size() ? isize : points.size();
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < c; i++) {
|
|
Shinya Kitaoka |
120a6e |
auto dst = reinterpret_cast<tpbind_tcv_t::traittype::iovaluetype *="">(ptr);</tpbind_tcv_t::traittype::iovaluetype>
|
|
Shinya Kitaoka |
120a6e |
dst[i].x = points[i].x;
|
|
Shinya Kitaoka |
120a6e |
dst[i].y = points[i].y;
|
|
Shinya Kitaoka |
120a6e |
dst[i].channel = channel;
|
|
Shinya Kitaoka |
120a6e |
dst[i].interp = interp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
osize = c;
|
|
Shinya Kitaoka |
120a6e |
return true;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
inline bool parameter_read_value(TParam *p, const toonz_param_desc_t *desc,
|
|
Shinya Kitaoka |
120a6e |
void *ptr, double frame, size_t isize,
|
|
Shinya Kitaoka |
120a6e |
size_t &osize) {
|
|
Shinya Kitaoka |
120a6e |
size_t sz = 0;
|
|
Shinya Kitaoka |
120a6e |
if (!parameter_type_check(p, desc, sz)) { // typecheck
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch (desc->traits_tag) {
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_DOUBLE:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_dbl_t>(p, desc, ptr, frame, isize, osize);</tpbind_dbl_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_RANGE:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_rng_t>(p, desc, ptr, frame, isize, osize);</tpbind_rng_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_PIXEL:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_col_t>(p, desc, ptr, frame, isize, osize);</tpbind_col_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_POINT:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_pnt_t>(p, desc, ptr, frame, isize, osize);</tpbind_pnt_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_ENUM:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_enm_t>(p, desc, ptr, frame, isize, osize);</tpbind_enm_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_INT:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_int_t>(p, desc, ptr, frame, isize, osize);</tpbind_int_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_BOOL:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_bool_t>(p, desc, ptr, frame, isize, osize);</tpbind_bool_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_SPECTRUM:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_spc_t>(p, desc, ptr, frame, isize, osize);</tpbind_spc_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_STRING:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_str_t>(p, desc, ptr, frame, isize, osize);</tpbind_str_t>
|
|
Shinya Kitaoka |
120a6e |
case TOONZ_PARAM_TYPE_TONECURVE:
|
|
Shinya Kitaoka |
120a6e |
return param_read_value_<tpbind_tcv_t>(p, desc, ptr, frame, isize, osize);</tpbind_tcv_t>
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|