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); } } }
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); }
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))); }