⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fl_cartesian.cpp

📁 MSP430FG437 SPO2 Source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			//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 + -