public override void DrawArc(ref Vector3 center, ref Vector3 normal, ref Vector3 axis, float radiusA, float radiusB, float minAngle, float maxAngle, Color3 color, bool drawSect, float stepDegrees) { Vector3 vx = axis; Vector3 vy = Vector3.Cross(normal, axis); float step = stepDegrees * ((float)Math.PI / 180.0f); int nSteps = (int)((maxAngle - minAngle) / step); if (nSteps == 0) { nSteps = 1; } Vector3 next = center + radiusA * vx * (float)Math.Cos(minAngle) + radiusB * vy * (float)Math.Sin(minAngle); if (drawSect) { DrawLine(ref center, ref next, color); } int intColor = ColorToInt(ref color); PositionColored last = new PositionColored(ref next, intColor); for (int i = 1; i <= nSteps; i++) { lines.Add(last); float angle = minAngle + (maxAngle - minAngle) * i / nSteps; next = center + radiusA * vx * (float)Math.Cos(angle) + radiusB * vy * (float)Math.Sin(angle); last = new PositionColored(ref next, intColor); lines.Add(last); } if (drawSect) { DrawLine(ref center, ref next, color); } }
public override void DrawArc(ref Vector3 center, ref Vector3 normal, ref Vector3 axis, float radiusA, float radiusB, float minAngle, float maxAngle, Color3 color, bool drawSect, float stepDegrees) { Vector3 vx = axis; Vector3 vy = Vector3.Cross(normal, axis); float step = stepDegrees * ((float)Math.PI / 180.0f); int nSteps = (int)((maxAngle - minAngle) / step); if (nSteps == 0) nSteps = 1; Vector3 next = center + radiusA * vx * (float)Math.Cos(minAngle) + radiusB * vy * (float)Math.Sin(minAngle); if (drawSect) DrawLine(ref center, ref next, color); int intColor = ColorToInt(ref color); PositionColored last = new PositionColored(ref next, intColor); for (int i = 1; i <= nSteps; i++) { lines.Add(last); float angle = minAngle + (maxAngle - minAngle) * i / nSteps; next = center + radiusA * vx * (float)Math.Cos(angle) + radiusB * vy * (float)Math.Sin(angle); last = new PositionColored(ref next, intColor); lines.Add(last); } if (drawSect) DrawLine(ref center, ref next, color); }