25 double projection[16];
26 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
27 glGetDoublev(GL_PROJECTION_MATRIX, projection);
28 glGetIntegerv(GL_VIEWPORT, viewport);
31 glColor4f(0.0f, 0.0f, 0.0f, 0.001f);
34 glVertex3f(-100.0f, -100.0f, 0.0f);
36 gluProject(-100.0, -100.0, 0.00, modelview, projection, viewport,
37 &(
double){0}, &(double){0}, &wwinZ);
38 const double winX = x;
39 const double winY = (double)viewport[3] - y;
40 gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX,
54 double projection[16];
56 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
57 glGetDoublev(GL_PROJECTION_MATRIX, projection);
58 glGetIntegerv(GL_VIEWPORT, viewport);
61 glColor4f(0.0f, 0.0f, 0.0f, 0.001f);
64 glVertex3f(10.0f, 10.0f, 1.0f);
66 gluProject(10.0, 10.0, 1.0, modelview, projection, viewport, &(
double){0},
67 &(double){0}, &wwinZ);
69 const float y = 50.0f;
71 double winY = (double)viewport[3] - y;
72 gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX,
73 &(
double){0}, &(double){0});
76 winY = (double)viewport[3] - y;
77 gluUnProject(winX, winY, wwinZ, modelview, projection, viewport,
78 &posXX, &(
double){0}, &(double){0});
79 return (
float)(posXX - posX);
91void to3D(
int x,
int y,
float *
X,
float *
Y,
float *Z) {
96 double projection[16];
98 double posX, posY, posZ;
101 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
102 glGetDoublev(GL_PROJECTION_MATRIX, projection);
103 glGetIntegerv(GL_VIEWPORT, viewport);
105 const double winX = x;
106 const double winY = (double)viewport[3] - y;
109 GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
110 float comp = -9999999;
112 if (winZ[idx] > comp && winZ[idx] < 1)
116 gluUnProject(winX, winY, comp, modelview, projection, viewport, &posX,
133 return p.
x * q.
x + p.
y * q.
y + p.
z * q.
z;
138 return sqrt(
dot(p, p));
145 r.
x = p.
x + m * (q.
x - p.
x);
146 r.
y = p.
y + m * (q.
y - p.
y);
147 r.
z = p.
z + m * (q.
z - p.
z);
169 U = (float) (
dot(pa, ba) /
dot(ba, ba));
194 borderWidth =
parent->borderWidth;
198 ref->width =
parent->width - 2.0f *borderWidth;
200 ref->height =
parent->height - 2.0f *borderWidth;;
204 ref->pos.x =
parent->refPos.x +
ref->pos.x + borderWidth;
205 ref->pos.y =
parent->refPos.y +
ref->pos.y + borderWidth;
208 switch (child->
align) {
210 ref->pos.x =
parent->refPos.x + borderWidth;
211 ref->pos.y =
parent->refPos.y + borderWidth;
212 ref->height =
parent->height - 2.0f * borderWidth;
217 ref->pos.y =
parent->refPos.y + borderWidth;
218 ref->height =
parent->height - 2.0f * borderWidth;
226 ref->width =
parent->width - 2.0f * borderWidth;
230 ref->pos.y =
parent->refPos.y + borderWidth;
231 ref->pos.x =
parent->refPos.x + borderWidth;
232 ref->width =
parent->width - 2.0f * borderWidth;
235 ref->pos.y =
parent->refPos.y + borderWidth;
236 ref->pos.x =
parent->refPos.x + borderWidth;;
237 ref->width =
parent->width - 2.0f * borderWidth;;
238 ref->height =
parent->height - 2.0f * borderWidth;
274 glVertex3f(p0->
x, p0->
y, p0->
z);
275 glVertex3f(p1->
x, p1->
y, p1->
z);
276 glVertex3f(p2->
x, p2->
y, p2->
z);
277 glVertex3f(p3->
x, p3->
y, p3->
z);
302 color_fac = 1.0f / 1.3f;
333 glColor4f(c->
R * color_fac *
dim, c->
G * color_fac *
dim,
334 c->
B * color_fac *
dim, c->
A);
338 glColor4f(c->
R / color_fac *
dim, c->
G / color_fac *
dim,
339 c->
B / color_fac *
dim, c->
A);
347 float rv = (
A.x -
B.x) * (
A.x -
B.x) + (
A.y -
B.y) * (
A.y -
B.y) + (
A.z -
B.z) * (
A.z -
B.z);
356 if (
X >= RX && X <= RX + RW && Y >= RY &&
Y <= RY + RH)
#define X(prefix, name, str, type, subtype,...)
float GetOGLDistance(float l)
static double len(glCompPoint p)
void glCompDrawRectangle(glCompRect *r)
float distBetweenPts(glCompPoint A, glCompPoint B, float R)
void glCompCalcWidget(glCompCommon *parent, glCompCommon *child, glCompCommon *ref)
int is_point_in_rectangle(float X, float Y, float RX, float RY, float RW, float RH)
void glCompDrawRectPrism(glCompPoint *p, float w, float h, float b, float d, glCompColor *c, bool bumped)
void GetOGLPosRef(int x, int y, float *X, float *Y)
static double dist(glCompPoint p, glCompPoint q)
static void glCompQuadVertex(glCompPoint *p0, glCompPoint *p1, glCompPoint *p2, glCompPoint *p3)
void to3D(int x, int y, float *X, float *Y, float *Z)
double point_to_lineseg_dist(glCompPoint p, glCompPoint a, glCompPoint b)
static glCompPoint blend(glCompPoint p, glCompPoint q, float m)
void glCompSetColor(glCompColor c)