00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: representation.h,v 1.34.16.5 2007/04/20 14:19:50 amoll Exp $ 00005 // 00006 00007 #ifndef BALL_VIEW_KERNEL_REPRESENTATION_H 00008 #define BALL_VIEW_KERNEL_REPRESENTATION_H 00009 00010 #ifndef BALL_CONCEPT_PROPERTY_H 00011 # include <BALL/CONCEPT/property.h> 00012 #endif 00013 00014 #ifndef BALL_DATATYPE_LIST_H 00015 # include <BALL/DATATYPE/list.h> 00016 #endif 00017 00018 #ifndef BALL_CONCEPT_COMPOSITE_H 00019 # include <BALL/CONCEPT/composite.h> 00020 #endif 00021 00022 #ifndef BALL_VIEW_KERNEL_COMMON_H 00023 # include <BALL/VIEW/KERNEL/common.h> 00024 #endif 00025 00026 #ifndef BALL_CONCEPT_MOLECULARINFORMATION_H 00027 # include <BALL/CONCEPT/molecularInformation.h> 00028 #endif 00029 00030 #ifndef BALL_VIEW_KERNEL_MODELINFORMATION_H 00031 # include <BALL/VIEW/KERNEL/modelInformation.h> 00032 #endif 00033 00034 // next two defines need to be included in header file, because of iC file 00035 #ifndef BALL_VIEW_MODELS_MODELPROCESSOR_H 00036 # include <BALL/VIEW/MODELS/modelProcessor.h> 00037 #endif 00038 00039 #ifndef BALL_VIEW_MODELS_COLORPROCESSOR_H 00040 # include <BALL/VIEW/MODELS/colorProcessor.h> 00041 #endif 00042 00043 00044 namespace BALL 00045 { 00046 namespace VIEW 00047 { 00048 class ModelProcessor; 00049 class ColorProcessor; 00050 class GeometricObject; 00051 class UpdateRepresentationThread; 00052 class RepresentationManager; 00053 00063 class BALL_VIEW_EXPORT Representation 00064 : public PropertyManager 00065 { 00066 friend class UpdateRepresentationThread; 00067 friend class RepresentationManager; 00068 public: 00069 00070 BALL_CREATE(Representation) 00071 00072 00075 00076 00077 enum Properties 00078 { 00080 PROPERTY__ALWAYS_FRONT = 0, 00081 00083 PROPERTY__IS_COORDINATE_SYSTEM 00084 }; 00085 00087 00090 00093 Representation(); 00094 00096 Representation(ModelType model_type, 00097 DrawingPrecision drawing_precision, 00098 DrawingMode drawing_mode); 00099 00102 Representation(const Representation& representation); 00103 00106 virtual ~Representation(); 00107 00109 00112 00114 const Representation& operator = (const Representation& rep); 00115 00117 void clear(); 00118 00120 void setHidden(bool state) ; 00121 00123 bool isHidden() const; 00124 00126 void setDrawingPrecision(DrawingPrecision precision); 00127 00129 DrawingPrecision getDrawingPrecision() const; 00130 00132 float getSurfaceDrawingPrecision() const; 00133 00135 void setSurfaceDrawingPrecision(float precision); 00136 00138 void setDrawingMode(DrawingMode mode); 00139 00141 DrawingMode getDrawingMode() const; 00142 00144 Size getTransparency() const; 00145 00147 void setTransparency(Size value); 00148 00150 const GeometricObjectList& getGeometricObjects() const; 00151 00153 GeometricObjectList& getGeometricObjects(); 00154 00156 void setGeometricObjects(GeometricObjectList& gol) 00157 { geometric_objects_ = gol;} 00158 00160 void insert(GeometricObject& object) ; 00161 00163 const List<const Composite*>& getComposites() const 00164 { return composites_;} 00165 00167 void setComposites(const List<const Composite*>& composites); 00168 00170 void setComposite(const Composite* composite); 00171 00173 const ModelProcessor* getModelProcessor() const; 00174 00176 ModelProcessor* getModelProcessor(); 00177 00179 void setModelProcessor(ModelProcessor* processor); 00180 00182 ColorProcessor* getColorProcessor(); 00183 00185 void setColorProcessor(ColorProcessor* processor); 00186 00188 void setModelType(ModelType type); 00189 00191 ModelType getModelType() const; 00192 00194 String getName() const; 00195 00197 void setName(const String& name); 00198 00200 String getCompositeName() const; 00201 00203 void setColoringMethod(ColoringMethod type); 00204 00206 ColoringMethod getColoringMethod() const; 00207 00209 void enableModelUpdate(bool state); 00210 00212 void enableColoringUpdate(bool state) { coloring_update_enabled_ = state;} 00213 00215 bool modelUpdateEnabled() const { return model_update_enabled_;} 00216 00218 bool coloringUpdateEnabled() const { return coloring_update_enabled_;} 00219 00221 String getProperties() const; 00222 00224 bool isValid() const; 00225 00230 void update(bool rebuild); 00231 00233 void clearGeometricObjects(); 00234 00240 const PreciseTime& getModelBuildTime() const; 00241 00246 bool needsUpdate() const; 00247 00249 void setNeedsUpdate(bool state=true); 00250 00252 void dump(std::ostream& s = std::cout, Size depth = 0) const; 00253 00255 String toString() const; 00256 00258 void setModelInformation(const ModelInformation& mi); 00259 00261 const ModelInformation& getModelInformation() const; 00262 00264 bool operator == (const Representation& object) const; 00265 00266 00268 bool operator < (const Representation& object) const 00269 { return this < &object;} 00270 00272 00273 protected: 00274 00279 void update_(); 00280 00281 // Create a hashmap with the numerical position of every composite in its root Composite. 00282 // Needed for toString(). 00283 void collectRecursive_(const Composite& c, HashMap<const Composite*, Position>& hashmap) const; 00284 00285 //_ 00286 DrawingMode drawing_mode_; 00287 00288 //_ 00289 DrawingPrecision drawing_precision_; 00290 00291 //_ 00292 float surface_drawing_precision_; 00293 00294 //_ 00295 ModelType model_type_; 00296 00297 //_ 00298 ColoringMethod coloring_method_; 00299 00300 //_ 00301 Size transparency_; 00302 00303 //_ 00304 ModelProcessor* model_processor_; 00305 00306 //_ 00307 ColorProcessor* color_processor_; 00308 00309 //_ 00310 List<const Composite*> composites_; 00311 00312 //_ 00313 PreciseTime model_build_time_; 00314 00315 //_ set to true, if update is called, while representation is hidden 00316 bool needs_update_; 00317 00318 //_ true means the ModelProcessor will be applied in the next update 00319 bool rebuild_; 00320 00321 //_ true means the ColorProcessor was changed since the last update call, so apply it! 00322 bool changed_color_processor_; 00323 00324 //_ 00325 bool hidden_; 00326 00327 //_ 00328 GeometricObjectList geometric_objects_; 00329 00330 //_ 00331 bool model_update_enabled_; 00332 00333 //_ 00334 bool coloring_update_enabled_; 00335 00336 String name_; 00337 00338 //_ used for getName() 00339 static MolecularInformation information_; 00340 00341 //_ used for getName() 00342 static ModelInformation model_information_; 00343 00344 const ModelInformation* custom_model_information_; 00345 }; 00346 00348 typedef List<Representation*> RepresentationList; 00349 00350 # ifndef BALL_NO_INLINE_FUNCTIONS 00351 # include <BALL/VIEW/KERNEL/representation.iC> 00352 # endif 00353 00354 } // namespace VIEW 00355 } // namespace BALL 00356 00357 #endif // BALL_VIEW_KERNEL_REPRESENTATION_H