Esempio n. 1
0
        public static void DrawSurfaceOutlines(LineMeshManager visibleLinesMeshManager,
                                               LineMeshManager invisibleLinesMeshManager,
                                               PolygonMeshManager visibleSurfaceMeshManager,
                                               GeometryWireframe[] outlines,
                                               Matrix4x4[] transformations,
                                               Color visibleInnerColor, Color visibleOuterColor, Color visibleOutlineColor,
                                               Color invisibleInnerColor, Color invisibleOuterColor, Color invisibleOutlineColor,
                                               Color surfaceColor,
                                               float thickness = GUIConstants.thickLineScale)
        {
            if (outlines == null)
            {
                return;
            }

            if (invisibleOutlineColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline        = outlines[i];
                    var transformation = transformations[i];

                    if (outline.visibleOuterLines != null && outline.visibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleOuterLines, invisibleOutlineColor);
                    }
                    if (outline.invisibleOuterLines != null && outline.invisibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.invisibleOuterLines, invisibleOutlineColor);
                    }
                    if (outline.visibleInnerLines != null && outline.visibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleInnerLines, invisibleOutlineColor);
                    }
                    if (outline.invisibleInnerLines != null && outline.invisibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.invisibleInnerLines, invisibleOutlineColor);
                    }
                }
            }

            if (invisibleInnerColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline        = outlines[i];
                    var transformation = transformations[i];

                    if (outline.visibleOuterLines != null && outline.visibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleOuterLines, invisibleInnerColor, dashSize: visibleOuterLineDots);
                    }
                    if (outline.invisibleOuterLines != null && outline.invisibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.invisibleOuterLines, invisibleInnerColor, dashSize: invisibleOuterLineDots);
                    }
                }
            }


            if (invisibleOuterColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline        = outlines[i];
                    var transformation = transformations[i];

                    if (outline.visibleInnerLines != null && outline.visibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleInnerLines, invisibleOuterColor, dashSize: visibleInnerLineDots);
                    }
                    if (outline.invisibleInnerLines != null && outline.invisibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.invisibleInnerLines, invisibleOuterColor, dashSize: invisibleInnerLineDots);
                    }
                }
            }

#if TEST_ENABLED
            for (int i = 0; i < outlines.Length; i++)
            {
                var outline = outlines[i];
                if (outline.invalidLines == null || outline.invalidLines.Length == 0)
                {
                    continue;
                }

                var transformation = transformations[i];

                invisibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.invalidLines, Color.red, dashSize: invalidLineDots);
            }
