00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SIM_VectorFieldVisualization_H__
00022 #define __SIM_VectorFieldVisualization_H__
00023
00024 #include "SIM_API.h"
00025 #include <UT/UT_Vector2.h>
00026 #include <UT/UT_Vector3.h>
00027
00028 #include "SIM_Names.h"
00029 #include "SIM_OptionsUser.h"
00030 #include "SIM_DataUtils.h"
00031
00032 class UT_IStream;
00033 class SIM_Geometry;
00034 class SIM_VectorField;
00035
00036
00037 class SIM_API SIM_VectorFieldVisualization : public SIM_Data,
00038 public SIM_OptionsUser
00039 {
00040 public:
00041 GET_GUIDE_FUNC_B(SIM_NAME_SHOWGUIDE, ShowGuide, true);
00042 GET_GUIDE_FUNC_V3(SIM_NAME_COLOR, Color, (1, 1, 1));
00043
00044 GET_GUIDE_FUNC_B("guideusesmoke", GuideUseSmoke, false);
00045 GET_GUIDE_FUNC_B("guideusebox", GuideUseBox, false);
00046 GET_GUIDE_FUNC_B("guideuseboxhash", GuideUseBoxHash, false);
00047 GET_GUIDE_FUNC_F("guidescale", GuideScale, 1.0);
00048 GET_GUIDE_FUNC_I("guidevistype", GuideVisType, 0);
00049 GET_GUIDE_FUNC_I("guidevismode", GuideVisMode, 0);
00050 GET_GUIDE_FUNC_F("guidevisscale", GuideVisScale, 1.0);
00051
00052 GET_GUIDE_FUNC_B("guideoverridediv", GuideOverrideDiv, false);
00053 GET_GUIDE_FUNC_V3("guidediv", GuideDiv, (10, 10, 10));
00054
00055 GET_GUIDE_FUNC_B("guideusestreamers", GuideUseStreamers, false);
00056 GET_GUIDE_FUNC_I("guideplane", GuidePlane, 0);
00057 GET_GUIDE_FUNC_V3("guideplanepos", GuidePlanePos, (0, 0, 0));
00058 GET_GUIDE_FUNC_F("guidestreamerlen", GuideStreamerLen, 1);
00059 GET_GUIDE_FUNC_F("guidestreamerminspeed", GuideStreamerMinSpeed, 0);
00060
00061 GET_GUIDE_FUNC_B("guidebarbs", GuideBarbs, true);
00062 GET_GUIDE_FUNC_B("guidepercomp", GuidePerComp, false);
00063
00064
00065
00066 static void createVectorGuide(GU_Detail *gdp,
00067 const UT_Vector3 &pos,
00068 const UT_Vector3 &vel,
00069 int clroff, const UT_Vector3 &clr,
00070 bool usebarbs);
00071 protected:
00072 explicit SIM_VectorFieldVisualization(const SIM_DataFactory *factory);
00073 virtual ~SIM_VectorFieldVisualization();
00074
00075
00076 virtual void initializeSubclass();
00077
00078 virtual bool getIsAlternateRepresentationSubclass() const;
00079 virtual void initAlternateRepresentationSubclass(const SIM_Data &);
00080 virtual SIM_Guide *createGuideObjectSubclass() const;
00081 virtual void buildGuideGeometrySubclass(const SIM_RootData &root,
00082 const SIM_Options &options,
00083 const GU_DetailHandle &gdh,
00084 UT_DMatrix4 *xform,
00085 const SIM_Time &t) const;
00086
00087 private:
00088 UT_Vector3 getColorFromDir(UT_Vector3 dir) const;
00089
00090 static const SIM_DopDescription *getVectorFieldVisualizationDopDescription();
00091
00092 const SIM_VectorField *myVectorField;
00093
00094
00095 static float pointDensity(const UT_Vector3 &pos);
00096 static const SIM_VectorField*theCurrentField;
00097
00098 DECLARE_STANDARD_GETCASTTOTYPE();
00099
00100 DECLARE_DATAFACTORY(SIM_VectorFieldVisualization,
00101 SIM_Data,
00102 "VectorFieldVisualization",
00103 getVectorFieldVisualizationDopDescription());
00104 };
00105
00106 #endif