00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __SIM_ScalarFieldVisualization_H__
00022 #define __SIM_ScalarFieldVisualization_H__
00023
00024 #include "SIM_API.h"
00025 #include <UT/UT_Vector2.h>
00026 #include <UT/UT_Vector3.h>
00027 #include <UT/UT_ThreadedAlgorithm.h>
00028
00029 #include "SIM_Names.h"
00030 #include "SIM_OptionsUser.h"
00031 #include "SIM_DataUtils.h"
00032
00033 class UT_IStream;
00034 class SIM_Geometry;
00035 class SIM_ScalarField;
00036
00037 struct simFindSurfaceCellsArgs;
00038
00039
00040 class SIM_API SIM_ScalarFieldVisualization : public SIM_Data,
00041 public SIM_OptionsUser
00042 {
00043 public:
00044 GET_GUIDE_FUNC_B(SIM_NAME_SHOWGUIDE, ShowGuide, true);
00045 GET_GUIDE_FUNC_V3(SIM_NAME_COLOR, Color, (1, 1, 1));
00046 GET_GUIDE_FUNC_F("guideiso", GuideIso, 0.0);
00047 GET_GUIDE_FUNC_B("guideinvert", GuideInvert, false);
00048 GET_GUIDE_FUNC_B("usesmoke", UseSmoke, false);
00049 GET_GUIDE_FUNC_B("usebox", UseBox, false);
00050 GET_GUIDE_FUNC_B("useboxhash", UseBoxHash, false);
00051
00052 GET_GUIDE_FUNC_B("guideuseplane", GuideUsePlane, false);
00053 GET_GUIDE_FUNC_I("guideplane", GuidePlane, 0);
00054 GET_GUIDE_FUNC_I("guidevismode", GuideVisMode, 0);
00055 GET_GUIDE_FUNC_V2("guiderange", GuideRange, (0, 1));
00056 GET_GUIDE_FUNC_V3("guideplanepos", GuidePlanePos, (0, 0, 0));
00057
00058
00059
00060
00061 static void createBoundingBoxGuide(GU_Detail *gdp,
00062 const UT_BoundingBox &bbox,
00063 int xdiv, int ydiv, int zdiv,
00064 const UT_Vector3 &color,
00065 int primclroff, int ptclroff);
00066
00067 protected:
00068 explicit SIM_ScalarFieldVisualization(const SIM_DataFactory *factory);
00069 virtual ~SIM_ScalarFieldVisualization();
00070
00071
00072 virtual void initializeSubclass();
00073
00074 virtual bool getIsAlternateRepresentationSubclass() const;
00075 virtual void initAlternateRepresentationSubclass(const SIM_Data &);
00076 virtual SIM_Guide *createGuideObjectSubclass() const;
00077 virtual void buildGuideGeometrySubclass(const SIM_RootData &root,
00078 const SIM_Options &options,
00079 const GU_DetailHandle &gdh,
00080 UT_DMatrix4 *xform,
00081 const SIM_Time &t) const;
00082
00083 private:
00084 bool shouldMultiThread() const { return true; }
00085 THREADED_METHOD1_CONST(SIM_ScalarFieldVisualization, shouldMultiThread(), findSurfaceCells, simFindSurfaceCellsArgs *, args);
00086 void findSurfaceCellsPartial(simFindSurfaceCellsArgs *args, const UT_JobInfo &info) const;
00087 static const SIM_DopDescription *getScalarFieldVisualizationDopDescription();
00088
00089 const SIM_ScalarField *myScalarField;
00090
00091 DECLARE_STANDARD_GETCASTTOTYPE();
00092
00093 DECLARE_DATAFACTORY(SIM_ScalarFieldVisualization,
00094 SIM_Data,
00095 "ScalarFieldVisualization",
00096 getScalarFieldVisualizationDopDescription());
00097 };
00098
00099 #endif