/* $Id$ * * Copyright (c) 2010 Anders Wallin (anders.e.e.wallin "at" gmail.com). * * This file is part of OpenCAMlib * (see https://github.com/aewallin/opencamlib). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #ifndef PATH_H #define PATH_H #include #include "point.hpp" #include "line.hpp" #include "arc.hpp" namespace ocl { /// Span type enum SpanType{ LineSpanType, ArcSpanType }; /// \brief A finite curve which returns Point objects along its length. /// /// location along span is based on a parameter t for which 0 <= t <= 1.0 class Span{ public: /// return type of span virtual SpanType type()const = 0; /// return the length of the span in the xy-plane virtual double length2d()const = 0; /// return a point at parameter value 0 <= t <= 1.0 virtual Point getPoint(double t) const = 0; // 0.0 to 1.0 /// avoid gcc 4.7.1 delete-non-virtual-dtor error virtual ~Span(){} }; /// Line Span class LineSpan : public Span { public: /// create a line span from Line l LineSpan(const Line& l) : line(l){} /// the line Line line; // Span's virtual functions /// return span type SpanType type()const{return LineSpanType;} /// return span length double length2d() const { return line.length2d(); } /// return point on span Point getPoint(double t) const { return line.getPoint(t); } }; /// circular Arc Span class ArcSpan : public Span { public: /// create span ArcSpan(const Arc& a) : arc(a){} /// arc Arc arc; // Span's virtual functions /// return type SpanType type()const{return ArcSpanType;} /// return length in xy-plane double length2d()const{return arc.length2d();} /// return a point on the span Point getPoint(double t)const{return arc.getPoint(t);} }; /// /// \brief A collection of Span objects /// class Path { public: /// create empty path Path(); /// copy constructor Path(const Path &p); /// destructor virtual ~Path(); /// list of spans in this path std::list span_list; // FIXME: this looks wrong // should be only one append() that takes a Span /// append a Line to this path void append(const Line &l); /// append an Arc to this path void append(const Arc &a); }; } // end namespace #endif // end file path.h