private void RefreshTreeViewBoneStructure(CompositeBone selectedBone) { treeViewBones.Nodes.Clear(); if (CompositeEntity.RootBone != null) { TreeNode selectedNode = InsertBoneNodeInNode(treeViewBones.Nodes, CompositeEntity.RootBone, selectedBone); treeViewBones.ExpandAll(); if (CompositeEntity.RootBone == selectedBone) { treeViewBones.SelectedNode = treeViewBones.Nodes[0]; } else { treeViewBones.SelectedNode = selectedNode; } } if (treeViewBones.SelectedNode == null) { treeViewBones_AfterSelect(treeViewBones, null); if (CompositeEntity.RootBone != null) { treeViewBones.SelectedNode = treeViewBones.Nodes[0]; } } }
private void toolStripButtonAddRootBone_Click(object sender, EventArgs e) { TreeNode selectedNode = treeViewBones.SelectedNode; CompositeBone selectedBone = null; CompositeBone parentBone = null; CompositeBone newBone = new CompositeBone("", GetNewBoneNodeName()); newBone.Parent = CompositeEntity; if (selectedNode != null) { selectedBone = selectedNode.Tag as CompositeBone; if (selectedBone == CompositeEntity.RootBone) { parentBone = selectedBone; } else { parentBone = selectedBone.ParentBone; } } else { if (CompositeEntity.RootBone == null) { throw new Exception("CompositeEntity.RootBone is null"); } else { parentBone = CompositeEntity.RootBone; } } parentBone.AddChildBone(newBone); RefreshTreeViewBoneStructure(null); }
private void toolStripButtonLevelDownBone_Click(object sender, EventArgs e) { TreeNode selectedNode = treeViewBones.SelectedNode; CompositeBone selectedBone = null; if (selectedNode != null) { selectedBone = selectedNode.Tag as CompositeBone; if (selectedBone == CompositeEntity.RootBone) { return; } else { int index = selectedBone.ParentBone.ChildBones.IndexOf(selectedBone); // if it's the last element, upgrade the bone to the parent's level if (index == selectedBone.ParentBone.ChildBones.Count - 1) { CompositeBone grandpa = selectedBone.ParentBone.ParentBone; int indexParent = grandpa.ChildBones.IndexOf(selectedBone.ParentBone); selectedBone.ParentBone.ChildBones.Remove(selectedBone); grandpa.ChildBones.Insert(indexParent, selectedBone); selectedBone.ParentBone = grandpa; } // if it's inside the list, simply place it one level down in the list else { selectedBone.ParentBone.ChildBones.Remove(selectedBone); selectedBone.ParentBone.ChildBones.Insert(index + 1, selectedBone); } } RefreshTreeViewBoneStructure(selectedBone); } }
private void treeViewBones_AfterSelect(object sender, TreeViewEventArgs e) { bool enabledState = false; CompositeBone selectedBone = null; if (treeViewBones.SelectedNode != null) { enabledState = true; selectedBone = e.Node.Tag as CompositeBone; if (String.IsNullOrEmpty(selectedBone.SceneItem) == false && CompositeEntity.SceneItemBank.ContainsKey(selectedBone.SceneItem)) { SceneItem sceneItem = CompositeEntity.SceneItemBank[selectedBone.SceneItem]; if (sceneItem != null && sceneItem is ISubItemCollection) { SubItemRefConverter.SubItemsRefs = ((ISubItemCollection)sceneItem).GetSubItemsList(); } } propertyGridBoneProperties.SelectedObject = selectedBone; } else { propertyGridBoneProperties.SelectedObject = null; } toolStripButtonAddChildBone.Enabled = enabledState; toolStripButtonDeleteBone.Enabled = enabledState && treeViewBones.SelectedNode != treeViewBones.Nodes[0]; groupBoxBoneProps.Enabled = enabledState; toolStripButtonLevelUpBone.Enabled = enabledState && selectedBone != CompositeEntity.RootBone && selectedBone != CompositeEntity.RootBone.ChildBones[0]; toolStripButtonLevelDownBone.Enabled = enabledState && selectedBone != CompositeEntity.RootBone; }
private void toolStripButtonAddChildBone_Click(object sender, EventArgs e) { TreeNode selectedNode = treeViewBones.SelectedNode; if (selectedNode != null) { CompositeBone selectedBone = null; CompositeBone newBone = new CompositeBone("", GetNewBoneNodeName()); newBone.Parent = CompositeEntity; selectedBone = selectedNode.Tag as CompositeBone; selectedBone.AddChildBone(newBone); RefreshTreeViewBoneStructure(null); } }
private bool IsBoneNodeNameUnique(CompositeBone bone, String name) { if (bone != null) { if (bone.Name == name) { return(false); } foreach (CompositeBone childBone in bone.ChildBones) { if (IsBoneNodeNameUnique(childBone, name) == false) { return(false); } } } return(true); }
private void toolStripButtonNewBoneFromItem_Click(object sender, EventArgs e) { TreeNode selectedNode = treeViewBones.SelectedNode; if (selectedNode == null) { selectedNode = treeViewBones.Nodes[0]; } SceneItem selectedItem = treeViewSceneItems.SelectedNode.Tag as SceneItem; CompositeBone newBone = new CompositeBone(selectedItem.Name, GetUniqueBoneNodeName(selectedItem.Name)); newBone.Parent = CompositeEntity; CompositeBone selectedBone = selectedNode.Tag as CompositeBone; selectedBone.AddChildBone(newBone); RefreshTreeViewBoneStructure(null); }
private void toolStripButtonDeleteBone_Click(object sender, EventArgs e) { TreeNode selectedNode = treeViewBones.SelectedNode; CompositeBone selectedBone = null; if (selectedNode != null) { selectedBone = selectedNode.Tag as CompositeBone; if (selectedBone == CompositeEntity.RootBone) { return; } else { selectedBone.ParentBone.RemoveChildBone(selectedBone); CleanBoneInSceneControl(selectedBone.Name); } RefreshTreeViewBoneStructure(null); } }
private TreeNode InsertBoneNodeInNode(TreeNodeCollection parentNodes, CompositeBone bone, CompositeBone selectedBone) { String icon = (bone == CompositeEntity.RootBone) ? "anchor.png" : "link.png"; TreeNode returnNode = null; TreeNode newNode = parentNodes.Add( "Node" + bone.Name, bone.Name, icon, icon); newNode.Tag = bone; if (bone.Equals(selectedBone)) { returnNode = newNode; } foreach (CompositeBone childBone in bone.ChildBones) { TreeNode childNodeReturnValue = InsertBoneNodeInNode(newNode.Nodes, childBone, selectedBone); if (childNodeReturnValue != null) { returnNode = childNodeReturnValue; } } return(returnNode); }
private void treeViewBones_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { if (e.Node != null) { String oldName = e.Node.Text; String newName = e.Label; Console.WriteLine("Renamed node " + oldName + " to " + newName); if (String.IsNullOrEmpty(newName) == false && IsBoneNodeNameUnique(CompositeEntity.RootBone, newName)) { CompositeBone bone = e.Node.Tag as CompositeBone; bone.Name = newName; CleanBoneInSceneControl(oldName); // sync bone transforms with the new Bone name for (int i = 0; i < CompositeEntity.Animations.Count; i++) { // loop through every keyframe to sync them for (int j = 0; j < CompositeEntity.Animations[i].KeyFrames.Count; j++) { CompositeKeyFrame keyframe = CompositeEntity.Animations[i].KeyFrames[j]; // loop to find the previous bone for (int k = 0; k < keyframe.BoneTransforms.Count; k++) { CompositeBoneTransform transform = keyframe.BoneTransforms[k]; if (transform.BoneReference == oldName) { transform.BoneReference = bone.Name; break; } } } } } else { e.CancelEdit = true; } } }