81fd6aeb89fd5b174d2fb4af378e0f684efa97d7
[occt.git] / src / Prs3d / Prs3d_Point.hxx
1 // Copyright (c) 2013 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18 #ifndef _Prs3d_Point_H__
19 #define _Prs3d_Point_H__
20
21
22 #include <Graphic3d_Vertex.hxx>
23 #include <Graphic3d_Group.hxx>
24 #include <Prs3d_Drawer.hxx>
25 #include <Prs3d_PointAspect.hxx>
26 #include <Prs3d_Root.hxx>
27 #include <Quantity_Length.hxx>
28
29 template <class AnyPoint, class PointTool>
30 class Prs3d_Point : Prs3d_Root
31 {
32 public:
33   DEFINE_STANDARD_ALLOC
34
35 private:
36   Standard_EXPORT static void DrawPoint
37                  (const AnyPoint& thePoint,
38                   const Handle(Graphic3d_Group) theGroup)
39   {
40     Quantity_Length aX,aY,aZ;
41     PointTool::Coord(thePoint,aX,aY,aZ);
42     Graphic3d_Vertex aVertex(aX,aY,aZ);
43     theGroup->Marker(aVertex);
44   }
45
46 public:
47   Standard_EXPORT static void Add
48                  (const Handle (Prs3d_Presentation)& thePresentation,
49                   const AnyPoint& thePoint,
50                   const Handle (Prs3d_Drawer)& theDrawer)
51   {
52     Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(thePresentation);
53     aGroup->SetPrimitivesAspect(theDrawer->PointAspect()->Aspect());
54     DrawPoint(thePoint, aGroup);
55   }
56
57   Standard_EXPORT static Standard_Boolean Match
58                   (const AnyPoint& thePoint,
59                   const Quantity_Length theX,
60                   const Quantity_Length theY,
61                   const Quantity_Length theZ,
62                   const Quantity_Length theDistance)
63   {
64     Quantity_Length aX,aY,aZ;
65     PointTool::Coord(thePoint, aX, aY, aZ);
66     return Sqrt((theX - aX)*(theX - aX) + (theY - aY)*(theY - aY)
67                  + (theZ - aZ)*(theZ - aZ)) <= theDistance;
68   }
69 };
70 #endif