示例#1
0
        void RebuildSelectedHandlesInternal(IEnumerable<ProBuilderMesh> meshes, SelectMode selectionMode)
        {
            ClearHandles();

            foreach (var mesh in meshes)
            {
                switch (selectionMode)
                {
                    case SelectMode.Vertex:
                    case SelectMode.TextureVertex:
                    {
                        RebuildMeshHandle(mesh, m_VertexHandles, MeshHandles.CreateVertexMesh);
                        var handle = GetMeshHandle(mesh, m_SelectedVertexHandles);
                        MeshHandles.CreateVertexMesh(mesh, handle.mesh, mesh.selectedIndexesInternal);
                        goto default;
                    }

                    case SelectMode.Edge:
                    case SelectMode.TextureEdge:
                    {
                        if(m_ForceEdgeLinesGL || BuiltinMaterials.geometryShadersSupported)
                            RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeMesh);
                        else
                            RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeBillboardMesh);

                        var handle = GetMeshHandle(mesh, m_SelectedEdgeHandles);

                        if(m_ForceEdgeLinesGL || BuiltinMaterials.geometryShadersSupported)
                            MeshHandles.CreateEdgeMesh(mesh, handle.mesh, mesh.selectedEdgesInternal);
                        else
                            MeshHandles.CreateEdgeBillboardMesh(mesh, handle.mesh, mesh.selectedEdgesInternal);

                        break;
                    }

                    case SelectMode.Face:
                    case SelectMode.TextureFace:
                    {
                        RebuildMeshHandle(mesh, m_SelectedFaceHandles, MeshHandles.CreateFaceMesh);
                        goto default;
                    }

                    default:
                        if(m_ForceWireframeLinesGL || BuiltinMaterials.geometryShadersSupported)
                            RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeMesh);
                        else
                            RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeBillboardMesh);
                        break;
                }
            }
        }
        void RebuildSelectedHandlesInternal(IEnumerable <ProBuilderMesh> meshes, SelectMode selectionMode, bool selectionOrVertexCountChanged = true)
        {
            if (!selectionOrVertexCountChanged)
            {
                foreach (var handle in m_WireHandles)
                {
                    handle.Value.mesh.vertices = handle.Key.positionsInternal;
                }

                switch (selectionMode)
                {
                case SelectMode.Vertex:
                case SelectMode.TextureVertex:
                {
                    if (BuiltinMaterials.geometryShadersSupported)
                    {
                        foreach (var handle in m_VertexHandles)
                        {
                            handle.Value.mesh.vertices = handle.Key.positionsInternal;
                        }
                        foreach (var handle in m_SelectedVertexHandles)
                        {
                            handle.Value.mesh.vertices = handle.Key.positionsInternal;
                        }
                    }
                    else
                    {
                        foreach (var handle in m_VertexHandles)
                        {
                            MeshHandles.CreateVertexMesh(handle.Key, handle.Value.mesh);
                        }
                        foreach (var handle in m_SelectedVertexHandles)
                        {
                            MeshHandles.CreateVertexMesh(handle.Key, handle.Value.mesh, handle.Key.selectedIndexesInternal);
                        }
                    }

                    break;
                }

                case SelectMode.Edge:
                case SelectMode.TextureEdge:
                {
                    foreach (var handle in m_SelectedEdgeHandles)
                    {
                        handle.Value.mesh.vertices = handle.Key.positionsInternal;
                    }
                    break;
                }

                case SelectMode.Face:
                case SelectMode.TextureFace:
                {
                    foreach (var handle in m_SelectedFaceHandles)
                    {
                        handle.Value.mesh.vertices = handle.Key.positionsInternal;
                    }
                    break;
                }
                }

                return;
            }

            ClearHandles();

            foreach (var mesh in meshes)
            {
                // always do wireframe
                RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeMesh);

                switch (selectionMode)
                {
                case SelectMode.Vertex:
                case SelectMode.TextureVertex:
                {
                    RebuildMeshHandle(mesh, m_VertexHandles, MeshHandles.CreateVertexMesh);
                    RebuildMeshHandle(mesh, m_SelectedVertexHandles,
                                      (x, y) => { MeshHandles.CreateVertexMesh(x, y, x.selectedIndexesInternal); });
                    break;
                }

                case SelectMode.Edge:
                case SelectMode.TextureEdge:
                {
                    RebuildMeshHandle(mesh, m_SelectedEdgeHandles,
                                      (x, y) => { MeshHandles.CreateEdgeMesh(x, y, x.selectedEdgesInternal); });
                    break;
                }

                case SelectMode.Face:
                case SelectMode.TextureFace:
                {
                    RebuildMeshHandle(mesh, m_SelectedFaceHandles, MeshHandles.CreateFaceMesh);
                    break;
                }
                }
            }
        }