#endif

            if (visibleOutlineColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline = outlines[i];

                    var transformation = transformations[i];

                    if (outline.visibleOuterLines != null && outline.visibleOuterLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleOuterLines, visibleOutlineColor, thickness: thickness + 2.0f);
                    }
                    if (outline.visibleInnerLines != null && outline.visibleInnerLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleInnerLines, visibleOutlineColor, thickness: thickness + 2.0f);
                    }
                }
            }

            if (visibleOuterColor.a >= kMinAlpha || visibleInnerColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline = outlines[i];

                    var transformation = transformations[i];

                    if (visibleInnerColor.a >= kMinAlpha && outline.visibleOuterLines != null && outline.visibleOuterLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleOuterLines, visibleInnerColor, thickness: thickness * 0.5f);
                    }
                    if (visibleOuterColor.a >= kMinAlpha && outline.visibleInnerLines != null && outline.visibleInnerLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(transformation, outline.vertices, outline.visibleInnerLines, visibleOuterColor, thickness: thickness * 0.5f);
                    }
                }
            }

            if (surfaceColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline = outlines[i];

                    if (outline.visibleTriangles == null || outline.visibleTriangles.Length == 0)
                    {
                        continue;
                    }

                    var transformation = transformations[i];

                    visibleSurfaceMeshManager.DrawTriangles(transformation, outline.vertices, outline.visibleTriangles, surfaceColor);
                }
            }
        }
        public static void DrawTexGenOutlines(LineMeshManager visibleLinesMeshManager,
                                              LineMeshManager invisibleLinesMeshManager,
                                              PolygonMeshManager visibleSurfaceMeshManager,
                                              GeometryWireframe[] outlines, Vector3[] translations,
                                              //Int32 brushID, Shape shape, Vector3 translation, int texGenID,
                                              Color visibleInnerColor, Color visibleOuterColor, Color visibleOutlineColor,
                                              Color invisibleInnerColor, Color invisibleOuterColor, Color invisibleOutlineColor,
                                              Color surfaceColor,
                                              float thickness = ToolConstants.thickLineScale)
        {
            if (outlines == null)
            {
                return;
            }

            var translationMatrix = MathConstants.identityMatrix;

            if (invisibleOutlineColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline     = outlines[i];
                    var translation = translations[i];
                    translationMatrix.m03 = translation.x;
                    translationMatrix.m13 = translation.y;
                    translationMatrix.m23 = translation.z;


                    if (outline.visibleOuterLines != null && outline.visibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleOuterLines, invisibleOutlineColor);
                    }
                    if (outline.invisibleOuterLines != null && outline.invisibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.invisibleOuterLines, invisibleOutlineColor);
                    }
                    if (outline.visibleInnerLines != null && outline.visibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleInnerLines, invisibleOutlineColor);
                    }
                    if (outline.invisibleInnerLines != null && outline.invisibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.invisibleInnerLines, invisibleOutlineColor);
                    }
                }
            }

            if (invisibleInnerColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline     = outlines[i];
                    var translation = translations[i];
                    translationMatrix.m03 = translation.x;
                    translationMatrix.m13 = translation.y;
                    translationMatrix.m23 = translation.z;

                    if (outline.visibleOuterLines != null && outline.visibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleOuterLines, invisibleInnerColor, dashSize: visibleOuterLineDots);
                    }
                    if (outline.invisibleOuterLines != null && outline.invisibleOuterLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.invisibleOuterLines, invisibleInnerColor, dashSize: invisibleOuterLineDots);
                    }
                }
            }


            if (invisibleOuterColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline     = outlines[i];
                    var translation = translations[i];
                    translationMatrix.m03 = translation.x;
                    translationMatrix.m13 = translation.y;
                    translationMatrix.m23 = translation.z;

                    if (outline.visibleInnerLines != null && outline.visibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleInnerLines, invisibleOuterColor, dashSize: visibleInnerLineDots);
                    }
                    if (outline.invisibleInnerLines != null && outline.invisibleInnerLines.Length > 0)
                    {
                        invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.invisibleInnerLines, invisibleOuterColor, dashSize: invisibleInnerLineDots);
                    }
                }
            }

            for (int i = 0; i < outlines.Length; i++)
            {
                var outline = outlines[i];
                if (outline.invalidLines == null || outline.invalidLines.Length == 0)
                {
                    continue;
                }

                var translation = translations[i];
                translationMatrix.m03 = translation.x;
                translationMatrix.m13 = translation.y;
                translationMatrix.m23 = translation.z;

                invisibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.invalidLines, Color.red, dashSize: invalidLineDots);
            }

            if (visibleOutlineColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline = outlines[i];

                    var translation = translations[i];
                    translationMatrix.m03 = translation.x;
                    translationMatrix.m13 = translation.y;
                    translationMatrix.m23 = translation.z;

                    if (outline.visibleOuterLines != null && outline.visibleOuterLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleOuterLines, visibleOutlineColor, thickness: thickness + 2.0f);
                    }
                    if (outline.visibleInnerLines != null && outline.visibleInnerLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleInnerLines, visibleOutlineColor, thickness: thickness + 2.0f);
                    }
                }
            }

            if (visibleOuterColor.a >= kMinAlpha || visibleInnerColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline = outlines[i];

                    var translation = translations[i];
                    translationMatrix.m03 = translation.x;
                    translationMatrix.m13 = translation.y;
                    translationMatrix.m23 = translation.z;

                    if (visibleInnerColor.a >= kMinAlpha && outline.visibleOuterLines != null && outline.visibleOuterLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleOuterLines, visibleInnerColor, thickness: thickness * 0.5f);
                    }
                    if (visibleOuterColor.a >= kMinAlpha && outline.visibleInnerLines != null && outline.visibleInnerLines.Length != 0)
                    {
                        visibleLinesMeshManager.DrawLines(translationMatrix, outline.vertices, outline.visibleInnerLines, visibleOuterColor, thickness: thickness * 0.5f);
                    }
                }
            }

            if (surfaceColor.a >= kMinAlpha)
            {
                for (int i = 0; i < outlines.Length; i++)
                {
                    var outline = outlines[i];

                    if (outline.visibleTriangles == null || outline.visibleTriangles.Length == 0)
                    {
                        continue;
                    }

                    var translation = translations[i];
                    translationMatrix.m03 = translation.x;
                    translationMatrix.m13 = translation.y;
                    translationMatrix.m23 = translation.z;

                    visibleSurfaceMeshManager.DrawTriangles(translationMatrix, outline.vertices, outline.visibleTriangles, surfaceColor);
                }
            }
        }