BlinkenArea - GitList
Repositories
Blog
Wiki
libetherpix
Code
Commits
Branches
Tags
Search
Tree:
a3a92ab
Branches
Tags
master
libetherpix
config_gen
src
object.cpp
rename "FlexiPix" to "EtherPix"
Stefan Schuermans
commited
a3a92ab
at 2017-05-20 16:55:59
object.cpp
Blame
History
Raw
/* * EtherPix config file generator * * Copyright 2010 Stefan Schuermans <stefan schuermans info> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3 of the License. * * * 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 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 <http://www.gnu.org/licenses/>. */ #include <vector> #include "line.h" #include "object.h" Object::~Object() { std::vector<const Line *>::const_iterator itLine; for (itLine = mLines.begin(); itLine != mLines.end(); ++itLine) delete *itLine; } void Object::getBounds(Box &bounds) const { if (mLines.empty()) return; (*mLines.begin())->getBounds(bounds); Box bnds; std::vector<const Line *>::const_iterator itLine; for (itLine = mLines.begin() + 1; itLine != mLines.end(); ++itLine) { (*itLine)->getBounds(bnds); bounds.include(bnds); } } bool Object::isIntersecting(const Line *pLine) const { Box b, b2; getBounds(b); pLine->getBounds(b2); if (!b.isIntersecting(&b2)) return false; std::vector<const Line *>::const_iterator itLine; for (itLine = mLines.begin(); itLine != mLines.end(); ++itLine) if ((*itLine)->isIntersecting(pLine)) return true; return false; } bool Object::getIntersection(const Line *pLine, Point *pIntersect) const { Box b, b2; getBounds(b); pLine->getBounds(b2); if (!b.isIntersecting(&b2)) return false; std::vector<const Line *>::const_iterator itLine; for (itLine = mLines.begin(); itLine != mLines.end(); ++itLine) if ((*itLine)->getIntersection(pLine, pIntersect)) return true; return false; } bool Object::isIntersecting(const Object *pObject) const { Box b, b2; getBounds(b); pObject->getBounds(b2); if (!b.isIntersecting(&b2)) return false; std::vector<const Line *>::const_iterator itLine; for (itLine = pObject->mLines.begin(); itLine != pObject->mLines.end(); ++itLine) if (isIntersecting(*itLine)) return true; return false; } bool Object::getIntersection(const Object *pObject, Point *pIntersect) const { Box b, b2; getBounds(b); pObject->getBounds(b2); if (!b.isIntersecting(&b2)) return false; std::vector<const Line *>::const_iterator itLine; for (itLine = pObject->mLines.begin(); itLine != pObject->mLines.end(); ++itLine) if (getIntersection(*itLine, pIntersect)) return true; return false; } void Object::add(const Line *pLine) { mLines.push_back(pLine); } void Object::merge(Object *pObject) { std::vector<const Line *>::const_iterator itLine; for (itLine = pObject->mLines.begin(); itLine != pObject->mLines.end(); ++itLine) add(*itLine); pObject->mLines.clear(); }