avtView3D.C 16.8 KB
Newer Older
hrchilds's avatar
hrchilds committed
1 2
/*****************************************************************************
*
3
* Copyright (c) 2000 - 2012, Lawrence Livermore National Security, LLC
hrchilds's avatar
hrchilds committed
4
* Produced at the Lawrence Livermore National Laboratory
5
* LLNL-CODE-442911
hrchilds's avatar
hrchilds committed
6 7
* All rights reserved.
*
8
* This file is  part of VisIt. For  details, see https://visit.llnl.gov/.  The
hrchilds's avatar
hrchilds committed
9 10 11 12 13 14 15 16 17 18
* full copyright notice is contained in the file COPYRIGHT located at the root
* of the VisIt distribution or at http://www.llnl.gov/visit/copyright.html.
*
* Redistribution  and  use  in  source  and  binary  forms,  with  or  without
* modification, are permitted provided that the following conditions are met:
*
*  - Redistributions of  source code must  retain the above  copyright notice,
*    this list of conditions and the disclaimer below.
*  - Redistributions in binary form must reproduce the above copyright notice,
*    this  list of  conditions  and  the  disclaimer (as noted below)  in  the
19 20 21
*    documentation and/or other materials provided with the distribution.
*  - Neither the name of  the LLNS/LLNL nor the names of  its contributors may
*    be used to endorse or promote products derived from this software without
hrchilds's avatar
hrchilds committed
22 23 24 25 26
*    specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR  IMPLIED WARRANTIES, INCLUDING,  BUT NOT  LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS FOR A PARTICULAR  PURPOSE
27 28 29
* ARE  DISCLAIMED. IN  NO EVENT  SHALL LAWRENCE  LIVERMORE NATIONAL  SECURITY,
* LLC, THE  U.S.  DEPARTMENT OF  ENERGY  OR  CONTRIBUTORS BE  LIABLE  FOR  ANY
* DIRECT,  INDIRECT,   INCIDENTAL,   SPECIAL,   EXEMPLARY,  OR   CONSEQUENTIAL
hrchilds's avatar
hrchilds committed
30 31 32 33 34 35 36 37 38
* DAMAGES (INCLUDING, BUT NOT  LIMITED TO, PROCUREMENT OF  SUBSTITUTE GOODS OR
* SERVICES; LOSS OF  USE, DATA, OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER
* CAUSED  AND  ON  ANY  THEORY  OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT
* LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING IN ANY  WAY
* OUT OF THE  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
*****************************************************************************/

hrchilds's avatar
hrchilds committed
39 40 41 42 43 44 45 46 47
// ************************************************************************* //
//                                avtView3D.C                                //
// ************************************************************************* //

#include <avtView3D.h>

#include <math.h>

#include <avtViewInfo.h>
hrchilds's avatar
hrchilds committed
48
#include <View3DAttributes.h>
hrchilds's avatar
hrchilds committed
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

//
// Local macros.
//
#define max(x,y) ((x) > (y) ? (x) : (y))


// ****************************************************************************
//  Method: avtView3D constructor
//
//  Programmer: Eric Brugger
//  Creation:   August 17, 2001
//
// ****************************************************************************

avtView3D::avtView3D()
{
    SetToDefault();
}

// ****************************************************************************
//  Method: avtView3D operator =
//
//  Arguments:
//    vi        The view info to copy.
//
//  Programmer: Eric Brugger
//  Creation:   August 17, 2001
//
hrchilds's avatar
hrchilds committed
78 79 80 81
//  Modifications:
//    Eric Brugger, Fri Jun  6 15:24:17 PDT 2003
//    I added image pan and image zoom.
//
hrchilds's avatar
hrchilds committed
82 83 84
//    Hank Childs, Wed Oct 15 13:05:33 PDT 2003
//    Added eye angle.
//
hrchilds's avatar
hrchilds committed
85 86 87
//    Eric Brugger, Mon Feb  9 16:02:13 PST 2004
//    Added centerOfRotationSet and centerOfRotation.
//
88 89 90
//    Jeremy Meredith, Wed May 19 14:15:58 EDT 2010
//    Support 3D axis scaling (3D equivalent of full-frame mode).
//
91 92 93
//    Jeremy Meredith, Mon Aug  2 14:23:08 EDT 2010
//    Add shear for oblique projection support.
//
hrchilds's avatar
hrchilds committed
94 95 96 97 98
// ****************************************************************************

