public static bool GenerateHemisphere(ref BrushMesh brushMesh, ref ChiselHemisphereDefinition definition) { definition.Validate(); var transform = Matrix4x4.TRS(Vector3.zero, Quaternion.AngleAxis(definition.rotation, Vector3.up), Vector3.one); return(GenerateHemisphereSubMesh(ref brushMesh, definition.diameterXYZ, transform, definition.horizontalSegments, definition.verticalSegments, definition.surfaceDefinition)); }
public static bool GenerateHemisphereVertices(ref ChiselHemisphereDefinition definition, ref Vector3[] vertices) { definition.Validate(); var transform = Matrix4x4.TRS(Vector3.zero, Quaternion.AngleAxis(definition.rotation, Vector3.up), Vector3.one); return(GenerateHemisphereVertices(definition.diameterXYZ, transform, definition.horizontalSegments, definition.verticalSegments, ref vertices)); }
static void DrawOutline(IChiselHandleRenderer renderer, ChiselHemisphereDefinition definition, Vector3[] vertices, LineMode lineMode) { var sides = definition.horizontalSegments; var topSegments = Mathf.Max(definition.verticalSegments, 0); var bottomCap = false; var topCap = (topSegments != 0); var extraVertices = ((topCap) ? 1 : 0) + ((bottomCap) ? 1 : 0); var bottomVertex = 0; //var topVertex = (bottomCap) ? 1 : 0; var rings = (vertices.Length - extraVertices) / sides; var bottomRing = 0; var prevColor = renderer.color; var color = prevColor; color.a *= 0.6f; for (int i = 0, j = extraVertices; i < rings; i++, j += sides) { renderer.color = ((i == bottomRing) ? prevColor : color); renderer.DrawLineLoop(vertices, j, sides, lineMode: lineMode, thickness: ((i == bottomRing) ? kCapLineThickness : kHorzLineThickness), dashSize: ((i == bottomRing) ? 0 : kLineDash)); } renderer.color = color; for (int k = 0; k < sides; k++) { for (int i = 0, j = extraVertices; i < rings - 1; i++, j += sides) { renderer.DrawLine(vertices[j + k], vertices[j + k + sides], lineMode: lineMode, thickness: kVertLineThickness); } if (topCap) { renderer.DrawLine(vertices[bottomVertex], vertices[extraVertices + k + ((rings - 1) * sides)], lineMode: lineMode, thickness: kVertLineThickness); } } renderer.color = prevColor; }