12 .
description(
N_(
"Output the handle positions relative to the corresponding control point "
13 "instead of in the local space of the geometry"));
38 evaluator.
add(relative_);
47 StringRef side = left_ ?
"handle_left" :
"handle_right";
54 for (
const int i :
positions.index_range()) {
57 return attributes.adapt_domain<
float3>(
64 for (
const int i :
positions.index_range()) {
85 return relative_ == other_handle->relative_ && left_ == other_handle->left_;
94 Field<float3> left_field{std::make_shared<HandlePositionFieldInput>(relative,
true)};
95 Field<float3> right_field{std::make_shared<HandlePositionFieldInput>(relative,
false)};
97 params.set_output(
"Left", std::move(left_field));
98 params.set_output(
"Right", std::move(right_field));
@ GEO_COMPONENT_TYPE_CURVE
void node_type_size_preset(struct bNodeType *ntype, eNodeSizePreset size)
#define GEO_NODE_INPUT_CURVE_HANDLES
void nodeRegisterType(struct bNodeType *ntype)
static uint8 component(Color32 c, uint i)
T get_internal_single() const
static VArray ForContainer(ContainerT container)
int add(GField field, GVArray *varray_ptr)
const GVArray & get_evaluated(const int field_index) const
StringRefNull description() const
ccl_global KernelShaderEvalInput ccl_global float * output
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
uint64_t get_default_hash_2(const T1 &v1, const T2 &v2)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
MutableSpan< float3 > positions
void geo_node_type_base(bNodeType *ntype, int type, const char *name, short nclass)
unsigned __int64 uint64_t
NodeGeometryExecFunction geometry_node_execute
NodeDeclareFunction declare