private void RemoveRedundantOverrides() { List <NPVoxCoord> overridesToRemove = new List <NPVoxCoord>(); NPVoxNormalProcessor_UserOverride processor = ( NPVoxNormalProcessor_UserOverride )m_context.ViewedProcessor; NPVoxNormalProcessor previous = m_context.MeshOutput.NormalProcessors.GetPreviousInList(processor); foreach (NPVoxMeshData vox in m_context.MeshOutput.GetVoxMeshData()) { if (!vox.isHidden) { Vector3 normal = Vector3.zero; if (previous != null) { normal = previous.GetOutput()[vox.vertexIndexOffsetBegin]; } if (processor.m_overrideNormalsRT.ContainsKey(vox.voxCoord) && processor.m_overrideNormalsRT[vox.voxCoord] == normal) { overridesToRemove.Add(vox.voxCoord); } } } foreach (NPVoxCoord i in overridesToRemove) { processor.m_overrideNormalsRT.Remove(i); } }
private void InitMeshNormals() { NPVoxMeshData[] voxMeshData = m_context.MeshOutput.GetVoxMeshData(); NPVoxNormalProcessor previousProcessor = m_context.MeshOutput.NormalProcessors.GetPreviousInList(m_context.ViewedProcessor); Vector3[] normals = null; if (previousProcessor == null || !previousProcessor.IsOutputValid()) { normals = new Vector3[m_context.PreviewMesh.normals.Length]; for (int i = 0; i < normals.Length; i++) { normals[i] = Vector3.zero; } if (previousProcessor != null) { m_context.MeshOutput.NormalProcessors.Run(m_context.MeshOutput.GetVoxModel(), voxMeshData, normals, normals, previousProcessor); } } else { normals = previousProcessor.GetOutputCopy(); } m_context.ViewedProcessor.InitOutputBuffer(normals.Length); m_context.ViewedProcessor.Process(m_context.MeshOutput.GetVoxModel(), voxMeshData, normals, normals); Vector3[] meshNormals = m_context.PreviewMesh.normals; for (int i = 0; i < meshNormals.Length; i++) { meshNormals[i] = normals[i]; } m_context.PreviewMesh.normals = meshNormals; }
public void DestroyProcessor(NPVoxNormalProcessor processor) { m_processorList.Remove(processor); processor.Passes.Clear(); ScriptableObject.DestroyImmediate(processor, true); UnityEditor.EditorUtility.SetDirty(this); }
public void MoveProcessorUp(NPVoxNormalProcessor processor) { int index = m_processorList.FindIndex(item => item == processor); if (index > 0) { m_processorList.Remove(processor); m_processorList.Insert(index - 1, processor); UnityEditor.EditorUtility.SetDirty(this); } }
public void MoveProcessorDown(NPVoxNormalProcessor processor) { int index = m_processorList.FindIndex(item => item == processor); if (index >= 0 && index < m_processorList.Count - 1) { m_processorList.Remove(processor); m_processorList.Insert(index + 1, processor); UnityEditor.EditorUtility.SetDirty(this); } }
public NPVoxNormalProcessor AddProcessor(Type processorType) { NPVoxNormalProcessor newProcessor = ScriptableObject.CreateInstance(processorType) as NPVoxNormalProcessor; if (!newProcessor) { Debug.LogError("NPVoxNormalProcessorList: Type parameter '" + processorType.ToString() + "' is not a subclass of NPVoxNormalProcessor!"); return(null); } m_processorList.Add(newProcessor); newProcessor.hideFlags = HideFlags.HideInHierarchy; return(newProcessor); }
public NPVoxNormalProcessor GetPreviousInList(NPVoxNormalProcessor _processor) { NPVoxNormalProcessor previous = null; foreach (NPVoxNormalProcessor processor in m_processorList) { if (processor == _processor) { return(previous); } previous = processor; } return(previous); }
public virtual void SetContext(NPVoxNormalProcessorPreviewContext _context) { if (m_context != null) { m_context.Invalidate(); } m_context = _context; NPVoxNormalProcessor processor = m_context.ViewedProcessor; NPVoxAttributeNormalProcessorListItem listItemAttribute = NPipeReflectionUtil.GetAttribute <NPVoxAttributeNormalProcessorListItem>(processor); m_title = listItemAttribute.EditorName; InitScene(); }
public void Set(NPVoxMeshOutput _meshOutput, NPVoxNormalProcessor _processor) { MeshOutput = _meshOutput; ViewedProcessor = _processor; PreviewObject = MeshOutput.Instatiate(); VoxToUnity = new NPVoxToUnity(MeshOutput.GetVoxModel(), MeshOutput.VoxelSize); MeshFilter mf = PreviewObject.GetComponent <MeshFilter>(); PreviewMesh = Mesh.Instantiate <Mesh>(mf.sharedMesh); mf.sharedMesh = PreviewMesh; PreviewObject.hideFlags = HideFlags.HideAndDontSave; PreviewObject.SetActive(false); IsValid = true; }
public NPVoxNormalProcessor GetNextInList(NPVoxNormalProcessor _processor) { NPVoxNormalProcessor previous = null; foreach (NPVoxNormalProcessor processor in m_processorList) { if (previous != null) { return(processor); } if (processor == _processor) { previous = processor; } } return(null); }
public void MoveProcessorBack(NPVoxNormalProcessor processor) { int index = m_processorList.FindIndex(item => item == processor); if (index > 0) { m_processorList.Remove(processor); m_processorList.Insert(index - 1, processor); UnityEditor.EditorUtility.SetDirty(this); } bool bInform = false; foreach (NPVoxNormalProcessor p in m_processorList) { if (bInform || p == processor) { bInform = true; p.OnListChanged(this); } } }
public void MoveProcessorForward(NPVoxNormalProcessor processor) { int index = m_processorList.FindIndex(item => item == processor); if (index >= 0 && index < m_processorList.Count - 1) { m_processorList.Remove(processor); m_processorList.Insert(index + 1, processor); UnityEditor.EditorUtility.SetDirty(this); } NPVoxNormalProcessor previous = GetPreviousInList(processor); bool bInform = false; foreach (NPVoxNormalProcessor p in m_processorList) { if (bInform || previous == null || p == previous) { bInform = true; p.OnListChanged(this); } } }
public void DestroyProcessor(NPVoxNormalProcessor processor) { NPVoxNormalProcessor next = GetNextInList(processor); m_processorList.Remove(processor); processor.Passes.Clear(); if (next != null) { bool bInform = false; foreach (NPVoxNormalProcessor p in m_processorList) { if (bInform || p == next) { bInform = true; p.OnListChanged(this); } } } ScriptableObject.DestroyImmediate(processor, true); UnityEditor.EditorUtility.SetDirty(this); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { NPVoxMeshOutput target = property.serializedObject.targetObject as NPVoxMeshOutput; NPVoxNormalProcessorList processorList = target.NormalProcessors; EditorGUI.BeginProperty(position, label, property); // Customize gui style Color previousBGColor = GUI.backgroundColor; Color previousFGColor = GUI.contentColor; GUI.backgroundColor = s_colorBackgroundGUIPrimary; GUI.backgroundColor = s_colorBackgroundGUIPrimary; // GUI.contentColor = s_colorForegroundGUI; // Doesn't seem to work // Header + Expand / Collapse Button GUILayout.BeginHorizontal(); GUILayout.Label("Normal Processors (" + processorList.GetProcessors().Count + ")", GUILayout.Width(s_widthHeaderLabel)); if (!m_expanded) { if (GUILayout.Button("Expand", GUILayout.Width(s_widthExpandButton))) { m_expanded = true; } } else { if (GUILayout.Button("Collapse", GUILayout.Width(s_widthExpandButton))) { m_expanded = false; } } GUILayout.EndHorizontal(); if (!m_expanded) { GUILayout.Space(12.0f); } // List management if (m_expanded) { Dictionary <string, System.Type> processorClasses = new Dictionary <string, System.Type>(); processorClasses.Add("<None>", null); List <System.Type> allTypes = new List <System.Type>(NPipeReflectionUtil.GetAllTypesWithAttribute(typeof(NPVoxAttributeNormalProcessorListItem))); allTypes = allTypes.OrderBy(x => (( NPVoxAttributeNormalProcessorListItem )x.GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0]).ListPriority).ToList(); foreach (System.Type factoryType in allTypes) { NPVoxAttributeNormalProcessorListItem attr = ( NPVoxAttributeNormalProcessorListItem )factoryType.GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0]; if (attr.ClassType.BaseType != typeof(NPVoxNormalProcessor)) { continue; } processorClasses.Add(attr.EditorName, factoryType); } string[] processorKeys = processorClasses.Keys.ToArray(); GUILayout.BeginHorizontal(); GUILayout.Space(s_widthTab); m_indexPopupAddProcessor = EditorGUILayout.Popup(m_indexPopupAddProcessor, processorKeys); bool optionAdded = GUILayout.Button("Add"); GUILayout.EndHorizontal(); if (optionAdded) { System.Type processorClass = processorClasses[processorKeys[m_indexPopupAddProcessor]]; if (processorClass != null) { if (UnityEditor.AssetDatabase.GetAssetPath(processorList).Length == 0) { target.IncludeSubAssets(UnityEditor.AssetDatabase.GetAssetPath(target)); } processorList.AddProcessor(processorClass) .AddToAsset(UnityEditor.AssetDatabase.GetAssetPath(target)); } } NPVoxNormalProcessor itemToMoveBack = null; NPVoxNormalProcessor itemToMoveForward = null; foreach (NPVoxNormalProcessor processor in processorList.GetProcessors()) { NPVoxAttributeNormalProcessorListItem attr = ( NPVoxAttributeNormalProcessorListItem )processor.GetType().GetCustomAttributes(typeof(NPVoxAttributeNormalProcessorListItem), true)[0]; GUILayout.Space(s_verticalSpacePerItem); GUILayout.BeginHorizontal(); GUILayout.Space(s_widthTab); GUILayout.Label(attr.EditorName, GUILayout.MinWidth(s_widthMinItemName)); GUILayout.Space(20.0f); GUI.backgroundColor = s_colorBackgroundGUISecondary; if (GUILayout.Button("View / Edit")) { NPVoxNormalProcessorPreview preview = NPVoxNormalProcessorPreview.ShowWindow(processor.GetType()); preview.SetContext(processor.GeneratePreviewContext(target)); } GUILayout.Space(20.0f); if (GUILayout.Button("^", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true))) { itemToMoveBack = processor; } if (GUILayout.Button("v", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true))) { itemToMoveForward = processor; } if (GUILayout.Button("X", GUILayout.Width(s_widthUpDownButton), GUILayout.ExpandWidth(true))) { processorList.DestroyProcessor(processor); break; } GUI.backgroundColor = s_colorBackgroundGUIPrimary; GUILayout.EndHorizontal(); processor.OnGUI(); GUILayout.Space(10.0f); } if (itemToMoveBack) { processorList.MoveProcessorBack(itemToMoveBack); itemToMoveBack = null; } if (itemToMoveForward) { processorList.MoveProcessorForward(itemToMoveForward); itemToMoveForward = null; } GUILayout.Space(s_verticalSpaceEnd); } // Restore previous gui style GUI.backgroundColor = previousBGColor; GUI.contentColor = previousFGColor; EditorGUI.EndProperty(); }
public void Run(NPVoxModel model, NPVoxMeshData[] tempdata, Vector3[] inNormals, Vector3[] outNormals, NPVoxNormalProcessor end) { inNormals.CopyTo(outNormals, 0); foreach (NPVoxNormalProcessor processor in m_processorList) { processor.InitOutputBuffer(inNormals.Length); processor.Process(model, tempdata, outNormals, outNormals); if (processor == end) { break; } } }