00001
00167 #ifndef INC_GRE_LAYERDC_H
00168 #define INC_GRE_LAYERDC_H
00169
00170 #ifndef INC_GRE_VIEW_H
00171 #include <gre/view.h>
00172 #endif
00173
00174 #ifndef INC_GRE_GROUP_H
00175 #include <gre/group.h>
00176 #endif
00177
00178 #ifndef INC_GRE_LAYERVIEW_H
00179 #include <gre/layerview.h>
00180 #endif
00181
00182 #ifndef INC_GRE_LAYERSECTION_H
00183 #include <gre/layersection.h>
00184 #endif
00185
00186 #ifndef INC_GRE_GROUPVIEW_H
00187 #include <gre/groupview.h>
00188 #endif
00189
00190 #ifndef INC_GRE_3DSCENE_H
00191 #include <gre/3dscene.h>
00192 #endif
00193
00194 #ifndef INC_MI32_STEREOVIEW_H
00195 #include <mi32/stereoview.h>
00196 #endif
00197
00198 #ifndef INC_SML_CLASS_H
00199 #include <sml/class.h>
00200 #endif
00201
00202 #ifndef INC_SPATMOD_IMAGERESAMPLEMETHOD_H
00203 #include <spatmod/imageresamplemethod.h>
00204 #endif
00205
00206
00207 #ifndef GENERATING_DOXYGEN_OUTPUT
00208 namespace MGD {
00209 class COLORLOCK;
00210 }
00211 namespace RVC {
00212 class RASTER;
00213 class NULLMASK;
00214 class STYLE;
00215 class STYLEPATTERN_BASE;
00216 class STYLEPATTERN_BITMAP;
00217 class STYLEPATTERN_HATCH;
00218 class STYLEPATTERN_LINE;
00219 class STYLEPATTERN_SYMBOL;
00220 }
00221 namespace SPATMOD {
00222 class GEOREFERENCE;
00223 namespace IMAGE {
00224 class STAGE;
00225 class STAGE_AUTOPTR;
00226 }
00227 }
00228 #endif
00229
00230
00231 namespace GRE {
00232
00235 class LAYERDC : public POLYLINE::CLIP {
00236 public:
00237
00241 LAYERDC (
00242 LAYER *layer,
00243 GRE::VIEW *view,
00244 MGD::DEVICE *pDevice = 0,
00245 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None,
00246 const TRANS2D_MAPGEN *pTransObjectToDevice = 0
00247 );
00248
00251 LAYERDC (
00252 GRE::VIEW *view,
00253 MGD::DEVICE *pDevice,
00254 const TRANS2D_MAPGEN& ObjectToDevice,
00255 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00256 );
00257
00258
00259 LAYERDC (
00260 GRE::LAYERSECTION *pLayerSection,
00261 RENDERTARGET content,
00262 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00263 );
00264
00266 virtual ~LAYERDC ();
00267
00269 void CalcPointDisplacedDualZ (
00270 DPOINT3D& ptDevice,
00271 DPOINT2D& ptDisplacedL,
00272 DPOINT2D& ptDisplacedR
00273 ) const;
00274
00276 void CalcPointDisplacedLeftZ (
00277 DPOINT3D& ptDevice,
00278 DPOINT2D& ptDisplaced
00279 ) const;
00280
00282 void CalcPointDisplacedRightZ (
00283 DPOINT3D& ptDevice,
00284 DPOINT2D& ptDisplaced
00285 ) const;
00286
00289 bool CanDrawLayer () const;
00290
00293 bool CheckColorHighlight (
00294 COLOR& color,
00295 const RVC::ELEMENT& element,
00296 const UNSIGNEDSET *pHighlightSet = 0
00297 ) const;
00298
00301 bool CheckColorLock (
00302 MGD::COLORLOCK& colorlock
00303 );
00304
00306 bool CheckColorLock (
00307 MGD::COLORLOCK& colorlock,
00308 const RVC::ELEMENT& element,
00309 const UNSIGNEDSET *pHighlightSet = 0
00310 );
00311
00313 bool CheckColorLock (
00314 MGD::COLORLOCK& colorlock,
00315 ELEMTYPE ElemType,
00316 ELEMNUM ElemNum,
00317 const UNSIGNEDSET *pHighlightSet = 0
00318 ) { return (CheckColorLock(colorlock,RVC::ELEMENT(ElemNum,ElemType),pHighlightSet)); }
00319
00321 bool CheckColorOverride (
00322 COLOR& color
00323 ) const;
00324
00325
00326 bool GRE::LAYERDC::CheckColorOverride (
00327 COLOR& color,
00328 const RVC::ELEMENT& element,
00329 const UNSIGNEDSET *pHighlightSet = 0
00330 ) const;
00331
00333 void ClearAllDrawnSets ();
00334
00335
00337 int DrawLine (
00338 const RVC::ELEMENT& element,
00339 const POLYLINE& lineObject,
00340 LINESTYLE& LineStyle,
00341 RVC::STYLE *pObjStyle = 0,
00342 DRAWFLAGS drawflags = DRAWFLAG_None,
00343 int StyleScriptSeg = -1
00344 );
00345
00346
00348 int DrawLines (
00349 const RVC::ELEMENT& element,
00350 const POLYLINELIST& linesObject,
00351 LINESTYLE& LineStyle,
00352 RVC::STYLE *pObjStyle = 0,
00353 DRAWFLAGS drawflags = DRAWFLAG_None,
00354 int StyleScriptSeg = -1
00355 );
00356
00357 DEPRECATED_MSG("Use DrawLineObject2D") int DrawLineClipped2D (
00358 const POLYLINE& lineObject
00359 ) const { return (DrawLineObject2D(lineObject)); }
00360
00363 DEPRECATED int DrawLineClipped3D (
00364 const POLYLINE& lineObject,
00365 bool DensifyOnSurface = true
00366 ) const;
00367
00370 int DrawLineDevice2D (
00371 const POLYLINE& lineDevice
00372 ) const;
00373
00375 int DrawLineObject (
00376 const POLYLINE& lineObject,
00377 LINESTYLE& LineStyle,
00378 RVC::STYLE *pObjStyle = 0
00379 );
00380
00383 int DrawLineObject2D (
00384 const POLYLINE& lineObject
00385 ) const;
00386
00389 int DrawLineObject3D (
00390 const POLYLINE& lineObject,
00391 bool DensifyOnSurface = true
00392 ) const;
00393
00396 bool GRE::LAYERDC::DrawManagedPointSymbols (
00397 const RVC::ELEMENT& element
00398 );
00399
00402 int DrawPoint (
00403 const RVC::ELEMENT& element,
00404 const DPOINT3D& ptObject,
00405 POINTSTYLE& PointStyle,
00406 RVC::STYLE *pObjStyle = 0,
00407 DRAWFLAGS drawflags = DRAWFLAG_None,
00408 int StyleScriptSeg = -1
00409 );
00410
00413 int DrawPointObject (
00414 const DPOINT3D& ptObject,
00415 POINTSTYLE& PointStyle,
00416 RVC::STYLE *pObjStyle = 0,
00417 const RVC::STYLEPATTERN_BASE *pPatternPoint = 0
00418 );
00419
00421 void DrawPointDevice2D (
00422 DPOINT3D& ptDevice
00423 );
00424
00427 bool DrawPointObject2D (
00428 const DPOINT3D& ptObject
00429 );
00430
00433 int DrawPoints (
00434 const RVC::ELEMENT& element,
00435 const POLYLINE& ptsObject,
00436 POINTSTYLE& PointStyle,
00437 RVC::STYLE *pObjStyle = 0,
00438 DRAWFLAGS drawflags = DRAWFLAG_None,
00439 int StyleScriptSeg = -1
00440 );
00441
00444 int DrawPolygons (
00445 const RVC::ELEMENT& element,
00446 const REGION2D& rgnObject,
00447 POLYSTYLE& PolyStyle,
00448 RVC::STYLE *pObjStyle = 0,
00449 DRAWFLAGS drawflags = DRAWFLAG_None,
00450 int StyleScriptSeg = -1
00451 );
00452
00455 int DrawRegionDevice2D (
00456 const REGION2D& rgnDevice,
00457 POLYSTYLE& PolyStyle,
00458 RVC::STYLE *pObjStyle = 0
00459 );
00460
00463 int DrawRegionObject (
00464 const REGION2D& rgnObject,
00465 POLYSTYLE& PolyStyle,
00466 RVC::STYLE *pObjStyle = 0
00467 );
00468
00471 int DrawRegionObject2D (
00472 const REGION2D& rgnObject
00473 ) const;
00474
00477 int DrawRegionObject3D (
00478 const REGION2D& rgnObject
00479 ) const;
00480
00483 int DrawSegmentDevice2D (
00484 const DPOINT3D& ptDevice1,
00485 const DPOINT3D& ptDevice2
00486 ) const;
00487
00490 int DrawSegmentDevice2D (
00491 double p1x,
00492 double p1y,
00493 double p2x,
00494 double p2y
00495 ) const { return (DrawSegmentDevice2D(DPOINT2D(p1x,p1y),DPOINT2D(p2x,p2y))); }
00496
00499 int DrawSegment3D (
00500 const DPOINT3D& ptObject1,
00501 const DPOINT3D& ptObject2
00502 ) const;
00503
00506 int DrawSubRegion (
00507 const RVC::ELEMENT& element,
00508 const SUBREGION2D& srObject,
00509 POLYSTYLE& PolyStyle,
00510 RVC::STYLE *pObjStyle = 0,
00511 DRAWFLAGS drawflags = DRAWFLAG_None,
00512 int StyleScriptSeg = -1
00513 );
00514
00517 int DrawSubRegionDevice2D (
00518 const SUBREGION2D& srDevice,
00519 POLYSTYLE& style,
00520 RVC::STYLE *pObjStyle = 0
00521 );
00522
00525 int DrawSubRegionDevice2D (
00526 const SUBREGION2D& srDevice
00527 );
00528
00531 int DrawSubRegionObject (
00532 const SUBREGION2D& srObject,
00533 POLYSTYLE& style,
00534 RVC::STYLE *pObjStyle = 0
00535 );
00536
00539 int DrawSubRegionObject3D (
00540 const SUBREGION2D& srObject
00541 ) const;
00542
00544 ERRVALUE DrawWireframeFlat (
00545 const REGION2D& rgnObject
00546 ) const;
00547
00550 bool Fill3dFlatPolygon (
00551 const DPOINT3D *ptsObject,
00552 INT32 numPoints
00553 ) const;
00554
00557 bool Fill3dTriangle (
00558 const DPOINT3D *tp[3]
00559 ) const;
00560
00563 int FillSubRegionDevice2D (
00564 const SUBREGION2D& srDevice
00565 );
00566
00568 double Get3dDepthScale (
00569 ) const { return (m_pLayerView->Get3dDepthScale()); }
00570
00572 const GRE::SCENE3D& Get3dScene (
00573 ) const { return (m_Scene3D); }
00574
00576 GRE::SCENE3D& Get3dScene (
00577 ) { return (m_Scene3D); }
00578
00580 double Get3dSurfaceIncrement (
00581 ) const { return (m_pLayerView->Get3dSurfaceIncrement()); }
00582
00584 STEREOVIEW Get3dStereoView (
00585 ) const { return (m_Scene3D.GetStereoView()); }
00586
00588 double Get3dZScale (
00589 ) const { return (m_pLayerView->Get3dZScale()); }
00590
00592 const REGION2D& GetClipRegion (
00593 ) const { return (m_ClipRegion); }
00594
00596 double GetDesignScale (
00597 ) const { return (m_DesignScale); }
00598
00600 const LRECT2D& GetDeviceRectUsed () const
00601 { return (m_pLayerView->GetDeviceRectUsed()); }
00602
00604 GRE::DRAWFLAGS GetDrawFlags (
00605 ) const { return (m_drawflags); }
00606
00608 MGD::CONTEXT* GetDrawingContext (
00609 ) const { return (m_ggc); }
00610
00612 MGD::DEVICE* GetDrawingDevice (
00613 ) const;
00614
00616 double GetDrawingScale (
00617 ) const { return (m_DrawingScale); }
00618
00621 UNSIGNEDSET* GetElemDrawnSet (
00622 ELEMTYPE ElemType = ELEMTYPE_All
00623 ) const;
00624
00626 LAYER* GetLayer (
00627 ) const { return (m_layer); }
00628
00630 const GRE::LAYERSECTION* GetLayerSection (
00631 ) const { return (m_pLayerSection); }
00632
00634 GRE::LAYERSECTION* GetLayerSection (
00635 ) { return (m_pLayerSection); }
00636
00638 const GRE::LAYERVIEW* GetLayerView (
00639 ) const { return (m_pLayerView); }
00640
00642 GRE::LAYERVIEW* GetLayerView (
00643 ) { return (m_pLayerView); }
00644
00646 bool GetNoDrawActive (
00647 ) const { return (m_NoDrawActive); }
00648
00650 const DRECT2D& GetObjectClipRect (
00651 ) const { return (m_ObjClipRect); }
00652
00654 const DPOINT2D& GetPixelSizeMM (
00655 ) const { return (m_PixelSizeMM); }
00656
00658 GRE::RENDERTARGET GetRenderTarget (
00659 ) const { return (m_RenderTarget); }
00660
00662 double GetRotationAngle (
00663 ) const { return (m_RotationAngle); }
00664
00666 double GetRotationCos (
00667 ) const { return (m_pGroupView->GetRotationCos()); }
00668
00670 double GetRotationSin (
00671 ) const { return (m_pGroupView->GetRotationSin()); }
00672
00674 const STEREOSHIFT& GetStereoShift () const
00675 { return (m_pGroupView->GetStereoShift()); }
00676
00678 bool GetStereoInterlaceStartRight (
00679 ) const { return (m_pGroupView->GetStereoInterlaceStartRight()); }
00680
00682 LAYER_SURFACE* GetSurfaceLayer (
00683 ) const { return (m_pLayerView->GetSurfaceLayer()); }
00684
00686 ERRVALUE GetSurfaceZ (
00687 POLYLINE& plObject
00688 ) const;
00689
00691 ERRVALUE GetSurfaceZ (
00692 DPOINT3D *ptsObject,
00693 INT32 NumPoints
00694 ) const;
00695
00697 ERRVALUE GetSurfaceZ (
00698 const DPOINT2D& spoint,
00699 double& z,
00700 bool DoSearch
00701 ) const;
00702
00704 const TRANS2D_MAPGEN& GetTransLayerDevice (
00705 ) const;
00706
00708 const TRANS2D_MAPGEN& GetTransLayerSurface (
00709 ) const { return (m_pLayerView->GetTransLayerSurface()); }
00710
00711 GRE::VIEW* GetView (
00712 ) const { return (m_view); }
00713
00715 bool HasSurfaceLayer (
00716 ) const { return (m_pLayerView->GetSurfaceLayer() != 0); }
00717
00719 ERRVALUE ImageDraw2D (
00720 SPATMOD::IMAGE::STAGE *pStageInput,
00721 const LRECT2D* SectionRect = 0,
00722 bool bForceAlphaBlend = false
00723 ) const;
00724
00726 ERRVALUE ImageInsertResampleFilter (
00727 SPATMOD::IMAGE::STAGE_AUTOPTR& PtrStage,
00728 SPATMOD::IMAGE::RESAMPLEMETHOD ResampleMethod = SPATMOD::IMAGE::RESAMPLEMETHOD_Nearest
00729 ) const;
00730
00732 ERRVALUE ImageInsertResampleFilterStereo2D (
00733 SPATMOD::IMAGE::STAGE_AUTOPTR& PtrStage,
00734 SPATMOD::IMAGE::STAGE_AUTOPTR& PtrStageTerrain,
00735 SPATMOD::IMAGE::RESAMPLEMETHOD ResampleMethod = SPATMOD::IMAGE::RESAMPLEMETHOD_Nearest
00736 ) const;
00737
00739 ERRVALUE ImageInsertZoomFilter (
00740 SPATMOD::IMAGE::STAGE_AUTOPTR& PtrStage,
00741 double *pZoomUsed = 0
00742 ) const;
00743
00745 bool Is3D () const
00746 { return (m_pLayerView->Is3D()); }
00747
00749 bool IsHidden () const
00750 { return (m_IsHidden); }
00751
00753 bool IsManagingPointSymbols () const
00754 { return (m_layer->IsManagingPointSymbols() && !m_layer->IsEditable() && !m_IsStereo && !Is3D()); }
00755
00757 bool IsStereo () const
00758 { return (m_IsStereo); }
00759
00761 bool IsSurfaceUsed () const
00762 { return (m_pLayerView->IsSurfaceUsed()); }
00763
00765 void NotifyDrawElementBegin (
00766 const RVC::ELEMENT& element
00767 ) const { if (m_NeedNotifyDrawElement) m_view->NotifyDrawElementBegin(m_layer,element); }
00768
00770 void NotifyDrawElementBegin (
00771 ELEMTYPE ElemType,
00772 ELEMNUM ElemNum
00773 ) const { if (m_NeedNotifyDrawElement) m_view->NotifyDrawElementBegin(m_layer,RVC::ELEMENT(ElemNum,ElemType)); }
00774
00776 void NotifyDrawElementEnd (
00777 const RVC::ELEMENT& element
00778 ) const { if (m_NeedNotifyDrawElement) m_view->NotifyDrawElementEnd(m_layer,element); }
00779
00781 void NotifyDrawElementEnd (
00782 ELEMTYPE ElemType,
00783 ELEMNUM ElemNum
00784 ) const { if (m_NeedNotifyDrawElement) m_view->NotifyDrawElementEnd(m_layer,RVC::ELEMENT(ElemNum,ElemType)); }
00785
00787 void Set3dElemScaled (
00788 bool IsScaled
00789 ) { m_ScaleToMap3D = IsScaled; }
00790
00791 void Set3dStereoView (
00792 STEREOVIEW StereoView
00793 );
00794
00796 void SetDrawFlags (
00797 GRE::DRAWFLAGS drawflags
00798 );
00799
00801 void SetDrawingDevice (
00802 MGD::DEVICE *pDevice
00803 );
00804
00806 void SetRenderTarget (
00807 RENDERTARGET RenderTarget
00808 ) { m_RenderTarget = RenderTarget; }
00809
00812 bool SetStereoLeft ();
00813
00816 bool SetStereoRight ();
00817
00819 void SetStyleBorder (
00820 const POLYSTYLE& BorderStyle,
00821 RVC::STYLE *pObjStyle = 0
00822 );
00823
00825 void SetStyleFill (
00826 POLYSTYLE& FillStyle,
00827 RVC::STYLE *pObjStyle = 0
00828 );
00829
00832 bool SetStyleLine (
00833 LINESTYLE& LineStyle,
00834 RVC::STYLE *pObjStyle = 0,
00835 bool TestMultiPass = false
00836 );
00837
00838
00839 void SetStylePoint (
00840 POINTSTYLE& PointStyle,
00841 RVC::STYLE *pObjStyle = 0,
00842 const RVC::STYLEPATTERN_BASE *pPatternPoint = 0
00843 );
00844
00846 void SetStyleScriptContext (
00847 GRE::SCRIPTCONTEXT_STYLE *pStyleSC
00848 ) { m_pStyleSC = pStyleSC; }
00849
00851 ERRVALUE SetupStereo ();
00852
00855 int TransPoint3D (
00856 DPOINT3D& pt3d
00857 ) const;
00858
00861 ERRVALUE TransToDevice (
00862 POLYLINE& polyline
00863 ) const;
00864
00865 private:
00866 #ifndef GENERATING_DOXYGEN_OUTPUT
00867
00868 static SML::AUTOCLASS_NOALLOC_T<LAYERDC> s_SML_AutoClass;
00869
00870 static void SML_Register ();
00871
00872 GRE::GROUPVIEW *m_pGroupView;
00873 GRE::LAYERVIEW *m_pLayerView;
00874 GRE::LAYERSECTION *m_pLayerSection;
00875 LAYER *m_layer;
00876 GRE::VIEW *m_view;
00877 MGD::CONTEXT *m_ggc;
00878 GRE::DRAWFLAGS m_drawflags;
00879 REGION2D m_ClipRegion;
00880 DRECT2D m_ObjClipRect;
00881 DPOINT2D m_PixelSizeMM;
00882 double m_DesignScale;
00883 double m_DrawingScale;
00884 double m_RotationAngle;
00885 bool m_OwnGroupView;
00886 bool m_OwnLayerView;
00887 bool m_IsHidden;
00888 bool m_NoDrawActive;
00889 bool m_ScaleToMap3D;
00890 bool m_NeedNotifyDrawElement;
00891 bool m_IsStereo;
00892 bool m_StereoUseMasks;
00893 GRE::SCENE3D m_Scene3D;
00894 GRE::RENDERTARGET m_RenderTarget;
00895 const ZVIEW *m_pZView;
00896 RVC::STYLEPATTERN_BITMAP *m_pLastPatternBitmap;
00897 RVC::STYLEPATTERN_HATCH *m_pLastPatternHatch;
00898 RVC::STYLEPATTERN_LINE *m_pLastPatternLine;
00899 RVC::STYLEPATTERN_SYMBOL *m_pLastPatternSymbol;
00900 GRE::SCRIPTCONTEXT_STYLE *m_pStyleSC;
00901 INT32 m_LastPatternNumBitmap;
00902 INT32 m_LastPatternNumHatch;
00903 INT32 m_LastPatternNumLine;
00904 INT32 m_LastPatternNumSymbol;
00905 UINT8 m_StereoMaskLeftRGB[3];
00906 UINT8 m_StereoMaskRightRGB[3];
00907
00908 void AddManagedPointSymbol (LABELPLACEMENT *pLabelPlacement, const RVC::ELEMENT& element, const POINTSTYLE& PointStyle, const RVC::STYLEPATTERN_BASE *pPattern, const DPOINT3D& ptDevice) const;
00909 void ImageCalcDeviceGeoreference (SPATMOD::GEOREFERENCE& Georeference) const;
00910 const RVC::STYLEPATTERN_BASE* ReadFillPattern (POLYSTYLE& PolygonStyle, const RVC::STYLE *pObjStyle);
00911 const RVC::STYLEPATTERN_BASE* ReadLinePattern (LINESTYLE& LineStyle, const RVC::STYLE *pObjStyle);
00912 const RVC::STYLEPATTERN_BASE* ReadPointPattern (POINTSTYLE& PointStyle, const RVC::STYLE *pObjStyle);
00913 void SetupForDrawFlags ();
00914 void SetupForStereoView ();
00915 ERRVALUE SetupStereoIn2D ();
00916
00917
00918 LAYERDC (const LAYERDC&);
00919 LAYERDC& operator= (const LAYERDC&);
00920
00921 virtual ERRVALUE OnClip (const POLYLINE& PolyLine);
00922
00923 #endif // GENERATING_DOXYGEN_OUTPUT
00924 };
00925
00926
00927 }
00928
00929 #endif // INC_GRE_LAYERDC_H