00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00032
#ifndef __vtkDataSetAttributes_h
00033
#define __vtkDataSetAttributes_h
00034
00035
#include "vtkFieldData.h"
00036
00037 class VTK_COMMON_EXPORT vtkDataSetAttributes :
public vtkFieldData
00038 {
00039
public:
00041
static vtkDataSetAttributes *
New();
00042
00043 vtkTypeRevisionMacro(vtkDataSetAttributes,
vtkFieldData);
00044
void PrintSelf(ostream& os,
vtkIndent indent);
00045
00048
virtual void Initialize();
00049
00052 virtual void Update() {}
00053
00060
virtual void PassData(
vtkFieldData* fd);
00061
00063
00070
void CopyAllocate(vtkDataSetAttributes* pd,
vtkIdType sze=0,
00071
vtkIdType ext=1000);
00073
00081
void CopyData(vtkDataSetAttributes *fromPd,
vtkIdType fromId,
vtkIdType toId);
00082
00084
00087
void InterpolateAllocate(vtkDataSetAttributes* pd,
vtkIdType sze=0,
00088
vtkIdType ext=1000);
00090
00092
00096
void CopyStructuredData(vtkDataSetAttributes *inDsa,
00097
const int *inExt,
const int *outExt);
00099
00101
00103
void InterpolatePoint(vtkDataSetAttributes *fromPd,
vtkIdType toId,
00104
vtkIdList *ids,
double *weights);
00106
00108
00112
void InterpolateEdge(vtkDataSetAttributes *fromPd,
vtkIdType toId,
00113
vtkIdType p1,
vtkIdType p2,
double t);
00115
00117
00124
void InterpolateTime(vtkDataSetAttributes *from1,
00125 vtkDataSetAttributes *from2,
00126
vtkIdType id,
double t);
00128
00131
virtual void DeepCopy(
vtkFieldData *pd);
00132
00134
virtual void ShallowCopy(
vtkFieldData *pd);
00135
00137
00138
int SetScalars(
vtkDataArray* da);
00139
int SetActiveScalars(
const char* name);
00140
vtkDataArray* GetScalars();
00142
00144
00145
int SetVectors(
vtkDataArray* da);
00146
int SetActiveVectors(
const char* name);
00147
vtkDataArray* GetVectors();
00149
00151
00152
int SetNormals(
vtkDataArray* da);
00153
int SetActiveNormals(
const char* name);
00154
vtkDataArray* GetNormals();
00156
00158
00159
int SetTCoords(
vtkDataArray* da);
00160
int SetActiveTCoords(
const char* name);
00161
vtkDataArray* GetTCoords();
00163
00165
00166
int SetTensors(
vtkDataArray* da);
00167
int SetActiveTensors(
const char* name);
00168
vtkDataArray* GetTensors();
00170
00172
00175
vtkDataArray* GetScalars(
const char* name);
00176
vtkDataArray* GetVectors(
const char* name);
00177
vtkDataArray* GetNormals(
const char* name);
00178
vtkDataArray* GetTCoords(
const char* name);
00179
vtkDataArray* GetTensors(
const char* name);
00181
00188
int SetActiveAttribute(
const char* name,
int attributeType);
00189
00191
int SetActiveAttribute(
int index,
int attributeType);
00192
00194
void SetCopyAttribute (
int index,
int value);
00195
00197
00203
void SetCopyScalars(
int i);
00204
int GetCopyScalars();
00205 vtkBooleanMacro(CopyScalars,
int);
00207
00209
00215
void SetCopyVectors(
int i);
00216
int GetCopyVectors();
00217 vtkBooleanMacro(CopyVectors,
int);
00219
00221
00227
void SetCopyNormals(
int i);
00228
int GetCopyNormals();
00229 vtkBooleanMacro(CopyNormals,
int);
00231
00233
00239
void SetCopyTCoords(
int i);
00240
int GetCopyTCoords();
00241 vtkBooleanMacro(CopyTCoords,
int);
00243
00245
00251
void SetCopyTensors(
int i);
00252
int GetCopyTensors();
00253 vtkBooleanMacro(CopyTensors,
int);
00255
00262
virtual void CopyAllOn();
00263
00270
virtual void CopyAllOff();
00271
00273
00277
void CopyTuple(
vtkDataArray *fromData,
vtkDataArray *toData,
00278
vtkIdType fromId,
vtkIdType toId);
00280
00283
void GetAttributeIndices(
int* indexArray);
00284
00289
int IsArrayAnAttribute(
int idx);
00290
00293
vtkDataArray* GetAttribute(
int attributeType);
00294
00296
virtual void RemoveArray(
const char *name);
00297
00300
static const char* GetAttributeTypeAsString(
int attributeType);
00301
00302
00303
00304 enum AttributeTypes
00305 {
00306 SCALARS=0,
00307 VECTORS=1,
00308 NORMALS=2,
00309 TCOORDS=3,
00310 TENSORS=4,
00311 NUM_ATTRIBUTES
00312 };
00313
00314 enum AttributeLimitTypes
00315 {
00316 MAX,
00317 EXACT,
00318 NOLIMIT
00319 };
00320
00321
class FieldList;
00322
00324
00326
void CopyAllocate(
vtkDataSetAttributes::FieldList& list,
vtkIdType sze=0,
00327
vtkIdType ext=1000);
00329
00331
00335
void CopyData(
vtkDataSetAttributes::FieldList& list,
00336 vtkDataSetAttributes* dsa,
int idx,
vtkIdType fromId,
00337
vtkIdType toId);
00339
00340
friend class vtkDataSetAttributes::FieldList;
00341
00342
00343
protected:
00344 vtkDataSetAttributes();
00345 ~vtkDataSetAttributes();
00346
00347
00348
void InterpolateTuple(
vtkDataArray *fromData,
vtkDataArray *toData,
00349
vtkIdType toId,
vtkIdList *ptIds,
double *weights);
00350
void InterpolateTuple(
vtkDataArray *fromData,
vtkDataArray *toData,
00351
vtkIdType toId,
vtkIdType id1,
vtkIdType id2,
00352
double t);
00353
void InterpolateTuple(
vtkDataArray *fromData1,
vtkDataArray *fromData2,
00354
vtkDataArray *toData,
vtkIdType id,
double t);
00355
00357
virtual void InitializeFields();
00358
00359 int AttributeIndices[NUM_ATTRIBUTES];
00360 int CopyAttributeFlags[NUM_ATTRIBUTES];
00361
00362
00363 vtkFieldData::BasicIterator RequiredArrays;
00364
00365
00366 int* TargetIndices;
00367
00368
virtual void RemoveArray(
int index);
00369
00370 static const int NumberOfAttributeComponents[NUM_ATTRIBUTES];
00371 static const int AttributeLimits[NUM_ATTRIBUTES];
00372 static const char AttributeNames[NUM_ATTRIBUTES][10];
00373
00374
private:
00375
int SetAttribute(
vtkDataArray* da,
int attributeType);
00376
static int CheckNumberOfComponents(
vtkDataArray* da,
int attributeType);
00377
00378
00379
vtkFieldData::BasicIterator ComputeRequiredArrays(vtkDataSetAttributes* pd);
00380
00381
private:
00382 vtkDataSetAttributes(
const vtkDataSetAttributes&);
00383
void operator=(
const vtkDataSetAttributes&);
00384
00385
public:
00386
00387
00388
00389 class VTK_COMMON_EXPORT FieldList
00390 {
00391
public:
00392 FieldList(
int numInputs);
00393 ~FieldList();
00394
00395
void InitializeFieldList(vtkDataSetAttributes* dsa);
00396
void IntersectFieldList(vtkDataSetAttributes* dsa);
00397
00398
00399
int IsAttributePresent(
int attrType);
00400
00401
00402 int GetNumberOfFields() {
return this->NumberOfFields; }
00403 int GetFieldIndex(
int i) {
return this->FieldIndices[i]; }
00404 int GetDSAIndex(
int index,
int i) {
return this->DSAIndices[index][i]; }
00405
00406
friend class vtkDataSetAttributes;
00407
00408
protected:
00409 FieldList(
const FieldList&) {}
00410 void operator=(
const FieldList&) {}
00411
00412
private:
00413
void SetField(
int index,
vtkDataArray *da);
00414
void RemoveField(
const char *name);
00415
void ClearFields();
00416
00417
00418
char** Fields;
00419
int *FieldTypes;
00420
00421
int *FieldComponents;
00422
00423
int *FieldIndices;
00424
00425
vtkLookupTable **LUT;
00426
vtkIdType NumberOfTuples;
00427
int NumberOfFields;
00428
00429
00430
00431
00432
00433
00434
int **DSAIndices;
00435
int NumberOfDSAIndices;
00436
int CurrentInput;
00437 };
00438
00439
00440 };
00441
00442
#endif
00443
00444