You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
4.9 KiB
157 lines
4.9 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkStructuredVisibilityConstraint.h,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/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 notice for more information.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkStructuredVisibilityConstraint - helper object to manage the
|
|
// visibility of points and cells
|
|
// .SECTION Description
|
|
// vtkStructuredVisibilityConstraint is a general class to manage
|
|
// a list of points/cell marked as invalid or invisible. Currently,
|
|
// it does this by maintaining an unsigned char array associated
|
|
// with points/cells. To conserve memory, this array is allocated
|
|
// only when it is needed (when Blank() is called the first time).
|
|
// Make sure to call Initialize() with the right dimensions before
|
|
// calling any methods that set/get visibility.
|
|
|
|
#ifndef __vtkStructuredVisibilityConstraint_h
|
|
#define __vtkStructuredVisibilityConstraint_h
|
|
|
|
#include "vtkObject.h"
|
|
|
|
#include "vtkUnsignedCharArray.h" // Needed for inline methods.
|
|
|
|
class VTK_COMMON_EXPORT vtkStructuredVisibilityConstraint : public vtkObject
|
|
{
|
|
public:
|
|
static vtkStructuredVisibilityConstraint *New();
|
|
|
|
vtkTypeRevisionMacro(vtkStructuredVisibilityConstraint,vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Returns 1 is the point/cell is visible, 0 otherwise.
|
|
unsigned char IsVisible(vtkIdType id);
|
|
|
|
// Description:
|
|
// Sets the visibility flag of the given point/cell off.
|
|
// The first time blank is called, a new visibility array
|
|
// is created if it doesn't exist.
|
|
void Blank(vtkIdType id);
|
|
|
|
// Description:
|
|
// Sets the visibility flag of the given point/cell on.
|
|
void UnBlank(vtkIdType id);
|
|
|
|
// Description:
|
|
// Get the dimensions used to initialize the object.
|
|
vtkGetVectorMacro(Dimensions,int,3);
|
|
|
|
// Description:
|
|
// Set the dimensions and set the Initialized flag to 1. Once
|
|
// an object is initialized, it's dimensions can not be
|
|
// changed anymore.
|
|
void Initialize(int dims[3]);
|
|
|
|
// Description:
|
|
// Set/Get the array used to store the visibility flags.
|
|
void SetVisibilityById(vtkUnsignedCharArray* vis);
|
|
vtkGetObjectMacro(VisibilityById, vtkUnsignedCharArray);
|
|
|
|
// Description:
|
|
// Copies the dimensions, the visibility array pointer
|
|
// and the initialized flag.
|
|
void ShallowCopy(vtkStructuredVisibilityConstraint* src);
|
|
|
|
// Description:
|
|
// Copies the dimensions, the visibility array
|
|
// and the initialized flag.
|
|
void DeepCopy(vtkStructuredVisibilityConstraint* src);
|
|
|
|
// Description:
|
|
// Returns 0 if there is no visibility array (all cells/points
|
|
// are visibile), 0 otherwise.
|
|
unsigned char IsConstrained()
|
|
{
|
|
return this->VisibilityById ? 1 : 0;
|
|
}
|
|
|
|
protected:
|
|
vtkStructuredVisibilityConstraint();
|
|
~vtkStructuredVisibilityConstraint();
|
|
|
|
vtkUnsignedCharArray* VisibilityById;
|
|
int Dimensions[3];
|
|
vtkIdType NumberOfIds;
|
|
unsigned char Initialized;
|
|
|
|
private:
|
|
vtkStructuredVisibilityConstraint(const vtkStructuredVisibilityConstraint&); // Not implemented.
|
|
void operator=(const vtkStructuredVisibilityConstraint&); // Not implemented.
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
// These methods are inline for efficiency.
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline unsigned char vtkStructuredVisibilityConstraint::IsVisible(
|
|
vtkIdType id)
|
|
{
|
|
vtkUnsignedCharArray* vis = this->VisibilityById;
|
|
return vis ? vis->GetValue(id) : 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline void vtkStructuredVisibilityConstraint::Blank(vtkIdType id)
|
|
{
|
|
vtkUnsignedCharArray* vis = this->VisibilityById;
|
|
if (!vis)
|
|
{
|
|
this->VisibilityById = vtkUnsignedCharArray::New();
|
|
vis = this->VisibilityById;
|
|
this->VisibilityById->Allocate(this->NumberOfIds);
|
|
for (int i=0; i<this->NumberOfIds; ++i)
|
|
{
|
|
this->VisibilityById->SetValue(i, 1);
|
|
}
|
|
}
|
|
vis->SetValue(id, 0);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline void vtkStructuredVisibilityConstraint::UnBlank(vtkIdType id)
|
|
{
|
|
vtkUnsignedCharArray* vis = this->VisibilityById;
|
|
if (!vis)
|
|
{
|
|
return;
|
|
}
|
|
vis->SetValue(id, 1);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
inline void vtkStructuredVisibilityConstraint::Initialize(int dims[3])
|
|
{
|
|
if (this->Initialized)
|
|
{
|
|
return;
|
|
}
|
|
for (int i=0; i<3; i++)
|
|
{
|
|
this->Dimensions[i] = dims[i];
|
|
}
|
|
this->NumberOfIds = dims[0]*dims[1]*dims[2];
|
|
this->Initialized = 1;
|
|
}
|
|
|
|
|
|
#endif
|
|
|