www.pudn.com > Genecircus20070919.rar > myCanvas.cpp


// myCanvas.cpp: implementation of the myCanvas class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "myCanvas.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
#define  Scable_x 0.1642 
#define  Scable_y 0.1927 
IMPLEMENT_DYNAMIC_CLASS(myCanvas, wxScrolledWindow) 
 
BEGIN_EVENT_TABLE(myCanvas,wxScrolledWindow) 
	 EVT_PAINT(myCanvas::OnPaint) 
END_EVENT_TABLE() 
 
myCanvas::myCanvas(){ 
	bufferdc = NULL; 
} 
 
myCanvas::myCanvas( wxWindow *parent, wxWindowID id, 
                    const wxPoint &pos, const wxSize &size ) 
        : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER )           
{ 
	bufferdc = NULL; 
	net = NULL; 
	index_vip = -1; 
	if_complex_calculate = false; 
} 
 
myCanvas::~myCanvas() 
{ 
} 
 
void myCanvas::OnPaint(wxPaintEvent &WXUNUSED(event)) 
{ 
	wxPaintDC dc1(this); 
    PrepareDC(dc1); 
    dc1.Clear(); 
	draw(dc1); 
} 
 
void myCanvas::draw(wxDC &dc) 
{ 
	if(net != NULL){ 
	   if(net->c.size() != 0 || net->g.size() != 0){ 
		  for(int i = 0;i < net->g.size();i++){//net->g.size() 
			  if(i == 0){ 
				 dc.SetPen(*wxRED_PEN); 
			     dc.SetBrush(wxBrush(*wxGREEN, wxSOLID)); 
			     dc.DrawCircle(net->g[i].x, net->g[i].y, 20); 
			  } 
			  else{ 
			     dc.SetBrush(wxBrush(*wxRED, wxSOLID)); 
                 dc.DrawCircle(net->g[i].x, net->g[i].y, 10); 
				 if(net->g[i].if_have_other == true){ 
					dc.SetPen(*wxBLACK_PEN); 
					dc.SetBrush(wxBrush(*wxBLACK,wxSOLID)); 
					dc.DrawLine(net->g[i].x, net->g[i].y, 
						    net->g[i].x+40*sin(net->g[i].index_orginial*(2*M_PI/(net->size_total-1))), net->g[i].y-40*cos(net->g[i].index_orginial*(2*M_PI/(net->size_total-1)))); 
				 } 
			  } 
		  } 
		  dc.SetPen(*wxBLACK_PEN); 
		  dc.SetBrush(wxBrush(*wxBLACK,wxTRANSPARENT )); 
		  dc.DrawCircle(net->g[0].x, net->g[0].y, 320);	 
		  if(this->if_complex_calculate){			  	   
			  for(int i = 0;i < net->c.size();i++){ 
				  if(net->c[i].delete_or_keep == false){ 
					 dc.SetPen(wxPen(*wxBLACK, 1, wxSOLID)); 
					 int x = net->g[net->c[i].index_begin].x; 
					 int y = net->g[net->c[i].index_begin].y; 
					 int x1 = net->g[net->c[i].index_end].x; 
					 int y1 = net->g[net->c[i].index_end].y; 
					 dc.DrawLine(x, y, x1, y1); 
					 //string temp = boost::lexical_cast(net->c[i].mi); 
					 //int index_point = temp.find('.'); 
					 //index_point += 4; 
					 //temp = temp.substr(0,index_point); 
					 //dc.SetFont( wxFont(5, wxMODERN, wxNORMAL, wxNORMAL, false) ); 
					 //dc.DrawText(temp.c_str(), (x+x1)/2,(y+y1)/2); 
				  } 
				  if(net->c[i].index_begin == index_vip && net->c[i].delete_or_keep == false && index_vip != -1			  
					 || 
					 net->c[i].index_end == index_vip && net->c[i].delete_or_keep == false && index_vip != -1){ 
					 dc.SetPen(wxPen(*wxBLUE, 1, wxSOLID)); 
					 int x = net->g[net->c[i].index_begin].x; 
					 int y = net->g[net->c[i].index_begin].y; 
					 int x1 = net->g[net->c[i].index_end].x; 
					 int y1 = net->g[net->c[i].index_end].y; 
					 dc.DrawLine(x, y, x1, y1); 
				  } 
			  } 
		  } 
		  else{ 
			  for(int i = 0;i < net->c.size();i++){ 
				  if(net->c[i].index_begin == 0  
					 || 
                     net->c[i].index_end == 0){  
					  if(net->c[i].delete_or_keep == false){ 
						 dc.SetPen(wxPen(*wxBLACK, 1, wxSOLID)); 
						 int x = net->g[net->c[i].index_begin].x; 
						 int y = net->g[net->c[i].index_begin].y; 
						 int x1 = net->g[net->c[i].index_end].x; 
						 int y1 = net->g[net->c[i].index_end].y; 
						 dc.DrawLine(x, y, x1, y1); 
					  } 
				  } 
			  } 
		  } 
		  /////Draw gene name 
          for(int i = 0;i < net->g.size();i++){//net->g.size() 
			  if(i == 0){ 
				 dc.SetPen(*wxRED_PEN); 
			     dc.SetBrush(wxBrush(*wxGREEN, wxSOLID)); 
				 dc.SetFont( wxFont(10, wxMODERN, wxNORMAL, wxNORMAL, false) ); 
				 dc.DrawText( net->g[i].name, net->g[i].x+15*(sin(i*M_PI*2/(net->g.size()-1))), net->g[i].y-15*(sin(i*M_PI*2/(net->g.size()-1))) ); 
			  } 
			  else{ 
			     dc.SetBrush(wxBrush(*wxRED, wxSOLID)); 
				 dc.SetFont( wxFont(8, wxMODERN, wxNORMAL, wxNORMAL, false) ); 
				 dc.DrawText( net->g[i].name,  
					         net->g[i].x+30*sin(net->g[i].index_orginial*(2*M_PI/(net->size_total-1))), net->g[i].y-30*cos(net->g[i].index_orginial*(2*M_PI/(net->size_total-1)))); 
			  } 
		  } 
	   } 
	} 
}