VR-Vantage 2.7 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ssEnvironment.h
Go to the documentation of this file.
1 
3 // Copyright JRM Enterprises, Inc. 2004
4 // All rights reserved.
5 //
6 // This code is the intellectual property of JRM Enterprises, Inc.
7 // It may not be used or released as source or compiled binary form
8 // without the prior written consent of JRM Enterprises, Inc.
9 //
10 // Original Author: Eric Olson Date: May 2004
12 
13 #ifndef _ssEnvironment_
14 #define _ssEnvironment_
15 
16 #include "ssdllexport.h"
17 
18 #include "ssSensor.h"
19 #include "ssAtmosphericTable.h"
20 #include "SSModRadStruct.h"
21 
22 
23 class SigSimRT;
24 
26 // ssEnvironment
31 {
32 public:
33 
36  {
37  Tropical = 1,
38  MidLatitudeSummer = 2,
39  MidLatitudeWinter = 3,
40  SubArcticSummer = 4,
41  SubArcticWinter = 5,
42  USStandard = 6,
43  UserDefinedAtm = 7,
44  };
45 
48  {
49  NoAerosol = -1, // but might have clouds
50  NoHaze = 0, // no aerosol or clouds
51  Rural_23km = 1,
52  Rural_5km = 2,
53  NavyMaritime = 3,
54  Maritime_32km = 4,
55  Urban_5km = 5,
56  Tropospheric_50km = 6,
57  UserDefine = 7, // uses the atm state file for definition
58  Fog_200m = 8,
59  Fog_500m = 9,
60  Desert = 10,
61  };
62 
65  {
66  AutoSelect = 0, // use summer for models 0,1,2,4,6,7
67  Summer = 1,
68  Winter = 2,
69  };
70 
73  {
74  NoClouds = 0,
75  Cumulus = 1,
76  Altostratus = 2,
77  Stratus = 3,
78  Stratocumulus = 4,
79  Nimbostratus = 5,
80  Stratus_Drizzle = 6,
81  Nimbostratus_Light = 7,
82  Nimbostratus_Moderate = 8,
83  Cumulus_Heavy = 9,
84  Cumulus_Extreme = 10,
85  Standard_Cirrus = 18,
86  Subvisual_Cirrus = 19,
87  };
88 
90  typedef struct
91  {
92  int numSensors;
94  float *ranges;
96 
98  // ssEnvironment
102  ssEnvironment();
103 
105  //ssEnvironment
109  ~ssEnvironment();
110 
112  //updateAtmospherics
127  bool updateAtmospherics(ssSensor *sensor, double sensorAltitude = 500.0, bool checkReload = true);
128 
129 
131  //*getLightSourceData
147  float *getLightSourceData(ssSensor *sensor, unsigned int &x, unsigned int &y, unsigned int &c);
148 
150  // getSensorAtmosphericTablePointer
158  ssAtmosphericTable *getSensorAtmosphericTablePointer(ssSensor *sensor);
159 
161  //*getSensorAtmosphericData
181  float *getSensorAtmosphericData(ssSensor *sensor,
182  unsigned int &x, unsigned int &y, unsigned int &z,
183  unsigned int &bins, unsigned int &comp);
184 
186  //getSunDiskRadiance
194  float *getSunDiskRadiance(ssSensor *sensor, unsigned int &bins);
195 
197  //getMoonDiskRadiance
205  float *getMoonDiskRadiance(ssSensor *sensor, unsigned int &bins);
206 
208  //getManMadeLightData
219  float *getManMadeLightData(ssSensor *sensor,
220  unsigned int &numLights, unsigned int &bins);
221 
223  //getNumberManMadeLights
228  int getNumberManMadeLights();
229 
231  //getManMadeLightRadiance
239  double getManMadeLightRadiance(ssSensor *sensor, int lightNum);
240 
241 
243  //setDate
250  void setDate(unsigned int day, unsigned int month, unsigned int year);
251 
253  //getDate
260  void getDate(unsigned int &day, unsigned int &month, unsigned int &year);
261 
263  //setTimeOfDay
268  void setTimeOfDay(double tod);
269 
271  //getTimeOfDay
276  double getTimeOfDay();
277 
279  //getJRMTimeOfDay
284  JRMTIME getJRMTimeOfDay();
285 
287  //setJRMTimeOfDay
292  void setJRMTimeOfDay(JRMTIME time);
293 
295  //setAtmosphereStateFile
300  void setAtmosphereStateFile(const char *name);
301 
303  //getAtmosphereStateFile
308  char *getAtmosphereStateFile();
309 
311  //setNightSkyTableFile
317  void setNightSkyTableFile(char *name);
318 
320  //getNightSkyTableFile
326  char *getNightSkyTableFile();
327 
329  //setAirGroundTempCalcMode
336  void setAirGroundTempCalcMode(bool Calc_Ta_Tback);
337 
339  //getAirGroundTempCalcMode
346  bool getAirGroundTempCalcMode();
347 
349  //setMaxDiurnalTemperature
354  void setMaxDiurnalTemperature(double tempMax);
355 
357  //setMinDiurnalTemperature
362  void setMinDiurnalTemperature(double tempMin);
363 
365  //getMaxDiurnalTemperature
370  double getMaxDiurnalTemperature();
371 
373  //getMinDiurnalTemperature
378  double getMinDiurnalTemperature();
379 
381  //setCurrentAirTemperature
386  void setCurrentAirTemperature(double Ta);
387 
389  //getCurrentAirTemperature
394  double getCurrentAirTemperature();
395 
397  //setAirModelOption
408  void setAirModelOption(int air_model_option);
409 
411  //setUserDefinedAirTemperatures
427  int setUserDefinedAirTemperatures(int numberIntervals, double *airTemperature);
428 
430  //setUserDefinedAirTemperatures
444  int setUserDefinedAirTemperatures(int numberIntervals, double *airTemperature, double *timeOfDays);
445 
447  // isUserDefinedAirTemperature
452  bool isUserDefinedAirTemperature();
453 
455  // disableUserDefinedAirTemperature
459  void disableUserDefinedAirTemperature();
460 
462  //setModtranAtmModel
467  void setModtranAtmModel(const ModtranAtmModel model);
468 
470  //getModtranAtmModel
475  ModtranAtmModel getModtranAtmModel();
476 
478  //setModtranHazeModel
483  void setModtranHazeModel(const ModtranHazeModel haze);
484 
486  //getModtranHazeModel
491  ModtranHazeModel getModtranHazeModel();
492 
494  //setModtranSeason
499  void setModtranSeason(const ModtranSeason season);
500 
502  //getModtranSeason
507  ModtranSeason getModtranSeason();
508 
510  //setModtranVisibility
515  void setModtranVisibility(double vis);
516 
518  //getModtranVisibility
523  double getModtranVisibility();
524 
526  //setWindVelocity
531  void setWindVelocity(double windVelocity);
532 
534  //getWindVelocity
539  double getWindVelocity();
540 
542  //setWindDirection
547  void setWindDirection(double EofN);
548 
550  //getWindDirection
555  double getWindDirection();
556 
558  //setRelativeHumidity
563  void setRelativeHumidity(double relative_humidity);
564 
566  //getRelativeHumidity
571  double getRelativeHumidity();
572 
574  //setGroundTemperature
579  void setGroundTemperature(double Tbackground);
580 
582  //getGroundTemperature
587  double getGroundTemperature();
588 
590  //setAtmosphericPressure
595  void setAtmosphericPressure(double Pressure);
596 
598  //getAtmosphericPressure
603  double getAtmosphericPressure();
604 
606  //setModtranClouds
611  void setModtranClouds(const ModtranClouds clouds);
612 
614  //setCloudParameters
628  void setCloudParameters(int numCloudLayers, float thickness, float baseAltitude, float extinctionScale, float waterDensity);
629 
631  //setCloudLayerParameters
645  void setCloudLayerParameters(int layer, float altitude, float waterDensity, float iceDensity, float rainRate);
647  //setCloudLayerParameters
656  void setCloudLayerParameters(int layer, float altitude, float visibility);
658  //getModtranClouds
663  ModtranClouds getModtranClouds();
664 
666  //getCloudParameters
674  void getCloudParameters(int &numCloudLayers, float &thickness, float &baseAltitude, float &extinctionScale, float &waterDensity);
675 
677  //getCloudLayerParameters
686  void getCloudLayerParameters(int layer, float &altitude, float &waterDensity, float &iceDensity, float &rainRate);
687 
689  //setGeodeticOrigin
695  void setGeodeticOrigin(double lat, double lon);
696 
698  //getGeodeticOrigin
704  void getGeodeticOrigin(double &lat, double &lon);
705 
706 
708  //setUpdateTime
713  void setUpdateTime();
714 
716  //isDayTime
721  bool isDayTime ();
722 
724  //setUseSun
731  void setUseSun(bool flag) ;
732 
734  //isUsingSun
741  bool isUsingSun();
742 
744  //setUseBothSunMoon
750  void setUseBothSunMoon(bool flag) ;
751 
753  //getUseBothSunMoon
759  bool getUseBothSunMoon();
760 
762  // getNightTimeConstant
767  double getNightTimeConstant ();
768 
770  // getSkyAngleFactor
775  double getSkyAngleFactor ();
776 
778  //getSunMaxPosition
785  void getSunMaxPosition (double &i, double &j, double &k);
786 
788  // getSunPlaneVectorENU
796  void getSunPlaneVectorENU(double &i, double &j, double &k);
797 
799  //getSunPosition
806  void getSunPosition (double &i, double &j, double &k);
807 
809  //getMoonPosition
816  void getMoonPosition (double &i, double &j, double &k);
817 
819  //getSunMoonPosition
828  bool getSunMoonPosition (double &i, double &j, double &k);
829 
831  //getMoonPhase
837  double getMoonPhase ();
838 
840  //getStarPosition
851  void getStarPosition (int starNum, double &i, double &j, double &k,
852  double &temperature, double &attenuation);
853 
855  //getStarPositionRadiance
866  void getStarPositionRadiance (ssSensor *sensor, int starNum, double &i, double &j, double &k, double &radiance);
867 
869  // initMaxStarParameters
874  void initMaxStarParameters (ssSensor *sensor, double maxSize = 5.0, int starNum = -1);
875 
877  // ssEnvironment::getMaxStarRadiance
882  double getMaxStarRadiance ();
883 
885  // ssEnvironment::getStarPositionRadiance
886  //
899  void getStarPositionRadiance (ssSensor *sensor, int starNum, double &i, double &j, double &k, double &radiance, double &size);
900 
902  //ssEnvironment
907  unsigned int getNumberStars ();
908 
910  //getNumberWavelengths
915  unsigned int getNumberWavelengths();
916 
918  //*getWavelengthsArray
924  double *getWavelengthsArray();
925 
927  //getJulianDate
932  long getJulianDate();
933 
935  //setUpdateBuffer
941  void setUpdateBuffer(double hours);
942 
944  //getUpdateBuffer
949  double getUpdateBuffer();
950 
952  //setSpectralMode
963  void setSpectralMode(bool flag);
964 
966  //isAnySpectralMode
971  bool isSpectralMode();
972 
974  //setAtmEnable
981  void setAtmEnable(bool flag);
982 
984  //isAtmEnable
989  bool isAtmEnable();
990 
992  //setScatterEnable
999  void setScatterEnable(bool flag);
1000 
1002  //isScatterEnable
1007  bool isScatterEnable();
1008 
1010  //setMultiScatterEnable
1017  void setMultiScatterEnable(bool flag);
1018 
1020  //isMultiScatterEnable
1025  bool isMultiScatterEnable();
1026 
1028  //setRoundEarth
1036  void setRoundEarth(bool flag);
1037 
1039  //isRoundEarth
1044  bool isRoundEarth();
1045 
1047  //setAtmExtinctionScale
1055  void setAtmExtinctionScale(float scale);
1056 
1058  //getAtmExtinctionScale
1063  float getAtmExtinctionScale();
1064 
1066  //setAtmAmbientLightScale
1072  void setAtmAmbientLightScale(float scale);
1073 
1075  //getAtmAmbientLightScale
1080  float getAtmAmbientLightScale();
1081 
1083  //setAtmSkyScale
1088  void setAtmSkyScale(float scale);
1089 
1091  //getAtmSkyScale
1096  float getAtmSkyScale();
1097 
1099  //setNumberRanges
1104  void setNumberRanges(unsigned int ranges);
1105 
1107  //getNumberRanges
1112  unsigned int getNumberRanges();
1113 
1115  //setNumberObjectAltitudes
1121  void setNumberObjectAltitudes(unsigned int alts);
1122 
1124  //getNumberObjectAltitudes
1129  unsigned int getNumberObjectAltitudes();
1130 
1132  //getNumberObjectAngles
1137  unsigned getNumberObjectAngles();
1138 
1140  //setNumberObjectAngles
1145  void setNumberObjectAngles(unsigned int angles);
1146 
1147 
1149  //getNumberScatAngles
1154  unsigned int getNumberScatAngles();
1155 
1157  //setNumberScatAngles
1162  void setNumberScatAngles(unsigned int angles);
1163 
1165  //setNumberSensorAltitudes
1171  void setNumberSensorAltitudes(unsigned int alts);
1172 
1174  //getNumberSensorAltitudes
1179  unsigned int getNumberSensorAltitudes();
1180 
1182  //setMaxRange
1188  void setMaxRange(double range);
1189 
1191  //getMaxRange
1196  double getMaxRange();
1197 
1199  //setMaxAltitude
1205  void setMaxAltitude(double maximum);
1206 
1208  //getMaxAltitude
1214  double getMaxAltitude();
1215 
1217  //getRangeScale
1222  double getRangeScale();
1223 
1225  //getObjectAltitudeScale
1230  double getObjectAltitudeScale();
1232  //getRainRate
1238  double getRainRate();
1239 
1241  //setRainRate
1247  void setRainRate(double rate);
1248 
1250  //getRainTemp
1255  double getRainTemp();
1256 
1258  //setRainTemp
1263  void setRainTemp(double temp);
1264 
1266  //getSensorAltitudeScale
1271  double getSensorAltitudeScale();
1272 
1274  //setUpdateInterval
1279  void setUpdateInterval(double deltaHours);
1280 
1282  //getUpdateInterval
1287  double getUpdateInterval();
1288 
1289  /* ------------------------------------- BEGIN MODIFIED BRUNETON & NEYRET ATM LUT CODE ------------------------------ */
1290 
1292  // getSensorPolarATMLUTData
1306  // return: float pointers to sensor atmospheric data
1307  //
1308  void getSensorPolarATMLUTData(ssSensor *sensor, unsigned int &numSensAlts, unsigned int &numObjAngles, unsigned int &numScatAngles, unsigned int &numBins,
1309  float **xmitData, float **pradData, float **sradData, float **mradData);
1310 
1312  // getSensorMaxOptDepth
1320  void getSensorMaxOptDepth(ssSensor *sensor, unsigned int &numBins, float **maxOptDepth);
1321 
1323  // isMBNATM
1331  bool isMBNATM(ssSensor *sensor);
1332 
1333  /* ------------------------------------- BEGIN MODIFIED BRUNETON & NEYRET ATM LUT CODE ------------------------------ */
1334 
1335 
1337  //getTransmission
1349  void getTransmission(ssSensor *sensor,
1350  double sensorGeoC[3], double sensorOrient[3], double entityGeoC[3],
1351  double **transmission, double **pathRadiance, double **scatterRadiance);
1352 
1354  //getTransmission
1365  void getTransmission(ssSensor *sensor, double objectAlt, double objectRange,
1366  double **transmission, double **pathRadiance, double **scatterRadiance);
1367 
1369  //getAtmTableTransmission
1379  void getAtmTableTransmission(ssSensor *sensor, double objectAlt, double objectRange,
1380  double &transmission, double &pathRadiance);
1381 
1383  // getLightSourceTableIrradiances
1384  //
1393  void getLightSourceTableIrradiances(ssSensor *sensor, double objectAlt,
1394  double &ambientIrradiance, double &diffuseIrradiance);
1395 
1396 
1398  //saveRangeTransCompare
1407  double saveRangeTransCompare(ssSensor *sensor, double objectAlt);
1408 
1410  //setGenerateFastDiurnalCache
1416  void setGenerateFastDiurnalCache(bool flag);
1417 
1419  //isGenerateFastDiurnalCache
1424  bool isGenerateFastDiurnalCache();
1425 
1427  //setWaterVaporPartialPressureScaleFactor
1432  void setWaterVaporPartialPressureScaleFactor(double wvpp);
1433 
1435  //getWaterVaporPartialPressureForCurrentTimeOfDay
1440  double getWaterVaporPartialPressureForCurrentTimeOfDay();
1441 
1443  //findClosestDefaultWaterVaporPartialPressure
1450  double findClosestDefaultWaterVaporPartialPressure(char *sigsim_data_dir, double wvpp);
1451 
1452 
1454  //setSeasonBasedOnLocation
1458  void setSeasonBasedOnLocation();
1459 
1461  //useModcardParamsToGenerateCorrespondingATMState
1471  int useModcardParamsToGenerateCorrespondingATMState(char *sigsim_data_dir, char *outfilebasename);
1472 
1473 
1475  // getEnvIrradianceRatios
1483  bool getEnvIrradianceRatios(double &EsundirRatio, double &EsundifRatio, double &EskyRatio, double &EearthRatio);
1484 
1486  // getEnvIrradianceAverageRatios
1494  bool getEnvIrradianceAverageRatios(double &EsundirAveRatio, double &EsundifAveRatio, double &EskyAveRatio, double &EearthAveRatio);
1495 
1497  //*getMetinPtr
1507  METIN *getMetinPtr();
1508 
1510  //isAtmosphereDirty
1515  bool isAtmosphereDirty();
1516 
1518  //setAtmosphereDirty
1522  void setAtmosphereDirty();
1523 
1525  //setUseUpdateButton
1529  void setUseUpdateButton(bool flag);
1530 
1532  //isUseUpdateButton
1536  bool isUseUpdateButton();
1537 
1539  //setUpdateButtonPressed
1543  void setUpdateButtonPressed(bool flag);
1544 
1546  //isUpdateButtonPressed
1550  bool isUpdateButtonPressed();
1551 
1553  // setVisibilityRangeEnable
1557  void setVisibilityRangeEnable(bool state);
1558 
1560  //initVisibilityRange
1565  void initVisibilityRange(SigSimRT *ss);
1566 
1568  //releaseVisibilityRange
1572  void releaseVisibilityRange();
1573 
1575  // getVisibilityRange
1579  bool getVisibilityRange(float visibleRange, ssSensor *sensor, float &sensorRange,
1580  float cloudCoverage, bool isGroundFog, float &visiblityEmissionFactor);
1581 
1583  // getCloudPropertiesProto
1587  void getCloudProperties( ssSensor *sensor, float &humidity, float &extinction, float &lightResponse,
1588  float &ambientLightResponse, float &secondaryLightResponse, float &density);
1589 
1590 private:
1591  void interpolateEight(double fraction[3], double input1[8], double input2[8], double *output1, double *output2);
1592 
1593 
1594 
1595 
1597  //setAutoLightLevel
1602  void setAutoLightLevel(ssSensor *sensor);
1603 
1605  //generateDiurnalCache
1611  bool generateDiurnalCache();
1612 
1614  //loadDefaults
1618  void loadDefaults();
1619 
1621  //insertSensorAtmosphericTable
1627  bool insertSensorAtmosphericTable(ssSensor *sensor);
1628 
1630  //setJulianDate
1635  void setJulianDate(long julian);
1636 
1638  //timeHasChangedSinceLastUpdate
1645  double timeHasChangedSinceLastUpdate();
1646 
1648  //clrAtmosphereDirty
1652  void clrAtmosphereDirty();
1653 
1654 
1656  //setAtmosphereLutsDirty
1660  void setAtmosphereLutsDirty();
1661 
1662 
1663 
1665  double m_maxRange;
1666 
1668  unsigned int m_day;
1669  unsigned int m_month;
1670  unsigned int m_year;
1671 
1674 
1676 
1679 
1681  char m_nightSkyTableFile[SIGSIM_STRING_SIZE];
1682 
1683 
1685  char m_atmosphereStateFile[SIGSIM_STRING_SIZE];
1686 
1689 
1690 
1691 
1692  // SigSim Structures
1693 
1696 
1698  bool m_useSun;
1711 
1713  bool m_dirty;
1716 
1719 
1721  unsigned int m_numberRanges;
1723  unsigned int m_numObjectAltitudes;
1725  unsigned int m_numObjectAngles;
1727  unsigned int m_numSensorAltitudes;
1729  unsigned int m_numScatAngles;
1736 
1739 
1740 
1741  //indicates whether to use update button, or the old way without the update button
1743  //flag indicates when the update button is pressed.
1745 
1746  friend class SigSimRT;
1747  friend class ssRadar;
1748  friend class ssMaterialSet;
1749 
1752 
1755 
1756  struct Implementation;
1757  Implementation *m_impl;
1758 
1759 };
1760 #endif // _ssEnvironment_
1761 


Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)