public void Evaluate(int SpreadMax) { //if any of the inputs has changed //recompute the outputs FColladaModel = FColladaModelIn.SliceCount > 0 ? FColladaModelIn[0] : null; if (FColladaModel == null) { return; } if (FColladaModelIn.IsChanged || FIndex.IsChanged) { int index = FIndex[0]; List <Model.SkinnedInstanceMesh> skinnedMeshes = new List <Model.SkinnedInstanceMesh>(); foreach (Model.InstanceMesh mesh in FColladaModel.InstanceMeshes) { if (mesh is Model.SkinnedInstanceMesh) { skinnedMeshes.Add((Model.SkinnedInstanceMesh)mesh); } } if (skinnedMeshes.Count > 0) { if (FSelectedMesh != skinnedMeshes[index % skinnedMeshes.Count]) { FSelectedMesh = skinnedMeshes[index % skinnedMeshes.Count]; } } else { FSelectedMesh = null; } } if (FSelectedMesh == null) { return; } if (FColladaModelIn.IsChanged || FIndex.IsChanged || FTimeInput.IsChanged) { float time = FTimeInput[0]; if (FColladaModelIn.IsChanged || FIndex.IsChanged) { FSkeleton.ClearAll(); CreateSkeleton(FSkeleton, FSelectedMesh.RootBone, FSelectedMesh.Bones); } foreach (Model.Bone bone in FSelectedMesh.Bones) { FSkeleton.JointTable[bone.Name].BaseTransform = bone.GetTransformMatrix(time).ToMatrix4x4(); } FSkeletonOutput.SetInterface(FSkeleton); FSkeletonOutput.MarkPinAsChanged(); } }
public void Unload() { //clear Skeleton FSkeleton.ClearAll(); //reset frame data FFrames.Clear(); //reset channel count FChannelCountOfSkeleton = 0; //reset JointCounter FJointCounter = 0; //reset current frame FCurrentFrame = 0; }
public void Evaluate(int SpreadMax) { if (this.FInScene.PluginIO.IsConnected) { this.FSkeletonOutput.SliceCount = 1; if (this.FInScene.IsChanged || this.FInRoot.IsChanged) { FSkeleton.ClearAll(); List <AssimpNode> allnodes = new List <AssimpNode>(); this.RecurseNodes(allnodes, this.FInScene[0].RootNode); AssimpNode found = null; foreach (AssimpNode node in allnodes) { if (node.Name == this.FInRoot[0]) { found = node; } } if (found != null) { int id = 0; CreateSkeleton(ref FSkeleton, found, "", ref id); } FSkeletonOutput.SetInterface(FSkeleton); FSkeletonOutput.MarkPinAsChanged(); } } else { this.FSkeletonOutput.SliceCount = 0; } }