207 lines
5.3 KiB
C++
207 lines
5.3 KiB
C++
/****************************************************************************
|
|
**
|
|
** This file is part of the LibreCAD project, a 2D CAD program
|
|
**
|
|
|
|
Copyright (C) 2012-2015 Dongxu Li (dongxuli2011@gmail.com)
|
|
|
|
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; either version 2
|
|
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 General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
**********************************************************************/
|
|
|
|
#include "rs_atomicentity.h"
|
|
RS_AtomicEntity::RS_AtomicEntity(RS_EntityContainer* parent) : RS_Entity(parent) {}
|
|
|
|
bool RS_AtomicEntity::isContainer() const {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @return true because entities made from subclasses are
|
|
* atomic entities.
|
|
*/
|
|
bool RS_AtomicEntity::isAtomic() const {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @return Always 1 for atomic entities.
|
|
*/
|
|
unsigned int RS_AtomicEntity::count() const{
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* @return Always 1 for atomic entities.
|
|
*/
|
|
unsigned int RS_AtomicEntity::countDeep() const{
|
|
return 1;
|
|
}
|
|
|
|
/**
|
|
* Implementation must return the endpoint of the entity or
|
|
* an invalid vector if the entity has no endpoint.
|
|
*/
|
|
RS_Vector RS_AtomicEntity::getEndpoint() const {
|
|
return RS_Vector(false);
|
|
}
|
|
|
|
/**
|
|
* Implementation must return the startpoint of the entity or
|
|
* an invalid vector if the entity has no startpoint.
|
|
*/
|
|
RS_Vector RS_AtomicEntity::getStartpoint() const {
|
|
return RS_Vector(false);
|
|
}
|
|
|
|
/**
|
|
* Implementation must return the angle in which direction the entity starts.
|
|
*/
|
|
double RS_AtomicEntity::getDirection1() const {
|
|
return 0.0;
|
|
}
|
|
|
|
/**
|
|
* Implementation must return the angle in which direction the entity starts the opposite way.
|
|
*/
|
|
double RS_AtomicEntity::getDirection2() const {
|
|
return 0.0;
|
|
}
|
|
RS_Vector RS_AtomicEntity::getCenter() const {
|
|
return RS_Vector(false);
|
|
}
|
|
double RS_AtomicEntity::getRadius() const {
|
|
return 0.;
|
|
}
|
|
/**
|
|
* return the nearest center for snapping
|
|
* @param coord Coordinate (typically a mouse coordinate)
|
|
* @param dist Pointer to a value which will contain the measured
|
|
* distance between 'coord' and the closest center point. The passed
|
|
* pointer can also be NULL in which case the distance will be
|
|
* lost.
|
|
*
|
|
* @return The closest center point.
|
|
*/
|
|
RS_Vector RS_AtomicEntity::getNearestCenter(const RS_Vector& /*coord*/,
|
|
double* /*dist*/) const{
|
|
return RS_Vector(false);
|
|
}
|
|
|
|
/**
|
|
* (De-)selects startpoint.
|
|
*/
|
|
void RS_AtomicEntity::setStartpointSelected(bool select) {
|
|
if (select) {
|
|
setFlag(RS2::FlagSelected1);
|
|
} else {
|
|
delFlag(RS2::FlagSelected1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* (De-)selects endpoint.
|
|
*/
|
|
void RS_AtomicEntity::setEndpointSelected(bool select) {
|
|
if (select) {
|
|
setFlag(RS2::FlagSelected2);
|
|
} else {
|
|
delFlag(RS2::FlagSelected2);
|
|
}
|
|
}
|
|
bool RS_AtomicEntity::isTangent(const RS_CircleData& /* circleData */) const{
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @return True if the entities startpoint is selected.
|
|
*/
|
|
bool RS_AtomicEntity::isStartpointSelected() const {
|
|
return getFlag(RS2::FlagSelected1);
|
|
}
|
|
|
|
/**
|
|
* @return True if the entities endpoint is selected.
|
|
*/
|
|
bool RS_AtomicEntity::isEndpointSelected() const {
|
|
return getFlag(RS2::FlagSelected2);
|
|
}
|
|
|
|
void RS_AtomicEntity::revertDirection(){}
|
|
|
|
/**
|
|
* Implementation must create offset of the entity to
|
|
* the given direction and distance
|
|
*/
|
|
bool RS_AtomicEntity::offset(const RS_Vector& /*position*/, const double& /*distance*/) {return false;}
|
|
|
|
/**
|
|
* Implementation must move the startpoint of the entity to
|
|
* the given position.
|
|
*/
|
|
void RS_AtomicEntity::moveStartpoint(const RS_Vector& /*pos*/) {}
|
|
|
|
/**
|
|
* Implementation must move the endpoint of the entity to
|
|
* the given position.
|
|
*/
|
|
void RS_AtomicEntity::moveEndpoint(const RS_Vector& /*pos*/) {}
|
|
|
|
/**
|
|
* Implementation must trim the startpoint of the entity to
|
|
* the given position.
|
|
*/
|
|
void RS_AtomicEntity::trimStartpoint(const RS_Vector& pos) {
|
|
moveStartpoint(pos);
|
|
}
|
|
|
|
/**
|
|
* Implementation must trim the endpoint of the entity to
|
|
* the given position.
|
|
*/
|
|
void RS_AtomicEntity::trimEndpoint(const RS_Vector& pos) {
|
|
moveEndpoint(pos);
|
|
}
|
|
|
|
/**
|
|
* Implementation must return which ending of the entity will
|
|
* be trimmed if 'coord' is the coordinate chosen to indicate the
|
|
* trim entity and 'trimPoint' is the point to which the entity will
|
|
* be trimmed.
|
|
*/
|
|
RS2::Ending RS_AtomicEntity::getTrimPoint(const RS_Vector& /*coord*/,
|
|
const RS_Vector& /*trimPoint*/) {
|
|
return RS2::EndingNone;
|
|
}
|
|
|
|
/**
|
|
* Implementation must trim the entity in the case of multiple
|
|
* intersections and return the trimPoint
|
|
* trimCoord indicts the trigger trim position
|
|
* trimSol contains intersections
|
|
* */
|
|
RS_Vector RS_AtomicEntity::prepareTrim(const RS_Vector& /*trimCoord*/,
|
|
const RS_VectorSolutions& /*trimSol*/) {
|
|
return RS_Vector(false);
|
|
}
|
|
|
|
void RS_AtomicEntity::reverse() {}
|
|
|
|
void RS_AtomicEntity::moveSelectedRef(const RS_Vector& ref, const RS_Vector& offset) {
|
|
if (isSelected()) {
|
|
moveRef(ref, offset);
|
|
}
|
|
}
|