+ action = ValueNodeLinkConnect::create();
+ action->set_param("parent_value_node", value_desc.get_parent_value_node());
+ action->set_param("index", value_desc.get_index());
+ }
+ // BLINEPOINT ValueNode - link its vertex
+ else if (value_desc.is_value_node() &&
+ value_desc.get_value_type() == ValueBase::TYPE_BLINEPOINT &&
+ ValueNode_Composite::Handle::cast_dynamic(value_desc.get_value_node()))
+ {
+ calculated_value_node = ValueNode_BLineCalcVertex::create(ValueBase::TYPE_VECTOR);
+ action = ValueNodeLinkConnect::create();
+ action->set_param("parent_value_node", value_desc.get_value_node());
+ action->set_param("index", 0); // index for 'vertex' in 'composite'
+ }
+ // exported ValueNode
+ else if (value_desc.parent_is_canvas())
+ {
+ if (value_desc.get_value_type() == ValueBase::TYPE_VECTOR)
+ calculated_value_node = ValueNode_BLineCalcVertex::create(ValueBase::TYPE_VECTOR);
+ else if (value_desc.get_value_type() == ValueBase::TYPE_REAL)
+ calculated_value_node = ValueNode_BLineCalcWidth::create(ValueBase::TYPE_REAL);
+ else
+ continue;
+
+ calculated_value_node->set_link("bline", bline_value_node);
+ calculated_value_node->set_link("loop", ValueNode_Const::create(loop));
+ calculated_value_node->set_link("amount", ValueNode_Const::create(amount));
+
+ action = ValueNodeReplace::create();
+ action->set_param("canvas", get_canvas());
+ action->set_param("canvas_interface", get_canvas_interface());
+ action->set_param("src", ValueNode::Handle(calculated_value_node));
+ action->set_param("dest", value_desc.get_value_node());
+
+ assert(action->is_ready());
+ if (!action->is_ready()) throw Error(Error::TYPE_NOTREADY);
+ add_action_front(action);
+
+ continue;
+ }
+ else if (value_desc.parent_is_layer_param())
+ {
+ // VECTOR layer parameter
+ if (value_desc.get_value_type() == ValueBase::TYPE_VECTOR)
+ calculated_value_node = ValueNode_BLineCalcVertex::create(ValueBase::TYPE_VECTOR);
+ // REAL layer parameter
+ else if (value_desc.get_value_type() == ValueBase::TYPE_REAL)
+ calculated_value_node = ValueNode_BLineCalcWidth::create(ValueBase::TYPE_REAL);
+ // ANGLE layer parameter
+ else if (value_desc.get_value_type() == ValueBase::TYPE_ANGLE)
+ calculated_value_node = ValueNode_BLineCalcTangent::create(ValueBase::TYPE_ANGLE);
+ else
+ continue;
+
+ action = LayerParamConnect::create();
+ action->set_param("layer", value_desc.get_layer());
+ action->set_param("param", value_desc.get_param_name());
+ }
+ else
+ continue;