| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /********************************************************************** 00002 VRS - The Virtual Rendering System 00003 Copyright (C) 2001 Computer Graphics Systems Group at the 00004 Hasso-Plattner-Institute, Potsdam, Germany. 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 This library is distributed in the hope that it will be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 See the GNU Lesser General Public License for more details. 00013 You should have received a copy of the GNU Lesser+ General Public 00014 License along with this library; if not, write to the FreeSoftware 00015 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA. 00016 **********************************************************************/ 00017 // $Id: rayrequest.h 5265 2006-03-31 09:42:42Z baumann $ 00018 // $Date: 2006-03-31 11:42:42 +0200 (Fri, 31 Mar 2006) $ 00019 // $Revision: 5265 $ 00020 // $State$ 00021 // $Author: baumann $ 00022 // 00023 // $Log$ 00024 // Revision 1.17 2006/03/31 09:42:42 baumann 00025 // added static methods pushHint(), popHint(), hasHint(), and getHint() to VRS::RayRequest 00026 // 00027 // Revision 1.16 2005/01/03 01:43:08 klimetschek 00028 // - modified win32 project layout, splitted vrs.vcproj into vrs_container, vrs_core, vrs_sg, vrs_image, vrs_opengl and vrs_io 00029 // - removed vrs.vcproj 00030 // minor things: 00031 // - added all glutexamples to vrs4glut.sln 00032 // - fixed some problems in glutexamples 00033 // - removed all project references from all VS projects (using solution wide project dependencies instead) 00034 // 00035 // Revision 1.15 2004/10/27 14:30:10 kirsch 00036 // use isSimple property of ShapeSimplifiers to invoke shaders and techniques 00037 // only once during the shape evaluation process 00038 // 00039 // Revision 1.14 2004/09/17 12:56:29 baumann 00040 // comment fixed 00041 // 00042 // Revision 1.13 2004/05/11 06:55:17 baumann 00043 // - methods set/getShapeFilter() moved to base class TechniqueProcessor 00044 // - impl of method TechniqueProcessor::getTechniqueFilter() added 00045 // - method disableRayIntersectionTag() added 00046 // 00047 // Revision 1.12 2004/03/12 16:28:39 baumann 00048 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00049 // 00050 // Revision 1.11 2003/11/07 14:19:24 kirsch 00051 // removed leading underscore from include guards 00052 // 00053 // Revision 1.10 2002/10/29 10:32:52 baumann 00054 // macros VRS_CLASSNAME_* and VRS_IMPL_TYPEINFO_* removed 00055 // 00056 // Revision 1.9 2002/03/03 21:44:25 kosta 00057 // VRS_TYPEINFO-macro rewritten 00058 // 00059 // Revision 1.8 2002/02/19 10:34:11 kosta 00060 // undone all changes since 2002-02-15 00061 // 00062 // Revision 1.5 2002/01/15 16:25:54 kosta 00063 // macros rewritten for a better namespace support 00064 // 00065 // Revision 1.4 2001/11/13 16:36:30 kirsch 00066 // changed line feed to unix style (removed control-M) 00067 // 00068 // Revision 1.3 2001/08/24 12:55:58 kirsch 00069 // RayRequest totally rewritten, uses RayTracingTechnique and RayRequestTechnique 00070 // 00071 // Revision 1.2 2001/07/05 12:43:14 kersting 00072 // added enum name and set method parameters due to enum name 00073 // 00074 // Revision 1.1.1.1 2001/06/08 08:09:20 kirsch 00075 // imported alpha-version by olli 00076 // 00077 00078 00079 #ifndef VRS_RAYREQUEST_H 00080 #define VRS_RAYREQUEST_H 00081 00082 #include <vrs/ray.h> 00083 #include <vrs/rayrequesttechnique.h> 00084 #include <vrs/techniqueprocessor.h> 00085 00086 namespace VRS { 00087 00088 class FilterTag; 00089 00090 class VRS_CORE_API RayRequest : 00091 public TechniqueProcessor 00092 { 00093 public: 00094 VRS_TYPEINFO(RayRequest, TechniqueProcessor); 00095 00096 RayRequest( 00097 RayRequestTechnique::RQMode mode = RayRequestTechnique::All, 00098 Filter* filter = NULL, 00099 const Ray& = Ray(), 00100 RayRequestTechnique::RQType rayType = RayRequestTechnique::Clip 00101 ); 00102 00103 void setRay( 00104 const Ray& ray, 00105 RayRequestTechnique::RQType rayType = RayRequestTechnique::Clip 00106 ); 00107 Ray getRay() const; 00113 void setMode(RayRequestTechnique::RQMode m); 00114 RayRequestTechnique::RQMode getMode() const; 00118 int results() const; 00119 IntersectionInfo* result(int i = 0) const; 00120 void clear(); 00125 static SO<FilterTag> disableRayIntersectionTag(); 00126 /*<! Returns a filter tag that can be used to specify 00127 that certain shapes should not be evaluated during 00128 the ray tracing process. */ 00129 00130 virtual const Handler* getNativeHandler(Engine*, const ID&) const; 00133 virtual bool handleNatively(Engine*, const Shape*, const Handler*); 00136 static void pushHint(int hint); 00137 static void popHint(); 00138 static bool hasHint(); 00139 static int getHint(); 00140 00141 protected: 00142 virtual void pushStandardTechniques(Engine*); 00143 virtual void popStandardTechniques(Engine*); 00144 00145 protected: 00146 virtual SO<Filter> getTechniqueFilter() const; 00147 //<! See TechniqueProcessor. 00148 00149 private: 00150 SO<RayRequestTechnique> m_rayrequestTechnique; 00151 }; 00152 00153 inline void RayRequest::setRay(const Ray& ray, RayRequestTechnique::RQType rayType) { 00154 m_rayrequestTechnique->setRay(ray, rayType); 00155 } 00156 00157 inline Ray RayRequest::getRay() const { 00158 return m_rayrequestTechnique->getRay(); 00159 } 00160 00161 inline void RayRequest::setMode(RayRequestTechnique::RQMode m) { 00162 m_rayrequestTechnique->setMode(m); 00163 } 00164 00165 inline RayRequestTechnique::RQMode RayRequest::getMode() const { 00166 return (m_rayrequestTechnique->getMode()); 00167 } 00168 00169 inline int RayRequest::results() const { 00170 return (m_rayrequestTechnique->results()); 00171 } 00172 00173 inline IntersectionInfo* RayRequest::result(int i) const { 00174 return (m_rayrequestTechnique->result(i)); 00175 } 00176 00177 inline void RayRequest::clear() { 00178 m_rayrequestTechnique->clear(); 00179 } 00180 00181 } // namespace VRS 00182 00183 #endif // VRS_RAYREQUEST_H