Newer
Older
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;
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
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)
{