📄 fl_cartesian.cpp
字号:
//fl_vertex(x()+w()-border_,l);
fl_end_line();
}
while(next_tick(tick_index, tick_value, tick_order, _interval)){
_pos=position(tick_value);
if(scale_&CA_REV){
if(_pos<max_pos_-canvas_->border()) break;
if(_pos>min_pos_+canvas_->border()) continue;
}else{
if(_pos<min_pos_-canvas_->border()) continue;
if(_pos>max_pos_+canvas_->border()) break;
}
if(!(axis_align_&CA_NO_TICS)){
if(tick_index % major_step_){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l2);
fl_end_loop();
}else{
fl_begin_loop();
fl_vertex(_pos,m1);
fl_vertex(_pos,m2);
fl_end_loop();
}
}
if(!((tick_index % label_step_)|(axis_align_&CA_NO_LABELS))){
char label[MAX_LABEL_LENGTH];
char _label_format[MAX_LABEL_FORMAT];
if(!label_format){
int _tick_order;
if (tick_order>=0)
_tick_order=0;
else
_tick_order=-tick_order;
sprintf(_label_format,"%s.%if","%",_tick_order);
}
else
strcpy(_label_format,label_format);
sprintf(label, _label_format,tick_value);
fl_measure(label,_w,_h);
_x=_pos-_w/double(2);
switch (axis_align_ & CA_ALIGNMENT){
case CA_TOP:
_y=m1-_h/3;
break;
case CA_BOTTOM:
_y=m2+_h;
break;
case CA_CENTER:
_y=l+_h/3;
{
Fl_Color _color=fl_color();
fl_color(color());
ca_rectf(_x-_h/6,l-_h/2,_w+_h/3,_h);
fl_color(_color);
}
break;
default:
_y=0;
break;
}
ca_text(label,_x,_y);
}
}
fl_line_style(0,0);
fl_pop_clip();
}
};
void Ca_X_Axis::current(){
canvas_->current_x(this);
};
void Ca_X_Axis::draw_grid(){
if(!valid_)return;
int tick_index=-1;
double tick_value;
int tick_order;
double _interval=0;
int l1,l2;
double _pos;
l1=canvas_->y()+Fl::box_dy(canvas_->box());
l2=canvas_->y()+canvas_->h()+Fl::box_dy(canvas_->box())-Fl::box_dh(canvas_->box());
int tcl;
if(!(tcl=tick_length_))
tcl=label_font_size_;
while(next_tick(tick_index, tick_value, tick_order, _interval)){
_pos=position(tick_value);
if(scale_&CA_REV){
if(_pos<max_pos_-canvas_->border()) break;
if(_pos>min_pos_+canvas_->border()) continue;
}else{
if(_pos<min_pos_-canvas_->border()) continue;
if(_pos>max_pos_+canvas_->border()) break;
}
int grt;
if((grt=grid_visible_ & CA_LABEL_GRID) && !(tick_index % label_step_)){
fl_color(label_grid_color_);
fl_line_style(label_grid_style_,label_grid_width_);
if(grt==CA_LABEL_GRID){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l2);
fl_end_loop();
}else{
if(grt&CA_LEFT_LABEL_TICK){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l1+tcl);
fl_end_loop();
}
if(grt&CA_RIGHT_LABEL_TICK){
fl_begin_loop();
fl_vertex(_pos,l2-tcl);
fl_vertex(_pos,l2);
fl_end_loop();
}
}
}else if((grt=grid_visible_ & CA_MAJOR_GRID) && !(tick_index % major_step_)){
fl_color(major_grid_color_);
fl_line_style(major_grid_style_,major_grid_width_);
if(grt==CA_MAJOR_GRID){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l2);
fl_end_loop();
}else{
if(grt&CA_LEFT_MAJOR_TICK){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l1+tcl);
fl_end_loop();
}
if(grt&CA_RIGHT_MAJOR_TICK){
fl_begin_loop();
fl_vertex(_pos,l2-tcl);
fl_vertex(_pos,l2);
fl_end_loop();
}
}
}else if((grt=grid_visible_&CA_MINOR_GRID)){
fl_color(minor_grid_color_);
fl_line_style(minor_grid_style_,minor_grid_width_);
if(grt==CA_MINOR_GRID){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l2);
fl_end_loop();
}else{
if(grt&CA_LEFT_MINOR_TICK){
fl_begin_loop();
fl_vertex(_pos,l1);
fl_vertex(_pos,l1+tcl/2);
fl_end_loop();
}
if(grt&CA_RIGHT_MINOR_TICK){
fl_begin_loop();
fl_vertex(_pos,l2-tcl/2);
fl_vertex(_pos,l2);
fl_end_loop();
}
}
}
}
fl_line_style(0,0);
fl_color(FL_BLACK);
};
Ca_X_Axis::Ca_X_Axis(int x, int y, int w, int h, const char *label):Ca_Axis_(x, y, w, h, label){
if(!(canvas_->current_x()))
current();
};
Ca_X_Axis::~Ca_X_Axis(){
if(canvas_){
Ca_ObjectChain *ochain=canvas_->first_object_;
Ca_ObjectChain *next;
Ca_ObjectChain *previous=0;
while (ochain){
next=ochain->next;
if(ochain->object->x_axis_==this){
delete ochain->object;
if(previous)
previous->next=next;
else
canvas_->first_object_=next;
delete ochain;
}
ochain=next;
}
}
}
//////////////////////////// Ca_Y_Axis //////////////////////////////////////////////////////
int Ca_Y_Axis::min_pos(){
if (scale_&CA_REV)
return canvas_->y()+canvas_->border()+Fl::box_dy(canvas_->box());
else
return canvas_->y()+canvas_->h()-canvas_->border()+Fl::box_dy(canvas_->box())-Fl::box_dh(canvas_->box());
};
int Ca_Y_Axis::max_pos(){
if (scale_&CA_REV)
return canvas_->y()+canvas_->h()-canvas_->border()+Fl::box_dy(canvas_->box())-Fl::box_dh(canvas_->box());
else
return canvas_->y()+canvas_->border()+Fl::box_dy(canvas_->box());
};
void Ca_Y_Axis::draw(){
int tick_index=-1;
double tick_value;
int tick_order;//,tick_number;
double _interval=0;
const char * label_format=label_format_;
// if(damage()|FL_DAMAGE_ALL)
// draw_label();
if (damage()&(FL_DAMAGE_ALL|CA_DAMAGE_ALL)){
update();
if (box()==FL_NO_BOX){
fl_color(parent()->color());
fl_rectf(x(),y(),w(),h());
}else
draw_box();
if(!valid_) return;
fl_font(label_font_face_,label_font_size_);
int a, b, l1, l2, m1, m2, l,_x,_w,_h; //temporary coordinates for ticks
double _pos,_y;
fl_clip(x()+Fl::box_dx(box()),y()+Fl::box_dy(box()),w()-Fl::box_dw(box()),h()-Fl::box_dh(box()));
fl_color(axis_color_);
a=x()+Fl::box_dx(box())+border_;
b=a+w()-Fl::box_dw(box())-2*border_;
switch(axis_align_ & CA_ALIGNMENT){
case CA_RIGHT:
l=l1=m1=a;
if(axis_align_&CA_NO_TICS)
m2=m1;
else
if (tick_length_)
m2=m1+tick_length_;
else
m2=m1+label_font_size_;
l2=(l1+m2)/2;
break;
case CA_LEFT:
l=l2=m2=b-1;
if(axis_align_&CA_NO_TICS)
m1=m2;
else
if (tick_length_)
m1=m2-tick_length_;
else
m1=m2-label_font_size_;
l1=(m1+m2)/2;
break;
case CA_CENTER:
m1=a;
m2=b;
l=(a+b)/2;
l1=(a+l)/2;
l2=(l+b)/2;
break;
default:
m1=0;
m2=0;
l=0;
l1=0;
l2=0;
break;
}
fl_line_style(FL_SOLID|FL_CAP_FLAT,tick_width_);
// double minp,maxp;
if(axis_align_ & CA_LINE){
fl_begin_line();
fl_vertex(l,canvas_->y()+Fl::box_dy(canvas_->box()));
fl_vertex(l,canvas_->y()+canvas_->h()+Fl::box_dy(canvas_->box())-Fl::box_dh(canvas_->box()));
//fl_vertex(x()+border_,l);
//fl_vertex(x()+w()-border_,l);
fl_end_line();
}
while(next_tick(tick_index, tick_value, tick_order, _interval)){
_pos=position(tick_value);
if(scale_&CA_REV){
if(_pos<min_pos_-canvas_->border()) continue;
if(_pos>max_pos_+canvas_->border()) break;
}else{
if(_pos<max_pos_-canvas_->border()) break;
if(_pos>min_pos_+canvas_->border()) continue;
}
if(!(axis_align_&CA_NO_TICS)){
fl_begin_loop();
if(tick_index % major_step_){
fl_vertex(l1,_pos);
fl_vertex(l2,_pos);
}else{
fl_vertex(m1,_pos);
fl_vertex(m2,_pos);
}
fl_end_loop();
}
if(!((tick_index % label_step_)|(axis_align_&CA_NO_LABELS))){
char label[MAX_LABEL_LENGTH];
char _label_format[MAX_LABEL_FORMAT];
if(!label_format){
int _tick_order;
if (tick_order>=0)
_tick_order=0;
else
_tick_order=-tick_order;
sprintf(_label_format,"%s.%if","%",_tick_order);
}
else
strcpy(_label_format,label_format);
sprintf(label, _label_format,tick_value);
fl_measure(label,_w,_h);
_y=_pos+_h/3;
switch (axis_align_ & CA_ALIGNMENT){
case CA_LEFT:
_x=m1-_h/3-_w;
break;
case CA_RIGHT:
_x=m2+_h/3;
break;
case CA_CENTER:
_x=(m1+m2)/2-_w/2;
{
Fl_Color _color=fl_color();
fl_color(color());
ca_rectf(_x-_h/6,_pos-_h/2,_w+_h/3,_h);
fl_color(_color);
}
break;
default:
_x=0;
break;
}
ca_text(label,_x,_y);
}
}
fl_line_style(0);
fl_pop_clip();
}
};
void Ca_Y_Axis::current(){
canvas_->current_y(this);
};
void Ca_Y_Axis::draw_grid(){
if(!valid_)return;
int tick_index=-1;
double tick_value;
int tick_order;
double _interval=0;
int l1,l2;
l1=canvas_->x()+Fl::box_dx(canvas_->box());
l2=canvas_->x()+canvas_->w()+Fl::box_dx(canvas_->box())-Fl::box_dw(canvas_->box());
int tcl;
if(!(tcl=tick_length_))
tcl=label_font_size_;
while(next_tick(tick_index, tick_value, tick_order,_interval)){
double _pos=position(tick_value);
if(scale_&CA_REV){
if(_pos<min_pos_-canvas_->border()) continue;
if(_pos>max_pos_+canvas_->border()) break;
}else{
if(_pos<max_pos_-canvas_->border()) break;
if(_pos>min_pos_+canvas_->border()) continue;
}
int grt;
if((grt=grid_visible_&CA_LABEL_GRID) && !(tick_index % label_step_)){
fl_color(label_grid_color_);
fl_line_style(label_grid_style_,label_grid_width_);
if(grt==CA_LABEL_GRID){
fl_begin_loop();
fl_vertex(l1,_pos);
fl_vertex(l2,_pos);
fl_end_loop();
}else{
if(grt&CA_LEFT_LABEL_TICK){
fl_begin_loop();
fl_vertex(l1,_pos);
fl_vertex(l1+tcl,_pos);
fl_end_loop();
}
if(grt&CA_RIGHT_LABEL_TICK){
fl_begin_loop();
fl_vertex(l2-tcl,_pos);
fl_vertex(l2,_pos);
fl_end_loop();
}
}
}else if((grt=grid_visible_&CA_MAJOR_GRID) && !(tick_index % major_step_)){
fl_color(major_grid_color_);
fl_line_style(major_grid_style_,major_grid_width_);
if(grt==CA_MAJOR_GRID){
fl_begin_loop();
fl_vertex(l1,_pos);
fl_vertex(l2,_pos);
fl_end_loop();
}else{
if(grt&CA_LEFT_MAJOR_TICK){
fl_begin_loop();
fl_vertex(l1,_pos);
fl_vertex(l1+tcl,_pos);
fl_end_loop();
}
if(grt&CA_RIGHT_MAJOR_TICK){
fl_begin_loop();
fl_vertex(l2-tcl,_pos);
fl_vertex(l2,_pos);
fl_end_loop();
}
}
}else if((grt=(grid_visible_&CA_MINOR_GRID))){
fl_color(minor_grid_color_);
fl_line_style(minor_grid_style_,minor_grid_width_);
if(grt==CA_MINOR_GRID){
fl_begin_loop();
fl_vertex(l1,_pos);
fl_vertex(l2,_pos);
fl_end_loop();
}else{
if(grt&CA_LEFT_MINOR_TICK){
fl_begin_loop();
fl_vertex(l1,_pos);
fl_vertex(l1+tcl/2,_pos);
fl_end_loop();
}
if(grt&CA_RIGHT_MINOR_TICK){
fl_begin_loop();
fl_vertex(l2-tcl/2,_pos);
fl_vertex(l2,_pos);
fl_end_loop();
}
}
}
}
fl_line_style(0,0);
fl_color(FL_BLACK);
};
Ca_Y_Axis::Ca_Y_Axis(int x, int y, int w, int h, const char * label):Ca_Axis_(x, y, w, h, label){
if(!(canvas_->current_y()))
current();
axis_align(CA_LEFT|CA_LINE);
};
Ca_Y_Axis::~Ca_Y_Axis(){
if(canvas_){
Ca_ObjectChain *ochain=canvas_->first_object_;
Ca_ObjectChain *next;
Ca_ObjectChain *previous=0;
while (ochain){
next=ochain->next;
if(ochain->object->y_axis_==this){
delete ochain->object;
if(previous)
previous->next=next;
else
canvas_->first_object_=next;
delete ochain;
}
ochain=next;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -