00001 /*************************************************************************** 00002 * Copyright (c) 2010 Jürgen Riegel (juergen.riegel@web.de) * 00003 * * 00004 * This file is part of the FreeCAD CAx development system. * 00005 * * 00006 * This library is free software; you can redistribute it and/or * 00007 * modify it under the terms of the GNU Library General Public * 00008 * License as published by the Free Software Foundation; either * 00009 * version 2 of the License, or (at your option) any later version. * 00010 * * 00011 * This library is distributed in the hope that it will be useful, * 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00014 * GNU Library General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU Library General Public * 00017 * License along with this library; see the file COPYING.LIB. If not, * 00018 * write to the Free Software Foundation, Inc., 59 Temple Place, * 00019 * Suite 330, Boston, MA 02111-1307, USA * 00020 * * 00021 ***************************************************************************/ 00022 00023 00024 #include "PreCompiled.h" 00025 00026 #ifndef _PreComp_ 00027 #endif 00028 00029 #include "TrajectoryCompound.h" 00030 //#include <App/DocumentObjectPy.h> 00031 //#include <Base/Placement.h> 00032 #include <Mod/Part/App/edgecluster.h> 00033 #include <Mod/Part/App/PartFeature.h> 00034 #include <TopoDS.hxx> 00035 #include <TopoDS_Edge.hxx> 00036 #include <TopoDS_Vertex.hxx> 00037 #include <BRep_Tool.hxx> 00038 #include <BRepAdaptor_Curve.hxx> 00039 #include <CPnts_AbscissaPoint.hxx> 00040 #include <TopExp.hxx> 00041 #include "Waypoint.h" 00042 #include "Trajectory.h" 00043 00044 using namespace Robot; 00045 using namespace App; 00046 00047 PROPERTY_SOURCE(Robot::TrajectoryCompound, Robot::TrajectoryObject) 00048 00049 00050 TrajectoryCompound::TrajectoryCompound() 00051 { 00052 00053 ADD_PROPERTY_TYPE( Source, (0) , "Compound",Prop_None,"list of trajectories to combine"); 00054 00055 } 00056 00057 TrajectoryCompound::~TrajectoryCompound() 00058 { 00059 } 00060 00061 App::DocumentObjectExecReturn *TrajectoryCompound::execute(void) 00062 { 00063 const std::vector<DocumentObject*> &Tracs = Source.getValues(); 00064 Robot::Trajectory result; 00065 00066 for (std::vector<DocumentObject*>::const_iterator it= Tracs.begin();it!=Tracs.end();++it) { 00067 if ((*it)->getTypeId().isDerivedFrom(Robot::TrajectoryObject::getClassTypeId())){ 00068 const std::vector<Waypoint*> &wps = static_cast<Robot::TrajectoryObject*>(*it)->Trajectory.getValue().getWaypoints(); 00069 for (std::vector<Waypoint*>::const_iterator it2= wps.begin();it2!=wps.end();++it2) { 00070 result.addWaypoint(**it2); 00071 } 00072 }else 00073 return new App::DocumentObjectExecReturn("Not all objects in compound are trajectories!"); 00074 } 00075 00076 Trajectory.setValue(result); 00077 00078 return App::DocumentObject::StdReturn; 00079 } 00080 00081 00082 //short TrajectoryCompound::mustExecute(void) const 00083 //{ 00084 // return 0; 00085 //} 00086 00087 //void TrajectoryCompound::onChanged(const Property* prop) 00088 //{ 00089 // 00090 // App::GeoFeature::onChanged(prop); 00091 //}