00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_VIEW_MODELS_COLORPROCESSOR_H
00008 #define BALL_VIEW_MODELS_COLORPROCESSOR_H
00009
00010 #ifndef BALL_CONCEPT_PROCESSOR_H
00011 # include <BALL/CONCEPT/processor.h>
00012 #endif
00013
00014 #ifndef BALL_VIEW_KERNEL_GEOMETRICOBJECT_H
00015 # include <BALL/VIEW/KERNEL/geometricObject.h>
00016 #endif
00017
00018 #ifndef BALL_DATATYPE_HASHGRID_H
00019 # include <BALL/DATATYPE/hashGrid.h>
00020 #endif
00021
00022 #ifndef BALL_DATATYPE_LIST_H
00023 # include <BALL/DATATYPE/list.h>
00024 #endif
00025
00026 #ifndef BALL_VIEW_KERNEL_COMMON_H
00027 # include <BALL/VIEW/KERNEL/common.h>
00028 #endif
00029
00030 namespace BALL
00031 {
00032 class Atom;
00033
00034 namespace VIEW
00035 {
00036 class Mesh;
00037
00054 class BALL_VIEW_EXPORT ColorProcessor
00055 : public UnaryProcessor<GeometricObject*>
00056 {
00057 public:
00058
00059 BALL_CREATE(ColorProcessor)
00060
00061
00062 typedef HashSet<const Composite*> CompositeSet;
00063
00065 typedef HashGrid3<const Atom*> AtomGrid;
00066
00068 typedef HashGridBox3<const Atom*> AtomBox;
00069
00071 ColorProcessor();
00072
00074 ColorProcessor(const ColorProcessor& color_calculator);
00075
00077 virtual ~ColorProcessor();
00078
00084 virtual void clear();
00085
00087 void set(const ColorProcessor& color_calculator);
00088
00090 virtual bool start();
00091
00095 const ColorProcessor& operator = (const ColorProcessor& color_calculator);
00096
00105 bool updateAlwaysNeeded() { return update_always_needed_;};
00106
00109 void setDefaultColor(const ColorRGBA& color);
00110
00113 const ColorRGBA& getDefaultColor() const
00114 {return default_color_;}
00115
00118 virtual Processor::Result operator() (GeometricObject*& object);
00119
00126 virtual void getColor(const Composite& composite, ColorRGBA& color_to_be_set);
00127
00129 Size getTransparency() const
00130 { return transparency_;}
00131
00135 virtual void setTransparency(Size value);
00136
00140 void setComposites(const List<const Composite*>* composites);
00141
00143 const List<const Composite*>* getComposites()
00144 { return composites_;}
00145
00147 void clearAtomGrid();
00148
00150 void setAdditionalGridDistance(float distance)
00151 { additional_grid_distance_ = distance;}
00152
00154 float getAdditionalGridDistance() const
00155 { return additional_grid_distance_;}
00156
00158 void setMinGridSpacing(float spacing) {min_spacing_ = spacing;}
00159
00161 AtomGrid& getAtomGrid()
00162 { return atom_grid_;}
00163
00170 virtual void dump(std::ostream& s = std::cout, Size depth = 0) const;
00171
00173 void setModelType(ModelType type) {model_type_ = type;}
00174
00175
00176 virtual void createAtomGrid(const Composite* from_mesh = 0);
00177
00179 const Atom* getClosestItem(const Vector3& v) const;
00180
00181 protected:
00182
00183
00184 virtual void colorMeshFromGrid_(Mesh& mesh);
00185
00186
00187 virtual bool canUseMeshShortcut_(const Composite&) { return false;}
00188
00189 bool update_always_needed_;
00190
00191 ColorRGBA default_color_;
00192
00193 ColorRGBA selection_color_;
00194 Size transparency_;
00195
00196 const List<const Composite*>* composites_;
00197
00198 AtomGrid atom_grid_;
00199 ModelType model_type_;
00200 const Composite* last_composite_of_grid_;
00201 float additional_grid_distance_;
00202 float min_spacing_;
00204 };
00205
00206
00210 class BALL_VIEW_EXPORT InterpolateColorProcessor
00211 : public ColorProcessor
00212 {
00213 public:
00214
00216 enum Mode
00217 {
00219 USE_OUTSIDE_COLOR = 0,
00220
00222 DEFAULT_COLOR_FOR_OUTSIDE_COLORS,
00223
00225 NO_OUTSIDE_COLORS
00226 };
00227
00228
00229 BALL_CREATE(InterpolateColorProcessor)
00230
00231
00232 InterpolateColorProcessor();
00233
00235 InterpolateColorProcessor(const InterpolateColorProcessor& pro);
00236
00238 virtual bool start();
00239
00241 void setMode(Mode mode) { mode_ = mode;}
00242
00244 Mode getMode() const { return mode_;}
00245
00247 vector<ColorRGBA>& getColors() { return colors_;}
00248
00250 const vector<ColorRGBA>& getColors() const { return colors_;}
00251
00253 void setColors(const vector<ColorRGBA>& colors) { colors_ = colors;}
00254
00256 void setMinColor(const ColorRGBA& color);
00257
00259 void setMaxColor(const ColorRGBA& color);
00260
00262 const ColorRGBA& getMinColor() const;
00263
00265 const ColorRGBA& getMaxColor() const;
00266
00268 void setMaxValue(float value) {max_value_ = value;}
00269
00271 float getMaxValue() const { return max_value_;}
00272
00274 void setMinValue(float value) { min_value_ = value;}
00275
00277 float getMinValue() const { return min_value_;}
00278
00282 virtual void interpolateColor(float value, ColorRGBA& color_to_be_set);
00283
00284 protected:
00285
00286
00287 ColorRGBA min_color_,
00288 max_color_;
00289
00290
00291 vector<ColorRGBA> colors_;
00292
00293 Mode mode_;
00294
00295 float max_value_;
00296 float min_value_;
00297
00298
00299 float x_;
00300 };
00301
00302 } }
00303
00304 #endif // BALL_VIEW_MODELS_COLORPROCESSOR_H