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; |