1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HELPLINEPRIMITIVE2D_HXX
25 #define INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HELPLINEPRIMITIVE2D_HXX
26 
27 #include <drawinglayer/drawinglayerdllapi.h>
28 #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
29 #include <basegfx/color/bcolor.hxx>
30 #include <basegfx/matrix/b2dhommatrix.hxx>
31 
32 //////////////////////////////////////////////////////////////////////////////
33 // HelplinePrimitive2D class
34 
35 namespace drawinglayer
36 {
37 	namespace primitive2d
38 	{
39         /** HelplineStyle2D definition
40 
41             The available styles of Helplines
42         */
43 		enum HelplineStyle2D
44 		{
45 			HELPLINESTYLE2D_POINT,
46 			HELPLINESTYLE2D_LINE
47 		};
48 
49         /** HelplinePrimitive2D class
50 
51             This primitive provides a view-dependent helpline definition. The Helpline
52             is defined by a line equation (Point and vector) and a style. When the style
53             is a line, dependent from Viewport the visible part of that Helpline is
54             constructed. For Point, a cross is constructed. This primitive is highly
55             view-dependent.
56 
57             The visualisation uses the two given colors to create a dashed line with
58             the given dash length.
59          */
60 		class DRAWINGLAYER_DLLPUBLIC HelplinePrimitive2D : public BufferedDecompositionPrimitive2D
61 		{
62 		private:
63             /// Helpline geometry definition
64 			basegfx::B2DPoint								maPosition;
65 			basegfx::B2DVector								maDirection;
66 			HelplineStyle2D									meStyle;
67 
68             /// Helpline style definition
69 			basegfx::BColor									maRGBColA;
70 			basegfx::BColor									maRGBColB;
71 			double											mfDiscreteDashLength;
72 
73 			/** the last used object to view transformtion and the last Viewport,
74                 used from getDecomposition for decide buffering
75              */
76 			basegfx::B2DHomMatrix							maLastObjectToViewTransformation;
77 			basegfx::B2DRange								maLastViewport;
78 
79 		protected:
80 			/// create local decomposition
81 			virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const;
82 
83 		public:
84             /// constructor
85 			HelplinePrimitive2D(
86 				const basegfx::B2DPoint& rPosition,
87 				const basegfx::B2DVector& rDirection,
88 				HelplineStyle2D eStyle,
89 				const basegfx::BColor& rRGBColA,
90 				const basegfx::BColor& aRGBColB,
91 				double fDiscreteDashLength);
92 
93 			/// data read access
getPosition() const94 			const basegfx::B2DPoint& getPosition() const { return maPosition; }
getDirection() const95 			const basegfx::B2DVector& getDirection() const { return maDirection; }
getStyle() const96 			HelplineStyle2D getStyle() const { return meStyle; }
getRGBColA() const97 			const basegfx::BColor& getRGBColA() const { return maRGBColA; }
getRGBColB() const98 			const basegfx::BColor& getRGBColB() const { return maRGBColB; }
getDiscreteDashLength() const99 			double getDiscreteDashLength() const { return mfDiscreteDashLength; }
100 
101 			/// compare operator
102 			virtual bool operator==(const BasePrimitive2D& rPrimitive) const;
103 
104 			/// provide unique ID
105 			DeclPrimitrive2DIDBlock()
106 
107 			/// Overload standard getDecomposition call to be view-dependent here
108 			virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const;
109 		};
110 	} // end of namespace primitive2d
111 } // end of namespace drawinglayer
112 
113 //////////////////////////////////////////////////////////////////////////////
114 
115 #endif //INCLUDED_DRAWINGLAYER_PRIMITIVE2D_HELPLINEPRIMITIVE2D_HXX
116 
117 //////////////////////////////////////////////////////////////////////////////
118 // eof
119