Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkCylinder.h"
00020 #include "vtkLinearTransform.h"
00021 #include "mitkVector.h"
00022 #include "vtkCylinderSource.h"
00023
00024
00025 mitk::Cylinder::Cylinder()
00026 : BoundingObject()
00027 {
00028 vtkCylinderSource* cylinder = vtkCylinderSource::New();
00029 cylinder->SetRadius(1.0);
00030 cylinder->SetHeight(2.0);
00031 cylinder->SetCenter(0.0, 0.0, 0.0);
00032 cylinder->SetResolution(20);
00033 cylinder->CappingOn();
00034 cylinder->Update();
00035 SetVtkPolyData(cylinder->GetOutput());
00036 cylinder->Delete();
00037 }
00038
00039
00040 mitk::Cylinder::~Cylinder()
00041 {
00042 }
00043
00044
00045 bool mitk::Cylinder::IsInside(const Point3D& worldPoint) const
00046 {
00047
00048 ScalarType p[4];
00049 p[0] = worldPoint[0];
00050 p[1] = worldPoint[1];
00051 p[2] = worldPoint[2];
00052 p[3] = 1;
00053
00054 GetGeometry()->GetVtkTransform()->GetInverse()->TransformPoint(p, p);
00055
00056 mitk::ScalarType v = pow(p[0], 2) + pow(p[2], 2);
00057 bool retval = (v <= 1) && (p[1] >= -1) && (p[1] <= 1);
00058 return retval;
00059 }
00060
00061
00062 mitk::ScalarType mitk::Cylinder::GetVolume()
00063 {
00064 Geometry3D* geometry = GetTimeSlicedGeometry();
00065 return geometry->GetExtentInMM(0) * 0.5
00066 * geometry->GetExtentInMM(2) * 0.5
00067 * vnl_math::pi
00068 * geometry->GetExtentInMM(1);
00069 }