/* $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 FIBERPUSHCUTTER_H #define FIBERPUSHCUTTER_H #include #include #include #include "point.hpp" #include "fiber.hpp" #include "operation.hpp" namespace ocl { /// /// \brief run push-cutter on a single input fiber class FiberPushCutter : public Operation { public: FiberPushCutter(); virtual ~FiberPushCutter(); /// set the STL-surface and build kd-tree void setSTL(const STLSurf& s); /// set this bpc to be x-direction void setXDirection() {x_direction=true;y_direction=false;} /// set this bpc to be Y-direction void setYDirection() {x_direction=false;y_direction=true;} /// run() is an error. void run() {assert(0);} void run(Fiber& f) {pushCutter2(f);} protected: /// input fiber is tested against all triangles of surface void pushCutter1(Fiber& f); /// use kd-tree search to find overlapping triangles void pushCutter2(Fiber& f); // DATA /// true if this we have only x-direction fibers bool x_direction; /// true if we have y-direction fibers bool y_direction; }; } // end namespace #endif