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))));
}
}
}
}
}