63 if (rootchan ==
nullptr) {
77 if (is_itasc ||
cache_->isAnyPropertyAnimated(&con_ptr)) {
78 add_relation(pchan_local_key, init_ik_key,
"IK Constraint -> Init IK Tree");
80 add_relation(init_ik_key, solver_key,
"Init IK -> IK Solver");
86 OperationKey target_dependent_key = is_itasc ? init_ik_key : solver_key;
89 if (
data->tar !=
nullptr) {
91 if (
data->tar !=
object) {
98 "IK Target Copy-on-Eval -> Init IK Tree",
116 if (
data->tar ==
object &&
data->subtarget[0]) {
124 if (
data->poletar !=
nullptr) {
126 if (
data->poletar !=
object) {
133 "IK Target Copy-on-Eval -> Init IK Tree",
154 "\nStarting IK Build: pchan = %s, target = (%s, %s), "
157 data->tar ?
data->tar->id.name :
"nullptr",
168 add_relation(parchan_transforms_key, solver_key,
"IK Solver Owner");
171 while (parchan !=
nullptr) {
176 if (parchan != pchan) {
179 add_relation(parent_key, solver_key,
"IK Chain Parent");
182 add_relation(solver_key, bone_done_key,
"IK Chain Result");
187 add_relation(solver_key, final_transforms_key,
"IK Solver Result");
196 if ((segcount ==
data->rootbone) || (segcount > 255)) {
199 parchan = parchan->
parent;
202 add_relation(solver_key, pose_done_key,
"PoseEval Result-Bone Link");
222 add_relation(init_ik_key, solver_key,
"Init IK -> IK Solver");
224 add_relation(solver_key, pose_cleanup_key,
"IK Solver -> Cleanup");
228 if (
data->tar !=
nullptr) {
230 add_relation(target_geometry_key, solver_key,
"Curve.Path -> Spline IK");
232 add_relation(target_transform_key, solver_key,
"Curve.Transform -> Spline IK");
238 add_relation(solver_key, final_transforms_key,
"Spline IK Result");
242 for (
bPoseChannel *parchan = pchan->
parent; parchan !=
nullptr && segcount < data->chainlen;
243 parchan = parchan->
parent, segcount++)
250 add_relation(parent_key, solver_key,
"Spline IK Solver Update");
253 add_relation(solver_key, bone_done_key,
"Spline IK Solver Result");
258 add_relation(solver_key, pose_done_key,
"PoseEval Result-Bone Link");
300 add_relation(local_transform, pose_init_key,
"Local Transform -> Pose Init");
301 add_relation(pose_init_key, pose_init_ik_key,
"Pose Init -> Pose Init IK");
302 add_relation(pose_init_ik_key, pose_done_key,
"Pose Init IK -> Pose Cleanup");
306 add_relation(armature_key, pose_init_key,
"Data dependency");
308 add_relation(pose_init_ik_key, pose_cleanup_key,
"Init -> Cleanup");
311 OperationKey{&object->id, NodeType::INSTANCING, OperationCode::INSTANCE},
312 "Transform -> Instance");
330 bool pose_depends_on_local_transform =
false;
340 pose_depends_on_local_transform =
true;
344 pose_depends_on_local_transform =
true;
353 pose_depends_on_local_transform =
true;
361 if (pose_depends_on_local_transform) {
366 add_relation(local_transform_key, pose_key,
"Local Transforms");
385 add_relation(bone_local_key, bone_pose_key,
"Bone Local - Bone Pose");
387 if (pchan->parent !=
nullptr) {
399 add_relation(parent_key, bone_pose_key,
"Parent Bone -> Child Bone");
402 if (pchan->constraints.first !=
nullptr) {
404 BuilderWalkUserData
data;
412 add_relation(bone_pose_key, constraints_key,
"Pose -> Constraints Stack");
413 add_relation(bone_local_key, constraints_key,
"Local -> Constraints Stack");
417 add_relation(constraints_key, bone_ready_key,
"Constraints -> Ready");
421 add_relation(bone_pose_key, bone_ready_key,
"Pose -> Ready");
427 add_relation(bone_ready_key, bone_done_key,
"Ready -> Done");
433 add_relation(bone_done_key, bone_segments_key,
"Done -> B-Bone Segments");
446 add_relation(prev_key, bone_segments_key,
"Prev Handle -> B-Bone Segments");
450 add_relation(next_key, bone_segments_key,
"Next Handle -> B-Bone Segments");
455 add_relation(bone_segments_key, pose_cleanup_key,
"Cleanup dependency");
460 add_relation(bone_done_key, pose_done_key,
"PoseEval Result-Bone Link");
463 add_relation(bone_done_key, pose_cleanup_key,
"Done -> Cleanup");
465 add_relation(bone_ready_key, pose_cleanup_key,
"Ready -> Cleanup");
468 if (pchan->custom !=
nullptr) {