#include "arc.h" #include "container.h" #include "canvas.h" #include "frame.h" #include "warning.h" #include "sym.h" namespace blop { double arc::default_angle1_ = 0; double arc::default_angle2_ = 360*unit::deg; sym::linestyle arc::default_linestyle_ = sym::solid; length &arc::default_linewidth_() { static length w = length::base_id_t(terminal::LW); return w; } color &arc::default_linecolor_() { static color c(0,0,0); return c; } color &arc::default_fillcolor_() { static color c(0,0,0); return c; } bool arc::default_draw_line_ = true; bool arc::default_fill_ = false; void arc::default_linestyle(sym::linestyle i) { default_linestyle_ = i; } void arc::default_linewidth(length l) { default_linewidth_() = l; } void arc::default_linecolor(color &c) { default_linecolor_() = c; } void arc::default_fillcolor(color &c) { default_fillcolor_() = c; } void arc::default_draw_line(bool f) { default_draw_line_ = f; } void arc::default_fill(bool f) { default_fill_ = f; } length &arc::default_rx() { static length rx = CM; return rx; } void arc::default_rx(length l) { default_rx() = l; } length &arc::default_ry() { static length ry = CM; return ry; } void arc::default_ry(length l) { default_ry() = l; } void arc::default_angle1(double a) { default_angle1_ = a; } double arc::default_angle1() { return default_angle1_; } void arc::default_angle2(double a) { default_angle2_ = a; } double arc::default_angle2() { return default_angle2_; } arc::arc(length x, length y, length rx, length ry, double angle1, double angle2) { x_ = x; y_ = y; rx_ = rx; ry_ = ry; angle1_ = angle1; angle2_ = angle2; linestyle_ = default_linestyle_; linewidth_ = default_linewidth_(); linecolor_ = default_linecolor_(); fillcolor_ = default_fillcolor_(); draw_line_ = default_draw_line_; fill_ = default_fill_; } arc &arc::draw (container *parent, const length &x, const length &y, const length &rx, const length &ry, double angle1, double angle2) { arc *a = new arc(x,y,rx,ry,angle1,angle2); a->autodel(true); parent->add(a); return *a; } arc &arc::fdraw (const length &x, const length &y, const length &rx, const length &ry, double angle1, double angle2) { return arc::draw(&frame::current(), x, y, rx, ry, angle1, angle2); } arc &arc::pdraw (const length &x, const length &y, const length &rx, const length &ry, double angle1, double angle2) { return arc::draw(&pad::current(), x, y, rx, ry, angle1, angle2); } arc &arc::cdraw (const length &x, const length &y, const length &rx, const length &ry, double angle1, double angle2) { return arc::draw(&canvas::current(), x, y, rx, ry, angle1, angle2); } void arc::prepare_for_draw() { if(print_me_ == 0) return; if(parent() == 0) { warning::print("Strange: no parent of arc"); return; } x_.set_scale(x_unit()); y_.set_scale(y_unit()); rx_.set_scale(x_unit()); ry_.set_scale(y_unit()); x_.register_me(); y_.register_me(); rx_.register_me(); ry_.register_me(); linewidth_.register_me(); } void arc::print(terminal *t) { if(print_me_ != 2) return; t->open_layer(layer_); if(fill_) { t->set_color(fillcolor_); t->fill_arc(terminal::coord(x_.termspecific_id(), y_.termspecific_id()), rx_.termspecific_id(), angle1_, angle2_); } t->set_color(linecolor_); t->set_linestyle(linestyle_); t->set_linewidth(linewidth_.termspecific_id()); t->draw_arc(terminal::coord(x_.termspecific_id(), y_.termspecific_id()), rx_.termspecific_id(), angle1_, angle2_); t->close_layer(layer_); } }