00001
00075 #ifndef INC_GRE_DLGMASKEDIT_H
00076 #define INC_GRE_DLGMASKEDIT_H
00077
00078 #ifndef INC_RVC_RASTER_H
00079 #include <rvc/raster.h>
00080 #endif
00081 #ifndef INC_RVC_UIFORMOBJECTSINGLE_H
00082 #include <rvc/uiformobjectsingle.h>
00083 #endif
00084
00085 #ifndef INC_MI32_MG2SIMPL_H
00086 #include <mi32/mg2simpl.h>
00087 #endif
00088 #ifndef INC_MI32_DRAWGEN_H
00089 #include <mi32/drawgen.h>
00090 #endif
00091 #ifndef INC_MI32_REGION2D_H
00092 #include <mi32/region2d.h>
00093 #endif
00094
00095 #ifndef INC_MGUI_DLGSHELL_H
00096 #include <mgui/dlgshell.h>
00097 #endif
00098 #ifndef INC_MGUI_COLORSEL_H
00099 #include <mgui/colorsel.h>
00100 #endif
00101 #ifndef INC_MGUI_FORMRADIOBUTTONS_H
00102 #include <mgui/formradiobuttons.h>
00103 #endif
00104 #ifndef INC_MGUI_TOOLBAR_H
00105 #include <mgui/toolbar.h>
00106 #endif
00107 #ifndef INC_MGUI_SLIDER_H
00108 #include <mgui/slider.h>
00109 #endif
00110 #ifndef INC_MGUI_COMBOBOX_H
00111 #include <mgui/combobox.h>
00112 #endif
00113
00114 #ifndef INC_GRE_UIFORMVIEW_H
00115 #include <gre/uiformview.h>
00116 #endif
00117 #ifndef INC_GRE_UIVIEWCANVAS_H
00118 #include <gre/uiviewcanvas.h>
00119 #endif
00120 #ifndef INC_GRE_UIVIEWTOOL_H
00121 #include <gre/uiviewtool.h>
00122 #endif
00123
00124 #ifndef GENERATING_DOXYGEN_OUTPUT
00125 namespace GRE {
00126 class LAYER_RASTER;
00127 class GROUP;
00128 class VIEWABLE;
00129 class TOOL;
00130 }
00131 typedef void *MXTHANDLE;
00132 struct MxtAnyCallbackStruct;
00133 struct MrgnManagerCallbackStruct;
00134 #endif // GENERATING_DOXYGEN_OUTPUT
00135
00136
00137 namespace GRE {
00138
00140 class DLG_MASKEDIT : public MGUI::DLGSHELL {
00141 public:
00142
00143 DLG_MASKEDIT (
00144 MDLGPARENT DlgParent = NULL,
00145 GRE::LAYER_RASTER *RasterLayer = NULL
00146 );
00147
00148 ~DLG_MASKEDIT (
00149 );
00150
00152 void Create ();
00153
00155 ERRVALUE SelectRaster (
00156 GRE::LAYER_RASTER *SrcRastLayer = NULL
00157 );
00158
00159 private:
00160 #ifndef GENERATING_DOXYGEN_OUTPUT
00161
00162 virtual ERRVALUE v_CreateContent ();
00163 virtual void v_OnCloseRequest ();
00164 virtual void v_OnCancel ();
00165 virtual void v_OnOK();
00166
00168 class MASK {
00169 public:
00170
00171 MASK ();
00172 ~MASK ();
00173
00175 void Close (
00176 );
00177
00179 ERRVALUE CopyToTempFrom (
00180 const RVC::OBJITEM SrcObjItem
00181 );
00182
00184 ERRVALUE FillAll (
00185 UINT8 operation
00186 );
00187
00189 ERRVALUE FillRegion (
00190 const REGION2D& region,
00191 bool value
00192 );
00193
00195 UINT8* GetBuffer (
00196 ) { return (m_buffer); }
00197
00199 const RVC::RASTER::MAKEPARMS& GetMakeParms (
00200 ) { return (m_ObjRaster.GetMakeParms()); }
00201
00203 ERRVALUE GetObjItem (
00204 RVC::OBJITEM& ObjItem
00205 ) { return (m_ObjRaster.GetObjItem(ObjItem)); }
00206
00208 ERRVALUE MakeTemp (
00209 INT32 NumColumns,
00210 INT32 NumLines
00211 );
00212
00214 ERRVALUE Read (
00215 INT32 line,
00216 INT32 initcol,
00217 UINT8 *buffer,
00218 INT32 numcols
00219 ) { return (m_ObjRaster.Read(line, initcol, buffer, numcols)); }
00220
00222 ERRVALUE Read (
00223 INT32 line,
00224 INT32 initcol,
00225 void *buffer,
00226 INT32 numcols
00227 ) { return (m_ObjRaster.Read(line, initcol, buffer, numcols, RVC::IMAGE::CONVMODE_INT8)); }
00228
00230 ERRVALUE Write (
00231 INT32 line,
00232 INT32 initcol,
00233 UINT8 *buffer,
00234 INT32 numcols
00235 ) { return (m_ObjRaster.Write(line, initcol, buffer, numcols)); }
00236
00238 ERRVALUE Write (
00239 INT32 line,
00240 INT32 initcol,
00241 void *buffer,
00242 INT32 numcols
00243 ) { return (m_ObjRaster.Write(line, initcol, buffer, numcols, RVC::IMAGE::CONVMODE_INT8)); }
00244
00246 ERRVALUE CopyRasterTo (
00247 RVC::RASTER& TgtRaster
00248 ) { return (m_ObjRaster.CopyRasterTo(TgtRaster)); }
00249
00250 ERRVALUE CopyToNullMask (
00251 RVC::RASTER& TgtRaster
00252 );
00253
00254 private:
00255 #ifndef GENERATING_DOXYGEN_OUTPUT
00256 RVC::RASTER m_ObjRaster;
00257 SIMPLE_ARRAY<UINT8> m_buffer;
00258
00260 static ERRVALUE OnFillSpan (
00261 MGD::CONTEXT_SIMPLE *dc,
00262 INT32 initcol,
00263 INT32 lastcol,
00264 INT32 lin
00265 );
00266
00268 ERRVALUE FillSpan (
00269 INT32 initcol,
00270 INT32 lastcol,
00271 INT32 lin
00272 );
00273
00275 ERRVALUE Setup ();
00276 #endif
00277 };
00278
00279 class MASKEDITTOOLINFO{
00280 public:
00281 MASKEDITTOOLINFO () {m_pane = new MGUI::LAYOUT_PANE;}
00282 ~MASKEDITTOOLINFO () {};
00283
00284 MXTHANDLE GetHandle() {return m_handle;}
00285 void SetHandle(MXTHANDLE handle) {m_handle = handle;}
00286
00287 Widget GetMainForm() {return m_mainform;}
00288 void SetMainForm(Widget mainform) {m_mainform = mainform;}
00289
00290 Widget GetManualForm() {return m_manualform;}
00291 void SetManualForm(Widget manualform) {m_manualform = manualform;}
00292
00293 MGUI::LAYOUT_PANE* GetPane() {return m_pane;}
00294 void SetPane(MGUI::LAYOUT_PANE* pane) {m_pane = pane;}
00295
00296 private:
00297 MGUI::LAYOUT_PANE *m_pane;
00298 MXTHANDLE m_handle;
00299 Widget m_mainform;
00300 Widget m_manualform;
00301 };
00302
00303 class MASKEDITTOOLDATA : public GRE::UI::VIEWTOOL {
00304 public:
00305
00306 MASKEDITTOOLDATA (
00307 GRE::UI::VIEW_CANVAS *view
00308 );
00309
00310 virtual ~MASKEDITTOOLDATA ();
00311
00312 Widget GetMainForm() {return m_mainform;}
00313 void SetMainForm(Widget mainform) {m_mainform = mainform;}
00314
00315 Widget GetManualForm() {return m_manualform;}
00316 void SetManualForm(Widget manualform) {m_manualform = manualform;}
00317
00318 UINT8 GetToolType() {return m_tooltype;}
00319 void SetToolType(UINT8 tooltype) {m_tooltype = tooltype;}
00320
00321 MASKEDITTOOLINFO* GetToolInfo(UINT8 tooltype) {return &m_toolinfo[tooltype];}
00322
00323 DLG_MASKEDIT* GetPdp() {return m_pdp;}
00324 void SetPdp(DLG_MASKEDIT *pdp) {m_pdp = pdp;}
00325
00326 INT32 m_BufferPixels;
00327 REGION2D m_LastRegion;
00328 bool m_ToolIsCleared;
00329
00330 private:
00331
00332
00333 MASKEDITTOOLINFO m_toolinfo[8];
00334 UINT8 m_tooltype;
00335 Widget m_mainform;
00336 Widget m_manualform;
00337 DLG_MASKEDIT *m_pdp;
00338
00339
00340
00341 virtual bool v_Activate ();
00342 virtual void v_Deactivate ();
00343 virtual bool v_Initialize ();
00344 virtual void v_Suspend ();
00345 virtual void v_Resume ();
00346
00347
00348
00349 void UpdateTrans ();
00350
00351 };
00352
00354 class VIEWDATA : public MGUI::DLGSHELL {
00355 public:
00356
00357 VIEWDATA ();
00358 ~VIEWDATA ();
00359
00360 GRE::VIEWABLE* GetViewable() {return m_viewable;}
00361 void SetViewable(GRE::VIEWABLE *viewable) {m_viewable = viewable;}
00362
00363 GRE::UI::VIEW_CANVAS* GetLocatorView() {return m_formview->GetViewLocator();}
00364 GRE::UI::VIEW_CANVAS* GetView() {return m_view;}
00365 void SetView(GRE::UI::VIEW_CANVAS* view) {m_view = view;}
00366
00367 GRE::GROUP* GetGroup() {return m_group;}
00368 void SetGroup(GRE::GROUP* group) {m_group = group;}
00369
00370 MASKEDITTOOLDATA* tooleditmask;
00371
00372 GRE::LAYER_RASTER* GetRasterLayer() {return m_rastlayer;}
00373 void SetRasterLayer(GRE::LAYER_RASTER *layer) {m_rastlayer = layer;}
00374
00375 GRE::LAYER* GetMaskLayer() {return m_masklayer;}
00376 void SetMaskLayer(GRE::LAYER *layer) {m_masklayer = layer;}
00377
00378 GRE::LAYER* GetMarkLayer() {return m_marklayer;}
00379 void SetMarkLayer(GRE::LAYER *layer) {m_marklayer = layer;}
00380
00381 COLOR GetMaskIncludeColor() {return m_MaskIncludeColor;}
00382 void SetMaskIncludeColor(COLOR color) {m_MaskIncludeColor = color;}
00383
00384 COLOR GetMaskExcludeColor() {return m_MaskExcludeColor;}
00385 void SetMaskExcludeColor(COLOR color) {m_MaskExcludeColor = color;}
00386
00387 COLOR GetMarkColor() {return m_MaskMarkColor;}
00388 void SetMarkColor(COLOR color) {m_MaskMarkColor = color;}
00389
00390 private:
00391 virtual ERRVALUE v_CreateContent();
00392
00393 GRE::VIEWABLE *m_viewable;
00394 GRE::UI::VIEW_CANVAS *m_view;
00395 GRE::UI::FORM_VIEW *m_formview;
00396 GRE::GROUP *m_group;
00397 GRE::LAYER_RASTER *m_rastlayer;
00398 GRE::LAYER *m_masklayer;
00399 GRE::LAYER *m_marklayer;
00400 COLOR m_MaskIncludeColor;
00401 COLOR m_MaskExcludeColor;
00402 COLOR m_MaskMarkColor;
00403 };
00404
00406 class THRESHDATA {
00407 public:
00408
00409 THRESHDATA ();
00410 ~THRESHDATA () {};
00411
00412 double GetUserRangeBegin() {return m_UserRangeBegin;}
00413 void SetUserRangeBegin(double range) {m_UserRangeBegin = range;}
00414
00415 double GetUserRangeEnd() {return m_UserRangeEnd;}
00416 void SetUserRangeEnd(double range) {m_UserRangeEnd = range;}
00417
00418 DOUBLE_RANGE GetRasterRange() {return m_RasterRange;}
00419 void SetRasterRange(DOUBLE_RANGE range) {m_RasterRange = range;}
00420
00421 bool IsInside() {return m_IsInside;}
00422 void SetInside(bool inside) {m_IsInside = inside;}
00423
00424 bool IsInteger() {return m_IsInteger;}
00425 void SetInteger(bool integer) {m_IsInteger = integer;}
00426
00427 private:
00428 double m_UserRangeBegin;
00429 double m_UserRangeEnd;
00430 DOUBLE_RANGE m_RasterRange;
00431 bool m_IsInside;
00432 bool m_IsInteger;
00433 };
00434
00435 VIEWDATA m_viewdata;
00436 THRESHDATA *m_threshdata;
00437
00438 enum SAVEMODE {
00439 SAVEMODE_Mask = 0,
00440 SAVEMODE_NullMask = 1
00441 };
00442
00443 static int FillSeeded (
00444 INT32 SeedX,
00445 INT32 SeedY,
00446 GTestPointL TestInside,
00447 GDrawHSpanL gDrawHSpan,
00448 LPOINT2D *boundpt,
00449 void *userdata
00450 );
00451
00452 INT32 GetRasterNumLins() {return m_RasterNumLins;}
00453 INT32 GetRasterNumCols() {return m_RasterNumCols;}
00454 void SetRasterNumCols(INT32 cols) {m_RasterNumCols = cols;}
00455 void SetRasterNumLins(INT32 lins) {m_RasterNumLins = lins;}
00456
00458 double GetFillVal(INT32 i) {return m_FillVal[i];}
00460 double GetFillRange() {return m_FillRange;}
00462 void SetFillVal(INT32 i, double FillVal) {m_FillVal[i] = FillVal;}
00464 void SetFillRange(double FillRange) {m_FillRange = FillRange;}
00465
00467 void SetUserSaved(bool Saved) {m_UserSaved = Saved;}
00468 void SetSaveMode(SAVEMODE mode) {m_SaveMode = mode;}
00469 SAVEMODE GetSaveMode() {return m_SaveMode;}
00470 bool IsUserSaved() {return m_UserSaved;}
00471
00472 RVC::OBJITEM GetMaskObjItem() {return m_MaskObjItem;}
00473 void SetMaskObjItem(const RVC::OBJITEM& objitem) {m_MaskObjItem = objitem;}
00474 void ClearMaskObjItem() {m_MaskObjItem.Clear();}
00475
00476 ERRVALUE ObjectViewOpen ();
00477 void ObjectViewSetupMask ();
00478 int SetupMask (bool UseSavedMask = false);
00479
00480 void SetDlgParent(MDLGPARENT DlgParent) {m_DlgParent = DlgParent;}
00481 MDLGPARENT GetDlgParent() {return m_DlgParent;}
00482
00483 ERRVALUE SelectMask (
00484 bool forceselect
00485 );
00486
00487 void SetMaskColors ();
00488 void SetMarkColors ();
00489
00490 void ReadDefaults ();
00491 void SaveDefaults ();
00492 void RunProcess ();
00493
00495 TRANS2D_MAPGEN GetFirstGeorefTrans() {return m_FirstGeorefTrans;}
00496 void SetFirstGeorefTrans(TRANS2D_MAPGEN trans) {m_FirstGeorefTrans = trans;}
00497 void GetTransLayerDispAffine (MAT3X3 OtoD, MAT3X3 DtoO);
00498 int ObjectViewSetupMaskGeoref();
00499
00500
00501 static void TCB_MaskEditToolActivate (MxtAnyCallbackStruct *cbstr, void *vtdp);
00502 static void TCB_MaskEditToolChange (MxtAnyCallbackStruct *cbstr, void *vtdp);
00503 static void MaskEditToolSetTrans(MASKEDITTOOLDATA *tdp);
00504 static void MaskEditToolOp (MASKEDITTOOLDATA *tdp, int op);
00505 static void RCB_SetTransParm (MrgnManagerCallbackStruct *cb, void *vtdp);
00506 static void RCB_Mark (MrgnManagerCallbackStruct *cb, void *vtdp);
00507
00508
00509 static int TestInside (INT32 col, INT32 lin, DLG_MASKEDIT* pdp);
00510
00511
00512 static int DrawSpan (INT32 start, INT32 end, INT32 lin, DLG_MASKEDIT* pdp);
00513
00514 MDLGPARENT m_DlgParent;
00515 GRE::LAYER_RASTER *m_RasterLayer;
00516 GRE::UI::VIEWTOOL *m_PrevTool;
00517
00518 RVC::OBJITEM m_MaskObjItem;
00519 SAVEMODE m_SaveMode;
00520 bool m_UserSaved;
00521 bool m_IsDestroyLayer;
00522 DOUBLE_ARRAY<double> m_FillVal;
00523 double m_FillRange;
00524 TRANS2D_MAPGEN m_FirstGeorefTrans;
00525 INT32 m_RasterNumLins;
00526 INT32 m_RasterNumCols;
00527
00528 RVC::RASTER m_ObjSrcRaster;
00529 MASK m_SrcMask;
00530 MASK m_MarkMask;
00531
00532
00533 ERRVALUE CreateMaskTools (MGUI::LAYOUT_PANE_BASE& ParentPane);
00534 ERRVALUE CreateMaskDialog (MGUI::LAYOUT_PANE& ParentPane);
00535
00536 void OnApplyRange ();
00537 void OnModifyPressed ();
00538 void OnSelectRaster ();
00539 void OnMaskSpecify ();
00540 void OnChangeHighlightColor ();
00541 void OnSliderChanged ();
00542 void OnShowManual ();
00543 void OnExit ();
00544 void OnToolBar(MGUI::ID cmdid, bool state);
00545
00546 void MaskEditToolSetup (UINT8 tooltype);
00547
00548 RVC::UI::FORM_OBJECT_SINGLE m_SrcRasterSelect;
00549
00550 MGUI::CTRL_GROUPBOX m_colorGroupBox;
00551 MGUI::CTRL_PUSHBUTTON m_MaskSelect;
00552 MGUI::CTRL_TEXT m_MaskTextBox;
00553 MGUI::FORM_COLORBUTTON m_IncludeColorSelect;
00554 MGUI::FORM_COLORBUTTON m_ExcludeColorSelect;
00555 MGUI::FORM_COLORBUTTON m_MarkColorSelect;
00556 MGUI::FORM_EDIT_NUMBER m_IncludeTransparencySelect;
00557 MGUI::FORM_EDIT_NUMBER m_ExcludeTransparencySelect;
00558 MGUI::FORM_EDIT_NUMBER m_MarkTransparencySelect;
00559 MGUI::FORM_SLIDER *m_RangeBeginSlider;
00560 MGUI::FORM_SLIDER *m_RangeEndSlider;
00561 MGUI::FORM_SLIDER *m_ValueRangeSlider;
00562 MGUI::FORM_COMBOBOX m_RangeType;
00563 MGUI::CTRL_PUSHBUTTON m_ThreshApplyButton;
00564 MGUI::CTRL_PUSHBUTTON m_ShowManualButton;
00565 MGUI::CTRL_TOOLBAR m_EditToolBar;
00566 MGUI::FORM_RADIOBUTTONS m_SetSaveMode;
00567 #endif
00568 };
00569 }
00570
00571 #endif //INC_MI32_DLGMASKEDIT_H