Index: mitkPointSet.cpp =================================================================== --- mitkPointSet.cpp (revision 21081) +++ mitkPointSet.cpp (working copy) @@ -652,6 +652,8 @@ // Iterate over the PointSets and update the Geometry // information of each of the items. // + mitk::ScalarType nullpoint[]={0,0,0,0,0,0}; + BoundingBox::BoundsArrayType itkBoundsNull(nullpoint); if (m_CalculateBoundingBox) { for ( unsigned int i = 0 ; i < m_PointSetSeries.size() ; ++i ) @@ -659,17 +661,23 @@ const DataType::BoundingBoxType *bb = m_PointSetSeries[i]->GetBoundingBox(); BoundingBox::BoundsArrayType itkBounds = bb->GetBounds(); - // Ensure minimal bounds of 1.0 in each dimension - for ( unsigned int j = 0; j < 3; ++j ) - { - if ( itkBounds[j*2+1] - itkBounds[j*2] < 1.0 ) + // If there are no points, the bounding box cannot be (-0.5, 0.5) because + // this will affect all the TimePoints + if ( m_PointSetSeries[i]->GetNumberOfPoints() && + itkBounds != itkBoundsNull ) + { + // Ensure minimal bounds of 1.0 in each dimension + for ( unsigned int j = 0; j < 3; ++j ) { - BoundingBox::CoordRepType center = - (itkBounds[j*2] + itkBounds[j*2+1]) / 2.0; - itkBounds[j*2] = center - 0.5; - itkBounds[j*2+1] = center + 0.5; + if ( itkBounds[j*2+1] - itkBounds[j*2] < 1.0 ) + { + BoundingBox::CoordRepType center = + (itkBounds[j*2] + itkBounds[j*2+1]) / 2.0; + itkBounds[j*2] = center - 0.5; + itkBounds[j*2+1] = center + 0.5; + } } - } + } this->GetGeometry(i)->SetBounds(itkBounds); } m_CalculateBoundingBox = false; Index: mitkDataTree.cpp =================================================================== --- mitkDataTree.cpp (revision 21081) +++ mitkDataTree.cpp (working copy) @@ -108,18 +108,27 @@ const Geometry3D* geometry = node->GetData()->GetUpdatedTimeSlicedGeometry(); if (geometry != NULL ) { - // bounding box - unsigned char i; - for(i=0; i<8; ++i) - { - point = geometry->GetCornerPoint(i); - if(point[0]*point[0]+point[1]*point[1]+point[2]*point[2] < large) - pointscontainer->InsertElement( pointid++, point); - else + // Check if the bounding box is null + mitk::ScalarType nullpoint[]={0,0,0,0,0,0}; + BoundingBox::BoundsArrayType itkBoundsNull(nullpoint); + const Geometry3D::BoundingBoxType *bb = geometry->GetBoundingBox(); + BoundingBox::BoundsArrayType itkBounds = bb->GetBounds(); + + // bounding box + if ( itkBounds != itkBoundsNull ) + { + unsigned char i; + for(i=0; i<8; ++i) { - itkGenericOutputMacro( << "Unrealistically distant corner point encountered. Ignored. Node: " << node ); + point = geometry->GetCornerPoint(i); + if(point[0]*point[0]+point[1]*point[1]+point[2]*point[2] < large) + pointscontainer->InsertElement( pointid++, point); + else + { + itkGenericOutputMacro( << "Unrealistically distant corner point encountered. Ignored. Node: " << node ); + } } - } + } // spacing try { Index: mitkTimeSlicedGeometry.cpp =================================================================== --- mitkTimeSlicedGeometry.cpp (revision 21081) +++ mitkTimeSlicedGeometry.cpp (working copy) @@ -63,13 +63,24 @@ const mitk::BoundingBox::PointsContainer * nextPoints = nextBoundingBox->GetPoints(); if(nextPoints!=NULL) { + // Check if all points of bounding box are == 0 + bool bValid = false; mitk::BoundingBox::PointsContainer::ConstIterator pointsIt = nextPoints->Begin(); - while (pointsIt != nextPoints->End() ) { - pointscontainer->InsertElement( pointid++, pointsIt->Value()); + bValid |= pointsIt->Value() != p; ++pointsIt; } + + if ( bValid ) + { + mitk::BoundingBox::PointsContainer::ConstIterator pointsIt = nextPoints->Begin(); + while (pointsIt != nextPoints->End() ) + { + pointscontainer->InsertElement( pointid++, pointsIt->Value()); + ++pointsIt; + } + } } } Index: mitkDataStorage.cpp =================================================================== --- mitkDataStorage.cpp (revision 21081) +++ mitkDataStorage.cpp (working copy) @@ -275,18 +275,28 @@ const TimeSlicedGeometry* geometry = node->GetData()->GetUpdatedTimeSlicedGeometry(); if (geometry != NULL ) { + // Check if the bounding box is null + mitk::ScalarType nullpoint[]={0,0,0,0,0,0}; + BoundingBox::BoundsArrayType itkBoundsNull(nullpoint); + const Geometry3D::BoundingBoxType *bb = geometry->GetBoundingBox(); + BoundingBox::BoundsArrayType itkBounds = bb->GetBounds(); + // bounding box - unsigned char i; - for(i=0; i<8; ++i) + if ( itkBounds != itkBoundsNull ) { - point = geometry->GetCornerPoint(i); - if(point[0]*point[0]+point[1]*point[1]+point[2]*point[2] < large) - pointscontainer->InsertElement( pointid++, point); - else + unsigned char i; + for(i=0; i<8; ++i) { - itkGenericOutputMacro( << "Unrealistically distant corner point encountered. Ignored. Node: " << node ); + point = geometry->GetCornerPoint(i); + if(point[0]*point[0]+point[1]*point[1]+point[2]*point[2] < large) + pointscontainer->InsertElement( pointid++, point); + else + { + itkGenericOutputMacro( << "Unrealistically distant corner point encountered. Ignored. Node: " << node ); + } } - } + } + // spacing try {