X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fprofile.cpp;h=907da8adf791fb12a068dc3a318e13dde108429b;hb=23e1a988da2efae47e39d93babe7e37b1c0ca554;hp=257b898f39d14fa390e8d58b3b918faf24cc520f;hpb=c5f5ec54e81a6a85f911fa1075a0939a7352fbfd;p=r2c2.git diff --git a/source/libr2c2/profile.cpp b/source/libr2c2/profile.cpp index 257b898..907da8a 100644 --- a/source/libr2c2/profile.cpp +++ b/source/libr2c2/profile.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #include #include "profile.h" @@ -13,7 +6,7 @@ using namespace Msp; namespace R2C2 { -void Profile::append_vertex(const Point &p, bool smooth) +void Profile::append_vertex(const Vector &p, bool smooth) { if(vertices.size()>1 && !vertices.back().smooth) vertices.push_back(vertices.back()); @@ -24,20 +17,16 @@ void Profile::append_vertex(const Point &p, bool smooth) if(!vertices.empty()) { - float dx = p.x-vertices.back().pos.x; - float dy = p.y-vertices.back().pos.y; - float len = sqrt(dx*dx+dy*dy); - v.normal.x = dy/len; - v.normal.y = -dx/len; + Vector span = p-vertices.back().pos; + span.normalize(); + v.normal.x = span.y; + v.normal.y = -span.x; if(vertices.back().smooth) { - Point &n = vertices.back().normal; - n.x += v.normal.x; - n.y += v.normal.y; - len = sqrt(n.x*n.x+n.y*n.y); - n.x /= len; - n.y /= len; + Vector &n = vertices.back().normal; + n += v.normal; + n.normalize(); } else vertices.back().normal = v.normal; @@ -62,7 +51,7 @@ void Profile::append_vertex(const Point &p, bool smooth) const Profile::Vertex &Profile::get_vertex(unsigned i) const { if(i>=vertices.size()) - throw InvalidParameterValue("Index out of range"); + throw out_of_range("Profile::get_vertex"); return vertices[i]; } @@ -76,12 +65,12 @@ Profile::Loader::Loader(Profile &p): void Profile::Loader::point(float x, float y) { - obj.append_vertex(Point(x/1000, y/1000), false); + obj.append_vertex(Vector(x/1000, y/1000, 0), false); } void Profile::Loader::smooth_point(float x, float y) { - obj.append_vertex(Point(x/1000, y/1000), true); + obj.append_vertex(Vector(x/1000, y/1000, 0), true); } } // namespace R2C2