00001 /**************************************************************************** 00002 Copyright (C)2003 David Jung <opensim@pobox.com> 00003 00004 This program/file is free software; you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or 00007 (at your option) any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. (http://www.gnu.org) 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program; if not, write to the Free Software 00016 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 00018 $Id: Environment 1033 2004-02-11 20:47:52Z jungd $ 00019 $Revision: 1.4 $ 00020 $Date: 2004-02-11 15:47:52 -0500 (Wed, 11 Feb 2004) $ 00021 $Author: jungd $ 00022 00023 ****************************************************************************/ 00024 00025 #ifndef _ROBOT_SIM_ENVIRONMENT_ 00026 #define _ROBOT_SIM_ENVIRONMENT_ 00027 00028 #include <robot/sim/sim> 00029 00030 #include <base/ReferencedObject> 00031 #include <base/Externalizable> 00032 #include <base/Named> 00033 #include <base/Simulatable> 00034 00035 #include <base/Orient> 00036 #include <base/VFileSystem> 00037 #include <base/Cache> 00038 00039 #include <robot/Robot> 00040 #include <robot/ToolDescription> 00041 00042 00043 00044 namespace robot { 00045 namespace sim { 00046 00047 /** 00048 * An abstract environment that can contain Robots 00049 */ 00050 class Environment : public base::Simulatable, public base::Externalizable, public base::Cloneable 00051 { 00052 public: 00053 Environment(ref<base::VFileSystem> fs, ref<base::Cache> cache, const String& name = "") {} 00054 Environment(const Environment& e) {} 00055 00056 virtual String className() const { return String("Environment"); } 00057 00058 // factory 00059 virtual ref<RobotDescription> newRobotDescription() const = 0; 00060 00061 00062 // methods to add/remove robots 00063 /// add Robot with the given description to the environment at the specified position/orientation (fixed there if anchored is true) 00064 virtual ref<Robot> addRobot(ref<const robot::RobotDescription> robotDescription, 00065 const base::Point3& position, 00066 const base::Orient& orientation, 00067 bool anchored = false) = 0; 00068 00069 virtual void removeRobot(ref<robot::Robot> robot) = 0; 00070 00071 virtual Int numRobots() const = 0; 00072 virtual ref<Robot> getRobot(Int i) = 0; 00073 00074 }; 00075 00076 00077 } 00078 } // robot::sim 00079 00080 #endif