Go4Expert (http://www.go4expert.com/)
-   MFC (http://www.go4expert.com/forums/mfc/)
-   -   Urgent: Coloring Drawn Hexagons (http://www.go4expert.com/forums/urgent-coloring-drawn-hexagons-t20033/)

Urgent: Coloring Drawn Hexagons

1 Attachment(s)
hello i am a beginner in using MFC,
i drew a hexagon in mfc using this code: ( a part of the code)
m_StartPoint.x -= int(ceil(r));//50,100
m_EndPoint.y -= int(ceil(h)); //100,99

dc.MoveTo(m_StartPoint);
dc.LineTo(m_EndPoint);

m_EndPoint.y -= int(ceil(s)); //m_Endpoint:100,49
dc.LineTo(m_EndPoint);

m_EndPoint.y -= int(ceil(h));
m_EndPoint.x -= int(ceil(r));
dc.LineTo(m_EndPoint);

m_EndPoint.y += int(ceil(h));
m_EndPoint.x -= int(ceil(r));
dc.LineTo(m_EndPoint);

m_EndPoint.y += int(ceil(s));
dc.LineTo(m_EndPoint);

m_EndPoint.y += int(ceil(h));
m_EndPoint.x += int(ceil(r));
dc.LineTo(m_EndPoint);

and it looks like the picture "hexagon.jpg"

the question is how can i fill it with color, lets say in red? or even more how can i fill it with a small picture instead of coloring it?

Any idea?
thank you

 Gene Poole 10Nov2009 21:10

Re: Urgent: Coloring Drawn Hexagons

For solid color, use CDC::FloodFill(). For an image, you'll have to set a clipping region to the shape of your hexagon and bitblt the image.

Re: Urgent: Coloring Drawn Hexagons

Quote:
 Originally Posted by Gene Poole (Post 60041) For solid color, use CDC::FloodFill(). For an image, you'll have to set a clipping region to the shape of your hexagon and bitblt the image.
thx, but can u tell me how do i do that :set a clipping region to the shape of your hexagon and bitblt the image?

can you tell me what should i add in this code:
----------------------------------------------------
Code:

CClientDC dc(pntWnd);

CPoint m_StartPoint = crdSouthEast;//(100,100)
CPoint m_EndPoint = crdSouthEast;
CPoint Temp;
computeHexagonQuantities(hexagonSide);//

POINT pts[6];

//Drawing
m_StartPoint.x -= int(ceil(r));

int temp=int(ceil(r));
m_EndPoint.x =m_StartPoint.x+temp;
m_EndPoint.y -= int(ceil(r));

pts[0]=m_StartPoint;
pts[1]=m_EndPoint;

m_EndPoint.x=m_StartPoint.x;
m_EndPoint.y-= int(ceil(r));

pts[2]=m_EndPoint;

m_EndPoint.x-=int(ceil(s));

pts[3]=m_EndPoint;

Temp.x=m_EndPoint.x;
m_EndPoint.x-=int(ceil(r));
m_EndPoint.y+= int(ceil(r));

pts[4]=m_EndPoint;

m_EndPoint.x = Temp.x;
m_EndPoint.y+= int(ceil(r));

pts[5]=m_EndPoint;

m_EndPoint.x =m_StartPoint.x;
m_EndPoint.y =m_StartPoint.y;

dc.Polygon(pts,6);

//PS
//i loaded a bitmap in another cpp file by doing :
CBitmap test;

//this "test" is passed by reference in the class containing the above code...
//so how to clipper and BitBlt it?

 Gene Poole 11Nov2009 00:22

Re: Urgent: Coloring Drawn Hexagons

This paints a bitmap defined in resources as IDB_BITMAP1 into a triangular clipping region on the screen:

Code:

CPaintDC dc(this);
POINT pts[3];
CRgn rgn1;
CDC memdc;
CBitmap cbm;
BITMAP bmp;

pts[0].x=10;
pts[0].y=100;

pts[1].x=60;
pts[1].y=20;

pts[2].x=100;
pts[2].y=100;

//dc.Polygon(pts,3);
rgn1.CreatePolygonRgn(pts,3,ALTERNATE);
dc.SelectClipRgn(&rgn1);
memdc.CreateCompatibleDC(&dc);

cbm.GetBitmap(&bmp);
CBitmap *tbmp=memdc.SelectObject(&cbm);
dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&memdc,0,0,SRCCOPY);

memdc.SelectObject(tbmp);

Re: Urgent: Coloring Drawn Hexagons

2 Attachment(s)
Quote:
 Originally Posted by Gene Poole (Post 60049) This paints a bitmap defined in resources as IDB_BITMAP1 into a triangular clipping region on the screen: Code:           CPaintDC dc(this);           POINT pts[3];           CRgn rgn1;           CDC memdc;           CBitmap cbm;           BITMAP bmp;                     pts[0].x=10;           pts[0].y=100;                     pts[1].x=60;           pts[1].y=20;                     pts[2].x=100;           pts[2].y=100;                     //dc.Polygon(pts,3);           rgn1.CreatePolygonRgn(pts,3,ALTERNATE);           dc.SelectClipRgn(&rgn1);           memdc.CreateCompatibleDC(&dc);                     cbm.LoadBitmap(IDB_BITMAP1);           cbm.GetBitmap(&bmp);           CBitmap *tbmp=memdc.SelectObject(&cbm);           dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&memdc,0,0,SRCCOPY);                     memdc.SelectObject(tbmp);
Thx a Lot..Still one more question , i have the following attached bitmap , when i use the code u gave me, it doesn't fit this bitmap in Each hex, it spread it along as many hex i am drawing... check" Result.jpg" to see what i mean.
how can i fit this bitmap in one hex, because i want to fit other bitmaps in the other hexes
thank you for the help.

 Gene Poole 11Nov2009 21:23

Re: Urgent: Coloring Drawn Hexagons

Between drawing each hexagon, call SelectClipRgn(NULL) to reset the clipping region, then call it again with the new hex region.

Re: Urgent: Coloring Drawn Hexagons

Quote:
 Originally Posted by Gene Poole (Post 60096) Between drawing each hexagon, call SelectClipRgn(NULL) to reset the clipping region, then call it again with the new hex region.
thx a lot for ur help... but i tried that and it didnt work...
if u dun mind ill show u my code tell me how exactly should i do it , and thx in advance but its just i need to fix it before wednesday and its not working...

i have a class called childview.cpp it has sthg like:
.
.
.
.//code
.
.
Code:

void CChildView::drawMap(CDC * pdc)
{
Hexagon obj;

CPoint point(600, 150);

CClientDC dc(this);
Dimensions dStep;
double hexagonSide = 40;//side of one edge
double r=((cos(30*PI/180))*hexagonSide);
int r2=int (ceil(r));
int NbOfHexes=3;
int shiftByX=hexagonSide+r2;

CBitmap test;

COLORREF RGB=RGB(255,0,255);//RGB object
//**** Starting hex
dStep = obj.draw(pdc, point, hexagonSide,test,RGB,RandColorsVec);
..//then changing coordinate of points then drawing again
dStep = obj.draw(pdc, point, hexagonSide,test,RGB,RandColorsVec);
//etc....

//and the method .draw is in a class called hexagons.cpp and is as follows:
Dimensions Hexagon::draw(CDC * pdc,
CPoint crdSouthEast, double hexagonSide,CBitmap& test,COLORREF RGB,vector <COLORREF> *RandColorsVec)
{

Dimensions dResult;
CPoint m_StartPoint = crdSouthEast;//(100,100)
CPoint m_EndPoint = crdSouthEast;
CPoint Temp;
computeHexagonQuantities(hexagonSide);//

POINT pts[6];//set of vertices of the hex

//Drawing
m_StartPoint.x -= int(ceil(r));

int temp=int(ceil(r));
m_EndPoint.x =m_StartPoint.x+temp;
m_EndPoint.y -= int(ceil(r));

pts[0]=m_StartPoint;
pts[1]=m_EndPoint;

m_EndPoint.x=m_StartPoint.x;
m_EndPoint.y-= int(ceil(r));

pts[2]=m_EndPoint;

m_EndPoint.x-=int(ceil(s));

pts[3]=m_EndPoint;

Temp.x=m_EndPoint.x;
m_EndPoint.x-=int(ceil(r));

m_EndPoint.y+= int(ceil(r));
//dc.LineTo(m_EndPoint);

pts[4]=m_EndPoint;

m_EndPoint.x = Temp.x;

m_EndPoint.y+= int(ceil(r));
//dc.LineTo(m_EndPoint);

pts[5]=m_EndPoint;

m_EndPoint.x =m_StartPoint.x;
m_EndPoint.y =m_StartPoint.y;

pdc->Polygon(pts,6);

dResult.height = int(ceil(b));
dResult.width = int(ceil(a));
dResult.h = int(ceil(h));
dResult.r = int(ceil(r));

return dResult;

}

//so can u add the codes for me plz? thx again

 Gene Poole 16Nov2009 19:40

Re: Urgent: Coloring Drawn Hexagons

Sorry, I can't do much with that code. There are several classes that I have no idea what they do and I don't know how or where you are calling this function. I don't see any use of CRgn or SetClipRgn in this code snippit either.

 All times are GMT +5.5. The time now is 00:27.