Newer
Older
curcolor = color->getThreadColor();
if (pt > document->curPoint)
curcolor.gl();
{
(curcolor*OE_color(1, 1, 1, style->instLineBeforeCurrentColor.a)).gl();
}
}
OE_start* start = dynamic_cast<OE_start*> (document->instCommand.at(i));
if (start)
{
curcolor = start->getThreadColor();
(curcolor*OE_color(1, 1, 1, style->instLineBeforeCurrentColor.a)).gl();
}
}
for (; pt < document->instPoints.size(); pt++)
if (pt == document->curPoint)
{
(curcolor*OE_color(1, 1, 1, style->instLineBeforeCurrentColor.a)).gl();
}
glVertex2f(document->instPoints.at(pt).x/scaleRatio, document->instPoints.at(pt).y/scaleRatio);
glEnd();
// start point
style->instStartPointColor.gl();
glPointSize(style->instStartPointSize);
glBegin(GL_POINTS);
glVertex2f(document->instPoints.at(0).x/scaleRatio, document->instPoints.at(0).y/scaleRatio);
glEnd();
// current point
if (document->curPoint < document->instPoints.size())
{
style->instCurPointColor.gl();
glPointSize(style->instCurPointSize);
glBegin(GL_POINTS);
glVertex2f(document->instPoints.at(document->curPoint).x/scaleRatio, document->instPoints.at(document->curPoint).y/scaleRatio);
glEnd();
}
return true;
}
/** \brief draw the document on screen
*
* \return true if all is ok
*
*/
bool OE_display::draw()
{
if (!document)
return false;
float wzoom, hzoom;
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
glViewport(0, 0, width, height);
glClearColor(style->backgroundColor.r, style->backgroundColor.g, style->backgroundColor.b, 1.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_TEXTURE_2D);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glEnd();
wzoom = (float)width*zoom;
hzoom = (float)height*zoom;
glOrtho(viewPos.x-wzoom, viewPos.x+wzoom, viewPos.y+hzoom, viewPos.y-hzoom, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
glColor4ub(255,255,255,255);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
vector_2d hoopSize = document->getHoopSize()/2;
vector_2d zero = document->getZeroPoint();
//draw hoop
if (style->drawHoop)
{
glLineWidth(3);
glBegin(GL_LINE_STRIP);
style->hoopColor.gl();
glVertex2f(zero.x-hoopSize.x, zero.y-hoopSize.y);
glVertex2f(zero.x-hoopSize.x, zero.y+hoopSize.y);
glVertex2f(zero.x+hoopSize.x, zero.y+hoopSize.y);
glVertex2f(zero.x+hoopSize.x, zero.y-hoopSize.y);
glVertex2f(zero.x-hoopSize.x, zero.y-hoopSize.y);
glEnd();
}
//draw grid
if (style->drawGrid)
{
glLineWidth(1.5);
glBegin(GL_LINES);
(style->gridColor * OE_color(1, 1, 1, maxf(0.0f, 0.2f-zoom*2))).gl();
int offset = (int)-hoopSize.x;
while (offset<hoopSize.x)
glVertex2f(zero.x+offset, zero.y-hoopSize.y);
glVertex2f(zero.x+offset, zero.y+hoopSize.y);
offset += 1;
}
glVertex2f(zero.x-hoopSize.x, zero.y+offset);
glVertex2f(zero.x+hoopSize.x, zero.y+offset);
offset += 1;
}
//glColor4d(0.0f, 0.0f, 0.0f, 0.1f);
style->gridColor.gl();
offset = (int)-hoopSize.x+(int)hoopSize.x%10;
while (offset<hoopSize.x)
glVertex2f(zero.x+offset, zero.y-hoopSize.y);
glVertex2f(zero.x+offset, zero.y+hoopSize.y);
offset += 10;
}
offset = (int)-hoopSize.y+(int)hoopSize.y%10;
while (offset<hoopSize.y)
glVertex2f(zero.x-hoopSize.x, zero.y+offset);
glVertex2f(zero.x+hoopSize.x, zero.y+offset);
offset += 10;
}
glEnd();
}
//draw 0
if (style->drawZero)
float zeroSize = style->zeroSize;
glLineWidth(1.5);
glBegin(GL_LINE_STRIP);
style->zeroColor.gl();
glVertex2f(zero.x-zeroSize, zero.y);
glVertex2f(zero.x, zero.y+zeroSize);
glVertex2f(zero.x+zeroSize, zero.y);
glVertex2f(zero.x, zero.y-zeroSize);
glEnd();
glBegin(GL_LINES);
style->zeroColor.gl();
glVertex2f(zero.x-zeroSize, zero.y);
glVertex2f(zero.x+zeroSize, zero.y);
glVertex2f(zero.x, zero.y-zeroSize);
glVertex2f(zero.x, zero.y+zeroSize);
glEnd();
}
refreshAll();
document->lock();
/*if (changeDpi)
selectionBounds.init = false;
{
std::list<OE_pointcurve*>::iterator curve = document->curves.begin();
while (curve != document->curves.end())
{
curve++;
}
curve = document->selectedCurves.begin();
while (curve != document->selectedCurves.end())
{
selectionBounds += (*curve)->getBound();
curve++;
}
}
{
std::list<OE_stitchs*>::iterator stitch = document->stitchs.begin();
int curpoint = document->curPoint;
while (stitch != document->stitchs.end())
{
curpoint -= (*stitch)->getPoints().size();
stitch++;
}
stitch = document->selectedStitchs.begin();
while (stitch != document->selectedStitchs.end())
{
selectionBounds += (*stitch)->getBound();
stitch++;
}
}
drawCommands();
document->unlock();
drawSelectionTools();
return true;
}
bool OE_display::pick(std::list<OE_pointcurve*> selectedCurves, std::list<OE_stitchs*> selectedStitches)
{
std::list<OE_pointcurve*>::iterator curve;
std::list<OE_stitchs*>::iterator stitch;
int index;
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
glViewport(0, 0, width, height);
glClearColor(0.85f, 0.85f, 0.85f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_TEXTURE_2D);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glEnd();
glOrtho(absMouse.x-7*zoom, absMouse.x+7*zoom, absMouse.y+7*zoom, absMouse.y-7*zoom, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
glColor4ub(255,255,255,255);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glRenderMode(GL_SELECT);
//Init of name stack
glInitNames();
glPushName(0); //id of the tools
/* glPushName(0); //id of the zero tool
//draw 0
vector_2d zero = document->getZeroPoint();
glPointSize(6);
glBegin(GL_POINT);
glEnd();
glPopName();
*/
glPushName(1); //id of the move tool
drawSelectionTools(true);
glPopName();
//if (changeDpi)
refreshAll();
{
glLoadName(1); //id of the stitches
index = 0;
glPushName(index); //init the stitches index
stitch = selectedStitches.begin();
while (stitch != selectedStitches.end())
{
stitch++;
index++;
glLoadName(index);
}
glPopName();
}
{
glLoadName(2); //id of the curves
index = 0;
glPushName(index); //init the curves index
curve = selectedCurves.begin();
while (curve != selectedCurves.end())
{
curve++;
index++;
glLoadName(index);
}
glPopName();
}
{
glLoadName(1); //id of the stitches
index = 0;
glPushName(index); //init the stitches index
int curpoint = document->curPoint;
stitch = document->stitchs.begin();
while (stitch != document->stitchs.end())
{
curpoint -= (*stitch)->getPoints().size();
stitch++;
index++;
glLoadName(index);
}
glPopName();
}
{
glLoadName(2); //id of the curves
index = 0;
glPushName(index); //init the curves index
curve = document->curves.begin();
while (curve != document->curves.end())
{
curve++;
index++;
glLoadName(index);
}
glPopName();
}
}
/** \brief move and zoom to see the entire document
*/
void OE_display::showAll()
{
if (document)
BoundingBox bound = document->getBound();
viewPos.x = (bound.getMax().x + bound.getMin().x)/2;
viewPos.y = (bound.getMax().y + bound.getMin().y)/2;
zoom = maxf((bound.getMax().x - bound.getMin().x)/width/1.5, (bound.getMax().y - bound.getMin().y)/height/1.5);
changeDpi = true;
void OE_display::zoomSelection()
3dsman
committed
{
if (document&&controller)
{
3dsman
committed
BoundingBox bound = controller->getSelectionBoundingBox();
viewPos.x = (bound.getMax().x + bound.getMin().x)/2;
viewPos.y = (bound.getMax().y + bound.getMin().y)/2;
zoom = maxf((bound.getMax().x - bound.getMin().x)/width/1.5, (bound.getMax().y - bound.getMin().y)/height/1.5);
changeDpi = true;
3dsman
committed
}
}
void OE_display::mouse_Pos(double x, double y)
{
viewPos = viewPos + (mouse-vector_2d(x, y))*zoom*2;
absMouse = viewPos+(mouse-vector_2d(width, height)/2)*zoom*2;
void OE_display::mouse_Button(int button, int action, int mods)
{
if (button == GLFW_MOUSE_BUTTON_MIDDLE)
void OE_display::scroll(double xoffset, double yoffset)
{
if (!pan)
{
if (yoffset>0)
{
zoom = zoom/1.1;
}
else
{
zoom = zoom*1.1;
}
changeDpi = true;
}
void OE_display::resize(int width, int height)
{
this->width = width;
this->height = height;
}
void OE_display::key(int key, int scancode, int action, int mods)
{
}
vector_2d OE_display::screenToDocument(vector_2d pos)
{