Пример #1
0
        public static void PrintMesh(SectionLayer layer, Vector3 center, Mesh mesh, Material mat)
        {
            LayerSubMesh subMesh     = layer.GetSubMesh(mat);
            int          count       = subMesh.verts.Count;
            int          vertexCount = mesh.vertexCount;

            Vector3[] vertices = mesh.vertices;
            Color32[] colors   = mesh.colors32;
            Vector2[] uv       = mesh.uv;
            for (int i = 0; i < vertexCount; i++)
            {
                subMesh.verts.Add(vertices[i] + center);
                if (colors.Length > i)
                {
                    subMesh.colors.Add(colors[i]);
                }
                else
                {
                    subMesh.colors.Add(new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue));
                }
                if (uv.Length > i)
                {
                    subMesh.uvs.Add(uv[i]);
                }
                else
                {
                    subMesh.uvs.Add(Vector2.zero);
                }
            }
            foreach (int num in mesh.triangles)
            {
                subMesh.tris.Add(count + num);
            }
        }
 public static void PrintShadow(SectionLayer layer, Vector3 center, Vector3 volume, Rot4 rotation)
 {
     if (DebugViewSettings.drawShadows)
     {
         LayerSubMesh subMesh = layer.GetSubMesh(MatBases.SunShadowFade);
         Color32      item    = new Color32(255, 0, 0, (byte)Mathf.Min((float)(255.0 * volume.y), 255f));
         Vector3      vector  = volume.RotatedBy(rotation) / 2f;
         float        x       = center.x;
         float        z       = center.z;
         int          count   = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z - vector.z));
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z + vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z + vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z - vector.z));
         subMesh.colors.Add(Printer_Shadow.LowVertexColor);
         subMesh.colors.Add(Printer_Shadow.LowVertexColor);
         subMesh.colors.Add(Printer_Shadow.LowVertexColor);
         subMesh.colors.Add(Printer_Shadow.LowVertexColor);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count + 1);
         subMesh.tris.Add(count + 2);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count + 2);
         subMesh.tris.Add(count + 3);
         int count2 = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z - vector.z));
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z + vector.z));
         subMesh.colors.Add(item);
         subMesh.colors.Add(item);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count2);
         subMesh.tris.Add(count2 + 1);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count2 + 1);
         subMesh.tris.Add(count + 1);
         int count3 = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z + vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z - vector.z));
         subMesh.colors.Add(item);
         subMesh.colors.Add(item);
         subMesh.tris.Add(count + 2);
         subMesh.tris.Add(count3);
         subMesh.tris.Add(count3 + 1);
         subMesh.tris.Add(count3 + 1);
         subMesh.tris.Add(count + 3);
         subMesh.tris.Add(count + 2);
         int count4 = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z - vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z - vector.z));
         subMesh.colors.Add(item);
         subMesh.colors.Add(item);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count + 3);
         subMesh.tris.Add(count4);
         subMesh.tris.Add(count + 3);
         subMesh.tris.Add(count4 + 1);
         subMesh.tris.Add(count4);
     }
 }
 public static void PrintShadow(SectionLayer layer, Vector3 center, Vector3 volume, Rot4 rotation)
 {
     if (DebugViewSettings.drawShadows)
     {
         LayerSubMesh subMesh = layer.GetSubMesh(MatBases.SunShadowFade);
         Color32      item    = new Color32(byte.MaxValue, 0, 0, (byte)Mathf.Min(255f * (volume.y + GlobalShadowSizeOffsetY), 255f));
         Vector3      vector  = (volume + new Vector3(GlobalShadowSizeOffsetX, 0f, GlobalShadowSizeOffsetZ)).RotatedBy(rotation).Abs() / 2f;
         float        x       = center.x;
         float        z       = center.z;
         int          count   = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z - vector.z));
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z + vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z + vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z - vector.z));
         subMesh.colors.Add(LowVertexColor);
         subMesh.colors.Add(LowVertexColor);
         subMesh.colors.Add(LowVertexColor);
         subMesh.colors.Add(LowVertexColor);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count + 1);
         subMesh.tris.Add(count + 2);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count + 2);
         subMesh.tris.Add(count + 3);
         int count2 = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z - vector.z));
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z + vector.z));
         subMesh.colors.Add(item);
         subMesh.colors.Add(item);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count2);
         subMesh.tris.Add(count2 + 1);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count2 + 1);
         subMesh.tris.Add(count + 1);
         int count3 = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z + vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z - vector.z));
         subMesh.colors.Add(item);
         subMesh.colors.Add(item);
         subMesh.tris.Add(count + 2);
         subMesh.tris.Add(count3);
         subMesh.tris.Add(count3 + 1);
         subMesh.tris.Add(count3 + 1);
         subMesh.tris.Add(count + 3);
         subMesh.tris.Add(count + 2);
         int count4 = subMesh.verts.Count;
         subMesh.verts.Add(new Vector3(x - vector.x, 0f, z - vector.z));
         subMesh.verts.Add(new Vector3(x + vector.x, 0f, z - vector.z));
         subMesh.colors.Add(item);
         subMesh.colors.Add(item);
         subMesh.tris.Add(count);
         subMesh.tris.Add(count + 3);
         subMesh.tris.Add(count4);
         subMesh.tris.Add(count + 3);
         subMesh.tris.Add(count4 + 1);
         subMesh.tris.Add(count4);
     }
 }
