Euclid3DGeometry.cpp 2.76 KB
Newer Older
kraus's avatar
kraus committed
1
/*
2 3
 *  Copyright (c) 2014, Chris Rogers
 *  All rights reserved.
kraus's avatar
kraus committed
4 5
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
6
 *  1. Redistributions of source code must retain the above copyright notice,
kraus's avatar
kraus committed
7 8 9
 *     this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
10
 *     and/or other materials provided with the distribution.
kraus's avatar
kraus committed
11 12
 *  3. Neither the name of STFC nor the names of its contributors may be used to
 *     endorse or promote products derived from this software without specific
13 14
 *     prior written permission.
 *
kraus's avatar
kraus committed
15 16 17 18 19 20 21 22 23 24
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 26 27
 *  POSSIBILITY OF SUCH DAMAGE.
 */

kraus's avatar
kraus committed
28 29
#include "BeamlineGeometry/Euclid3DGeometry.h"

30 31 32 33 34 35 36
#include "Utilities/OpalException.h"
#include "math.h"

Euclid3DGeometry::Euclid3DGeometry(Euclid3D transformation)
    : BGeometryBase(), transformation_m(transformation) {
}

37 38
Euclid3DGeometry::Euclid3DGeometry(const Euclid3DGeometry &rhs)
    : BGeometryBase(), transformation_m(rhs.transformation_m) {
39 40 41 42
}

Euclid3DGeometry::~Euclid3DGeometry() {}

43 44 45 46 47
const Euclid3DGeometry &Euclid3DGeometry::operator=(const Euclid3DGeometry &rhs) {
    if (&rhs != this) {
        transformation_m = rhs.transformation_m;
    }
    return *this;
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
}

double Euclid3DGeometry::getArcLength() const {
    return sqrt(dot(transformation_m.getVector(),
                    transformation_m.getVector()));
}

double Euclid3DGeometry::getElementLength() const {
    return getArcLength();
}

void Euclid3DGeometry::setElementLength(double length) {
    Vector3D newVector = transformation_m.getVector()*(length/getArcLength());
    transformation_m.setDisplacement(newVector);
}

Euclid3D Euclid3DGeometry::getTransform(double fromS, double toS) const {
    throw OpalException("Euclid3DGeometry::getTransform", "Not implemented");
}

Euclid3D Euclid3DGeometry::getTotalTransform() const {
    return transformation_m;
}