/*************************************************************************** * Copyright (c) Jürgen Riegel (juergen.riegel@web.de) 2002 * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library 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 Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this library; see the file COPYING.LIB. If not, * * write to the Free Software Foundation, Inc., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #include "PreCompiled.h" #ifndef _PreComp_ # include #endif #include "ComplexGeoData.h" using namespace Data; TYPESYSTEM_SOURCE_ABSTRACT(Data::Segment , Base::BaseClass); TYPESYSTEM_SOURCE_ABSTRACT(Data::ComplexGeoData , Base::Persistence); ComplexGeoData::ComplexGeoData(void) { } ComplexGeoData::~ComplexGeoData(void) { } Data::Segment* ComplexGeoData::getSubElementByName(const char* name) const { int index = 0; std::string element(name); std::string::size_type pos = element.find_first_of("0123456789"); if (pos != std::string::npos) { index = std::atoi(element.substr(pos).c_str()); element = element.substr(0,pos); } return getSubElement(element.c_str(),index); } void ComplexGeoData::applyTransform(const Base::Matrix4D& rclTrf) { setTransform(rclTrf * getTransform()); } void ComplexGeoData::applyTranslation(const Base::Vector3d& mov) { Base::Matrix4D mat; mat.move(mov); setTransform(mat * getTransform()); } void ComplexGeoData::applyRotation(const Base::Rotation& rot) { Base::Matrix4D mat; rot.getValue(mat); setTransform(mat * getTransform()); } void ComplexGeoData::setPlacement(const Base::Placement& rclPlacement) { setTransform(rclPlacement.toMatrix()); } Base::Placement ComplexGeoData::getPlacement() const { Base::Matrix4D mat = getTransform(); return Base::Placement(Base::Vector3d(mat[0][3], mat[1][3], mat[2][3]), Base::Rotation(mat)); }