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