1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
/*=========================================================================
Program: Image Guided Surgery Software Toolkit
Module: $RCSfile: OneViewAndTracking.cxx,v $
Language: C++
Date: $Date: 2008-11-17 20:13:01 $
Version: $Revision: 1.9 $
Copyright (c) ISC Insight Software Consortium. All rights reserved.
See IGSTKCopyright.txt or http://www.igstk.org/copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#if defined(_MSC_VER)
// Warning about: identifier was truncated to '255' characters
// in the debug information (MVC6.0 Debug)
#pragma warning( disable : 4284 )
#endif
#include "OneViewAndTrackingImplementation.h"
using namespace igstk;
int main(int , char** )
{
/**
* Coordinate systems:
*
* Ellipsoid
* |
* --------------
* | |
* Cylinder Display3D
*
*/
igstk::RealTimeClock::Initialize();
OneViewAndTrackingImplementation application;
application.Show();
// Create the ellipsoid
igstk::EllipsoidObject::Pointer ellipsoid = igstk::EllipsoidObject::New();
ellipsoid->SetRadius(200,200,300); // about a human skull
double validityTimeInMilliseconds = 1e20; // in seconds
igstk::Transform transform;
igstk::Transform::VectorType translation;
translation[0] = 0.0;
translation[1] = 0.0;
translation[2] = 0.0;
igstk::Transform::VersorType rotation;
rotation.Set( 0.0, 0.0, 0.0, 1.0 );
igstk::Transform::ErrorType errorValue = 0.01; // 10 microns
transform.SetTranslationAndRotation(
translation, rotation, errorValue, validityTimeInMilliseconds );
std::cout << "Transform to static ellipsoid = " << transform << std::endl;
// Create the ellipsoid representation
igstk::EllipsoidObjectRepresentation::Pointer
ellipsoidRepresentation = igstk::EllipsoidObjectRepresentation::New();
ellipsoidRepresentation->RequestSetEllipsoidObject( ellipsoid );
ellipsoidRepresentation->SetColor(0.0,1.0,0.0);
ellipsoidRepresentation->SetOpacity(1.0);
// Create the cylinder
igstk::CylinderObject::Pointer cylinder = igstk::CylinderObject::New();
cylinder->SetRadius(1.0);
cylinder->SetHeight(300.0); // about the size of a needle
// Create the cylinder representation
igstk::CylinderObjectRepresentation::Pointer
cylinderRepresentation = igstk::CylinderObjectRepresentation::New();
cylinderRepresentation->RequestSetCylinderObject( cylinder );
cylinderRepresentation->SetColor(1.0,0.0,0.0);
cylinderRepresentation->SetOpacity(1.0);
// Make an identity transform and attach the cylinder to the ellipsoid.
igstk::Transform identity;
identity.SetToIdentity( igstk::TimeStamp::GetLongestPossibleTime() );
cylinder->RequestSetTransformAndParent( identity, ellipsoid );
// Add the ellipsoid representations to the view
application.AddEllipsoid( ellipsoidRepresentation );
application.AddCylinder( cylinderRepresentation );
// Associate the Spatial Object to the tracker
application.AttachObjectToTrack( cylinder );
// View coordinate system is with respect to the ellipsoid.
application.View3D->RequestSetTransformAndParent( identity, ellipsoid );
application.View3D->RequestResetCamera();
application.View3D->SetRefreshRate( 60 ); // 60 Hz
application.Show();
while( !application.HasQuitted() )
{
Fl::wait(0.001);
igstk::PulseGenerator::CheckTimeouts();
}
return EXIT_SUCCESS;
}
|