VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkDataSetAttributes.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00049 #ifndef __vtkDataSetAttributes_h 00050 #define __vtkDataSetAttributes_h 00051 00052 #include "vtkFieldData.h" 00053 00054 class vtkLookupTable; 00055 00056 class VTK_FILTERING_EXPORT vtkDataSetAttributes : public vtkFieldData 00057 { 00058 public: 00060 static vtkDataSetAttributes *New(); 00061 00062 vtkTypeMacro(vtkDataSetAttributes,vtkFieldData); 00063 void PrintSelf(ostream& os, vtkIndent indent); 00064 00067 virtual void Initialize(); 00068 00071 virtual void Update() {} 00072 00073 // -- shallow and deep copy ----------------------------------------------- 00074 00077 virtual void DeepCopy(vtkFieldData *pd); 00078 00081 virtual void ShallowCopy(vtkFieldData *pd); 00082 00083 // -- attribute types ----------------------------------------------------- 00084 //BTX 00085 // Always keep NUM_ATTRIBUTES as the last entry 00086 enum AttributeTypes 00087 { 00088 SCALARS=0, 00089 VECTORS=1, 00090 NORMALS=2, 00091 TCOORDS=3, 00092 TENSORS=4, 00093 GLOBALIDS=5, 00094 PEDIGREEIDS=6, 00095 NUM_ATTRIBUTES 00096 }; 00097 00098 enum AttributeLimitTypes 00099 { 00100 MAX, 00101 EXACT, 00102 NOLIMIT 00103 }; 00104 //ETX 00105 00107 00108 int SetScalars(vtkDataArray* da); 00109 int SetActiveScalars(const char* name); 00110 vtkDataArray* GetScalars(); 00112 00114 00115 int SetVectors(vtkDataArray* da); 00116 int SetActiveVectors(const char* name); 00117 vtkDataArray* GetVectors(); 00119 00121 00122 int SetNormals(vtkDataArray* da); 00123 int SetActiveNormals(const char* name); 00124 vtkDataArray* GetNormals(); 00126 00128 00129 int SetTCoords(vtkDataArray* da); 00130 int SetActiveTCoords(const char* name); 00131 vtkDataArray* GetTCoords(); 00133 00135 00136 int SetTensors(vtkDataArray* da); 00137 int SetActiveTensors(const char* name); 00138 vtkDataArray* GetTensors(); 00140 00142 00143 int SetGlobalIds(vtkDataArray* da); 00144 int SetActiveGlobalIds(const char* name); 00145 vtkDataArray* GetGlobalIds(); 00147 00149 00150 int SetPedigreeIds(vtkAbstractArray* da); 00151 int SetActivePedigreeIds(const char* name); 00152 vtkAbstractArray* GetPedigreeIds(); 00154 00156 00159 vtkDataArray* GetScalars(const char* name); 00160 vtkDataArray* GetVectors(const char* name); 00161 vtkDataArray* GetNormals(const char* name); 00162 vtkDataArray* GetTCoords(const char* name); 00163 vtkDataArray* GetTensors(const char* name); 00164 vtkDataArray* GetGlobalIds(const char* name); 00165 vtkAbstractArray* GetPedigreeIds(const char* name); 00167 00175 int SetActiveAttribute(const char* name, int attributeType); 00176 00178 int SetActiveAttribute(int index, int attributeType); 00179 00182 void GetAttributeIndices(int* indexArray); 00183 00188 int IsArrayAnAttribute(int idx); 00189 00194 vtkDataArray* GetAttribute(int attributeType); 00195 00201 vtkAbstractArray* GetAbstractAttribute(int attributeType); 00202 00204 virtual void RemoveArray(const char *name); 00205 00207 00209 static const char* GetAttributeTypeAsString(int attributeType); 00210 static const char* GetLongAttributeTypeAsString(int attributeType); 00212 00213 // -- attribute copy properties ------------------------------------------ 00214 00215 //BTX 00216 enum AttributeCopyOperations 00217 { 00218 COPYTUPLE=0, 00219 INTERPOLATE=1, 00220 PASSDATA=2, 00221 ALLCOPY //all of the above 00222 }; 00223 //ETX 00224 00229 void SetCopyAttribute (int index, int value, int ctype=ALLCOPY); 00230 00232 00243 void SetCopyScalars(int i, int ctype=ALLCOPY); 00244 int GetCopyScalars(int ctype=ALLCOPY); 00245 vtkBooleanMacro(CopyScalars, int); 00247 00249 00260 void SetCopyVectors(int i, int ctype=ALLCOPY); 00261 int GetCopyVectors(int ctype=ALLCOPY); 00262 vtkBooleanMacro(CopyVectors, int); 00264 00266 00277 void SetCopyNormals(int i, int ctype=ALLCOPY); 00278 int GetCopyNormals(int ctype=ALLCOPY); 00279 vtkBooleanMacro(CopyNormals, int); 00281 00283 00294 void SetCopyTCoords(int i, int ctype=ALLCOPY); 00295 int GetCopyTCoords(int ctype=ALLCOPY); 00296 vtkBooleanMacro(CopyTCoords, int); 00298 00300 00311 void SetCopyTensors(int i, int ctype=ALLCOPY); 00312 int GetCopyTensors(int ctype=ALLCOPY); 00313 vtkBooleanMacro(CopyTensors, int); 00315 00317 00328 void SetCopyGlobalIds(int i, int ctype=ALLCOPY); 00329 int GetCopyGlobalIds(int ctype=ALLCOPY); 00330 vtkBooleanMacro(CopyGlobalIds, int); 00332 00334 00345 void SetCopyPedigreeIds(int i, int ctype=ALLCOPY); 00346 int GetCopyPedigreeIds(int ctype=ALLCOPY); 00347 vtkBooleanMacro(CopyPedigreeIds, int); 00349 00361 virtual void CopyAllOn(int ctype=ALLCOPY); 00362 00374 virtual void CopyAllOff(int ctype=ALLCOPY); 00375 00376 // -- passthrough operations ---------------------------------------------- 00377 00385 virtual void PassData(vtkFieldData* fd); 00386 00387 // -- copytuple operations ------------------------------------------------ 00388 00390 00398 void CopyAllocate(vtkDataSetAttributes* pd, vtkIdType sze=0, 00399 vtkIdType ext=1000) 00400 { 00401 this->CopyAllocate(pd, sze, ext, 0); 00402 } 00403 void CopyAllocate(vtkDataSetAttributes* pd, vtkIdType sze, 00404 vtkIdType ext, int shallowCopyArrays); 00406 00408 00410 void CopyStructuredData(vtkDataSetAttributes *inDsa, 00411 const int *inExt, const int *outExt); 00413 00421 void CopyData(vtkDataSetAttributes *fromPd, vtkIdType fromId, vtkIdType toId); 00422 00423 00425 00429 void CopyTuple(vtkAbstractArray *fromData, vtkAbstractArray *toData, 00430 vtkIdType fromId, vtkIdType toId); 00432 00433 00434 // -- interpolate operations ---------------------------------------------- 00435 00437 00442 void InterpolateAllocate(vtkDataSetAttributes* pd, vtkIdType sze=0, 00443 vtkIdType ext=1000) 00444 { 00445 this->InterpolateAllocate(pd, sze, ext, 0); 00446 } 00447 void InterpolateAllocate(vtkDataSetAttributes* pd, vtkIdType sze, 00448 vtkIdType ext, int shallowCopyArrays); 00450 00452 00457 void InterpolatePoint(vtkDataSetAttributes *fromPd, vtkIdType toId, 00458 vtkIdList *ids, double *weights); 00460 00462 00469 void InterpolateEdge(vtkDataSetAttributes *fromPd, vtkIdType toId, 00470 vtkIdType p1, vtkIdType p2, double t); 00472 00474 00484 void InterpolateTime(vtkDataSetAttributes *from1, 00485 vtkDataSetAttributes *from2, 00486 vtkIdType id, double t); 00488 00489 //BTX 00490 class FieldList; 00491 00492 // field list copy operations ------------------------------------------ 00493 00495 00497 void CopyAllocate(vtkDataSetAttributes::FieldList& list, vtkIdType sze=0, 00498 vtkIdType ext=1000); 00500 00502 00506 void CopyData(vtkDataSetAttributes::FieldList& list, 00507 vtkDataSetAttributes* dsa, int idx, vtkIdType fromId, 00508 vtkIdType toId); 00510 00512 00517 void InterpolateAllocate(vtkDataSetAttributes::FieldList& list, vtkIdType sze=0, 00518 vtkIdType ext=1000); 00520 00522 00526 void InterpolatePoint( 00527 vtkDataSetAttributes::FieldList& list, 00528 vtkDataSetAttributes *fromPd, 00529 int idx, vtkIdType toId, 00530 vtkIdList *ids, double *weights); 00532 00533 friend class vtkDataSetAttributes::FieldList; 00534 //ETX 00535 00536 //BTX 00537 protected: 00538 vtkDataSetAttributes(); 00539 ~vtkDataSetAttributes(); 00540 00541 void InternalCopyAllocate(vtkDataSetAttributes* pd, 00542 int ctype, 00543 vtkIdType sze=0, 00544 vtkIdType ext=1000, 00545 int shallowCopyArrays=0); 00546 00547 void InternalCopyAllocate( 00548 vtkDataSetAttributes::FieldList& list, 00549 int ctype, 00550 vtkIdType sze, vtkIdType ext); 00551 00553 virtual void InitializeFields(); 00554 00555 int AttributeIndices[NUM_ATTRIBUTES]; //index to attribute array in field data 00556 int CopyAttributeFlags[ALLCOPY][NUM_ATTRIBUTES]; //copy flag for attribute data 00557 00558 vtkFieldData::BasicIterator RequiredArrays; 00559 00560 int* TargetIndices; 00561 00562 virtual void RemoveArray(int index); 00563 00564 static const int NumberOfAttributeComponents[NUM_ATTRIBUTES]; 00565 static const int AttributeLimits[NUM_ATTRIBUTES]; 00566 static const char AttributeNames[NUM_ATTRIBUTES][12]; 00567 static const char LongAttributeNames[NUM_ATTRIBUTES][35]; 00568 00569 private: 00570 int SetAttribute(vtkAbstractArray* da, int attributeType); 00571 static int CheckNumberOfComponents(vtkAbstractArray* da, int attributeType); 00572 00573 vtkFieldData::BasicIterator ComputeRequiredArrays(vtkDataSetAttributes* pd, int ctype); 00574 00575 private: 00576 vtkDataSetAttributes(const vtkDataSetAttributes&); // Not implemented. 00577 void operator=(const vtkDataSetAttributes&); // Not implemented. 00578 00579 public: 00580 // This public class is used to perform set operations, other misc. 00581 // operations on fields. For example, vtkAppendFilter uses it to 00582 // determine which attributes the input datasets share in common. 00583 class VTK_FILTERING_EXPORT FieldList 00584 { 00585 public: 00586 FieldList(int numInputs); 00587 ~FieldList(); 00588 void PrintSelf(ostream &os, vtkIndent indent); 00589 00590 void InitializeFieldList(vtkDataSetAttributes* dsa); 00591 void IntersectFieldList(vtkDataSetAttributes* dsa); 00592 00597 void UnionFieldList(vtkDataSetAttributes* dsa); 00598 00599 //Determine whether data is available 00600 int IsAttributePresent(int attrType); //true/false attributes specified 00601 00602 // Accessor methods. 00603 int GetNumberOfFields() { return this->NumberOfFields; } 00604 int GetFieldIndex(int i) { return this->FieldIndices[i]; } 00605 const char* GetFieldName(int i) { return this->Fields[i]; } 00606 int GetFieldComponents(int i) { return this->FieldComponents[i]; } 00607 int GetDSAIndex(int index, int i) { return this->DSAIndices[index][i]; } 00608 00609 friend class vtkDataSetAttributes; 00610 00611 protected: 00612 FieldList(const FieldList&) {} //prevent these methods from being used 00613 void operator=(const FieldList&) {} 00614 00615 void SetFieldIndex(int i, int index) 00616 { this->FieldIndices[i] = index; } 00617 private: 00618 void SetField(int index, vtkAbstractArray *da); 00619 void RemoveField(const char *name); 00620 void ClearFields(); 00621 void GrowBy(unsigned int delta); 00622 00623 int NumberOfFields; //the number of fields (including five named attributes) 00624 // These keep track of what is common across datasets. The first 00625 // five items are always named attributes. 00626 char** Fields; // the names of the fields 00627 int *FieldTypes; // the types of the fields 00628 int *FieldComponents; // the number of components in field 00629 int *FieldIndices; // output data array index 00630 vtkLookupTable **LUT; // luts associated with each array 00631 vtkInformation **FieldInformation; // Information map associated with each array 00632 00633 vtkIdType NumberOfTuples; // a running total of values 00634 00635 //For every vtkDataSetAttributes that are processed, keep track of the 00636 //indices into various things. The indices are organized so that the 00637 //first NUM_ATTRIBUTES refer to attributes, the next refer to the 00638 //non-attribute fields, for a total of NUM_ATTRIBUTES + NumberOfFields. 00639 //CurrentInput is the current input being processed. 00640 int **DSAIndices; 00641 int NumberOfDSAIndices; 00642 int CurrentInput; 00643 }; 00644 00645 //ETX 00646 }; 00647 00648 #endif 00649 00650