FLImaging 6.5.8.1
GUIManagerViewDrawingObject.h
1#pragma once
2
3#include "GUIViewDrawingDefinitions.h"
4#include "GUIDefinitions.h"
5
6namespace FLImaging
7{
8 namespace GUI
9 {
10 class CGUIPaneDialog;
11 class CGUIViewImageLayer;
12 class CGUIViewImageLayerForDrawing;
13 class CGUIViewImageObjectFigure;
14 class CGUIViewImageLayerObjectBase;
15 class CGUIViewDrawing;
16 class CGUIViewImageObjectFigureDrawingAttribute;
17
18 class FL_EXPORT CGUIManagerViewDrawingObject : public Base::CFLBase
19 {
20 protected:
21 CGUIManagerViewDrawingObject();
22 CGUIManagerViewDrawingObject(CGUIViewDrawing* pParent);
23 CGUIManagerViewDrawingObject(const CGUIManagerViewDrawingObject& rhs);
24 CGUIManagerViewDrawingObject(const CGUIManagerViewDrawingObject* pRhs);
25 virtual ~CGUIManagerViewDrawingObject();
26 virtual const CResult Assign(const CGUIManagerViewDrawingObject& rhs);
27 virtual const CResult Assign(const CGUIManagerViewDrawingObject* pRhs);
28 CGUIManagerViewDrawingObject& operator=(const CGUIManagerViewDrawingObject& rhs);
29
30 public:
31 virtual void SetParentView(CGUIViewDrawing* pParent);
32 virtual CGUIViewDrawing* GetParentView() const;
33
34 virtual const CResult InternalAssign(const CGUIManagerViewDrawingObject* pRhs);
35
36 /* Selection */
37 // 마우스 커서에 닿는 Figure를 찾아 `m_i32HitFigureIdx`에 해당 Figure의 인덱스를 저장하고(초기값은 -1), `m_eHitArea`에 해당 hit 영역 enum을 OR 하여 저장하고, 오직 HitTest() 함수에서만 얻은 EGUIViewDrawingHitArea 를 리턴하는 함수.
38 virtual EGUIViewDrawingHitArea HitTest(const Foundation::CFLPoint<double>& flpCursorImageCoord);
39
40 // 드래그하여 얻은 사각형 내부에 있거나(정방향 사각형), 사각형에 닿는(역방향 사각형) Figure들을 찾아 `m_setI32SelectedFigure`에 해당 Figure의 인덱스를 추가하고, `m_eHitArea`에 해당 hit 영역 enum을 OR 하여 저장하고, 오직 HitTest() 함수에서만 얻은 EGUIViewDrawingHitArea 를 리턴하는 함수. `bAppend = true`일 경우 기존에 선택된 객체들을 선택 해제하지 않고 새로 선택된 객체들을 추가로 선택한다.
41 virtual EGUIViewDrawingHitArea HitTest(Foundation::CFLRect<double>& flrSelectionImageCoord, bool bAppend);
42 virtual EGUIViewDrawingHitArea HitTest(Foundation::CFLRegion& flrgSelectionImageCoord, bool bAppend);
43
44 // 선택 해제
45 virtual const CResult ClearSelection();
46
47 virtual const CResult GetSelectedFigures(std::vector<Foundation::CFLFigure*>& vctFigures);
48 virtual const CResult UpdateSelectedFiguresToLayerObject();
49
50
51 /* Drawing */
52 // Figure 가 hover 된 것을 그리는 함수
53 virtual const CResult DrawFigureHover();
54
55 // Figure 가 선택된 것을 그리는 함수
56 virtual const CResult DrawFigureSelection();
57
58 // Figure 를 화면에 그린 것을 클리어 하는 함수
59 virtual const CResult ClearFigureDrawing();
60
61 // Figure 가 hover 된 drawing 을 클리어 하는 함수
62 virtual const CResult ClearFigureHoverDrawing();
63
64 // Figure 가 선택된 drawing 을 클리어 하는 함수
65 virtual const CResult ClearFigureSelectionDrawing();
66
67
68 /* Z-Order 관련 */
69 // 마우스에 닿은 Figure 가 여러 개일 경우, Hit 된 Figure 에 한해서 인덱스를 로테이션 시키는 함수.
70 // Shift key 를 누르면 반대방향으로 로테이션되며 Shift key 를 눌렀는지 여부가 `bReverseOrder` 에 전달됩니다.
71 virtual const CResult RotateFigureZOrder(Foundation::CFLPoint<double> flpCursor, bool bReverseOrder);
72
73 // 선택한 Figure 를 맨 앞으로 가져 오는 함수. Drawing 순서 및 HitTest 측면에서 맨 앞이므로, Figure Index 는 `back` 이 됨.
74 virtual const CResult BringSelectedFigureToFront();
75
76 // 선택한 Figure 를 한 개 앞으로 가져 오는 함수. Drawing 순서 및 HitTest 측면에서 한 개 앞이므로, Figure Index는 `기존 index +1` 이 됨.
77 virtual const CResult BringSelectedFigureForward();
78
79 // 선택한 Figure 를 맨 뒤로 보내는 함수. Drawing 순서 및 HitTest 측면에서 맨 앞이므로, Figure Index는 `front` 가 됨.
80 virtual const CResult SendSelectedFigureToBack();
81
82 // 선택한 Figure 를 한 개 뒷쪽으로 보내는 함수. Drawing 순서 및 HitTest 측면에서 한 개 뒤이므로, Figure Index는 `기존 index -1` 이 됨.
83 virtual const CResult SendSelectedFigureBackward();
84
85 // flaResultIndices 의 figure 들 중 flp 와 가장 가까운(우선 순위 1) figure 를 얻고
86 // 그 중 인덱스가 가장 큰 값(우선 순위 2)을 리턴
87 // 뒤쪽 인덱스의 figure (화면상 앞쪽에 있는 것으로 보이는) 를 얻기 위함
88 virtual int32_t GetMaxIndex(const Foundation::CFLPoint<double>& flp, CGUIViewImageLayer* pLayer, double f64Tolerance, const Base::CFLArray<uint32_t>& flaResultIndices) const;
89
90 virtual void Intersects(CGUIViewImageLayer* pLayer, const Base::TRange<float>& tr, bool bEnclose, Base::CFLArray<uint32_t>& flaResultIndices) const;
91 virtual bool IsFigureHoverEnabled() const;
92 virtual bool IsFigureSelectionEnabled() const;
93
94 virtual const CResult RecalcMultiSelectRect(Foundation::CFLRect<double>& flrMultiSelectRect);
95
96 virtual Base::CFLString<wchar_t> GetAttributeOfSelectedObject(const Base::CFLString<wchar_t>& strAttr) const;
97 virtual void SetAttributeOfSelectedObject(const Base::CFLString<wchar_t>& strAttr, const Base::CFLString<wchar_t>& strAttrVal);
98 virtual void SetAttributeOfAllObject(const Base::CFLString<wchar_t>& strAttr, const Base::CFLString<wchar_t>& strAttrVal);
99
100 virtual void OnReceiveBroadcast(const Base::CBroadcastMessage* pMessage) override;
101
102 virtual const CResult TransformAll(EObjectFigureTransformType eTrsfType, Foundation::EFigureFlipDirection eFlipDirection, double f64Angle);
103
104 CGUIViewImageLayerForDrawing* GetFigureHoverLayer() const;
105 CGUIViewImageLayerForDrawing* GetFigureSelectionLayer() const;
106
107 SupportToDuplicateObject(CGUIManagerViewDrawingObject, this);
108 DeclareGetClassType();
109
110 public:
111 virtual void OnLButtonDown(UINT nFlags, const Foundation::CFLPoint<double>& flpCursorImageCoord);
112 virtual void OnLButtonUp(UINT nFlags, const Foundation::CFLPoint<double>& flpCursorImageCoord);
113 virtual void OnLButtonDblClk(UINT nFlags, const Foundation::CFLPoint<double>& flpCursorImageCoord);
114 virtual void OnMouseMove(UINT nFlags, const Foundation::CFLPoint<double>& flpCursorImageCoord);
115 virtual void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
116
117 public:
118 /* Selection */
119 int32_t m_i32HitFigureIdx; // Hit index of Figure
120 int32_t m_i32HitFigureLayerIdx;
121 int32_t m_i32SelectFigureIdx; // Select index of Figure
122 int32_t m_i32SelectFigureLayerIdx;
123
124 /* Data Structure */
125 std::vector<CGUISelectableObjectOnLayer*> m_vctSelectableObject;
126
127 /* View */
128 CGUIViewDrawing* m_pParentView;
129
130 /* Layers */
131 CGUIViewImageLayerForDrawing* m_pFigureHoverLayer;
132 CGUIViewImageLayerForDrawing* m_pFigureSelectionLayer;
133
134 /* Hover & Selection */
135 bool m_bEnableFigureHover;
136 bool m_bEnableFigureSelection;
137 bool m_bMultiselected; // > 1
138
139 /* Event Mode Flags */
140 bool m_bMultiSelectMode; // Figure 를 다중 선택하는 모드
141 bool m_bLButtonDown;
142
143 friend class CGUIViewDrawing;
144 };
145 }
146}
EGUIViewDrawingHitArea
도면 뷰 위에서 마우스가 위치한 영역입니다.
Definition GUIViewDrawingDefinitions.h:1301
@ Assign
CGUIPropertyItemView3DFigure 의 값을 해당 도형으로 설정하는 함수