Commit | Line | Data |
---|---|---|

b311480e | 1 | -- Created on: 1992-03-12 |

2 | -- Created by: Christophe MARION | |

3 | -- Copyright (c) 1992-1999 Matra Datavision | |

4 | -- Copyright (c) 1999-2012 OPEN CASCADE SAS | |

5 | -- | |

6 | -- The content of this file is subject to the Open CASCADE Technology Public | |

7 | -- License Version 6.5 (the "License"). You may not use the content of this file | |

8 | -- except in compliance with the License. Please obtain a copy of the License | |

9 | -- at http://www.opencascade.org and read it completely before using this file. | |

10 | -- | |

11 | -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its | |

12 | -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. | |

13 | -- | |

14 | -- The Original Code and all software distributed under the License is | |

15 | -- distributed on an "AS IS" basis, without warranty of any kind, and the | |

16 | -- Initial Developer hereby disclaims all such warranties, including without | |

17 | -- limitation, any warranties of merchantability, fitness for a particular | |

18 | -- purpose or non-infringement. Please see the License for the specific terms | |

19 | -- and conditions governing the rights and limitations under the License. | |

20 | ||

4952a30a | 21 | -- <cma@sdsun2> copie quasi exacte de HLRAlgo_Projector |

4952a30a | 22 | |

23 | class Projector from Select3D inherits Transient from Standard | |

24 | ---Purpose: A framework to define 3D projectors. | |

b0f0bd0c A |
25 | -- Projector provides services for projecting points from |

26 | -- world-coordinates to a viewing plane. Projection could be defined by | |

27 | -- corresponding transformation, or coordinate system. The transformation | |

28 | -- could be constructed for a view with transposed view transformation | |

29 | -- matrix ( that represents view-orientation ), including, for perspective | |

30 | -- view, focal distance ( distance from an eye to the view plane ) and | |

31 | -- translational part that represents translation of focal point in | |

32 | -- view-coordinate space. The Select3D_Projector class recognizes the | |

33 | -- predefined set of popular projections: axonometric, top view, front | |

34 | -- view and uses more efficient algorithm for projection computations. | |

35 | -- User-defined transformation could be also defined in constructor. | |

36 | -- Perspective projection consists of two separate parts, that are | |

37 | -- composed together during computation: transformation component and | |

38 | -- focale distance. | |

39 | ||

7fd59977 | 40 | uses |

41 | Real from Standard, | |

42 | Boolean from Standard, | |

4952a30a | 43 | Trsf from gp, |

7fd59977 | 44 | GTrsf from gp, |

45 | Lin from gp, | |

46 | Pnt from gp, | |

47 | Vec from gp, | |

48 | Ax2 from gp, | |

49 | Vec2d from gp, | |

50 | Pnt2d from gp, | |

51 | Box from Bnd, | |

52 | View from V3d | |

4952a30a | 53 | |

7fd59977 | 54 | raises |

55 | NoSuchObject from Standard | |

56 | ||

57 | is | |

58 | ||

59 | Create(aView:View from V3d) returns Projector from Select3D; | |

4952a30a | 60 | --- Purpose: Constructs the 3D projector object defined by the 3D view aView. |

7fd59977 | 61 | Create returns Projector from Select3D; |

62 | ||

63 | Create(CS : Ax2 from gp) | |

b0f0bd0c A |
64 | ---Purpose: Creates an axonometric projector. <CS> represents viewing coordinate |

65 | -- system and could be constructed from x direction, view plane normal direction, | |

66 | -- and view point location in world-coordinate space. | |

7fd59977 | 67 | returns Projector from Select3D; |

68 | ||

69 | Create(CS : Ax2 from gp; | |

4952a30a | 70 | Focus : Real from Standard) |

b0f0bd0c A |
71 | ---Purpose: Creates a perspective projector. <CS> represents viewing |

72 | -- coordinate system and could be constructed from x direction, | |

73 | -- view plane normal direction, and focal point location in world-coordinate | |

74 | -- space. <Focus> should represent distance of an eye from view plane | |

75 | -- in world-coordinate space (focal distance). | |

7fd59977 | 76 | returns Projector from Select3D; |

77 | ||

78 | Create(T : Trsf from gp; | |

4952a30a | 79 | Persp : Boolean from Standard; |

80 | Focus : Real from Standard) | |

b0f0bd0c A |
81 | ---Purpose: build a Projector from the given transformation. |

82 | -- In case, when <T> transformation should represent custom view projection, | |

83 | -- it could be constructed from two separate components: transposed view | |

84 | -- orientation matrix and translation of focal point in view-coordiante | |

85 | -- system. <T> could be built up from x direction, up direction, | |

86 | -- view plane normal direction vectors and translation with SetValues(...) | |

87 | -- method, where first row arguments (a11, a12, a13, a14) are x, y, z | |

88 | -- component of x direction vector, and x value of reversed translation | |

89 | -- vector. Second row arguments, are x y z for up direction and y value of | |

90 | -- reversed translation, and the third row defined in the same manner. | |

91 | -- This also suits for simple perspective view, where <Focus> is the focale | |

92 | -- distance of an eye from view plane in world-space coordiantes. | |

93 | -- Note, that in that case amount of perspective distortion (perspective | |

94 | -- angle) should be defined through focal distance. | |

7fd59977 | 95 | returns Projector from Select3D; |

4952a30a | 96 | |

7fd59977 | 97 | Create(GT : GTrsf from gp; |

4952a30a | 98 | Persp : Boolean from Standard; |

99 | Focus : Real from Standard) | |

b0f0bd0c A |
100 | ---Purpose: build a Projector from the given transformation. |

101 | -- In case, when <GT> transformation should represent custom view | |