avtView3D &
avtView3D::operator=(const avtView3D &vi)
{
hrchilds's avatar
hrchilds committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
    normal[0]           = vi.normal[0];
    normal[1]           = vi.normal[1];
    normal[2]           = vi.normal[2];
    focus[0]            = vi.focus[0];
    focus[1]            = vi.focus[1];
    focus[2]            = vi.focus[2];
    viewUp[0]           = vi.viewUp[0];
    viewUp[1]           = vi.viewUp[1];
    viewUp[2]           = vi.viewUp[2];
    viewAngle           = vi.viewAngle;
    parallelScale       = vi.parallelScale;
    nearPlane           = vi.nearPlane;
    farPlane            = vi.farPlane;
    imagePan[0]         = vi.imagePan[0];
    imagePan[1]         = vi.imagePan[1];
    imageZoom           = vi.imageZoom;
    perspective         = vi.perspective;
    eyeAngle            = vi.eyeAngle;
    centerOfRotationSet = vi.centerOfRotationSet;
    centerOfRotation[0] = vi.centerOfRotation[0];
    centerOfRotation[1] = vi.centerOfRotation[1];
    centerOfRotation[2] = vi.centerOfRotation[2];
121 122 123 124
    axis3DScaleFlag     = vi.axis3DScaleFlag;
    axis3DScales[0]     = vi.axis3DScales[0];
    axis3DScales[1]     = vi.axis3DScales[1];
    axis3DScales[2]     = vi.axis3DScales[2];
125 126 127
    shear[0]            = vi.shear[0];
    shear[1]            = vi.shear[1];
    shear[2]            = vi.shear[2];
hrchilds's avatar
hrchilds committed
128 129 130 131 132 133 134 135 136 137 138 139 140

    return *this;
}

// ****************************************************************************
//  Method: avtView3D operator ==
//
//  Arguments:
//    vi        The view info to compare to.
//
//  Programmer: Eric Brugger
//  Creation:   August 17, 2001
//
hrchilds's avatar
hrchilds committed
141 142 143 144
//  Modifications:
//    Eric Brugger, Fri Jun  6 15:24:17 PDT 2003
//    I added image pan and image zoom.
//
hrchilds's avatar
hrchilds committed
145 146 147
//    Hank Childs, Wed Oct 15 13:05:33 PDT 2003
//    Added eye angle.
//
hrchilds's avatar
hrchilds committed
148 149 150
//    Eric Brugger, Mon Feb  9 16:02:13 PST 2004
//    Added centerOfRotationSet and centerOfRotation.
//
151 152 153
//    Jeremy Meredith, Wed May 19 14:15:58 EDT 2010
//    Support 3D axis scaling (3D equivalent of full-frame mode).
//
154 155 156
//    Jeremy Meredith, Mon Aug  2 14:23:08 EDT 2010
//    Add shear for oblique projection support.
//
hrchilds's avatar
hrchilds committed
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
// ****************************************************************************

