#include <wx/wx.h>
#include <wx/region.h>
class Simple:public wxFrame
{
public:
Simple(const wxString& title);
protected:
void OnPaint(wxPaintEvent& event);
};
Simple::Simple(const wxString& title)
:wxFrame(NULL,-1,title,wxPoint(-1,-1),wxSize(-1,-1))
{
Bind(wxEVT_PAINT,wxPaintEventHandler(Simple::OnPaint),this);
Centre();
}
void Simple::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
wxRect rt;
wxRegion region1,region2;
wxSize sz(50,50);
wxColour white,red,blue;
white.Set("#ffffff");
red.Set("#FF0000");
blue.Set("#0d0060");
dc.SetPen(wxPen(blue,3,wxSOLID));
//0.2个白色矩形
dc.DrawRectangle(20,20,50,50);
dc.DrawRectangle(30,40,50,50);
//1.交集 intersect
wxRect rect1(wxPoint(100,20),sz);
wxRect rect2(wxPoint(110,40),sz);
dc.SetBrush(*wxWHITE);
dc.DrawRectangle(rect1);
dc.DrawRectangle(rect2);
rt = rect1.Intersect(rect2);
rt = rect1 * rect2;
dc.SetBrush(*wxRED);
dc.DrawRectangle(rt);
//2.并集 unin
rect1.SetPosition(wxPoint(180,20));rect1.SetSize(sz);
rect2 = wxRect(wxPoint(190,40),sz);
dc.SetBrush(wxBrush(white));
dc.DrawRectangle(rect1);
dc.DrawRectangle(rect2);
rt = rect1.Union(rect2);
rt = rect1 + rect2;
dc.SetBrush(*wxRED);
dc.DrawRectangle(rt);
rect1.Offset(70,10);
rect2.Offset(70,10);
rect1 = wxRect(wxPoint(250,20),sz);
rect2 = wxRect(wxPoint(260,40),sz);
dc.SetBrush(wxBrush(white));
dc.DrawRectangle(rect1);
dc.DrawRectangle(rect2);
region1 = wxRegion(rect1);
region2 = wxRegion(rect2);
region1.Union(region2);
dc.SetClippingRegion(region1);
rt = region1.GetBox();
dc.SetBrush(*wxRED);
dc.DrawRectangle(rt);
dc.DestroyClippingRegion();
//3.差集 xor
rect1 = wxRect(wxPoint(20,120),sz);
rect2 = wxRect(wxPoint(30,140),sz);
region1= wxRegion(rect1);
region2= wxRegion(rect2);
dc.SetBrush(wxBrush(white));
dc.DrawRectangle(rect1);
dc.DrawRectangle(rect2);
region1.Xor(region2);
rt = region1.GetBox();
dc.SetBrush(*wxRED);
dc.SetClippingRegion(region1);//设置绘图区域,即限制绘图的区域
dc.DrawRectangle(rt);
dc.DestroyClippingRegion();//销毁当前绘图区域
//4.相减 Subtract
rect2 = wxRect(wxPoint(110,140),sz);
rect1 = wxRect(wxPoint(100,120),sz);
region1 = wxRegion(rect1);
region2 = wxRegion(rect2);
dc.SetBrush(wxBrush(white));
dc.DrawRectangle(rect1);
dc.DrawRectangle(rect2);
region1.Subtract(region2);
rt = region1.GetBox();
dc.SetBrush(*wxRED);
dc.SetClippingRegion(region1);//设置绘图区域,即限制绘图的区域
dc.DrawRectangle(rt);
dc.DestroyClippingRegion();//销毁当前绘图区域
//5 相减 Subtract
rect1 = wxRect(wxPoint(180,120),wxSize(50,50));
rect2 = wxRect(wxPoint(190,140),wxSize(50,50));
region1 = wxRegion(rect1);
region2 = wxRegion(rect2);
dc.SetBrush(wxBrush(white));
dc.DrawRectangle(rect1);
dc.DrawRectangle(rect2);
region2.Subtract(region1);
wxRect rt5 = region2.GetBox();
dc.SetClippingRegion(region2);
dc.SetBrush(*wxRED);
dc.DrawRectangle(rt5);
dc.DestroyClippingRegion();
}