102 | -- projection, it could be constructed from two separate components: | |

103 | -- transposed view orientation matrix and translation of a focal point | |

104 | -- in view-coordinate system. | |

105 | -- This also suits for perspective view, with <Focus> that could be | |

106 | -- equal to distance from an eye to a view plane in | |

107 | -- world-coordinates (focal distance). | |

108 | -- The 3x3 transformation matrix is built up from three vectors: | |

109 | -- x direction, up direction and view plane normal vectors, where each | |

110 | -- vector is a matrix row. Then <GT> is constructed from matrix and | |

111 | -- reversed translation with methods SetTranslationPart(..) and | |

112 | -- SetVectorialPart(..). | |

113 | -- Note, that in that case amount of perspective distortion (perspective | |

114 | -- angle) should be defined through focal distance. | |

7fd59977 | 115 | returns Projector from Select3D; |

116 | ||

4952a30a | 117 | Set (me : mutable; |

118 | T : Trsf from gp; | |

7fd59977 | 119 | Persp : Boolean from Standard; |

4952a30a | 120 | Focus : Real from Standard) |

7fd59977 | 121 | is static; |

122 | ||

4952a30a | 123 | SetView(me : mutable; V : View from V3d); |

124 | ---Purpose: Sets the 3D view V used at the time of construction. | |

7fd59977 | 125 | |

126 | View(me) returns any View from V3d; | |

4952a30a | 127 | ---Purpose: Returns the 3D view used at the time of construction. |

128 | ---C++: return const& | |

129 | ---C++: inline | |

7fd59977 | 130 | |

4952a30a | 131 | Scaled(me : mutable; On : Boolean from Standard = Standard_False) |

132 | ---Purpose: to compute with the given scale and translation. | |

7fd59977 | 133 | is virtual; |

134 | ||

135 | Perspective(me) returns Boolean | |

4952a30a | 136 | ---Purpose: Returns True if there is a perspective transformation. |

137 | ---C++: inline | |

7fd59977 | 138 | is virtual; |

139 | ||

140 | Transformation(me) returns GTrsf from gp | |

4952a30a | 141 | ---Purpose: Returns the active transformation. |

142 | ---C++: inline | |

143 | ---C++: return const & | |

7fd59977 | 144 | is virtual; |

145 | ||

146 | InvertedTransformation(me) returns GTrsf from gp | |

4952a30a | 147 | ---Purpose: Returns the active inverted transformation. |

148 | ---C++: inline | |

149 | ---C++: return const & | |

7fd59977 | 150 | is virtual; |

151 | ||

152 | FullTransformation(me) returns Trsf from gp | |

4952a30a | 153 | ---Purpose: Returns the original transformation. |

154 | ---C++: inline | |

155 | ---C++: return const & | |

7fd59977 | 156 | is virtual; |

157 | ||

158 | Focus(me) returns Real from Standard | |

4952a30a | 159 | ---Purpose: Returns the focal length. |

160 | ---C++: inline | |

7fd59977 | 161 | raises |

4952a30a | 162 | NoSuchObject from Standard -- if there is no perspective |

7fd59977 | 163 | is virtual; |

4952a30a | 164 | |

7fd59977 | 165 | Transform(me; D : in out Vec from gp) |

4952a30a | 166 | ---C++: inline |

7fd59977 | 167 | is virtual; |

168 | ||

169 | Transform(me; Pnt : in out Pnt from gp) | |

4952a30a | 170 | ---C++: inline |

7fd59977 | 171 | is virtual; |

4952a30a | 172 | |

7fd59977 | 173 | Project(me; P : Pnt from gp; |

174 | Pout : out Pnt2d from gp) | |

4952a30a | 175 | ---Purpose: Transform and apply perspective if needed. |

7fd59977 | 176 | is virtual; |

4952a30a | 177 | |

7fd59977 | 178 | Project(me; P : Pnt from gp; |

179 | X,Y,Z : out Real from Standard) | |

4952a30a | 180 | ---Purpose: Transform and apply perspective if needed. |

7fd59977 | 181 | is static; |

4952a30a | 182 | |

7fd59977 | 183 | Project(me; P : Pnt from gp; |

184 | D1 : Vec from gp; | |

4952a30a | 185 | Pout : out Pnt2d from gp; |

186 | D1out : out Vec2d from gp) | |

187 | ---Purpose: Transform and apply perspective if needed. | |

7fd59977 | 188 | is virtual; |

4952a30a | 189 | |

7fd59977 | 190 | Shoot(me; X , Y : Real from Standard) |

191 | returns Lin from gp | |

4952a30a | 192 | ---Purpose: return a line going through the eye towards the |

193 | -- 2d point <X,Y>. | |

194 | is virtual; | |

195 | ||

4952a30a | 196 | Transform(me; P : in out Pnt from gp; |

197 | T : GTrsf from gp) | |

198 | ---C++: inline | |

7fd59977 | 199 | is virtual; |

200 | ||

4952a30a | 201 | Transform(me; D : in out Lin from gp; |

202 | T : GTrsf from gp) | |

203 | ---C++: inline | |

7fd59977 | 204 | is virtual; |

205 | ||

206 | fields | |

4952a30a | 207 | myType : Integer from Standard; |

208 | ||

7fd59977 | 209 | myPersp : Boolean from Standard is protected; |

210 | myFocus : Real from Standard is protected; | |

211 | myScaledTrsf : Trsf from gp is protected; | |

212 | myGTrsf : GTrsf from gp is protected; | |

213 | myInvTrsf : GTrsf from gp is protected; | |

7fd59977 | 214 | |

4952a30a | 215 | myView : View from V3d; |

7fd59977 | 216 | |

217 | end Projector; |