Newer
Older
}
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;
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
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;
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
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)
{