Пример #4
0
        public static void PrintPlane(SectionLayer layer, Vector3 center, Vector2 size, Material mat, float rot = 0f, bool flipUv = false, Vector2[] uvs = null, Color32[] colors = null, float topVerticesAltitudeBias = 0.01f, float uvzPayload = 0f)
        {
            if (colors == null)
            {
                colors = Printer_Plane.defaultColors;
            }
            if (uvs == null)
            {
                if (!flipUv)
                {
                    uvs = Printer_Plane.defaultUvs;
                }
                else
                {
                    uvs = Printer_Plane.defaultUvsFlipped;
                }
            }
            LayerSubMesh subMesh = layer.GetSubMesh(mat);
            int          count   = subMesh.verts.Count;

            subMesh.verts.Add(new Vector3(-0.5f * size.x, 0f, -0.5f * size.y));
            subMesh.verts.Add(new Vector3(-0.5f * size.x, topVerticesAltitudeBias, 0.5f * size.y));
            subMesh.verts.Add(new Vector3(0.5f * size.x, topVerticesAltitudeBias, 0.5f * size.y));
            subMesh.verts.Add(new Vector3(0.5f * size.x, 0f, -0.5f * size.y));
            if (rot != 0f)
            {
                float num = rot * 0.0174532924f;
                num *= -1f;
                for (int i = 0; i < 4; i++)
                {
                    float x    = subMesh.verts[count + i].x;
                    float z    = subMesh.verts[count + i].z;
                    float num2 = Mathf.Cos(num);
                    float num3 = Mathf.Sin(num);
                    float x2   = x * num2 - z * num3;
                    float z2   = x * num3 + z * num2;
                    subMesh.verts[count + i] = new Vector3(x2, subMesh.verts[count + i].y, z2);
                }
            }
            for (int j = 0; j < 4; j++)
            {
                List <Vector3> verts;
                int            index;
                (verts = subMesh.verts)[index = count + j] = verts[index] + center;
                subMesh.uvs.Add(new Vector3(uvs[j].x, uvs[j].y, uvzPayload));
                subMesh.colors.Add(colors[j]);
            }
            subMesh.tris.Add(count);
            subMesh.tris.Add(count + 1);
            subMesh.tris.Add(count + 2);
            subMesh.tris.Add(count);
            subMesh.tris.Add(count + 2);
            subMesh.tris.Add(count + 3);
        }
Пример #5
0
        public static void PrintPlane(SectionLayer layer, Vector3 center, Vector2 size, Material mat, float rot = 0f, bool flipUv = false, Vector2[] uvs = null, Color32[] colors = null, float topVerticesAltitudeBias = 0.01f)
        {
            if (colors == null)
            {
                colors = Printer_Plane.defaultColors;
            }
            if (uvs == null)
            {
                uvs = (flipUv ? Printer_Plane.defaultUvsFlipped : Printer_Plane.defaultUvs);
            }
            LayerSubMesh subMesh = layer.GetSubMesh(mat);
            int          count   = subMesh.verts.Count;

            subMesh.verts.Add(new Vector3((float)(-0.5 * size.x), 0f, (float)(-0.5 * size.y)));
            subMesh.verts.Add(new Vector3((float)(-0.5 * size.x), topVerticesAltitudeBias, (float)(0.5 * size.y)));
            subMesh.verts.Add(new Vector3((float)(0.5 * size.x), topVerticesAltitudeBias, (float)(0.5 * size.y)));
            subMesh.verts.Add(new Vector3((float)(0.5 * size.x), 0f, (float)(-0.5 * size.y)));
            if (rot != 0.0)
            {
                float num = (float)(rot * 0.01745329238474369);
                num = (float)(num * -1.0);
                for (int i = 0; i < 4; i++)
                {
                    Vector3        vector  = subMesh.verts[count + i];
                    float          x       = vector.x;
                    Vector3        vector2 = subMesh.verts[count + i];
                    float          z       = vector2.z;
                    float          num2    = Mathf.Cos(num);
                    float          num3    = Mathf.Sin(num);
                    float          num4    = x * num2 - z * num3;
                    float          z2      = x * num3 + z * num2;
                    List <Vector3> verts   = subMesh.verts;
                    int            index   = count + i;
                    float          x2      = num4;
                    Vector3        vector3 = subMesh.verts[count + i];
                    verts[index] = new Vector3(x2, vector3.y, z2);
                }
            }
            for (int j = 0; j < 4; j++)
            {
                List <Vector3> verts2;
                int            index2;
                (verts2 = subMesh.verts)[index2 = count + j] = verts2[index2] + center;
                subMesh.uvs.Add(uvs[j]);
                subMesh.colors.Add(colors[j]);
            }
            subMesh.tris.Add(count);
            subMesh.tris.Add(count + 1);
            subMesh.tris.Add(count + 2);
            subMesh.tris.Add(count);
            subMesh.tris.Add(count + 2);
            subMesh.tris.Add(count + 3);
        }
Пример #6
0
        public static void PrintMesh(SectionLayer layer, Vector3 center, Mesh mesh, Material mat)
        {
            LayerSubMesh subMesh     = layer.GetSubMesh(mat);
            int          count       = subMesh.verts.Count;
            int          vertexCount = mesh.vertexCount;

            Vector3[] vertices = mesh.vertices;
            Color32[] colors   = mesh.colors32;
            Vector2[] uv       = mesh.uv;
            for (int i = 0; i < vertexCount; i++)
            {
                subMesh.verts.Add(vertices[i] + center);
                if (colors.Length > i)
                {
                    subMesh.colors.Add(colors[i]);
                }
                else
                {
                    subMesh.colors.Add(new Color32(255, 255, 255, 255));
                }
                if (uv.Length > i)
                {
                    subMesh.uvs.Add(uv[i]);
                }
                else
                {
                    subMesh.uvs.Add(Vector2.zero);
                }
            }
            int[] triangles = mesh.triangles;
            for (int j = 0; j < triangles.Length; j++)
            {
                int num = triangles[j];
                subMesh.tris.Add(count + num);
            }
        }