[Bf-blender-cvs] [f054539] depsgraph_refactor: Depsgraph: Ported over ability to use vertex-group targets for IK constraints

Joshua Leung noreply at git.blender.org
Sat Jan 31 00:54:08 CET 2015


Commit: f0545390f1c0fc5d47d4c0859b0e66eef5899a38
Author: Joshua Leung
Date:   Sat Jan 31 12:53:35 2015 +1300
Branches: depsgraph_refactor
https://developer.blender.org/rBf0545390f1c0fc5d47d4c0859b0e66eef5899a38

Depsgraph: Ported over ability to use vertex-group targets for IK constraints

Vertex group targets are supported by the constraint system, but were not
accounted for by the new depsgraph building code. This adds that support.

NOTE: Ideally, this wouldn't require a separate set of logic, but we need
      these links to be attached to the solver and not the constraint, so
      things have to be done this way.

===================================================================

M	source/blender/depsgraph/intern/depsgraph_build_relations.cpp

===================================================================

diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
index e6bbc3c..93662a5 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -465,7 +465,6 @@ void DepsgraphRelationBuilder::build_constraints(Scene *scene, ID *id, eDepsNode
 				
 				if (ELEM(con->type, CONSTRAINT_TYPE_KINEMATIC, CONSTRAINT_TYPE_SPLINEIK)) {
 					/* ignore IK constraints - these are handled separately (on pose level) */
-					// XXX: this is bad - it precludes using geometry targets -- aligorith
 				}
 				else if (ELEM(con->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO)) {
 					/* these constraints require path geometry data... */
@@ -988,12 +987,22 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *ob,
 			}
 			else {
 				/* same armature - we'll use the ready state only, just in case this bone is in the chain we're solving */
-				//OperationKey target_key(&data->tar->id, DEPSNODE_TYPE_BONE, data->subtarget, DEG_OPCODE_BONE_READY);
 				OperationKey target_key(&data->tar->id, DEPSNODE_TYPE_BONE, data->subtarget, DEG_OPCODE_BONE_DONE);
 				add_relation(target_key, solver_key, DEPSREL_TYPE_TRANSFORM, con->name);
 			}
 		}
+		else if (ELEM(data->tar->type, OB_MESH, OB_LATTICE) && (data->subtarget[0])) {
+			/* vertex group target */
+			/* NOTE: for now, we don't need to represent vertex groups separately... */
+			ComponentKey target_key(&data->tar->id, DEPSNODE_TYPE_GEOMETRY);
+			add_relation(target_key, solver_key, DEPSREL_TYPE_GEOMETRY_EVAL, con->name);
+			
+			if (data->tar->type == OB_MESH) {
+				//node2->customdata_mask |= CD_MASK_MDEFORMVERT;
+			}
+		}
 		else {
+			/* Standard Object Target */
 			ComponentKey target_key(&data->tar->id, DEPSNODE_TYPE_TRANSFORM);
 			add_relation(target_key, pose_key, DEPSREL_TYPE_TRANSFORM, con->name);
 		}
@@ -1013,6 +1022,16 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *ob,
 			ComponentKey target_key(&data->poletar->id, DEPSNODE_TYPE_BONE, data->subtarget);
 			add_relation(target_key, solver_key, DEPSREL_TYPE_TRANSFORM, con->name);
 		}
+		else if (ELEM(data->poletar->type, OB_MESH, OB_LATTICE) && (data->subtarget[0])) {
+			/* vertex group target */
+			/* NOTE: for now, we don't need to represent vertex groups separately... */
+			ComponentKey target_key(&data->poletar->id, DEPSNODE_TYPE_GEOMETRY);
+			add_relation(target_key, solver_key, DEPSREL_TYPE_GEOMETRY_EVAL, con->name);
+			
+			if (data->poletar->type == OB_MESH) {
+				//node2->customdata_mask |= CD_MASK_MDEFORMVERT;
+			}
+		}
 		else {
 			ComponentKey target_key(&data->poletar->id, DEPSNODE_TYPE_TRANSFORM);
 			add_relation(target_key, solver_key, DEPSREL_TYPE_TRANSFORM, con->name);




More information about the Bf-blender-cvs mailing list