0024138: Exception during projection of the point on the face
[occt.git] / src / Prs3d / Prs3d_Point.hxx
CommitLineData
d7223c76 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
29template <class AnyPoint, class PointTool>
30class Prs3d_Point : Prs3d_Root
31{
32public:
33 DEFINE_STANDARD_ALLOC
34
35private:
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
46public:
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