bool
avtView3D::operator==(const avtView3D &vi)
{
    if (normal[0] != vi.normal[0] || normal[1] != vi.normal[1] ||
        normal[2] != vi.normal[2])
    {
        return false;
    }

    if (focus[0] != vi.focus[0] || focus[1] != vi.focus[1] ||
        focus[2] != vi.focus[2])
    {
        return false;
    }

    if (viewUp[0] != vi.viewUp[0] || viewUp[1] != vi.viewUp[1] ||
        viewUp[2] != vi.viewUp[2])
    {
        return false;
    }

hrchilds's avatar
hrchilds committed
180 181 182 183 184 185 186
    if (centerOfRotation[0] != vi.centerOfRotation[0] ||
        centerOfRotation[1] != vi.centerOfRotation[1] ||
        centerOfRotation[2] != vi.centerOfRotation[2])
    {
        return false;
    }

187 188 189 190 191 192 193
    if (axis3DScales[0] != vi.axis3DScales[0] ||
        axis3DScales[1] != vi.axis3DScales[1] ||
        axis3DScales[2] != vi.axis3DScales[2])
    {
        return false;
    }

194 195 196 197 198 199
    if (shear[0] != vi.shear[0] || shear[1] != vi.shear[1] ||
        shear[2] != vi.shear[2])
    {
        return false;
    }

hrchilds's avatar
hrchilds committed
200 201
    if (viewAngle != vi.viewAngle || parallelScale != vi.parallelScale ||
        nearPlane != vi.nearPlane || farPlane != vi.farPlane ||
hrchilds's avatar
hrchilds committed
202
        imagePan[0] != vi.imagePan[0] || imagePan[1] != vi.imagePan[1] ||
hrchilds's avatar
hrchilds committed
203
        imageZoom != vi.imageZoom || perspective != vi.perspective ||
hrchilds's avatar
hrchilds committed
204
        eyeAngle != vi.eyeAngle ||
205 206
        centerOfRotationSet != vi.centerOfRotationSet ||
        axis3DScaleFlag != vi.axis3DScaleFlag)
hrchilds's avatar
hrchilds committed
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
    {
        return false;
    }

    return true;
}

// ****************************************************************************
//  Method: avtView3D::SetToDefault
//
//  Purpose:
//    Sets up with default values.
//
//  Programmer:  Eric Brugger
//  Creation:    August 17, 2001
//
//  Modifications:
//    Eric Brugger, Fri Mar 29 15:12:41 PST 2002
//    I changed the default values for the near and far clipping planes
//    since I changed their definition to be the distance from the focus
//    instead of the camera.
//
hrchilds's avatar
hrchilds committed
229 230 231
//    Eric Brugger, Fri Jun  6 15:24:17 PDT 2003
//    I added image pan and image zoom.
//
hrchilds's avatar
hrchilds committed
232 233 234
//    Hank Childs, Wed Oct 15 13:05:33 PDT 2003
//    Added eye angle.
//
hrchilds's avatar
hrchilds committed
235 236 237
//    Eric Brugger, Mon Feb  9 16:02:13 PST 2004
//    Added centerOfRotationSet and centerOfRotation.
//
238 239 240
//    Jeremy Meredith, Wed May 19 14:15:58 EDT 2010
//    Support 3D axis scaling (3D equivalent of full-frame mode).
//
241 242 243
//    Jeremy Meredith, Mon Aug  2 14:23:08 EDT 2010
//    Add shear for oblique projection support.
//
hrchilds's avatar
hrchilds committed
244 245 246 247 248
// ****************************************************************************

void
avtView3D::SetToDefault()
{
hrchilds's avatar
hrchilds committed
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
    normal[0]           = 0.;
    normal[1]           = 0.;
    normal[2]           = 1.;
    focus[0]            = 0.;
    focus[1]            = 0.;
    focus[2]            = 0.;
    viewUp[0]           = 0.;
    viewUp[1]           = 1.;
    viewUp[2]           = 0.;
    viewAngle           = 30.;
    parallelScale       = 0.5;
    nearPlane           = -0.5;
    farPlane            =  0.5;
    imagePan[0]         = 0.;
    imagePan[1]         = 0.;
    imageZoom           = 1.;
    eyeAngle            = 2.0;
    perspective         = false;
    centerOfRotationSet = false;
    centerOfRotation[0] = 0.;
    centerOfRotation[1] = 0.;
    centerOfRotation[2] = 0.;
271 272 273 274
    axis3DScaleFlag     = false;
    axis3DScales[0]     = 1.0;
    axis3DScales[1]     = 1.0;
    axis3DScales[2]     = 1.0;
275 276 277
    shear[0]            = 0.;
    shear[1]            = 0.;
    shear[2]            = 1.;
hrchilds's avatar
hrchilds committed
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
}

