Painter20 dasher

git-svn-id: svn://ultimatepp.org/upp/trunk@840 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2009-02-07 13:35:31 +00:00
parent 68c2a1caaa
commit 068030de69
13 changed files with 231 additions and 505 deletions

View file

@ -2,16 +2,6 @@
Image PaintLion(Size sz);
struct Raget : VertexTarget {
Rasterizer& r;
virtual void Line(Pointf p) { r.Line(p.x, p.y); DUMP(p); }
virtual void Move(Pointf p) { r.Move(p.x, p.y); }
virtual void End() {}
Raget(Rasterizer& r) : r(r) {}
};
struct App : TopWindow {
double x1, y1, x2, y2, x3, y3;
@ -40,58 +30,6 @@ struct App : TopWindow {
virtual void Paint(Draw& w);
virtual void Paint1(Draw& w) {
ImageBuffer ib(600, 600);
Fill(~ib, White(), ib.GetLength());
/* Apply(ib[20], 100, Black(), a);
a.x = 10;
Apply(ib[30], 100, Blue(), a);
for(int i = 0; i < 20; i++) {
b = Pack(i, line1, __countof(line1));
Apply(ib[50 + 2 * i], 100, Black(), And(a, b));
}
*/
Rasterizer r(600, 600);
// r.SetClip(RectfC(100, 100, 200, 200));
#if 0
r.Move(195.000000, 65.000000);
r.Line(0.000000, 0.000000);
r.Line(183.000000, 501.000000);
r.Line(195.000000, 65.000000);
#endif
#if 0
r.Move(x1, y1);
r.Line(x2, y2);
r.Line(x3, y3);
r.Line(x1, y1);
#endif
#if 1
r.Move(200, 300);
// ApproximateQuadratic(q, Pointf(200, 300), Pointf(400, 50), Pointf(600, 300), 0.3);
r.Line(200, 300);
Render(ib, r, Red(), false);
#endif
r.Move(100, 200);
// ApproximateCubic(q, Pointf(100, 200), Pointf(100, 100), Pointf(250, 100), Pointf(250, 200), 2);
r.Line(150, 400);
r.Line(100, 200);
Render(ib, r, Blue(), false);
LOG("---------");
/*
r.Move(200, 300);
Quadratic(q, Pointf(200, 300), Pointf(400, 50), Pointf(600, 300), 10);
r.Line(200, 300);
Render(ib, r, Blue(), false);
*/
w.DrawRect(GetSize(), White());
w.DrawImage(0, 0, ib);
w.DrawText(0, GetSize().cy - 40, Text());
// w.DrawImage(300, 300, PaintLion(GetSize()));
}
App() {
p1 = p4 = Pointf(100, 100);
@ -100,26 +38,6 @@ struct App : TopWindow {
}
};
struct RasterizerTarget : VertexTarget {
Rasterizer& r;
ImageBuffer& ib;
virtual void Line(const Pointf& p)
{
r.Line(p.x, p.y);
}
virtual void Move(const Pointf& p)
{
r.Move(p.x, p.y);
}
virtual void End()
{
Render(ib, r, Black(), false);
}
RasterizerTarget(ImageBuffer& ib, Rasterizer& r) : ib(ib), r(r) {}
};
#if 1
void App::Paint(Draw& w)
{
@ -127,17 +45,21 @@ void App::Paint(Draw& w)
ImageBuffer ib(sz.cx, sz.cy);
Rasterizer r(sz.cx, sz.cy);
Fill(~ib, White(), ib.GetLength());
RasterizerTarget tgt(ib, r);
Stroker s(20, 4, 0.3, LINECAP_ROUND, LINEJOIN_ROUND);
Stroker s(20, 4, 0.3, LINECAP_BUTT, LINEJOIN_MITER);
Vector<double> dash;
dash << 4 << 2;
Dasher d(20, dash, GetMousePos().y);
s|tgt;
d|s|r;
s.Move(p1);
s.Line(p2);
// s.Line(p3);
// s.Line(p4);
s.End();
d.Move(p1);
d.Line(p2);
d.Line(p3);
d.Line(p4);
d.End();
Render(ib, r, Black(), false);
w.DrawImage(0, 0, ib);
}
@ -176,9 +98,8 @@ void App::Paint(Draw& w)
#endif
GUI_APP_MAIN {
App().Run();
#ifdef _DEBUG
// App().Run();
App().Run();
#else _DEBUG
Size sz(800, 600);
int time;