67 if (rootchan ==
nullptr) {
82 add_relation(pchan_local_key, init_ik_key,
"IK Constraint -> Init IK Tree");
84 add_relation(init_ik_key, solver_key,
"Init IK -> IK Solver");
90 OperationKey target_dependent_key = is_itasc ? init_ik_key : solver_key;
93 if (data->tar !=
nullptr) {
95 if (data->tar !=
object) {
102 "IK Target Copy-on-Eval -> Init IK Tree",
106 if ((data->tar->type ==
OB_ARMATURE) && (data->subtarget[0])) {
120 if (data->tar ==
object && data->subtarget[0]) {
128 if (data->poletar !=
nullptr) {
130 if (data->poletar !=
object) {
137 "IK Target Copy-on-Eval -> Init IK Tree",
141 if ((data->poletar->type ==
OB_ARMATURE) && (data->polesubtarget[0])) {
158 "\nStarting IK Build: pchan = %s, target = (%s, %s), "
161 data->tar ? data->tar->id.name :
"nullptr",
172 add_relation(parchan_transforms_key, solver_key,
"IK Solver Owner");
175 while (parchan !=
nullptr) {
180 if (parchan != pchan) {
183 add_relation(parent_key, solver_key,
"IK Chain Parent");
186 add_relation(solver_key, bone_done_key,
"IK Chain Result");
191 add_relation(solver_key, final_transforms_key,
"IK Solver Result");
200 if ((segcount == data->rootbone) || (segcount > 255)) {
203 parchan = parchan->parent;
206 add_relation(solver_key, pose_done_key,
"PoseEval Result-Bone Link");
226 add_relation(init_ik_key, solver_key,
"Init IK -> IK Solver");
228 add_relation(solver_key, pose_cleanup_key,
"IK Solver -> Cleanup");
232 if (data->tar !=
nullptr) {
234 add_relation(target_geometry_key, solver_key,
"Curve.Path -> Spline IK");
236 add_relation(target_transform_key, solver_key,
"Curve.Transform -> Spline IK");
242 add_relation(solver_key, final_transforms_key,
"Spline IK Result");
246 for (
bPoseChannel *parchan = pchan->
parent; parchan !=
nullptr && segcount < data->chainlen;
247 parchan = parchan->parent, segcount++)
254 add_relation(parent_key, solver_key,
"Spline IK Solver Update");
257 add_relation(solver_key, bone_done_key,
"Spline IK Solver Result");
262 add_relation(solver_key, pose_done_key,
"PoseEval Result-Bone Link");
304 add_relation(local_transform, pose_init_key,
"Local Transform -> Pose Init");
305 add_relation(pose_init_key, pose_init_ik_key,
"Pose Init -> Pose Init IK");
306 add_relation(pose_init_ik_key, pose_done_key,
"Pose Init IK -> Pose Cleanup");
310 add_relation(armature_key, pose_init_key,
"Data dependency");
312 add_relation(pose_init_ik_key, pose_cleanup_key,
"Init -> Cleanup");
315 OperationKey{&object->id, NodeType::INSTANCING, OperationCode::INSTANCE},
316 "Transform -> Instance");
334 bool pose_depends_on_local_transform =
false;
344 pose_depends_on_local_transform =
true;
348 pose_depends_on_local_transform =
true;
357 pose_depends_on_local_transform =
true;
365 if (pose_depends_on_local_transform) {
370 add_relation(local_transform_key, pose_key,
"Local Transforms");
384 pchan->flag &= ~POSE_DONE;
388 add_relation(bone_local_key, bone_pose_key,
"Bone Local - Bone Pose");
390 if (pchan->parent !=
nullptr) {
402 add_relation(parent_key, bone_pose_key,
"Parent Bone -> Child Bone");
405 if (pchan->constraints.first !=
nullptr) {
407 BuilderWalkUserData
data;
415 add_relation(bone_pose_key, constraints_key,
"Pose -> Constraints Stack");
416 add_relation(bone_local_key, constraints_key,
"Local -> Constraints Stack");
420 add_relation(constraints_key, bone_ready_key,
"Constraints -> Ready");
424 add_relation(bone_pose_key, bone_ready_key,
"Pose -> Ready");
430 add_relation(bone_ready_key, bone_done_key,
"Ready -> Done");
436 add_relation(bone_done_key, bone_segments_key,
"Done -> B-Bone Segments");
449 add_relation(prev_key, bone_segments_key,
"Prev Handle -> B-Bone Segments");
453 add_relation(next_key, bone_segments_key,
"Next Handle -> B-Bone Segments");
458 add_relation(bone_segments_key, pose_cleanup_key,
"Cleanup dependency");
463 add_relation(bone_done_key, pose_done_key,
"PoseEval Result-Bone Link");
466 add_relation(bone_done_key, pose_cleanup_key,
"Done -> Cleanup");
468 add_relation(bone_ready_key, pose_cleanup_key,
"Ready -> Cleanup");
471 if (pchan->custom !=
nullptr) {