// ****************************************************************************
//  Method: avtView3D::SetViewInfoFromView
//
//  Purpose:
//    Set the avtViewInfo, which is used to set the view within avt and
//    ultimately vtk, based on the 3D view.
//
//  Arguments:
//    viewInfo   The avtViewInfo in which to store the 3D view. 
//
//  Programmer:  Eric Brugger
//  Creation:    August 17, 2001
//
//  Modifications:
//    Eric Brugger, Fri Mar 29 15:12:41 PST 2002
//    I changed the definition of the near and far clipping planes to be
//    the distance from the focus instead of the camera.
//
//    Eric Brugger, Tue Apr  2 16:25:51 PST 2002
//    I added code to set a minimum value for the vtk near clipping distance.
//
//    Eric Brugger, Mon Apr 15 12:30:01 PDT 2002
//    I modified the setting of the minimum value for the vtk near clipping
//    distance to be adaptive based on the distance between the avt near and
//    far clipping distances.
//
//    Brad Whitlock, Tue May 7 14:50:54 PST 2002
//    Fixed a bug I introduced when porting to MS Windows.
//
//    Eric Brugger, Wed Jan  8 13:34:01 PST 2003
//    I modified the routine to normalize the normal before using it.
//
hrchilds's avatar
hrchilds committed
312 313 314
//    Eric Brugger, Fri Jun  6 15:24:17 PDT 2003
//    I added image pan and image zoom.
//
hrchilds's avatar
hrchilds committed
315 316 317
//    Hank Childs, Wed Oct 15 13:05:33 PDT 2003
//    Added eye angle.
//
hrchilds's avatar
hrchilds committed
318 319 320
//    Mark C. Miller, Tue Nov 16 17:25:30 PST 2004
//    Added '- distance' to second case in max to compute nearPlane 
//
hrchilds's avatar
hrchilds committed
321 322 323
//    Mark C. Miller, Thu Nov 18 21:25:36 PST 2004
//    Undid previous change. It could result in negative nearPlane values
//
324 325 326
//    Jeremy Meredith, Mon Aug  2 14:23:08 EDT 2010
//    Add shear for oblique projection support.
//
hrchilds's avatar
hrchilds committed
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
// ****************************************************************************

void
avtView3D::SetViewInfoFromView(avtViewInfo &viewInfo) const
{
    double    distance;
    double    normal2[3];

    //
    // Calculate a unit length normal.
    //
    distance = sqrt(normal[0] * normal[0] + normal[1] * normal[1] +
                    normal[2] * normal[2]);
    distance = (distance != 0) ? distance : 1.;
    normal2[0] = normal[0] / distance;
    normal2[1] = normal[1] / distance;
    normal2[2] = normal[2] / distance;

    //
    // The view up vector and focal point are the same.  The distance from the
    // camera to the focal point can be calculated from the parallel scale and
    // view angle.  The camera position is then found by moving along the view
    // plane normal from the focal point by the distance.
    //
    viewInfo.viewUp[0] = viewUp[0];
    viewInfo.viewUp[1] = viewUp[1];
    viewInfo.viewUp[2] = viewUp[2];

    viewInfo.focus[0] = focus[0];
    viewInfo.focus[1] = focus[1];
    viewInfo.focus[2] = focus[2];

hrchilds's avatar
hrchilds committed
359 360
    viewInfo.eyeAngle = eyeAngle;

hrchilds's avatar
hrchilds committed
361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
    distance = parallelScale / tan(viewAngle * 3.1415926535 / 360.);
    viewInfo.camera[0] = focus[0] + normal2[0] * distance;
    viewInfo.camera[1] = focus[1] + normal2[1] * distance;
    viewInfo.camera[2] = focus[2] + normal2[2] * distance;

    //
    // Orthographic is the opposite of perspective, setScale is always true.
    // It forces vtk to use the parallel scale.
    //
    viewInfo.orthographic  = !perspective;
    viewInfo.setScale      = true;
    viewInfo.parallelScale = parallelScale;
    viewInfo.viewAngle     = viewAngle;

    //
    // The minimum near clipping distance must be adaptive to make good use
    // of the zbuffer.  The distance between the near and far planes seemed
    // like a good choice, another possibility could have been the distance
    // between the camera and focus.  The 5000. is a magic number.  The
    // number should be as large as possible.  10000 would probably also
    // work, but 100000 would start showing z buffering artifacts.
    //
hrchilds's avatar
hrchilds committed
383
    viewInfo.nearPlane = max (nearPlane + distance, (farPlane - nearPlane) / 5000.);
hrchilds's avatar
hrchilds committed
384
    viewInfo.farPlane = farPlane + distance;
hrchilds's avatar
hrchilds committed
385 386 387 388

    //
    // Set the image pan and image zoom.
    //
389 390
    viewInfo.imagePan[0] = -imagePan[0];
    viewInfo.imagePan[1] = -imagePan[1];
hrchilds's avatar
hrchilds committed
391
    viewInfo.imageZoom   = imageZoom;
392 393 394 395 396 397 398

    //
    // Set the vew shear.
    //
    viewInfo.shear[0] = shear[0];
    viewInfo.shear[1] = shear[1];
    viewInfo.shear[2] = shear[2];
hrchilds's avatar
hrchilds committed
399
}
hrchilds's avatar
hrchilds committed
400 401

