Example #1
0
        void OnDrawSceneHandles(SceneView _sceneView)
        {
            Handles.color = Color.white.SetAlpha(.5f);
            Handles.DrawWireCube(m_ModifingMesh.bounds.center, m_ModifingMesh.bounds.size * 1.2f);

            if (!m_SelectingPolygon)
            {
                return;
            }

            GMeshPolygon _mainPolygon = m_Polygons[m_SelectedPolygon];

            foreach (var subPolygon in m_SubPolygons)
            {
                GDirectedTriangle directedTriangle = m_Polygons[subPolygon].GetDirectedTriangle(m_Verticies);
                if (Vector3.Dot(directedTriangle.normal, _sceneView.camera.transform.forward) > 0)
                {
                    continue;
                }
                Handles.color = Color.yellow.SetAlpha(.1f);
                Handles.DrawAAConvexPolygon(directedTriangle.triangle.verticies);
                Handles.color = Color.yellow;
                Handles.DrawLines(directedTriangle.triangle.GetDrawLinesVerticies());
            }
            GTriangle mainTriangle = _mainPolygon.GetTriangle(m_Verticies);

            Handles.color = Color.green.SetAlpha(.3f);
            Handles.DrawAAConvexPolygon(mainTriangle.verticies);
            Handles.color = Color.green;
            Handles.DrawLines(mainTriangle.GetDrawLinesVerticies());

            if (!m_EditingVectors)
            {
                return;
            }
            Handles.color = Color.green;
            foreach (var indice in _mainPolygon.indices)
            {
                Handles_Extend.DrawArrow(m_Verticies[indice], m_VertexDatas[indice], .1f * m_GUISize, .01f * m_GUISize);
                if (m_SelectedVertexIndex == indice)
                {
                    continue;
                }
                Handles_Extend.DrawWireSphere(m_Verticies[indice], m_VertexDatas[indice], C_VertexSphereRadius * m_GUISize);
            }
            Handles.color = Color.yellow;
            foreach (var subPolygon in m_SubPolygons)
            {
                foreach (var indice in m_Polygons[subPolygon].indices)
                {
                    Handles.DrawLine(m_Verticies[indice], m_Verticies[indice] + m_VertexDatas[indice] * .03f * m_GUISize);
                }
            }
        }
Example #2
0
 public static GMeshPolygon[] GetPolygons(int[] _indices)
 {
     GMeshPolygon[] polygons = new GMeshPolygon[_indices.Length / 3];
     for (int i = 0; i < polygons.Length; i++)
     {
         int startIndex = i * 3;
         int triangle0  = _indices[startIndex];
         int triangle1  = _indices[startIndex + 1];
         int triangle2  = _indices[startIndex + 2];
         polygons[i] = new GMeshPolygon(triangle0, triangle1, triangle2);
     }
     return(polygons);
 }
Example #3
0
        void SelectPolygon(int _index)
        {
            SelectVertex(-1);
            m_SelectedPolygon = _index;
            m_SubPolygons.Clear();
            if (_index < 0)
            {
                return;
            }
            GMeshPolygon mainPolygon  = m_Polygons[m_SelectedPolygon];
            GTriangle    mainTriangle = mainPolygon.GetTriangle(m_Verticies);

            m_Polygons.FindAllIndexes(m_SubPolygons, (index, polygon) => index != m_SelectedPolygon && polygon.GetTriangle(m_Verticies).verticies.Any(subVertex => mainTriangle.verticies.Any(mainVertex => mainVertex == subVertex)));
        }