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