// ****************************************************************************
hrchilds's avatar
hrchilds committed
402
//  Method: avtView3D::SetFromView3DAttributes
hrchilds's avatar
hrchilds committed
403
//
hrchilds's avatar
hrchilds committed
404 405
//  Purpose: 
//    Sets the avtView3D from a View3DAttributes object.
hrchilds's avatar
hrchilds committed
406
//
hrchilds's avatar
hrchilds committed
407 408
//  Arguments:
//    view3DAtts : The View3DAttributes to use.
hrchilds's avatar
hrchilds committed
409
//
hrchilds's avatar
hrchilds committed
410 411
//  Programmer: Brad Whitlock
//  Creation:   Tue Jul 1 14:00:50 PST 2003
hrchilds's avatar
hrchilds committed
412
//
hrchilds's avatar
hrchilds committed
413 414 415
//  Modifications:
//    Eric Brugger, Wed Aug 20 09:39:11 PDT 2003
//    I renamed this routine.
hrchilds's avatar
hrchilds committed
416
//   
hrchilds's avatar
hrchilds committed
417 418 419
//    Hank Childs, Wed Oct 15 13:05:33 PDT 2003
//    Added eye angle.
//
hrchilds's avatar
hrchilds committed
420 421 422
//    Eric Brugger, Mon Feb  9 16:02:13 PST 2004
//    Added centerOfRotationSet and centerOfRotation.
//
423 424 425
//    Jeremy Meredith, Wed May 19 14:15:58 EDT 2010
//    Support 3D axis scaling (3D equivalent of full-frame mode).
//
426 427 428
//    Jeremy Meredith, Mon Aug  2 14:23:08 EDT 2010
//    Add shear for oblique projection support.
//
hrchilds's avatar
hrchilds committed
429 430 431
// ****************************************************************************

void
hrchilds's avatar
hrchilds committed
432
avtView3D::SetFromView3DAttributes(const View3DAttributes *view3DAtts)
hrchilds's avatar
hrchilds committed
433 434 435
{
    for(int i = 0; i < 3; ++i)
    {
hrchilds's avatar
hrchilds committed
436 437 438
        normal[i] = view3DAtts->GetViewNormal()[i];
        focus[i]  = view3DAtts->GetFocus()[i];
        viewUp[i] = view3DAtts->GetViewUp()[i];
hrchilds's avatar
hrchilds committed
439
        centerOfRotation[i] = view3DAtts->GetCenterOfRotation()[i];
440
        axis3DScales[i] = view3DAtts->GetAxis3DScales()[i];
441
        shear[i] = view3DAtts->GetShear()[i];
hrchilds's avatar
hrchilds committed
442 443
    }

hrchilds's avatar
hrchilds committed
444 445 446 447 448 449 450 451
    viewAngle = view3DAtts->GetViewAngle();
    parallelScale = view3DAtts->GetParallelScale();
    nearPlane = view3DAtts->GetNearPlane();
    farPlane = view3DAtts->GetFarPlane();
    imagePan[0] = view3DAtts->GetImagePan()[0];
    imagePan[1] = view3DAtts->GetImagePan()[1];
    imageZoom = view3DAtts->GetImageZoom();
    perspective = view3DAtts->GetPerspective();
hrchilds's avatar
hrchilds committed
452
    eyeAngle = view3DAtts->GetEyeAngle();
hrchilds's avatar
hrchilds committed
453
    centerOfRotationSet = view3DAtts->GetCenterOfRotationSet();
454
    axis3DScaleFlag = view3DAtts->GetAxis3DScaleFlag();
hrchilds's avatar
hrchilds committed
455 456 457
}

