Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Builder.h
1 //
2 // Builder.h
3 //
4 // Copyright (c) 2001-2011 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
7 
8 #ifndef BUILDERH
9 #define BUILDERH
10 
11 #include "vtdata/Projections.h"
12 #include "vtdata/Plants.h" // for vtSpeciesList
13 #include "vtdata/Fence.h" // for LinStructOptions
14 #include "vtdata/vtLog.h"
15 
16 #include "Layer.h"
17 #include "TilingOptions.h"
18 #include "RenderOptions.h"
19 #include "BuilderView.h"
20 
21 class vtDLGFile;
22 class vtVegLayer;
23 class vtRawLayer;
24 class vtElevLayer;
25 class vtImageLayer;
26 class vtRoadLayer;
27 class vtStructureLayer;
28 class vtUtilityLayer;
29 class vtFeatureSet;
30 class VegGenOptions;
31 class vtElevationGrid;
32 
33 // dialogs
34 class InstanceDlg;
35 
41 class Builder
42 {
43 public:
44  Builder();
45  ~Builder();
46 
47  void ReadDataPath();
48  void ReadDatapathsFromXML(ifstream &input, const char *path);
49 
50  // Project methods
51  bool LoadProject(const vtString &fname, vtScaledView *pView = NULL);
52  void DeleteContents();
53 
54  // Layer methods
55  int NumLayers() const { return m_Layers.GetSize(); }
56  vtLayer *GetLayer(int i) const { return m_Layers[i]; }
57  vtLayer *LoadLayer(const wxString &fname);
58  void AddLayer(vtLayer *lp);
59  virtual bool AddLayerWithCheck(vtLayer *pLayer, bool bRefresh = true);
60  virtual void RemoveLayer(vtLayer *lp);
61  void DeleteLayer(vtLayer *lp);
62  virtual void SetActiveLayer(vtLayer *lp, bool refresh = false);
63  vtLayer *GetActiveLayer() { return m_pActiveLayer; }
64  vtElevLayer *GetActiveElevLayer()
65  {
66  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_ELEVATION)
67  return (vtElevLayer *)m_pActiveLayer;
68  return NULL;
69  }
70  vtImageLayer *GetActiveImageLayer()
71  {
72  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_IMAGE)
73  return (vtImageLayer *)m_pActiveLayer;
74  return NULL;
75  }
76  vtRoadLayer *GetActiveRoadLayer()
77  {
78  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_ROAD)
79  return (vtRoadLayer *)m_pActiveLayer;
80  return NULL;
81  }
82  vtRawLayer *GetActiveRawLayer()
83  {
84  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_RAW)
85  return (vtRawLayer *)m_pActiveLayer;
86  return NULL;
87  }
88  vtStructureLayer *GetActiveStructureLayer()
89  {
90  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_STRUCTURE)
91  return (vtStructureLayer *)m_pActiveLayer;
92  return NULL;
93  }
94  vtUtilityLayer *GetActiveUtilityLayer()
95  {
96  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_UTILITY)
97  return (vtUtilityLayer *)m_pActiveLayer;
98  return NULL;
99  }
100  vtVegLayer *GetActiveVegLayer()
101  {
102  if (m_pActiveLayer && m_pActiveLayer->GetType() == LT_VEG)
103  return (vtVegLayer *)m_pActiveLayer;
104  return NULL;
105  }
106  int LayersOfType(LayerType lt);
107  vtLayer *FindLayerOfType(LayerType lt);
108  int NumModifiedLayers();
109  DRECT GetExtents();
110  DPoint2 EstimateGeoDataCenter();
111  LayerType AskLayerType();
112  int LayerNum(vtLayer *lp);
113  void SwapLayerOrder(int n0, int n1);
114 
115  // UI
116  virtual void RefreshTreeStatus() {}
117  virtual void RefreshStatusBar() {}
118  virtual void UpdateFeatureDialog(vtRawLayer *raw, vtFeatureSetPoint2D *set, int iEntity) {}
119  virtual void OnSetMode(LBMode m) {}
120  virtual void OnSelectionChanged() {}
121  virtual void UpdateDistance(const DPoint2 &p1, const DPoint2 &p2) {}
122  virtual void UpdateDistance(const DLine2 &path) {}
123  virtual void ZoomAll() {}
124  bool DrawDisabled() { return m_bDrawDisabled; }
125  void AddToMRU(vtStringArray &arr, const vtString &fname);
126 
127  // Projection
128  virtual void SetProjection(const vtProjection &p);
129  void GetProjection(vtProjection &p) { p = m_proj; }
130  vtProjection &GetAtProjection() { return m_proj; }
131  bool ConfirmValidCRS(vtProjection *pProj);
132 
133  // Elevation
134  bool SampleCurrentTerrains(vtElevLayer *pTarget);
135  float GetHeightFromTerrain(const DPoint2 &p);
136  void ExportBitmap(vtElevLayer *pEL, RenderOptions &ropt);
137  uint ElevLayerArray(std::vector<vtElevLayer*> &elevs);
138  bool FillElevGaps(vtElevLayer *el, DRECT *area = NULL, int iMethod = -1);
139  void FlagStickyLayers(const std::vector<vtElevLayer*> &elevs);
140  vtElevLayer *ComputeDifference(vtElevLayer *pElev);
141 
142  // Images
143  bool SampleCurrentImages(vtImageLayer *pTarget);
144  bool GetRGBUnderCursor(const DPoint2 &p, RGBi &rgb);
145 
146  // Structures
147  vtLinearParams m_LSOptions;
148  InstanceDlg *m_pInstanceDlg;
149 
150  // Content items (can be referenced as structures)
151  void LookForContentFiles();
152  void FreeContentFiles();
153  void ResolveInstanceItem(vtStructInstance *inst);
154  std::vector<vtContentManager*> m_contents;
155 
156  // Vegetation
157  vtString m_strSpeciesFilename;
158  vtString m_strBiotypesFilename;
159  vtSpeciesList m_PlantList;
160  vtSpeciesList *GetPlantList() { return &m_PlantList; }
161  bool LoadSpeciesFile(const char *fname);
162  bool LoadBiotypesFile(const char *fname);
163 
164  vtBioRegion m_BioRegion;
165  vtBioRegion *GetBioRegion() { return &m_BioRegion; }
166 
167  void GenerateVegetation(const char *vf_file, DRECT area, VegGenOptions &opt);
168  void GenerateVegetationPhase2(const char *vf_file, DRECT area, VegGenOptions &opt);
169 
170  // Import
171  void ImportData(LayerType ltype);
172  int ImportDataFromArchive(LayerType ltype, const wxString &fname_org, bool bRefresh);
173  vtLayer *ImportDataFromFile(LayerType ltype, const wxString &strFileName, bool bRefresh = false, bool bWarn = false);
174  vtLayer *ImportFromDLG(const wxString &strFileName, LayerType ltype);
175  vtLayer *ImportFromSHP(const wxString &strFileName, LayerType ltype);
176  vtLayer *ImportFromDXF(const wxString &strFileName, LayerType ltype);
177  vtLayer *ImportElevation(const wxString &strFileName, bool bWarn = true);
178  vtLayer *ImportImage(const wxString &strFileName);
179  vtLayer *ImportFromLULC(const wxString &strFileName, LayerType ltype);
180  vtLayer *ImportRawFromOGR(const wxString &strFileName);
181  vtLayer *ImportVectorsWithOGR(const wxString &strFileName, LayerType ltype);
182  vtStructureLayer *ImportFromBCF(const wxString &strFileName);
183  void ImportFromMapSource(const char *fname);
184  vtFeatureSetPoint2D *ImportPointsFromDBF(const char *fname);
185  vtFeatureSet *ImportPointsFromCSV(const char *fname);
186  vtFeatureSet *ImportPointsFromXYZ(const char *fname, bool progress_callback(int) = NULL);
187  void ImportDataPointsFromTable(const char *fname, bool progress_callback(int) = NULL);
188  int ImportDataFromTIGER(const wxString &strDirName);
189  void ImportDataFromNTF(const wxString &strFileName);
190  void ImportDataFromS57(const wxString &strDirName);
191  int ImportDataFromSCC(const char *filename);
192  bool ImportDataFromDXF(const char *filename);
193  LayerType GuessLayerTypeFromDLG(vtDLGFile *pDLG);
194  void ElevCopy();
195  void ElevPasteNew();
196 
197  // Export
198  void ExportASC();
199  void ExportGeoTIFF();
200  void ExportTerragen();
201  void ExportBMP();
202  void ExportSTM();
203  void ExportTIN();
204  void ExportPlanet();
205  void ExportVRML();
206  void ExportXYZ();
207  void ExportRAWINF();
208  void ExportChunkLOD();
209  void ExportPNG16();
210  void Export3TX();
211  void ElevExportTiles(BuilderView *pView = NULL);
212  void ImageExportTiles(BuilderView *pView = NULL);
213  void ImageExportPPM();
214  void ExportAreaOptimizedElevTileset(BuilderView *pView = NULL);
215  void ExportAreaOptimizedImageTileset(BuilderView *pView = NULL);
216 
217  // Area tool
218  void SetArea(const DRECT &r) { m_area = r; }
219  void GetArea(DRECT &r) { r = m_area; }
220  DRECT &GetAtArea() { return m_area; }
221 
222  // Sampling
223  void ScanElevationLayers(int &count, int &floating, int &tins, DPoint2 &spacing);
224  void MergeResampleElevation(BuilderView *pView = NULL);
225  bool SampleElevationToTilePyramids(BuilderView *pView, TilingOptions &opts, bool bFloat, bool bShowGridMarks = true);
226  bool DoSampleElevationToTilePyramids(BuilderView *pView, TilingOptions &opts, bool bFloat, bool bShowGridMarks = true);
227  bool SampleImageryToTilePyramids(BuilderView *pView, TilingOptions &opts, bool bShowGridMarks = true);
228  bool DoSampleImageryToTilePyramids(BuilderView *pView, TilingOptions &opts, bool bShowGridMarks = true);
229  void MergeResampleImages(BuilderView *pView = NULL);
230 
231  // Application Data
232  wxFrame *m_pParentWindow;
233  bool m_bDrawDisabled;
234 
235 protected:
236  void CheckOptionBounds();
237 
238  // Application Data
239  DRECT m_area;
240  LayerArray m_Layers;
241  vtLayerPtr m_pActiveLayer;
242  TilingOptions m_tileopts;
243 
244  // Most-recently-used files
245  vtStringArray m_ProjectFiles, m_LayerFiles, m_ImportFiles;
246 
247  vtProjection m_proj;
248  bool m_bAdoptFirstCRS; // If true, silenty assume user wants to
249  // use the CRS of the first layer they create
250 };
251 
252 extern Builder *g_bld;
253 
254 wxString GetImportFilterString(LayerType ltype);
255 float ElevLayerArrayValue(std::vector<vtElevLayer*> &elevs, const DPoint2 &p);
256 void ElevLayerArrayRange(std::vector<vtElevLayer*> &elevs,
257  float &minval, float &maxval);
258 
259 #endif // BUILDERH
260