/* $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 BPC_H #define BPC_H #include #include #include #include "point.hpp" #include "fiber.hpp" #include "kdtree.hpp" #include "operation.hpp" namespace ocl { class STLSurf; class Triangle; class MillingCutter; /// /// BatchPushCutter takes a MillingCutter, an STLSurf, and many Fibers /// and pushes the cutter along the fibers into contact with the surface. /// When this runs the Fibers will be updated with the correct interval data. /// This is then used to build a weave and extract a waterline. class BatchPushCutter : public Operation { public: BatchPushCutter(); virtual ~BatchPushCutter(); /// 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;} /// append to list of Fibers to evaluate void appendFiber(Fiber& f); /// run push-cutter void run() {this->pushCutter3();} //void run() {this->pushCutter1();} std::vector* getFibers() const {return fibers;} void reset(); protected: /// 1st version of algorithm void pushCutter1(); /// 2nd version of algorithm void pushCutter2(); /// 3rd version of algorithm void pushCutter3(); /// pointer to list of Fibers std::vector* fibers; // 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