// ****************************************************************************
hrchilds's avatar
hrchilds committed
458
//  Method: avtView3D::SetToView3DAttributes
hrchilds's avatar
hrchilds committed
459
//
hrchilds's avatar
hrchilds committed
460 461
//  Purpose: 
//    Sets a View3DAttributes from the avtView3D.
hrchilds's avatar
hrchilds committed
462
//
hrchilds's avatar
hrchilds committed
463 464
//  Arguments:
//    view3DAtts : The View3DAttributes object to set.
hrchilds's avatar
hrchilds committed
465
//
hrchilds's avatar
hrchilds committed
466 467
//  Programmer: Brad Whitlock
//  Creation:   Tue Jul 1 14:01:23 PST 2003
hrchilds's avatar
hrchilds committed
468
//
hrchilds's avatar
hrchilds committed
469 470 471
//  Modifications:
//    Eric Brugger, Wed Aug 20 09:39:11 PDT 2003
//    I renamed this routine.
hrchilds's avatar
hrchilds committed
472
//   
hrchilds's avatar
hrchilds committed
473 474 475
//    Hank Childs, Wed Oct 15 13:05:33 PDT 2003
//    Added eye angle.
//
hrchilds's avatar
hrchilds committed
476 477 478
//    Eric Brugger, Mon Feb  9 16:02:13 PST 2004
//    Added centerOfRotationSet and centerOfRotation.
//
479 480 481
//    Jeremy Meredith, Wed May 19 14:15:58 EDT 2010
//    Support 3D axis scaling (3D equivalent of full-frame mode).
//
482 483 484
//    Jeremy Meredith, Mon Aug  2 14:23:08 EDT 2010
//    Add shear for oblique projection support.
//
hrchilds's avatar
hrchilds committed
485 486 487
// ****************************************************************************

void
hrchilds's avatar
hrchilds committed
488
avtView3D::SetToView3DAttributes(View3DAttributes *view3DAtts) const
hrchilds's avatar
hrchilds committed
489
{
hrchilds's avatar
hrchilds committed
490 491 492 493 494 495 496 497 498 499
    view3DAtts->SetViewNormal(normal);
    view3DAtts->SetFocus(focus);
    view3DAtts->SetViewUp(viewUp);
    view3DAtts->SetViewAngle(viewAngle);
    view3DAtts->SetParallelScale(parallelScale);
    view3DAtts->SetNearPlane(nearPlane);
    view3DAtts->SetFarPlane(farPlane);
    view3DAtts->SetImagePan(imagePan);
    view3DAtts->SetImageZoom(imageZoom);
    view3DAtts->SetPerspective(perspective);
hrchilds's avatar
hrchilds committed
500
    view3DAtts->SetEyeAngle(eyeAngle);
hrchilds's avatar
hrchilds committed
501 502
    view3DAtts->SetCenterOfRotationSet(centerOfRotationSet);
    view3DAtts->SetCenterOfRotation(centerOfRotation);
503 504
    view3DAtts->SetAxis3DScaleFlag(axis3DScaleFlag);
    view3DAtts->SetAxis3DScales(axis3DScales);
505
    view3DAtts->SetShear(shear);
hrchilds's avatar
hrchilds committed
506
}