summaryrefslogtreecommitdiff
path: root/inc/Select3D_Projector.lxx
blob: b929f4836730d05f3d432ebfc0ad3dae90b24568 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// File:	Select3D_Projector.lxx
// Created:	Thu Jul  9 12:50:25 1992
// Author:	Christophe MARION
//		<cma@sdsun1>

#include <Standard_NoSuchObject.hxx>
#include <gp_Vec.hxx>
#include <gp_Pnt.hxx>
#include <gp_Lin.hxx>
#include <V3d_View.hxx>
#include <V3d.hxx>

//=======================================================================
//function : Directions
//purpose  :
//=======================================================================

inline void Select3D_Projector::Directions
  (gp_Vec2d& D1, gp_Vec2d& D2, gp_Vec2d& D3) const
{
  D1 = myD1;
  D2 = myD2;
  D3 = myD3;
}

//=======================================================================
//function : Perspective
//purpose  :
//=======================================================================

inline Standard_Boolean Select3D_Projector::Perspective() const
{ return myPersp; }

//=======================================================================
//function : Transformation
//purpose  :
//=======================================================================

inline const gp_GTrsf& Select3D_Projector::Transformation() const
{ return myGTrsf; }

//=======================================================================
//function : InvertedTransformation
//purpose  :
//=======================================================================

inline const gp_GTrsf& Select3D_Projector::InvertedTransformation() const
{ return myInvTrsf; }

//=======================================================================
//function : FullTransformation
//purpose  :
//=======================================================================

inline const gp_Trsf& Select3D_Projector::FullTransformation() const
{ return myScaledTrsf; }

//=======================================================================
//function : Focus
//purpose  :
//=======================================================================

inline Standard_Real Select3D_Projector::Focus() const
{
  Standard_NoSuchObject_Raise_if(!myPersp,
				 "Select3D_Projector::Not a Perpective");
  return myFocus;
}

//=======================================================================
//function : Transform
//purpose  :
//=======================================================================

inline void Select3D_Projector::Transform (gp_Vec& D) const
{
  gp_XYZ coord = D.XYZ();
  if (myGTrsf.Form() == gp_Identity || myGTrsf.Form() == gp_Translation) { }
  else if (myGTrsf.Form() == gp_PntMirror) { coord.Reverse(); }
  else { coord.Multiply (myGTrsf.VectorialPart()); }
  D.SetXYZ(coord);
}

//=======================================================================
//function : Transform
//purpose  :
//=======================================================================

inline void Select3D_Projector::Transform (gp_Pnt& Pnt) const
{
  gp_XYZ xyz = Pnt.XYZ();
  myGTrsf.Transforms(xyz);
  Pnt = gp_Pnt(xyz);
}


inline const Handle(V3d_View)& Select3D_Projector::View() const
{return myView;}

inline void Select3D_Projector::Transform (gp_Lin& Lin, const gp_GTrsf& T) const
{
  gp_Ax1 ax1 = Lin.Position();
  gp_XYZ xyz = ax1.Location().XYZ();
  T.Transforms(xyz);
  ax1.SetLocation(gp_Pnt(xyz));
  gp_Dir dir = ax1.Direction();
  gp_XYZ coord = dir.XYZ();
  if (T.Form() == gp_Identity ||  T.Form() == gp_Translation)    { }
  else if (T.Form() == gp_PntMirror) { coord.Reverse(); }
  else {
    coord.Multiply (T.VectorialPart());
    Standard_Real D = coord.Modulus();
    coord.Divide(D);
  }
  dir.SetXYZ(coord);
  ax1.SetDirection(dir);
  Lin.SetPosition(ax1);
}

inline void Select3D_Projector::Transform (gp_Pnt& Pnt, const gp_GTrsf& T) const
{
  gp_XYZ xyz = Pnt.XYZ();
  T.Transforms(xyz);
  Pnt = gp_Pnt(xyz);
}

inline Standard_Real Select3D_Projector::DepthMin() const
{
  return myDepthMin;
}

inline Standard_Real Select3D_Projector::DepthMax() const
{
  return myDepthMax;
}