00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00036
#ifndef __vtkDataSetAttributes_h
00037
#define __vtkDataSetAttributes_h
00038
00039
#include "vtkFieldData.h"
00040
00041 class VTK_COMMON_EXPORT vtkDataSetAttributes :
public vtkFieldData
00042 {
00043
public:
00045
static vtkDataSetAttributes *
New();
00046
00047 vtkTypeRevisionMacro(vtkDataSetAttributes,
vtkFieldData);
00048
void PrintSelf(ostream& os,
vtkIndent indent);
00049
00052
virtual void Initialize();
00053
00056 virtual void Update() {}
00057
00064
virtual void PassData(
vtkFieldData* fd);
00065
00067
00074
void CopyAllocate(vtkDataSetAttributes* pd,
vtkIdType sze=0,
00075
vtkIdType ext=1000);
00077
00085
void CopyData(vtkDataSetAttributes *fromPd,
vtkIdType fromId,
vtkIdType toId);
00086
00088
00091
void InterpolateAllocate(vtkDataSetAttributes* pd,
vtkIdType sze=0,
00092
vtkIdType ext=1000);
00094
00096
00100
void CopyStructuredData(vtkDataSetAttributes *inDsa,
00101
const int *inExt,
const int *outExt);
00103
00105
00107
void InterpolatePoint(vtkDataSetAttributes *fromPd,
vtkIdType toId,
00108
vtkIdList *ids,
float *weights);
00110
00112
00116
void InterpolateEdge(vtkDataSetAttributes *fromPd,
vtkIdType toId,
00117
vtkIdType p1,
vtkIdType p2,
float t);
00119
00121
00128
void InterpolateTime(vtkDataSetAttributes *from1,
00129 vtkDataSetAttributes *from2,
00130
vtkIdType id,
float t);
00132
00135
virtual void DeepCopy(
vtkFieldData *pd);
00136
00138
virtual void ShallowCopy(
vtkFieldData *pd);
00139
00141
00142
int SetScalars(
vtkDataArray* da);
00143
int SetActiveScalars(
const char* name);
00144
vtkDataArray* GetScalars();
00146
00148
00149
int SetVectors(
vtkDataArray* da);
00150
int SetActiveVectors(
const char* name);
00151
vtkDataArray* GetVectors();
00153
00155
00156
int SetNormals(
vtkDataArray* da);
00157
int SetActiveNormals(
const char* name);
00158
vtkDataArray* GetNormals();
00160
00162
00163
int SetTCoords(
vtkDataArray* da);
00164
int SetActiveTCoords(
const char* name);
00165
vtkDataArray* GetTCoords();
00167
00169
00170
int SetTensors(
vtkDataArray* da);
00171
int SetActiveTensors(
const char* name);
00172
vtkDataArray* GetTensors();
00174
00176
00179
vtkDataArray* GetScalars(
const char* name);
00180
vtkDataArray* GetVectors(
const char* name);
00181
vtkDataArray* GetNormals(
const char* name);
00182
vtkDataArray* GetTCoords(
const char* name);
00183
vtkDataArray* GetTensors(
const char* name);
00185
00192
int SetActiveAttribute(
const char* name,
int attributeType);
00193
00195
int SetActiveAttribute(
int index,
int attributeType);
00196
00198
void SetCopyAttribute (
int index,
int value);
00199
00201
00207
void SetCopyScalars(
int i);
00208
int GetCopyScalars();
00209 vtkBooleanMacro(CopyScalars,
int);
00211
00213
00219
void SetCopyVectors(
int i);
00220
int GetCopyVectors();
00221 vtkBooleanMacro(CopyVectors,
int);
00223
00225
00231
void SetCopyNormals(
int i);
00232
int GetCopyNormals();
00233 vtkBooleanMacro(CopyNormals,
int);
00235
00237
00243
void SetCopyTCoords(
int i);
00244
int GetCopyTCoords();
00245 vtkBooleanMacro(CopyTCoords,
int);
00247
00249
00255
void SetCopyTensors(
int i);
00256
int GetCopyTensors();
00257 vtkBooleanMacro(CopyTensors,
int);
00259
00266
virtual void CopyAllOn();
00267
00274
virtual void CopyAllOff();
00275
00277
00281
void CopyTuple(
vtkDataArray *fromData,
vtkDataArray *toData,
00282
vtkIdType fromId,
vtkIdType toId);
00284
00287
void GetAttributeIndices(
int* indexArray);
00288
00293
int IsArrayAnAttribute(
int idx);
00294
00297
vtkDataArray* GetAttribute(
int attributeType);
00298
00300
virtual void RemoveArray(
const char *name);
00301
00304
static const char* GetAttributeTypeAsString(
int attributeType);
00305
00306
00307
00308 enum AttributeTypes
00309 {
00310 SCALARS=0,
00311 VECTORS=1,
00312 NORMALS=2,
00313 TCOORDS=3,
00314 TENSORS=4,
00315 NUM_ATTRIBUTES
00316 };
00317
00318 enum AttributeLimitTypes
00319 {
00320 MAX,
00321 EXACT,
00322 NOLIMIT
00323 };
00324
00325
class FieldList;
00326
00328
00330
void CopyAllocate(
vtkDataSetAttributes::FieldList& list,
vtkIdType sze=0,
00331
vtkIdType ext=1000);
00333
00335
00339
void CopyData(
vtkDataSetAttributes::FieldList& list,
00340 vtkDataSetAttributes* dsa,
int idx,
vtkIdType fromId,
00341
vtkIdType toId);
00343
00344
friend class vtkDataSetAttributes::FieldList;
00345
00346
00347
protected:
00348 vtkDataSetAttributes();
00349 ~vtkDataSetAttributes();
00350
00351
00352
void InterpolateTuple(
vtkDataArray *fromData,
vtkDataArray *toData,
00353
vtkIdType toId,
vtkIdList *ptIds,
float *weights);
00354
void InterpolateTuple(
vtkDataArray *fromData,
vtkDataArray *toData,
00355
vtkIdType toId,
vtkIdType id1,
vtkIdType id2,
float t);
00356
void InterpolateTuple(
vtkDataArray *fromData1,
vtkDataArray *fromData2,
00357
vtkDataArray *toData,
vtkIdType id,
float t);
00358
00360
virtual void InitializeFields();
00361
00362 int AttributeIndices[NUM_ATTRIBUTES];
00363 int CopyAttributeFlags[NUM_ATTRIBUTES];
00364
00365
00366 vtkFieldData::BasicIterator RequiredArrays;
00367
00368
00369 int* TargetIndices;
00370
00371
virtual void RemoveArray(
int index);
00372
00373 static const int NumberOfAttributeComponents[NUM_ATTRIBUTES];
00374 static const int AttributeLimits[NUM_ATTRIBUTES];
00375 static const char AttributeNames[NUM_ATTRIBUTES][10];
00376
00377
private:
00378
int SetAttribute(
vtkDataArray* da,
int attributeType);
00379
static int CheckNumberOfComponents(
vtkDataArray* da,
int attributeType);
00380
00381
00382
vtkFieldData::BasicIterator ComputeRequiredArrays(vtkDataSetAttributes* pd);
00383
00384
private:
00385 vtkDataSetAttributes(
const vtkDataSetAttributes&);
00386
void operator=(
const vtkDataSetAttributes&);
00387
00388
public:
00389
00390
00391
00392 class VTK_COMMON_EXPORT FieldList
00393 {
00394
public:
00395 FieldList(
int numInputs);
00396 ~FieldList();
00397
00398
void InitializeFieldList(vtkDataSetAttributes* dsa);
00399
void IntersectFieldList(vtkDataSetAttributes* dsa);
00400
00401
00402
int IsAttributePresent(
int attrType);
00403
00404
00405 int GetNumberOfFields() {
return this->NumberOfFields; }
00406 int GetFieldIndex(
int i) {
return this->FieldIndices[i]; }
00407 int GetDSAIndex(
int index,
int i) {
return this->DSAIndices[index][i]; }
00408
00409
friend class vtkDataSetAttributes;
00410
00411
protected:
00412 FieldList(
const FieldList&) {}
00413 void operator=(
const FieldList&) {}
00414
00415
private:
00416
void SetField(
int index,
vtkDataArray *da);
00417
void RemoveField(
const char *name);
00418
void ClearFields();
00419
00420
00421
char** Fields;
00422
int *FieldTypes;
00423
00424
int *FieldComponents;
00425
00426
int *FieldIndices;
00427
00428
vtkLookupTable **LUT;
00429
vtkIdType NumberOfTuples;
00430
int NumberOfFields;
00431
00432
00433
00434
00435
00436
00437
int **DSAIndices;
00438
int NumberOfDSAIndices;
00439
int CurrentInput;
00440 };
00441
00442
00443 };
00444
00445
#endif
00446
00447