[rshapes] Add DrawEllipseLinesEx()
Add DrawEllipseLinesEx() to the API for consistency with other shape drawing functions.
This commit is contained in:
parent
c58072d595
commit
c2232b839d
2 changed files with 71 additions and 0 deletions
|
|
@ -1313,6 +1313,7 @@ RLAPI void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, C
|
||||||
RLAPI void DrawEllipseV(Vector2 center, float radiusH, float radiusV, Color color); // Draw ellipse (Vector version)
|
RLAPI void DrawEllipseV(Vector2 center, float radiusH, float radiusV, Color color); // Draw ellipse (Vector version)
|
||||||
RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline
|
RLAPI void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); // Draw ellipse outline
|
||||||
RLAPI void DrawEllipseLinesV(Vector2 center, float radiusH, float radiusV, Color color); // Draw ellipse outline (Vector version)
|
RLAPI void DrawEllipseLinesV(Vector2 center, float radiusH, float radiusV, Color color); // Draw ellipse outline (Vector version)
|
||||||
|
RLAPI void DrawEllipseLinesEx(Vector2 center, float radiusH, float radiusV, float thick, Color color); // Draw ellipse outline with line thickness
|
||||||
RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring
|
RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring
|
||||||
RLAPI void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring outline
|
RLAPI void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); // Draw ring outline
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1690,6 +1690,76 @@ void DrawEllipseLinesV(Vector2 center, float radiusH, float radiusV, Color color
|
||||||
rlEnd();
|
rlEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draw ellipse outline with thickness
|
||||||
|
void DrawEllipseLinesEx(Vector2 center, float radiusH, float radiusV, float thick, Color color)
|
||||||
|
{
|
||||||
|
float outerRadiusH = radiusH, innerRadiusH = radiusH - thick;
|
||||||
|
float outerRadiusV = radiusV, innerRadiusV = radiusV - thick;
|
||||||
|
|
||||||
|
if (thick >= 0.0f) {
|
||||||
|
// Just a filled-in ellipse
|
||||||
|
if (innerRadiusH <= 0.0f || innerRadiusV <= 0.0f)
|
||||||
|
{
|
||||||
|
DrawEllipseV(center, radiusH, radiusV, color);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The outline is growing outside of the ellipse, so swap the inner and outer radius
|
||||||
|
float tmp = outerRadiusH;
|
||||||
|
outerRadiusH = innerRadiusH;
|
||||||
|
innerRadiusH = tmp;
|
||||||
|
|
||||||
|
tmp = outerRadiusV;
|
||||||
|
outerRadiusV = innerRadiusV;
|
||||||
|
innerRadiusV = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if SUPPORT_QUADS_DRAW_MODE
|
||||||
|
rlSetTexture(GetShapesTexture().id);
|
||||||
|
Rectangle shapeRect = GetShapesTextureRectangle();
|
||||||
|
|
||||||
|
rlBegin(RL_QUADS);
|
||||||
|
|
||||||
|
rlColor4ub(color.r, color.g, color.b, color.a);
|
||||||
|
|
||||||
|
for (int i = 0; i < 360; i += 10)
|
||||||
|
{
|
||||||
|
rlTexCoord2f(shapeRect.x/texShapes.width, shapeRect.y/texShapes.height);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*i)*innerRadiusH, center.y + sinf(DEG2RAD*i)*innerRadiusV);
|
||||||
|
|
||||||
|
rlTexCoord2f(shapeRect.x/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*(i + 10))*innerRadiusH, center.y + sinf(DEG2RAD*(i + 10))*innerRadiusV);
|
||||||
|
|
||||||
|
rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, (shapeRect.y + shapeRect.height)/texShapes.height);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*(i + 10))*outerRadiusH, center.y + sinf(DEG2RAD*(i + 10))*outerRadiusV);
|
||||||
|
|
||||||
|
rlTexCoord2f((shapeRect.x + shapeRect.width)/texShapes.width, shapeRect.y/texShapes.height);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*i)*outerRadiusH, center.y + sinf(DEG2RAD*i)*outerRadiusV);
|
||||||
|
}
|
||||||
|
rlEnd();
|
||||||
|
|
||||||
|
rlSetTexture(0);
|
||||||
|
#else
|
||||||
|
rlBegin(RL_TRIANGLES);
|
||||||
|
|
||||||
|
rlColor4ub(color.r, color.g, color.b, color.a);
|
||||||
|
|
||||||
|
for (int i = 0; i < 360; i += 10)
|
||||||
|
{
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*i)*innerRadiusH, center.y + sinf(DEG2RAD*i)*innerRadiusV);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*(i + 10))*innerRadiusH, center.y + sinf(DEG2RAD*(i + 10))*innerRadiusV);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*(i + 10))*outerRadiusH, center.y + sinf(DEG2RAD*(i + 10))*outerRadiusV);
|
||||||
|
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*i)*innerRadiusH, center.y + sinf(DEG2RAD*i)*innerRadiusV);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*(i + 10))*outerRadiusH, center.y + sinf(DEG2RAD*(i + 10))*outerRadiusV);
|
||||||
|
rlVertex2f(center.x + cosf(DEG2RAD*i)*outerRadiusH, center.y + sinf(DEG2RAD*i)*outerRadiusV);
|
||||||
|
}
|
||||||
|
rlEnd();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// Draw ring
|
// Draw ring
|
||||||
void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color)
|
void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue