public void CreateGameObject(VTKNode node) { string gameObjectName = VTK.GetGameObjectName(node); Debug.Log("Create gameobject " + gameObjectName); if (node.filter.outputType == VTK.DataType.PolyData) { //Create gameobject VtkToUnity vtu = new VtkToUnity(node.filter.vtkFilter.GetOutputPort(), VTK.GetGameObjectName(node)); vtu.go.transform.parent = gameObject.transform; vtu.ColorBy(Color.magenta); vtu.Update(); gameObjects.Add(vtu.go.name, vtu); if (node.filter.outputType == VTK.DataType.PolyData) { //Add mesh for controller support GameObject go = FindGameObject(gameObjectName); MeshCollider mc = go.AddComponent <MeshCollider>(); mc.isTrigger = true; ControllerGameObject cg = go.AddComponent <ControllerGameObject>(); cg.node = node; cg.Initialize(); } } }
public void UpdateFilter() { if (isRoot) { return; } //Update this filter filter.UpdateInput(); //UpdateChildren if (hasChildren) { foreach (VTKNode child in children) { child.UpdateFilter(); } } //Update gameobject VtkToUnity vtu; VTKRoot root = filter.gameObject.GetComponent <VTKRoot>(); string gameObjectName = VTK.GetGameObjectName(this); if (root.gameObjects.TryGetValue(gameObjectName, out vtu)) { /* * vtu.triangleFilter.SetInputConnection(filter.vtkFilter.GetOutputPort()); * vtu.Update(); */ UpdateProperties(); } }
/* * Creates node new node * Creates or update gameobject * */ public void AddNode(string filterName) { VTKNode node = activeNode.AddChild(new VTKNode((VTKFilter)gameObject.AddComponent(filterName), activeNode, gameObject.AddComponent <VTKProperties>())); if (node == null) { return; } Debug.Log("Add node " + node.name); node.filter.node = node; node.filter.SetPlaymodeParameters(); node.properties.node = node; node.properties.SetPlaymodeParameters(); node.properties.Read(); node.UpdateFilter(); SetActiveNode(node); //Create or update gameobject for new node if (!node.parent.isRoot) { //If parent has no children, update parent if (node.parent.children.Count == 1) { //Destroy old gameobject gameObjects.Remove(VTK.GetGameObjectName(node.parent)); GameObject.DestroyImmediate(GameObject.Find(VTK.GetGameObjectName(node.parent))); } } CreateGameObject(node); }
/* * Creates tree entries for a given node and its children * */ private void CreateSubTree(VTKNode n, int space) { //Change color of the node if it is the selected one if (script.activeNode == n) { treeNodeStyle.normal.textColor = Color.green; } EditorGUILayout.BeginHorizontal(); GUILayout.Space(space); if (GUILayout.Button(n.name, treeNodeStyle)) { script.SetActiveNode(n); } GameObject go = script.FindGameObject(VTK.GetGameObjectName(n)); if (go != null) { ControllerGameObject cgo = go.GetComponent <ControllerGameObject>(); if (cgo != null) { cgo.showGameObject = EditorGUILayout.Toggle(cgo.showGameObject); if (cgo.showGameObject) { go.renderer.enabled = true; } else { go.renderer.enabled = false; } } } EditorGUILayout.EndHorizontal(); //Reset color for other nodes if (script.activeNode == n) { treeNodeStyle.normal.textColor = Color.black; } //Show children if (n.hasChildren) { for (int i = 0; i < n.children.Count; i++) { CreateSubTree(n.children[i], space + 20); } } }
public GameObject FindGameObject(string name) { if (name == VTK.GetGameObjectName(rootNode)) { return(gameObject); } Transform found = gameObject.transform.Find(name); if (found != null) { return(found.gameObject); } else { return(null); } }
public void UpdateProperties() { Debug.Log("Update properties: " + VTK.GetGameObjectName(this)); VtkToUnity vtkToUnity; VTKRoot root = filter.gameObject.GetComponent <VTKRoot>(); root.gameObjects.TryGetValue(VTK.GetGameObjectName(this), out vtkToUnity); vtkToUnity.triangleFilter.SetInputConnection(filter.vtkFilter.GetOutputPort()); //Properties if (properties.selectedColorType == 0) //solid color { vtkToUnity.ColorBy(Color.magenta); } else { if (properties.selectedColorType == 1) //data { string data = properties.dataArrays[properties.selectedDataArray]; string dataName = data.Remove(data.IndexOf("[") - 1); if (data.EndsWith("[C]")) { vtkToUnity.ColorBy(dataName, VtkToUnity.VtkColorType.CELL_DATA); } if (data.EndsWith("[P]")) { vtkToUnity.ColorBy(dataName, VtkToUnity.VtkColorType.POINT_DATA); } } vtkToUnity.SetLut((VtkToUnity.LutPreset)properties.selectedLut); } vtkToUnity.Update(); }
public void PreloadNode(VTKNode node) { Debug.Log("Preload data for " + node.name); string objectName = VTK.GetGameObjectName(node); //Set filter if (node.isRoot) { if (dataType == VTK.DataType.PolyData) { polyDataReader = vtkXMLPolyDataReader.New(); polyDataReader.SetFileName(filepath); polyDataReader.Update(); node.filter.vtkFilter = polyDataReader; node.filter.outputType = VTK.DataType.PolyData; } if (dataType == VTK.DataType.UnstructuredGrid) { unstructuredGridReader = vtkXMLUnstructuredGridReader.New(); unstructuredGridReader.SetFileName(filepath); unstructuredGridReader.Update(); node.filter.vtkFilter = unstructuredGridReader; node.filter.outputType = VTK.DataType.UnstructuredGrid; } } else { node.filter.node = node; node.filter.UpdateInput(); node.filter.SetPlaymodeParameters(); } //Set properties node.properties.node = node; node.properties.SetPlaymodeParameters(); node.properties.Read(); //Set vtkToUnity VtkToUnity vtu; if (gameObjects.TryGetValue(objectName, out vtu)) { gameObjects.Set(objectName, new VtkToUnity(node.filter.vtkFilter.GetOutputPort(), FindGameObject(objectName))); node.UpdateProperties(); //Some filters need stuff from properties } //Set controller script ControllerGameObject cg = node.filter.gameObject.GetComponent <ControllerGameObject>(); if (cg != null) { cg.node = node; cg.Initialize(); } //Do it for the kids if (node.hasChildren) { foreach (VTKNode child in node.children) { //Set parent reference child.parent = node; PreloadNode(child); } } }