Eliminate DEFAULT_TEXT_HEIGHT from drawing code.

Instead, query the text height for constraint style.
pull/4/head
EvilSpirit 2016-03-02 23:15:28 +06:00 committed by whitequark
parent 1f0649d1bb
commit 96344c85a6
7 changed files with 26 additions and 21 deletions

View File

@ -809,7 +809,7 @@ nogrid:;
ssglColorRGB(Style::Color(Style::DATUM));
ssglWriteText("previewing exported geometry; press Esc to return",
DEFAULT_TEXT_HEIGHT,
Style::DefaultTextHeight(),
p.Plus(u.ScaledBy(10/scale)).Plus(v.ScaledBy(10/scale)),
u, v, NULL, NULL);
@ -823,9 +823,9 @@ nogrid:;
glEnd();
ssglWriteText("(x, y) = (0, 0) for file just exported",
DEFAULT_TEXT_HEIGHT,
Style::DefaultTextHeight(),
p.Plus(u.ScaledBy(40/scale)).Plus(
v.ScaledBy(-(DEFAULT_TEXT_HEIGHT)/scale)),
v.ScaledBy(-(Style::DefaultTextHeight())/scale)),
u, v, NULL, NULL);
}
}

View File

@ -89,7 +89,7 @@ void Constraint::DoLabel(Vector ref, Vector *labelPos, Vector gr, Vector gu) {
if(type == COMMENT) {
th = Style::TextHeight(disp.style);
} else {
th = DEFAULT_TEXT_HEIGHT;
th = Style::DefaultTextHeight();
}
std::string s = Label();
@ -164,8 +164,8 @@ int Constraint::DoLineTrimmedAgainstBox(Vector ref, Vector a, Vector b) {
double pixels = 1.0 / SS.GW.scale;
std::string s = Label();
double swidth = ssglStrWidth(s, DEFAULT_TEXT_HEIGHT) + 4*pixels,
sheight = ssglStrHeight(DEFAULT_TEXT_HEIGHT) + 8*pixels;
double swidth = ssglStrWidth(s, Style::DefaultTextHeight()) + 4*pixels,
sheight = ssglStrHeight(Style::DefaultTextHeight()) + 8*pixels;
struct {
Vector n;
@ -369,8 +369,8 @@ void Constraint::DoArcForAngle(Vector a0, Vector da, Vector b0, Vector db,
// complex and this looks pretty good.
double tl = atan2(rm.Dot(gu), rm.Dot(gr));
double adj = EllipticalInterpolation(
ssglStrWidth(Label(), DEFAULT_TEXT_HEIGHT)/2,
ssglStrHeight(DEFAULT_TEXT_HEIGHT)/2,
ssglStrWidth(Label(), Style::DefaultTextHeight())/2,
ssglStrHeight(Style::DefaultTextHeight())/2,
tl);
*ref = (*ref).Plus(rm.WithMagnitude(adj + 3/SS.GW.scale));
} else {
@ -379,8 +379,8 @@ void Constraint::DoArcForAngle(Vector a0, Vector da, Vector b0, Vector db,
*ref = (*ref).ScaledBy(0.5).Plus(disp.offset);
gu = gu.WithMagnitude(1);
Vector trans =
(*ref).Plus(gu.ScaledBy(-1.5*ssglStrHeight(DEFAULT_TEXT_HEIGHT)));
ssglWriteTextRefCenter("angle between skew lines", DEFAULT_TEXT_HEIGHT,
(*ref).Plus(gu.ScaledBy(-1.5*ssglStrHeight(Style::DefaultTextHeight())));
ssglWriteTextRefCenter("angle between skew lines", Style::DefaultTextHeight(),
trans, gr, gu, LineCallback, this);
}
}
@ -824,7 +824,7 @@ void Constraint::DrawOrGetDistance(Vector *labelPos) {
}
if(dogd.drawing) {
ssglWriteTextRefCenter("T", DEFAULT_TEXT_HEIGHT,
ssglWriteTextRefCenter("T", Style::DefaultTextHeight(),
textAt, u, v, LineCallback, this);
} else {
dogd.refp = textAt;
@ -1008,7 +1008,7 @@ s:
(type == VERTICAL) ? "V" : (
(type == AT_MIDPOINT) ? "M" : NULL));
ssglWriteTextRefCenter(s, DEFAULT_TEXT_HEIGHT,
ssglWriteTextRefCenter(s, Style::DefaultTextHeight(),
m.Plus(offset), r, u, LineCallback, this);
} else {
dogd.refp = m.Plus(offset);

View File

@ -602,7 +602,7 @@ void Entity::DrawOrGetDistance(void) {
glDisable(GL_LINE_STIPPLE);
std::string str = DescriptionString().substr(5);
double th = DEFAULT_TEXT_HEIGHT;
double th = Style::DefaultTextHeight();
if(dogd.drawing) {
ssglWriteText(str, th, mm2, u, v, NULL, NULL);
} else {

View File

@ -505,7 +505,7 @@ void Group::Draw(void) {
glEnd();
ssglColorRGB(Style::Color(Style::DRAW_ERROR));
ssglWriteText("not closed contour, or not all same style!",
DEFAULT_TEXT_HEIGHT,
Style::DefaultTextHeight(),
polyError.notClosedAt.b, SS.GW.projRight, SS.GW.projUp,
NULL, NULL);
glEnable(GL_DEPTH_TEST);
@ -526,7 +526,7 @@ void Group::Draw(void) {
} else {
msg = "zero-length edge!";
}
ssglWriteText(msg, DEFAULT_TEXT_HEIGHT,
ssglWriteText(msg, Style::DefaultTextHeight(),
polyError.errorPointAt, SS.GW.projRight, SS.GW.projUp,
NULL, NULL);
glEnable(GL_DEPTH_TEST);

View File

@ -808,6 +808,7 @@ public:
static float Width(int hs);
static double WidthMm(int hs);
static double TextHeight(hStyle hs);
static double DefaultTextHeight();
static bool Exportable(int hs);
static hStyle ForEntity(hEntity he);
static int PatternType(hStyle hs);

View File

@ -334,7 +334,6 @@ void ssglLineWidth(GLfloat width);
void ssglVertex3v(Vector u);
void ssglAxisAlignedQuad(double l, double r, double t, double b, bool lone = true);
void ssglAxisAlignedLineLoop(double l, double r, double t, double b);
#define DEFAULT_TEXT_HEIGHT (11.5)
#ifdef WIN32
# define SSGL_CALLBACK __stdcall
#else

View File

@ -8,6 +8,8 @@
#include "solvespace.h"
#include <png.h>
#define DEFAULT_TEXT_HEIGHT 11.5
const Style::Default Style::Defaults[] = {
{ { ACTIVE_GRP }, "ActiveGrp", RGBf(1.0, 1.0, 1.0), 1.5, },
{ { CONSTRUCTION }, "Construction", RGBf(0.1, 0.7, 0.1), 1.5, },
@ -278,13 +280,16 @@ double Style::TextHeight(hStyle hs) {
Style *s = Get(hs);
if(s->textHeightAs == UNITS_AS_MM) {
return s->textHeight * SS.GW.scale;
} else if(s->textHeightAs == UNITS_AS_PIXELS) {
} else /* s->textHeightAs == UNITS_AS_PIXELS */ {
return s->textHeight;
} else {
return DEFAULT_TEXT_HEIGHT;
}
}
double Style::DefaultTextHeight() {
hStyle hs { Style::CONSTRAINT };
return TextHeight(hs);
}
//-----------------------------------------------------------------------------
// Should lines and curves from this style appear in the output file? Only
// if it's both shown and exportable.