1 // Created on: 1992-01-15 2 // Created by: GG 3 // Copyright (c) 1992-1999 Matra Datavision 4 // Copyright (c) 1999-2014 OPEN CASCADE SAS 5 // 6 // This file is part of Open CASCADE Technology software library. 7 // 8 // This library is free software; you can redistribute it and/or modify it under 9 // the terms of the GNU Lesser General Public License version 2.1 as published 10 // by the Free Software Foundation, with special exception defined in the file 11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 12 // distribution for complete text of the license and disclaimer of any warranty. 13 // 14 // Alternatively, this file may be used under the terms of Open CASCADE 15 // commercial license or contractual agreement. 16 17 #ifndef _V3d_View_HeaderFile 18 #define _V3d_View_HeaderFile 19 20 #include <Aspect_Background.hxx> 21 #include <Aspect_FillMethod.hxx> 22 #include <Aspect_GradientBackground.hxx> 23 #include <Aspect_GradientFillMethod.hxx> 24 #include <Aspect_Handle.hxx> 25 #include <Aspect_RenderingContext.hxx> 26 #include <Aspect_TypeOfTriedronPosition.hxx> 27 28 #include <Bnd_Box.hxx> 29 30 #include <gp_Ax3.hxx> 31 #include <gp_Dir.hxx> 32 #include <gp_Pnt.hxx> 33 34 #include <Graphic3d_BufferType.hxx> 35 #include <Graphic3d_Camera.hxx> 36 #include <Graphic3d_ClipPlane.hxx> 37 #include <Graphic3d_CView.hxx> 38 #include <Graphic3d_GraduatedTrihedron.hxx> 39 #include <Graphic3d_RenderingParams.hxx> 40 #include <Graphic3d_SequenceOfHClipPlane.hxx> 41 #include <Graphic3d_TypeOfShadingModel.hxx> 42 #include <Graphic3d_Vertex.hxx> 43 44 #include <Image_PixMap.hxx> 45 46 #include <Standard_Transient.hxx> 47 48 #include <Quantity_TypeOfColor.hxx> 49 50 #include <Standard.hxx> 51 #include <Standard_Address.hxx> 52 #include <Standard_Boolean.hxx> 53 #include <Standard_CString.hxx> 54 #include <Standard_Integer.hxx> 55 #include <Standard_Real.hxx> 56 #include <Standard_Type.hxx> 57 58 #include <TColStd_Array2OfReal.hxx> 59 #include <TColStd_ListIteratorOfListOfTransient.hxx> 60 61 #include <V3d_ImageDumpOptions.hxx> 62 #include <V3d_Trihedron.hxx> 63 #include <V3d_TypeOfAxe.hxx> 64 65 #include <V3d_TypeOfBackfacingModel.hxx> 66 #include <V3d_TypeOfOrientation.hxx> 67 #include <V3d_TypeOfView.hxx> 68 #include <V3d_TypeOfVisualization.hxx> 69 #include <V3d_Viewer.hxx> 70 #include <V3d_ViewerPointer.hxx> 71 72 class Aspect_Grid; 73 class Aspect_Window; 74 class Graphic3d_Group; 75 class Graphic3d_Structure; 76 class Graphic3d_TextureEnv; 77 class Standard_MultiplyDefined; 78 class Standard_TypeMismatch; 79 class V3d_BadValue; 80 class V3d_UnMapped; 81 82 class V3d_View; 83 DEFINE_STANDARD_HANDLE(V3d_View, Standard_Transient) 84 85 //! Defines the application object VIEW for the 86 //! VIEWER application. 87 //! The methods of this class allow the editing 88 //! and inquiring the parameters linked to the view. 89 //! Provides a set of services common to all types of view. 90 //! Warning: The default parameters are defined by the class 91 //! Viewer (Example : SetDefaultViewSize()). 92 //! Certain methods are mouse oriented, and it is 93 //! necessary to know the difference between the start and 94 //! the continuation of this gesture in putting the method 95 //! into operation. 96 //! Example : Shifting the eye-view along the screen axes. 97 //! 98 //! View->Move(10.,20.,0.,True) (Starting motion) 99 //! View->Move(15.,-5.,0.,False) (Next motion) 100 class V3d_View : public Standard_Transient 101 { 102 103 public: 104 105 //! Initializes the view. 106 Standard_EXPORT V3d_View (const Handle(V3d_Viewer)& theViewer, const V3d_TypeOfView theType = V3d_ORTHOGRAPHIC); 107 108 //! Initializes the view by copying. 109 Standard_EXPORT V3d_View (const Handle(V3d_Viewer)& theViewer, const Handle(V3d_View)& theView); 110 111 //! Default destructor. 112 Standard_EXPORT virtual ~V3d_View(); 113 114 //! Activates the view in the specified Window 115 //! If <aContext> is not NULL the graphic context is used 116 //! to draw something in this view. 117 //! Otherwise an internal graphic context is created. 118 //! Warning: The view is centered and resized to preserve 119 //! the height/width ratio of the window. 120 Standard_EXPORT void SetWindow (const Handle(Aspect_Window)& theWindow, 121 const Aspect_RenderingContext theContext = NULL); 122 123 Standard_EXPORT void SetMagnify (const Handle(Aspect_Window)& theWindow, 124 const Handle(V3d_View)& thePreviousView, 125 const Standard_Integer theX1, 126 const Standard_Integer theY1, 127 const Standard_Integer theX2, 128 const Standard_Integer theY2); 129 130 //! Destroys the view. 131 Standard_EXPORT void Remove() const; 132 133 //! Deprecated, Redraw() should be used instead. 134 Standard_EXPORT void Update() const; 135 136 //! Redisplays the view even if there has not 137 //! been any modification. 138 //! Must be called if the view is shown. 139 //! (Ex: DeIconification ) . 140 Standard_EXPORT virtual void Redraw() const; 141 142 //! Updates layer of immediate presentations. 143 Standard_EXPORT virtual void RedrawImmediate() const; 144 145 //! Invalidates view content but does not redraw it. 146 Standard_EXPORT void Invalidate() const; 147 148 //! Returns true if cached view content has been invalidated. 149 Standard_EXPORT Standard_Boolean IsInvalidated() const; 150 151 //! Returns true if immediate layer content has been invalidated. IsInvalidatedImmediate() const152 Standard_Boolean IsInvalidatedImmediate() const { return myIsInvalidatedImmediate; } 153 154 //! Invalidates view content within immediate layer but does not redraw it. InvalidateImmediate()155 void InvalidateImmediate() { myIsInvalidatedImmediate = Standard_True; } 156 157 //! Must be called when the window supporting the 158 //! view changes size. 159 //! if the view is not mapped on a window. 160 //! Warning: The view is centered and resized to preserve 161 //! the height/width ratio of the window. 162 Standard_EXPORT void MustBeResized(); 163 164 //! Must be called when the window supporting the 165 //! view is mapped or unmapped. 166 Standard_EXPORT void DoMapping(); 167 168 //! Returns the status of the view regarding 169 //! the displayed structures inside 170 //! Returns True is The View is empty 171 Standard_EXPORT Standard_Boolean IsEmpty() const; 172 173 //! Updates the lights of the view. 174 Standard_EXPORT void UpdateLights() const; 175 176 //! Sets the automatic z-fit mode and its parameters. 177 //! The auto z-fit has extra parameters which can controlled from application level 178 //! to ensure that the size of viewing volume will be sufficiently large to cover 179 //! the depth of unmanaged objects, for example, transformation persistent ones. 180 //! @param theScaleFactor [in] the scale factor for Z-range. 181 //! The range between Z-min, Z-max projection volume planes 182 //! evaluated by z fitting method will be scaled using this coefficient. 183 //! Program error exception is thrown if negative or zero value 184 //! is passed. 185 Standard_EXPORT void SetAutoZFitMode (const Standard_Boolean theIsOn, const Standard_Real theScaleFactor = 1.0); 186 187 //! returns TRUE if automatic z-fit mode is turned on. AutoZFitMode() const188 Standard_Boolean AutoZFitMode() const { return myAutoZFitIsOn; } 189 190 //! returns scale factor parameter of automatic z-fit mode. AutoZFitScaleFactor() const191 Standard_Real AutoZFitScaleFactor() const { return myAutoZFitScaleFactor; } 192 193 //! If automatic z-range fitting is turned on, adjusts Z-min and Z-max 194 //! projection volume planes with call to ZFitAll. 195 Standard_EXPORT void AutoZFit() const; 196 197 //! Change Z-min and Z-max planes of projection volume to match the 198 //! displayed objects. 199 Standard_EXPORT void ZFitAll (const Standard_Real theScaleFactor = 1.0) const; 200 201 //! Defines the background color of the view by the color definition type and the three corresponding values. 202 Standard_EXPORT void SetBackgroundColor (const Quantity_TypeOfColor theType, 203 const Standard_Real theV1, 204 const Standard_Real theV2, 205 const Standard_Real theV3); 206 207 //! Defines the background color of the view. 208 Standard_EXPORT void SetBackgroundColor (const Quantity_Color& theColor); 209 210 //! Defines the gradient background colors of the view by supplying the colors 211 //! and the fill method (horizontal by default). 212 Standard_EXPORT void SetBgGradientColors (const Quantity_Color& theColor1, 213 const Quantity_Color& theColor2, 214 const Aspect_GradientFillMethod theFillStyle = Aspect_GFM_HOR, 215 const Standard_Boolean theToUpdate = Standard_False); 216 217 //! Defines the gradient background fill method of the view. 218 Standard_EXPORT void SetBgGradientStyle (const Aspect_GradientFillMethod theMethod = Aspect_GFM_HOR, 219 const Standard_Boolean theToUpdate = Standard_False); 220 221 //! Defines the background texture of the view by supplying the texture image file name 222 //! and fill method (centered by default). 223 Standard_EXPORT void SetBackgroundImage (const Standard_CString theFileName, 224 const Aspect_FillMethod theFillStyle = Aspect_FM_CENTERED, 225 const Standard_Boolean theToUpdate = Standard_False); 226 227 //! Defines the textured background fill method of the view. 228 Standard_EXPORT void SetBgImageStyle (const Aspect_FillMethod theFillStyle, 229 const Standard_Boolean theToUpdate = Standard_False); 230 231 //! Sets environment cubemap as interactive background. 232 Standard_EXPORT void SetBackgroundCubeMap (const Handle(Graphic3d_CubeMap)& theCubeMap, 233 Standard_Boolean theToUpdate = Standard_False); 234 235 //! Definition of an axis from its origin and 236 //! its orientation . 237 //! This will be the current axis for rotations and movements. 238 //! Warning! raises BadValue from V3d if the vector normal is NULL. . 239 Standard_EXPORT void SetAxis (const Standard_Real X, const Standard_Real Y, const Standard_Real Z, 240 const Standard_Real Vx, const Standard_Real Vy, const Standard_Real Vz); 241 242 //! Defines the shading model for the visualization. Various models are available. 243 Standard_EXPORT void SetShadingModel (const Graphic3d_TypeOfShadingModel theShadingModel); 244 245 //! Sets the environment texture to use. No environment texture by default. 246 Standard_EXPORT void SetTextureEnv (const Handle(Graphic3d_TextureEnv)& theTexture); 247 248 //! Defines the visualization type in the view. 249 Standard_EXPORT void SetVisualization (const V3d_TypeOfVisualization theType); 250 251 //! Activates theLight in the view. 252 Standard_EXPORT void SetLightOn (const Handle(V3d_Light)& theLight); 253 254 //! Activates all the lights defined in this view. 255 Standard_EXPORT void SetLightOn(); 256 257 //! Deactivate theLight in this view. 258 Standard_EXPORT void SetLightOff (const Handle(V3d_Light)& theLight); 259 260 //! Deactivate all the Lights defined in this view. 261 Standard_EXPORT void SetLightOff(); 262 263 //! Returns TRUE when the light is active in this view. 264 Standard_EXPORT Standard_Boolean IsActiveLight (const Handle(V3d_Light)& theLight) const; 265 266 //! sets the immediate update mode and returns the previous one. 267 Standard_EXPORT Standard_Boolean SetImmediateUpdate (const Standard_Boolean theImmediateUpdate); 268 269 //! Customization of the ZBUFFER Triedron. 270 //! XColor,YColor,ZColor - colors of axis 271 //! SizeRatio - ratio of decreasing of the trihedron size when its physical 272 //! position comes out of the view 273 //! AxisDiametr - diameter relatively to axis length 274 //! NbFacettes - number of facets of cylinders and cones 275 Standard_EXPORT void ZBufferTriedronSetup (const Quantity_Color& theXColor = Quantity_NOC_RED, 276 const Quantity_Color& theYColor = Quantity_NOC_GREEN, 277 const Quantity_Color& theZColor = Quantity_NOC_BLUE1, 278 const Standard_Real theSizeRatio = 0.8, 279 const Standard_Real theAxisDiametr = 0.05, 280 const Standard_Integer theNbFacettes = 12); 281 282 //! Display of the Triedron. 283 //! Initialize position, color and length of Triedron axes. 284 //! The scale is a percent of the window width. 285 Standard_EXPORT void TriedronDisplay (const Aspect_TypeOfTriedronPosition thePosition = Aspect_TOTP_CENTER, 286 const Quantity_Color& theColor = Quantity_NOC_WHITE, 287 const Standard_Real theScale = 0.02, 288 const V3d_TypeOfVisualization theMode = V3d_WIREFRAME); 289 290 //! Erases the Triedron. 291 Standard_EXPORT void TriedronErase(); 292 293 //! Returns data of a graduated trihedron. 294 Standard_EXPORT const Graphic3d_GraduatedTrihedron& GetGraduatedTrihedron() const; 295 296 //! Displays a graduated trihedron. 297 Standard_EXPORT void GraduatedTrihedronDisplay (const Graphic3d_GraduatedTrihedron& theTrihedronData); 298 299 //! Erases a graduated trihedron from the view. 300 Standard_EXPORT void GraduatedTrihedronErase(); 301 302 //! modify the Projection of the view perpendicularly to 303 //! the privileged plane of the viewer. 304 Standard_EXPORT void SetFront(); 305 306 //! Rotates the eye about the coordinate system of 307 //! reference of the screen 308 //! for which the origin is the view point of the projection, 309 //! with a relative angular value in RADIANS with respect to 310 //! the initial position expressed by Start = Standard_True 311 //! Warning! raises BadValue from V3d 312 //! If the eye, the view point, or the high point are 313 //! aligned or confused. 314 Standard_EXPORT void Rotate (const Standard_Real Ax, const Standard_Real Ay, const Standard_Real Az, const Standard_Boolean Start = Standard_True); 315 316 //! Rotates the eye about the coordinate system of 317 //! reference of the screen 318 //! for which the origin is Gravity point {X,Y,Z}, 319 //! with a relative angular value in RADIANS with respect to 320 //! the initial position expressed by Start = Standard_True 321 //! If the eye, the view point, or the high point are 322 //! aligned or confused. 323 Standard_EXPORT void Rotate (const Standard_Real Ax, const Standard_Real Ay, const Standard_Real Az, 324 const Standard_Real X, const Standard_Real Y, const Standard_Real Z, 325 const Standard_Boolean Start = Standard_True); 326 327 //! Rotates the eye about one of the coordinate axes of 328 //! of the view for which the origin is the Gravity point{X,Y,Z} 329 //! with an relative angular value in RADIANS with 330 //! respect to the initial position expressed by 331 //! Start = Standard_True 332 Standard_EXPORT void Rotate (const V3d_TypeOfAxe Axe, 333 const Standard_Real Angle, 334 const Standard_Real X, const Standard_Real Y, const Standard_Real Z, 335 const Standard_Boolean Start = Standard_True); 336 337 //! Rotates the eye about one of the coordinate axes of 338 //! of the view for which the origin is the view point of the 339 //! projection with an relative angular value in RADIANS with 340 //! respect to the initial position expressed by 341 //! Start = Standard_True 342 Standard_EXPORT void Rotate (const V3d_TypeOfAxe Axe, const Standard_Real Angle, const Standard_Boolean Start = Standard_True); 343 344 //! Rotates the eye around the current axis a relative 345 //! angular value in RADIANS with respect to the initial 346 //! position expressed by Start = Standard_True 347 Standard_EXPORT void Rotate (const Standard_Real Angle, const Standard_Boolean Start = Standard_True); 348 349 //! Movement of the eye parallel to the coordinate system 350 //! of reference of the screen a distance relative to the 351 //! initial position expressed by Start = Standard_True. 352 Standard_EXPORT void Move (const Standard_Real Dx, const Standard_Real Dy, const Standard_Real Dz, const Standard_Boolean Start = Standard_True); 353 354 //! Movement of the eye parallel to one of the axes of the 355 //! coordinate system of reference of the view a distance 356 //! relative to the initial position expressed by 357 //! Start = Standard_True. 358 Standard_EXPORT void Move (const V3d_TypeOfAxe Axe, const Standard_Real Length, const Standard_Boolean Start = Standard_True); 359 360 //! Movement of the eye parllel to the current axis 361 //! a distance relative to the initial position 362 //! expressed by Start = Standard_True 363 Standard_EXPORT void Move (const Standard_Real Length, const Standard_Boolean Start = Standard_True); 364 365 //! Movement of the ye and the view point parallel to the 366 //! frame of reference of the screen a distance relative 367 //! to the initial position expressed by 368 //! Start = Standard_True 369 Standard_EXPORT void Translate (const Standard_Real Dx, const Standard_Real Dy, const Standard_Real Dz, const Standard_Boolean Start = Standard_True); 370 371 //! Movement of the eye and the view point parallel to one 372 //! of the axes of the fame of reference of the view a 373 //! distance relative to the initial position 374 //! expressed by Start = Standard_True 375 Standard_EXPORT void Translate (const V3d_TypeOfAxe Axe, const Standard_Real Length, const Standard_Boolean Start = Standard_True); 376 377 //! Movement of the eye and view point parallel to 378 //! the current axis a distance relative to the initial 379 //! position expressed by Start = Standard_True 380 Standard_EXPORT void Translate (const Standard_Real Length, const Standard_Boolean Start = Standard_True); 381 382 //! places the point of the view corresponding 383 //! at the pixel position x,y at the center of the window 384 //! and updates the view. 385 Standard_EXPORT void Place (const Standard_Integer theXp, const Standard_Integer theYp, const Standard_Real theZoomFactor = 1); 386 387 //! Rotation of the view point around the frame of reference 388 //! of the screen for which the origin is the eye of the 389 //! projection with a relative angular value in RADIANS 390 //! with respect to the initial position expressed by 391 //! Start = Standard_True 392 Standard_EXPORT void Turn (const Standard_Real Ax, const Standard_Real Ay, const Standard_Real Az, const Standard_Boolean Start = Standard_True); 393 394 //! Rotation of the view point around one of the axes of the 395 //! frame of reference of the view for which the origin is 396 //! the eye of the projection with an angular value in 397 //! RADIANS relative to the initial position expressed by 398 //! Start = Standard_True 399 Standard_EXPORT void Turn (const V3d_TypeOfAxe Axe, const Standard_Real Angle, const Standard_Boolean Start = Standard_True); 400 401 //! Rotation of the view point around the current axis an 402 //! angular value in RADIANS relative to the initial 403 //! position expressed by Start = Standard_True 404 Standard_EXPORT void Turn (const Standard_Real Angle, const Standard_Boolean Start = Standard_True); 405 406 //! Defines the angular position of the high point of 407 //! the reference frame of the view with respect to the 408 //! Y screen axis with an absolute angular value in 409 //! RADIANS. 410 Standard_EXPORT void SetTwist (const Standard_Real Angle); 411 412 //! Defines the position of the eye.. 413 Standard_EXPORT void SetEye (const Standard_Real X, const Standard_Real Y, const Standard_Real Z); 414 415 //! Defines the Depth of the eye from the view point 416 //! without update the projection . 417 Standard_EXPORT void SetDepth (const Standard_Real Depth); 418 419 //! Defines the orientation of the projection. 420 Standard_EXPORT void SetProj (const Standard_Real Vx, const Standard_Real Vy, const Standard_Real Vz); 421 422 //! Defines the orientation of the projection . 423 //! @param theOrientation camera direction 424 //! @param theIsYup flag indicating Y-up (TRUE) or Z-up (FALSE) convention 425 Standard_EXPORT void SetProj (const V3d_TypeOfOrientation theOrientation, 426 const Standard_Boolean theIsYup = Standard_False); 427 428 //! Defines the position of the view point. 429 Standard_EXPORT void SetAt (const Standard_Real X, const Standard_Real Y, const Standard_Real Z); 430 431 //! Defines the orientation of the high point. 432 Standard_EXPORT void SetUp (const Standard_Real Vx, const Standard_Real Vy, const Standard_Real Vz); 433 434 //! Defines the orientation(SO) of the high point. 435 Standard_EXPORT void SetUp (const V3d_TypeOfOrientation Orientation); 436 437 //! Saves the current state of the orientation of the view 438 //! which will be the return state at ResetViewOrientation. 439 Standard_EXPORT void SetViewOrientationDefault(); 440 441 //! Resets the orientation of the view. 442 //! Updates the view 443 Standard_EXPORT void ResetViewOrientation(); 444 445 //! Translates the center of the view along "x" and "y" axes of 446 //! view projection. Can be used to perform interactive panning operation. 447 //! In that case the DXv, DXy parameters specify panning relative to the 448 //! point where the operation is started. 449 //! @param theDXv [in] the relative panning on "x" axis of view projection, in view space coordinates. 450 //! @param theDYv [in] the relative panning on "y" axis of view projection, in view space coordinates. 451 //! @param theZoomFactor [in] the zooming factor. 452 //! @param theToStart [in] pass TRUE when starting panning to remember view 453 //! state prior to panning for relative arguments. If panning is started, 454 //! passing {0, 0} for {theDXv, theDYv} will return view to initial state. 455 //! Performs update of view. 456 Standard_EXPORT void Panning (const Standard_Real theDXv, const Standard_Real theDYv, const Standard_Real theZoomFactor = 1, const Standard_Boolean theToStart = Standard_True); 457 458 //! Relocates center of screen to the point, determined by 459 //! {Xp, Yp} pixel coordinates relative to the bottom-left corner of 460 //! screen. To calculate pixel coordinates for any point from world 461 //! coordinate space, it can be projected using "Project". 462 //! @param theXp [in] the x coordinate. 463 //! @param theYp [in] the y coordinate. 464 Standard_EXPORT void SetCenter (const Standard_Integer theXp, const Standard_Integer theYp); 465 466 //! Defines the view projection size in its maximum dimension, 467 //! keeping the inital height/width ratio unchanged. 468 Standard_EXPORT void SetSize (const Standard_Real theSize); 469 470 //! Defines the Depth size of the view 471 //! Front Plane will be set to Size/2. 472 //! Back Plane will be set to -Size/2. 473 //! Any Object located Above the Front Plane or 474 //! behind the Back Plane will be Clipped . 475 //! NOTE than the XY Size of the View is NOT modified . 476 Standard_EXPORT void SetZSize (const Standard_Real SetZSize); 477 478 //! Zooms the view by a factor relative to the initial 479 //! value expressed by Start = Standard_True 480 //! Updates the view. 481 Standard_EXPORT void SetZoom (const Standard_Real Coef, const Standard_Boolean Start = Standard_True); 482 483 //! Zooms the view by a factor relative to the value 484 //! initialised by SetViewMappingDefault(). 485 //! Updates the view. 486 Standard_EXPORT void SetScale (const Standard_Real Coef); 487 488 //! Sets anisotropic (axial) scale factors <Sx>, <Sy>, <Sz> for view <me>. 489 //! Anisotropic scaling operation is performed through multiplying 490 //! the current view orientation matrix by a scaling matrix: 491 //! || Sx 0 0 0 || 492 //! || 0 Sy 0 0 || 493 //! || 0 0 Sz 0 || 494 //! || 0 0 0 1 || 495 //! Updates the view. 496 Standard_EXPORT void SetAxialScale (const Standard_Real Sx, const Standard_Real Sy, const Standard_Real Sz); 497 498 //! Adjust view parameters to fit the displayed scene, respecting height / width ratio. 499 //! The Z clipping range (depth range) is fitted if AutoZFit flag is TRUE. 500 //! Throws program error exception if margin coefficient is < 0 or >= 1. 501 //! Updates the view. 502 //! @param theMargin [in] the margin coefficient for view borders. 503 //! @param theToUpdate [in] flag to perform view update. 504 Standard_EXPORT void FitAll (const Standard_Real theMargin = 0.01, const Standard_Boolean theToUpdate = Standard_True); 505 506 //! Adjust view parameters to fit the displayed scene, respecting height / width ratio 507 //! according to the custom bounding box given. 508 //! Throws program error exception if margin coefficient is < 0 or >= 1. 509 //! Updates the view. 510 //! @param theBox [in] the custom bounding box to fit. 511 //! @param theMargin [in] the margin coefficient for view borders. 512 //! @param theToUpdate [in] flag to perform view update. 513 Standard_EXPORT void FitAll (const Bnd_Box& theBox, const Standard_Real theMargin = 0.01, const Standard_Boolean theToUpdate = Standard_True); 514 515 //! Adjusts the viewing volume so as not to clip the displayed objects by front and back 516 //! and back clipping planes. Also sets depth value automatically depending on the 517 //! calculated Z size and Aspect parameter. 518 //! NOTE than the original XY size of the view is NOT modified . 519 Standard_EXPORT void DepthFitAll (const Standard_Real Aspect = 0.01, const Standard_Real Margin = 0.01); 520 521 //! Centers the defined projection window so that it occupies 522 //! the maximum space while respecting the initial 523 //! height/width ratio. 524 //! NOTE than the original Z size of the view is NOT modified . 525 Standard_EXPORT void FitAll (const Standard_Real theMinXv, const Standard_Real theMinYv, const Standard_Real theMaxXv, const Standard_Real theMaxYv); 526 527 //! Centers the defined PIXEL window so that it occupies 528 //! the maximum space while respecting the initial height/width ratio. 529 //! NOTE than the original Z size of the view is NOT modified. 530 //! @param theMinXp [in] pixel coordinates of minimal corner on x screen axis. 531 //! @param theMinYp [in] pixel coordinates of minimal corner on y screen axis. 532 //! @param theMaxXp [in] pixel coordinates of maximal corner on x screen axis. 533 //! @param theMaxYp [in] pixel coordinates of maximal corner on y screen axis. 534 Standard_EXPORT void WindowFit (const Standard_Integer theMinXp, const Standard_Integer theMinYp, const Standard_Integer theMaxXp, const Standard_Integer theMaxYp); 535 536 //! Saves the current view mapping. This will be the 537 //! state returned from ResetViewmapping. 538 Standard_EXPORT void SetViewMappingDefault(); 539 540 //! Resets the centering of the view. 541 //! Updates the view 542 Standard_EXPORT void ResetViewMapping(); 543 544 //! Resets the centering and the orientation of the view. 545 Standard_EXPORT void Reset (const Standard_Boolean theToUpdate = Standard_True); 546 547 //! Converts the PIXEL value 548 //! to a value in the projection plane. 549 Standard_EXPORT Standard_Real Convert (const Standard_Integer Vp) const; 550 551 //! Converts the point PIXEL into a point projected 552 //! in the reference frame of the projection plane. 553 Standard_EXPORT void Convert (const Standard_Integer Xp, const Standard_Integer Yp, 554 Standard_Real& Xv, Standard_Real& Yv) const; 555 556 //! Converts tha value of the projection plane into 557 //! a PIXEL value. 558 Standard_EXPORT Standard_Integer Convert (const Standard_Real Vv) const; 559 560 //! Converts the point defined in the reference frame 561 //! of the projection plane into a point PIXEL. 562 Standard_EXPORT void Convert (const Standard_Real Xv, const Standard_Real Yv, 563 Standard_Integer& Xp, Standard_Integer& Yp) const; 564 565 //! Converts the projected point into a point 566 //! in the reference frame of the view corresponding 567 //! to the intersection with the projection plane 568 //! of the eye/view point vector. 569 Standard_EXPORT void Convert (const Standard_Integer Xp, const Standard_Integer Yp, 570 Standard_Real& X, Standard_Real& Y, Standard_Real& Z) const; 571 572 //! Converts the projected point into a point 573 //! in the reference frame of the view corresponding 574 //! to the intersection with the projection plane 575 //! of the eye/view point vector and returns the 576 //! projection ray for further computations. 577 Standard_EXPORT void ConvertWithProj (const Standard_Integer Xp, const Standard_Integer Yp, 578 Standard_Real& X, Standard_Real& Y, Standard_Real& Z, 579 Standard_Real& Vx, Standard_Real& Vy, Standard_Real& Vz) const; 580 581 //! Converts the projected point into the nearest grid point 582 //! in the reference frame of the view corresponding 583 //! to the intersection with the projection plane 584 //! of the eye/view point vector and display the grid marker. 585 //! Warning: When the grid is not active the result is identical to the above Convert() method. 586 //! How to use: 587 //! 1) Enable the grid echo display 588 //! myViewer->SetGridEcho(Standard_True); 589 //! 2) When application receive a move event: 590 //! 2.1) Check if any object is detected 591 //! if( myInteractiveContext->MoveTo(x,y) == AIS_SOD_Nothing ) { 592 //! 2.2) Check if the grid is active 593 //! if( myViewer->Grid()->IsActive() ) { 594 //! 2.3) Display the grid echo and gets the grid point 595 //! myView->ConvertToGrid(x,y,X,Y,Z); 596 //! myView->Viewer()->ShowGridEcho (myView, Graphic3d_Vertex (X,Y,Z)); 597 //! myView->RedrawImmediate(); 598 //! 2.4) Else this is the standard case 599 //! } else myView->Convert(x,y,X,Y,Z); 600 Standard_EXPORT void ConvertToGrid (const Standard_Integer Xp, const Standard_Integer Yp, 601 Standard_Real& Xg, Standard_Real& Yg, Standard_Real& Zg) const; 602 603 //! Converts the point into the nearest grid point 604 //! and display the grid marker. 605 Standard_EXPORT void ConvertToGrid (const Standard_Real X, const Standard_Real Y, const Standard_Real Z, 606 Standard_Real& Xg, Standard_Real& Yg, Standard_Real& Zg) const; 607 608 //! Projects the point defined in the reference frame of 609 //! the view into the projected point in the associated window. 610 Standard_EXPORT void Convert (const Standard_Real X, const Standard_Real Y, const Standard_Real Z, 611 Standard_Integer& Xp, Standard_Integer& Yp) const; 612 613 //! Converts the point defined in the user space of 614 //! the view to the projection plane at the depth 615 //! relative to theZ. 616 Standard_EXPORT void Project (const Standard_Real theX, 617 const Standard_Real theY, 618 const Standard_Real theZ, 619 Standard_Real& theXp, 620 Standard_Real& theYp) const; 621 622 //! Converts the point defined in the user space of 623 //! the view to the projection plane at the depth 624 //! relative to theZ. 625 Standard_EXPORT void Project (const Standard_Real theX, 626 const Standard_Real theY, 627 const Standard_Real theZ, 628 Standard_Real& theXp, 629 Standard_Real& theYp, 630 Standard_Real& theZp) const; 631 632 //! Returns the Background color values of the view 633 //! depending of the color Type. 634 Standard_EXPORT void BackgroundColor (const Quantity_TypeOfColor Type, Standard_Real& V1, Standard_Real& V2, Standard_Real& V3) const; 635 636 //! Returns the Background color object of the view. 637 Standard_EXPORT Quantity_Color BackgroundColor() const; 638 639 //! Returns the gradient background colors of the view. 640 Standard_EXPORT void GradientBackgroundColors (Quantity_Color& theColor1, Quantity_Color& theColor2) const; 641 642 //! Returns the gradient background of the view. 643 Standard_EXPORT Aspect_GradientBackground GradientBackground() const; 644 645 //! Returns the current value of the zoom expressed with 646 //! respect to SetViewMappingDefault(). 647 Standard_EXPORT Standard_Real Scale() const; 648 649 //! Returns the current values of the anisotropic (axial) scale factors. 650 Standard_EXPORT void AxialScale (Standard_Real& Sx, Standard_Real& Sy, Standard_Real& Sz) const; 651 652 //! Returns the height and width of the view. 653 Standard_EXPORT void Size (Standard_Real& Width, Standard_Real& Height) const; 654 655 //! Returns the Depth of the view . 656 Standard_EXPORT Standard_Real ZSize() const; 657 658 //! Returns the position of the eye. 659 Standard_EXPORT void Eye (Standard_Real& X, Standard_Real& Y, Standard_Real& Z) const; 660 661 //! Returns the position of point which emanating the projections. FocalReferencePoint(Standard_Real & X,Standard_Real & Y,Standard_Real & Z) const662 void FocalReferencePoint (Standard_Real& X, Standard_Real& Y, Standard_Real& Z) const { Eye (X,Y,Z); } 663 664 //! Returns the coordinate of the point (Xpix,Ypix) 665 //! in the view (XP,YP,ZP), and the projection vector of the 666 //! view passing by the point (for PerspectiveView). 667 Standard_EXPORT void ProjReferenceAxe (const Standard_Integer Xpix, const Standard_Integer Ypix, 668 Standard_Real& XP, Standard_Real& YP, Standard_Real& ZP, 669 Standard_Real& VX, Standard_Real& VY, Standard_Real& VZ) const; 670 671 //! Returns the Distance between the Eye and View Point. 672 Standard_EXPORT Standard_Real Depth() const; 673 674 //! Returns the projection vector. 675 Standard_EXPORT void Proj (Standard_Real& Vx, Standard_Real& Vy, Standard_Real& Vz) const; 676 677 //! Returns the position of the view point. 678 Standard_EXPORT void At (Standard_Real& X, Standard_Real& Y, Standard_Real& Z) const; 679 680 //! Returns the vector giving the position of the high point. 681 Standard_EXPORT void Up (Standard_Real& Vx, Standard_Real& Vy, Standard_Real& Vz) const; 682 683 //! Returns in RADIANS the orientation of the view around 684 //! the visual axis measured from the Y axis of the screen. 685 Standard_EXPORT Standard_Real Twist() const; 686 687 //! Returns the current shading model. 688 Standard_EXPORT Graphic3d_TypeOfShadingModel ShadingModel() const; 689 690 Standard_EXPORT Handle(Graphic3d_TextureEnv) TextureEnv() const; 691 692 //! Returns the current visualisation mode. 693 Standard_EXPORT V3d_TypeOfVisualization Visualization() const; 694 695 //! Returns True if One light more can be 696 //! activated in this View. 697 Standard_EXPORT Standard_Boolean IfMoreLights() const; 698 699 //! Return iterator for defined lights. ActiveLightIterator() const700 V3d_ListOfLightIterator ActiveLightIterator() const { return V3d_ListOfLightIterator (myActiveLights); } 701 702 //! initializes an iteration on the active Lights. InitActiveLights()703 void InitActiveLights() { myActiveLightsIterator.Initialize (myActiveLights); } 704 705 //! returns true if there are more active Light(s) to return. MoreActiveLights() const706 Standard_Boolean MoreActiveLights() const { return myActiveLightsIterator.More(); } 707 708 //! Go to the next active Light (if there is not, ActiveLight will raise an exception) NextActiveLights()709 void NextActiveLights() { myActiveLightsIterator.Next(); } 710 Handle(V3d_Light)711 const Handle(V3d_Light)& ActiveLight() const { return myActiveLightsIterator.Value(); } 712 713 //! Returns the MAX number of light associated to the view. 714 Standard_EXPORT Standard_Integer LightLimit() const; 715 716 //! Returns the viewer in which the view has been created. Viewer() const717 Handle(V3d_Viewer) Viewer() const { return MyViewer; } 718 719 //! Returns True if MyView is associated with a window . 720 Standard_EXPORT Standard_Boolean IfWindow() const; 721 722 //! Returns the Aspect Window associated with the view. Handle(Aspect_Window)723 const Handle(Aspect_Window)& Window() const { return MyWindow; } 724 725 //! Returns the Type of the View 726 Standard_EXPORT V3d_TypeOfView Type() const; 727 728 //! Translates the center of the view along "x" and "y" axes of 729 //! view projection. Can be used to perform interactive panning operation. 730 //! In that case the DXp, DXp parameters specify panning relative to the 731 //! point where the operation is started. 732 //! @param theDXp [in] the relative panning on "x" axis of view projection, in pixels. 733 //! @param theDYp [in] the relative panning on "y" axis of view projection, in pixels. 734 //! @param theZoomFactor [in] the zooming factor. 735 //! @param theToStart [in] pass TRUE when starting panning to remember view 736 //! state prior to panning for relative arguments. Passing 0 for relative 737 //! panning parameter should return view panning to initial state. 738 //! Performs update of view. 739 Standard_EXPORT void Pan (const Standard_Integer theDXp, const Standard_Integer theDYp, const Standard_Real theZoomFactor = 1, const Standard_Boolean theToStart = Standard_True); 740 741 //! Zoom the view according to a zoom factor computed 742 //! from the distance between the 2 mouse position. 743 //! @param theXp1 [in] the x coordinate of first mouse position, in pixels. 744 //! @param theYp1 [in] the y coordinate of first mouse position, in pixels. 745 //! @param theXp2 [in] the x coordinate of second mouse position, in pixels. 746 //! @param theYp2 [in] the y coordinate of second mouse position, in pixels. 747 Standard_EXPORT void Zoom (const Standard_Integer theXp1, const Standard_Integer theYp1, const Standard_Integer theXp2, const Standard_Integer theYp2); 748 749 //! Defines starting point for ZoomAtPoint view operation. 750 //! @param theXp [in] the x mouse coordinate, in pixels. 751 //! @param theYp [in] the y mouse coordinate, in pixels. 752 Standard_EXPORT void StartZoomAtPoint (const Standard_Integer theXp, const Standard_Integer theYp); 753 754 //! Zooms the model at a pixel defined by the method StartZoomAtPoint(). 755 Standard_EXPORT void ZoomAtPoint (const Standard_Integer theMouseStartX, const Standard_Integer theMouseStartY, const Standard_Integer theMouseEndX, const Standard_Integer theMouseEndY); 756 757 //! Performs anisotropic scaling of <me> view along the given <Axis>. 758 //! The scale factor is calculated on a basis of 759 //! the mouse pointer displacement <Dx,Dy>. 760 //! The calculated scale factor is then passed to SetAxialScale(Sx, Sy, Sz) method. 761 Standard_EXPORT void AxialScale (const Standard_Integer Dx, const Standard_Integer Dy, const V3d_TypeOfAxe Axis); 762 763 //! Begin the rotation of the view around the screen axis 764 //! according to the mouse position <X,Y>. 765 //! Warning: Enable rotation around the Z screen axis when <zRotationThreshold> 766 //! factor is > 0 soon the distance from the start point and the center 767 //! of the view is > (medium viewSize * <zRotationThreshold> ). 768 //! Generally a value of 0.4 is usable to rotate around XY screen axis 769 //! inside the circular threshold area and to rotate around Z screen axis 770 //! outside this area. 771 Standard_EXPORT void StartRotation (const Standard_Integer X, const Standard_Integer Y, const Standard_Real zRotationThreshold = 0.0); 772 773 //! Continues the rotation of the view 774 //! with an angle computed from the last and new mouse position <X,Y>. 775 Standard_EXPORT void Rotation (const Standard_Integer X, const Standard_Integer Y); 776 777 //! Change View Plane Distance for Perspective Views 778 //! Warning! raises TypeMismatch from Standard if the view 779 //! is not a perspective view. 780 Standard_EXPORT void SetFocale (const Standard_Real Focale); 781 782 //! Returns the View Plane Distance for Perspective Views 783 Standard_EXPORT Standard_Real Focale() const; 784 785 //! Returns the associated Graphic3d view. Handle(Graphic3d_CView)786 const Handle(Graphic3d_CView)& View() const { return myView; } 787 788 //! Switches computed HLR mode in the view. 789 Standard_EXPORT void SetComputedMode (const Standard_Boolean theMode); 790 791 //! Returns the computed HLR mode state. 792 Standard_EXPORT Standard_Boolean ComputedMode() const; 793 794 //! idem than WindowFit WindowFitAll(const Standard_Integer Xmin,const Standard_Integer Ymin,const Standard_Integer Xmax,const Standard_Integer Ymax)795 void WindowFitAll (const Standard_Integer Xmin, const Standard_Integer Ymin, const Standard_Integer Xmax, const Standard_Integer Ymax) 796 { 797 WindowFit (Xmin, Ymin, Xmax, Ymax); 798 } 799 800 //! Transform camera eye, center and scale to fit in the passed bounding box specified in WCS. 801 //! @param theCamera [in] the camera 802 //! @param theBox [in] the bounding box 803 //! @param theMargin [in] the margin coefficient for view borders 804 //! @param theResolution [in] the minimum size of projection of bounding box in Xv or Yv direction when it considered to be a thin plane or point (without a volume); 805 //! in this case only the center of camera is adjusted 806 //! @param theToEnlargeIfLine [in] when TRUE - in cases when the whole bounding box projected into thin line going along Z-axis of screen, 807 //! the view plane is enlarged such thatwe see the whole line on rotation, otherwise only the center of camera is adjusted. 808 //! @return TRUE if the fit all operation can be done 809 Standard_EXPORT Standard_Boolean FitMinMax (const Handle(Graphic3d_Camera)& theCamera, 810 const Bnd_Box& theBox, 811 const Standard_Real theMargin, 812 const Standard_Real theResolution = 0.0, 813 const Standard_Boolean theToEnlargeIfLine = Standard_True) const; 814 815 //! Defines or Updates the definition of the 816 //! grid in <me> 817 Standard_EXPORT void SetGrid (const gp_Ax3& aPlane, const Handle(Aspect_Grid)& aGrid); 818 819 //! Defines or Updates the activity of the 820 //! grid in <me> 821 Standard_EXPORT void SetGridActivity (const Standard_Boolean aFlag); 822 823 //! Dumps the full contents of the View into the image file. This is an alias for ToPixMap() with Image_AlienPixMap. 824 //! @param theFile destination image file (image format is determined by file extension like .png, .bmp, .jpg) 825 //! @param theBufferType buffer to dump 826 //! @return FALSE when the dump has failed 827 Standard_EXPORT Standard_Boolean Dump (const Standard_CString theFile, const Graphic3d_BufferType& theBufferType = Graphic3d_BT_RGB); 828 829 //! Dumps the full contents of the view to a pixmap with specified parameters. 830 //! Internally this method calls Redraw() with an offscreen render buffer of requested target size (theWidth x theHeight), 831 //! so that there is no need resizing a window control for making a dump of different size. 832 Standard_EXPORT Standard_Boolean ToPixMap (Image_PixMap& theImage, 833 const V3d_ImageDumpOptions& theParams); 834 835 //! Dumps the full contents of the view to a pixmap. 836 //! Internally this method calls Redraw() with an offscreen render buffer of requested target size (theWidth x theHeight), 837 //! so that there is no need resizing a window control for making a dump of different size. 838 //! @param theImage target image, will be re-allocated to match theWidth x theHeight 839 //! @param theWidth target image width 840 //! @param theHeight target image height 841 //! @param theBufferType type of the view buffer to dump (color / depth) 842 //! @param theToAdjustAspect when true, active view aspect ratio will be overridden by (theWidth / theHeight) 843 //! @param theStereoOptions how to dump stereographic camera ToPixMap(Image_PixMap & theImage,const Standard_Integer theWidth,const Standard_Integer theHeight,const Graphic3d_BufferType & theBufferType=Graphic3d_BT_RGB,const Standard_Boolean theToAdjustAspect=Standard_True,const V3d_StereoDumpOptions theStereoOptions=V3d_SDO_MONO)844 Standard_Boolean ToPixMap (Image_PixMap& theImage, 845 const Standard_Integer theWidth, 846 const Standard_Integer theHeight, 847 const Graphic3d_BufferType& theBufferType = Graphic3d_BT_RGB, 848 const Standard_Boolean theToAdjustAspect = Standard_True, 849 const V3d_StereoDumpOptions theStereoOptions = V3d_SDO_MONO) 850 { 851 V3d_ImageDumpOptions aParams; 852 aParams.Width = theWidth; 853 aParams.Height = theHeight; 854 aParams.BufferType = theBufferType; 855 aParams.StereoOptions = theStereoOptions; 856 aParams.ToAdjustAspect = theToAdjustAspect; 857 return ToPixMap (theImage, aParams); 858 } 859 860 //! Manages display of the back faces 861 //! When <aModel> is TOBM_AUTOMATIC the object backfaces 862 //! are displayed only for surface objects and 863 //! never displayed for solid objects. 864 //! this was the previous mode. 865 //! <aModel> is TOBM_ALWAYS_DISPLAYED the object backfaces 866 //! are always displayed both for surfaces or solids. 867 //! <aModel> is TOBM_NEVER_DISPLAYED the object backfaces 868 //! are never displayed. 869 Standard_EXPORT void SetBackFacingModel (const V3d_TypeOfBackfacingModel theModel = V3d_TOBM_AUTOMATIC); 870 871 //! Returns current state of the back faces display 872 Standard_EXPORT V3d_TypeOfBackfacingModel BackFacingModel() const; 873 874 //! Adds clip plane to the view. The composition of clip planes truncates the 875 //! rendering space to convex volume. Number of supported clip planes can be consulted 876 //! by PlaneLimit method of associated Graphic3d_GraphicDriver. 877 //! Please be aware that the planes which exceed the limit are ignored during rendering. 878 //! @param thePlane [in] the clip plane to be added to view. 879 Standard_EXPORT virtual void AddClipPlane (const Handle(Graphic3d_ClipPlane)& thePlane); 880 881 //! Removes clip plane from the view. 882 //! @param thePlane [in] the clip plane to be removed from view. 883 Standard_EXPORT virtual void RemoveClipPlane (const Handle(Graphic3d_ClipPlane)& thePlane); 884 885 //! Sets sequence of clip planes to the view. The planes that have been set 886 //! before are removed from the view. The composition of clip planes 887 //! truncates the rendering space to convex volume. Number of supported 888 //! clip planes can be consulted by InquirePlaneLimit method of 889 //! Graphic3d_GraphicDriver. Please be aware that the planes that 890 //! exceed the limit are ignored during rendering. 891 //! @param thePlanes [in] the clip planes to set. 892 Standard_EXPORT void SetClipPlanes (const Handle(Graphic3d_SequenceOfHClipPlane)& thePlanes); 893 894 Standard_DEPRECATED("This method is deprecated - overload taking Handle should be used instead") SetClipPlanes(const Graphic3d_SequenceOfHClipPlane & thePlanes)895 void SetClipPlanes (const Graphic3d_SequenceOfHClipPlane& thePlanes) 896 { 897 Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = new Graphic3d_SequenceOfHClipPlane (thePlanes); 898 SetClipPlanes (aPlanes); 899 } 900 901 //! Get clip planes. 902 //! @return sequence clip planes that have been set for the view 903 Standard_EXPORT const Handle(Graphic3d_SequenceOfHClipPlane)& ClipPlanes() const; 904 905 //! Returns the MAX number of clipping planes associated to the view. 906 Standard_EXPORT Standard_Integer PlaneLimit() const; 907 908 //! Change camera used by view. 909 Standard_EXPORT void SetCamera (const Handle(Graphic3d_Camera)& theCamera); 910 911 //! Returns camera object of the view. 912 //! @return: handle to camera object, or NULL if 3D view does not use 913 //! the camera approach. 914 Standard_EXPORT const Handle(Graphic3d_Camera)& Camera() const; 915 916 //! Return default camera. Handle(Graphic3d_Camera)917 const Handle(Graphic3d_Camera)& DefaultCamera() const { return myDefaultCamera; } 918 919 //! Returns current rendering parameters and effect settings. 920 //! By default it returns default parameters of current viewer. 921 //! To define view-specific settings use method V3d_View::ChangeRenderingParams(). 922 //! @sa V3d_Viewer::DefaultRenderingParams() 923 Standard_EXPORT const Graphic3d_RenderingParams& RenderingParams() const; 924 925 //! Returns reference to current rendering parameters and effect settings. 926 Standard_EXPORT Graphic3d_RenderingParams& ChangeRenderingParams(); 927 928 //! @return flag value of objects culling mechanism IsCullingEnabled() const929 Standard_Boolean IsCullingEnabled() const { return RenderingParams().FrustumCullingState == Graphic3d_RenderingParams::FrustumCulling_On; } 930 931 //! Turn on/off automatic culling of objects outside frustum (ON by default) SetFrustumCulling(Standard_Boolean theMode)932 void SetFrustumCulling (Standard_Boolean theMode) { ChangeRenderingParams().FrustumCullingState = theMode ? Graphic3d_RenderingParams::FrustumCulling_On : Graphic3d_RenderingParams::FrustumCulling_Off; } 933 934 //! Fill in the dictionary with diagnostic info. 935 //! Should be called within rendering thread. 936 //! 937 //! This API should be used only for user output or for creating automated reports. 938 //! The format of returned information (e.g. key-value layout) 939 //! is NOT part of this API and can be changed at any time. 940 //! Thus application should not parse returned information to weed out specific parameters. 941 //! @param theDict destination map for information 942 //! @param theFlags defines the information to be retrieved 943 Standard_EXPORT void DiagnosticInformation (TColStd_IndexedDataMapOfStringString& theDict, 944 Graphic3d_DiagnosticInfo theFlags) const; 945 946 //! Returns string with statistic performance info. 947 Standard_EXPORT TCollection_AsciiString StatisticInformation() const; 948 949 //! Fills in the dictionary with statistic performance info. 950 Standard_EXPORT void StatisticInformation (TColStd_IndexedDataMapOfStringString& theDict) const; 951 952 //! Returns the Objects number and the gravity center of ALL viewable points in the view 953 Standard_EXPORT gp_Pnt GravityPoint() const; 954 955 DEFINE_STANDARD_RTTIEXT(V3d_View,Standard_Transient) 956 957 protected: 958 959 Standard_EXPORT void ImmediateUpdate() const; 960 961 //! Scales camera to fit the view frame of defined width and height 962 //! keeping the aspect. For orthogonal camera the method changes scale, 963 //! for perspective adjusts Eye location about the Center point. 964 //! @param theSizeXv [in] size of viewport frame on "x" axis. 965 //! @param theSizeYv [in] size of viewport frame on "y" axis. 966 Standard_EXPORT void Scale (const Handle(Graphic3d_Camera)& theCamera, const Standard_Real theSizeXv, const Standard_Real theSizeYv) const; 967 968 Standard_EXPORT void Translate (const Handle(Graphic3d_Camera)& theCamera, const Standard_Real theDXv, const Standard_Real theDYv) const; 969 970 private: 971 972 //! Modifies the aspect ratio of the camera when 973 //! the associated window is defined or resized. 974 Standard_EXPORT void SetRatio(); 975 976 //! Determines the screen axes in the reference 977 //! framework of the view. 978 Standard_EXPORT static Standard_Boolean screenAxis (const gp_Dir& theVpn, const gp_Dir& theVup, 979 gp_Vec& theXaxe, gp_Vec& theYaxe, gp_Vec& theZaxe); 980 981 //! Transforms the Vertex V according to the matrice Matrix . 982 Standard_EXPORT static gp_XYZ TrsPoint (const Graphic3d_Vertex& V, const TColStd_Array2OfReal& Matrix); 983 984 //! Returns the objects number and the projection window 985 //! of the objects contained in the view. 986 Standard_EXPORT Standard_Integer MinMax (Standard_Real& Umin, Standard_Real& Vmin, Standard_Real& Umax, Standard_Real& Vmax) const; 987 988 //! Returns the objects number and the box encompassing 989 //! the objects contained in the view 990 Standard_EXPORT Standard_Integer MinMax (Standard_Real& Xmin, Standard_Real& Ymin, Standard_Real& Zmin, Standard_Real& Xmax, Standard_Real& Ymax, Standard_Real& Zmax) const; 991 992 Standard_EXPORT void Init(); 993 994 //! Returns a new vertex when the grid is activated. 995 Standard_EXPORT Graphic3d_Vertex Compute (const Graphic3d_Vertex& AVertex) const; 996 997 protected: 998 999 Standard_Real myOldMouseX; 1000 Standard_Real myOldMouseY; 1001 gp_Dir myCamStartOpUp; 1002 gp_Dir myCamStartOpDir; 1003 gp_Pnt myCamStartOpEye; 1004 Standard_Real myCamStartOpBnd[6]; 1005 gp_Pnt myCamStartOpCenter; 1006 Handle(Graphic3d_Camera) myDefaultCamera; 1007 Handle(Graphic3d_CView) myView; 1008 Standard_Boolean myImmediateUpdate; 1009 mutable Standard_Boolean myIsInvalidatedImmediate; 1010 1011 private: 1012 1013 V3d_ViewerPointer MyViewer; 1014 V3d_ListOfLight myActiveLights; 1015 gp_Dir myDefaultViewAxis; 1016 gp_Pnt myDefaultViewPoint; 1017 Handle(Aspect_Window) MyWindow; 1018 V3d_ListOfLight::Iterator myActiveLightsIterator; 1019 Standard_Integer sx; 1020 Standard_Integer sy; 1021 Standard_Real rx; 1022 Standard_Real ry; 1023 gp_Pnt myRotateGravity; 1024 Standard_Boolean myComputedMode; 1025 Standard_Boolean SwitchSetFront; 1026 Standard_Boolean myZRotation; 1027 Standard_Integer MyZoomAtPointX; 1028 Standard_Integer MyZoomAtPointY; 1029 Handle(V3d_Trihedron) myTrihedron; 1030 Handle(Aspect_Grid) MyGrid; 1031 gp_Ax3 MyPlane; 1032 TColStd_Array2OfReal MyTrsf; 1033 Handle(Graphic3d_Structure) MyGridEchoStructure; 1034 Handle(Graphic3d_Group) MyGridEchoGroup; 1035 gp_Vec myXscreenAxis; 1036 gp_Vec myYscreenAxis; 1037 gp_Vec myZscreenAxis; 1038 gp_Dir myViewAxis; 1039 Graphic3d_Vertex myGravityReferencePoint; 1040 Standard_Boolean myAutoZFitIsOn; 1041 Standard_Real myAutoZFitScaleFactor; 1042 1043 }; 1044 1045 #endif // _V3d_View_HeaderFile 1046