string BoxBrush::MakeHeader(string* lines, int numLines) const { string result; int width = AutoWidth(lines, numLines); result += DrawSide(true, 1, width) + "\n"; for (int i = 0; i < numLines; i++) { string line[] = { lines[i] }; result += DrawDataLine(line, 1, width) + "\n"; } result += DrawSide(false, 1, width) + "\n"; return result; }
int WidgetEditor::Draw() { m_pRootWin->Draw(); if (m_bEditMode) { if (m_pNearestSide != NULL) { DrawWidget(m_pNearestSide->GetWidget(), false, 192, 192, 192); DrawWidget(m_pNearestSide->GetWidget(), true, 96, 96, 96); DrawSide(m_pNearestSide); } if (m_pSelectedWidget != NULL) m_pSelectedWidget->DrawRect(0, 0, m_pSelectedWidget->GetWidth()-1, m_pSelectedWidget->GetHeight()-1, 255, 0, 255); if (m_pHoverWidget != NULL) { if (m_pHoverWidget->GetWidgetParent() != NULL) { m_pHoverWidget->GetWidgetParent()->DrawRect(m_pHoverWidget->GetPosX()-1, m_pHoverWidget->GetPosY()-1, m_pHoverWidget->GetWidth()+1, m_pHoverWidget->GetHeight()+1, 0, 255, 255); } else { m_pHoverWidget->DrawRect(0, 0, m_pHoverWidget->GetWidth()-1, m_pHoverWidget->GetHeight()-1, 0, 255, 255); } } m_pRootWin->DrawRect(0, 0, m_pRootWin->GetWidth()-1, m_pRootWin->GetHeight()-1, 255, 0, 0); } return 0; }
void RubiksCube::Draw(touchPosition touchXY) { int viewport[]={0,0,255,191}; // used later for gluPickMatrix() int16 vx, vy, vz, vsize; vx = f32tov16(Position.X); vy = f32tov16(Position.Y); vz = f32tov16(Position.Z); vsize = f32tov16(Size); glPushMatrix(); { glRotateY(90); glRotateZ(180); if(Twisting||AutoTwisting) { int ax=0; // Rotate so we draw the cube the right way round while(ax<Twist.axis) { glRotateX(90); glRotateZ(90); ax++; } if(Twist.position==0 || Twist.position==3) glRotateZ(Twist.rotation); DrawSide(Twist.left.side,Twist.axis,Position.X,Position.Y,Position.Z,Size,false); glBegin(GL_QUADS); glColor3f(0,0,0); glVertex3v16(vx + vsize, vy, vz + f32tov16(divf32(Size,inttof32(3)))); glVertex3v16(vx, vy, vz + f32tov16(divf32(Size,inttof32(3)))); glVertex3v16(vx, vy + vsize, vz + f32tov16(divf32(Size,inttof32(3)))); glVertex3v16(vx + vsize, vy + vsize, vz + f32tov16(divf32(Size,inttof32(3)))); glEnd(); if(Twist.position==0 || Twist.position==3) glRotateZ(-Twist.rotation); glRotateY(180); if(Twist.position==2 || Twist.position==3) glRotateZ(-Twist.rotation); DrawSide(Twist.right.side,Twist.axis+3,Position.X,Position.Y,Position.Z,Size,false); glBegin(GL_QUADS); glColor3f(0,0,0); glVertex3v16(vx + vsize, vy, vz + f32tov16(divf32(Size,inttof32(3)))); glVertex3v16(vx, vy, vz + f32tov16(divf32(Size,inttof32(3)))); glVertex3v16(vx, vy + vsize, vz + f32tov16(divf32(Size,inttof32(3)))); glVertex3v16(vx + vsize, vy + vsize, vz + f32tov16(divf32(Size,inttof32(3)))); glEnd(); if(Twist.position==2 || Twist.position==3) glRotateZ(Twist.rotation); glRotateY(90); glRotateX(-90); if(Twist.position==1 || Twist.position==3) glRotateX(Twist.rotation); glBegin(GL_QUADS); glColor3f(0,0,0); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3))), vy, vz); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3))), vy + vsize, vz); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3))), vy + vsize, vz + vsize); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3))), vy, vz + vsize); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3)))*2, vy, vz); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3)))*2, vy, vz + vsize); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3)))*2, vy + vsize, vz + vsize); glVertex3v16(vx + f32tov16(divf32(Size,inttof32(3)))*2, vy + vsize, vz); glEnd(); if(Twist.position==1 || Twist.position==3) glRotateX(-Twist.rotation); for(int i=0;i<4;i++) { if(Twist.position==0) glRotateX(Twist.rotation); DrawLine(Twist.left.line[i],Position.X,Position.Y,Position.Z,Size/3); if(Twist.position==0) glRotateX(-Twist.rotation); if(Twist.position==1) glRotateX(Twist.rotation); DrawLine(Twist.middle.line[i],Position.X+(Size/3),Position.Y,Position.Z,Size/3); if(Twist.position==1) glRotateX(-Twist.rotation); if(Twist.position==2) glRotateX(Twist.rotation); DrawLine(Twist.right.line[i],Position.X+(Size/3*2),Position.Y,Position.Z,Size/3); if(Twist.position==2) glRotateX(-Twist.rotation); glRotateX(90); } }else{ for(int i=0;i<3;i++) { DrawSide(Side[i],i,Position.X,Position.Y,Position.Z,Size, false); glRotateY(180); DrawSide(Side[i+3],i+3,Position.X,Position.Y,Position.Z,Size, false); glRotateX(90); glRotateZ(-90); } } } glPopMatrix(1); if(Picking) { glPushMatrix(); for(int i=0;i<3;i++) clicked[i]=0; closeW = 0x7FFFFFFF; //reset the distance //set the viewport to just off-screen, this hides all rendering that will be done during picking glViewport(0,192,0,192); // setup the projection matrix for picking glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPickMatrix((touchXY.px),(191-touchXY.py),4,4,viewport); // render only what is below the cursor gluPerspective(70, 256.0 / 192.0, 0.1, 20); // this must be the same as the original perspective matrix glMatrixMode(GL_MODELVIEW); // switch back to modifying the modelview matrix for drawing { glRotateY(90); glRotateZ(180); for(int i=0;i<3;i++) { DrawSide(Side[i],i,Position.X,Position.Y,Position.Z,Size, true); glRotateY(180); DrawSide(Side[i+3],i+3,Position.X,Position.Y,Position.Z,Size, true); glRotateX(90); glRotateZ(-90); } } glViewport(0,0,255,191); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70, 256.0 / 192.0, 0.1, 20); glMatrixMode(GL_MODELVIEW); if(closeW<0x7FFFFFFF) { if(Painting) { if(Side[clicked[0]].tile[clicked[1]][clicked[2]].color!=paintColour) { if(undoQueue.numEntries==0) { undoQueue.numEntries++; undoQueue.currentEntry=0; } else if(undoQueue.currentEntry < (undoQueue.numEntries-1)) { undoQueue.currentEntry++; undoQueue.numEntries=undoQueue.currentEntry+1; } else if(undoQueue.numEntries==20) { for(int i=0; i<19; i++) { undoQueue.entry[i]=undoQueue.entry[i+1]; } } else { undoQueue.numEntries++; undoQueue.currentEntry++; } undoQueue.entry[undoQueue.currentEntry].from=Side[clicked[0]].tile[clicked[1]][clicked[2]].color; undoQueue.entry[undoQueue.currentEntry].to=paintColour; for(int i=0; i<3; i++) undoQueue.entry[undoQueue.currentEntry].position[i]=clicked[i]; Side[clicked[0]].tile[clicked[1]][clicked[2]].color=paintColour; } }else{ Grabbing=true; Picking=false; } } glPopMatrix(1); }else{ //Twisting=false; } }
void Block :: Draw( Point3Df aFigPos ) { /* Вершины куба занумерованы в след. порядке( делим куб на 4 части ): 1)-,+,- 2)-,+,+ 3)+,+,+ 4)+,+,- 5)+,-,- 6)+,-,+ 7)-,-,+ 8)-,-,- */ glMaterialfv( GL_FRONT, GL_AMBIENT, mMaterial.GetMaterialForAmbient() ); glMaterialfv( GL_FRONT, GL_DIFFUSE, mMaterial.GetMaterialForDiffuse() ); glMaterialfv( GL_FRONT, GL_SPECULAR, mMaterial.GetMaterialForSpecular() ); //Firts side DrawSide( Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 0 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 0 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 0 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 1 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 1 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 1 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 2 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 2 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 2 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 3 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 3 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 3 ].mZ ) ); //Second side DrawSide( Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 1 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 1 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 1 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 6 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 6 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 6 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 5 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 5 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 5 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 2 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 2 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 2 ].mZ ) ); //Third side DrawSide( Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 2 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 2 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 2 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 5 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 5 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 5 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 4 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 4 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 4 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 3 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 3 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 3 ].mZ ) ); //Fourth side DrawSide( Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 6 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 6 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 6 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 7 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 7 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 7 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 4 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 4 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 4 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 5 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 5 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 5 ].mZ ) ); //Fifth side DrawSide( Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 0 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 0 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 0 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 7 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 7 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 7 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 6 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 6 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 6 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 1 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 1 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 1 ].mZ ) ); //Sixth side DrawSide( Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 3 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 3 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 3 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 4 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 4 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 4 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 7 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 7 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 7 ].mZ ), Point3Df( aFigPos.mX + mPosF.mX + mVerticesF[ 0 ].mX, aFigPos.mY + mPosF.mY + mVerticesF[ 0 ].mY, aFigPos.mZ + mPosF.mZ + mVerticesF[ 0 ].mZ ) ); }