00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00074 #ifndef __vtkModelMetadata_h
00075 #define __vtkModelMetadata_h
00076
00077 #include "vtkObject.h"
00078
00079 class vtkDataSet;
00080 class vtkCharArray;
00081 class vtkIdTypeArray;
00082 class vtkIntArray;
00083 class vtkFloatArray;
00084 class vtkIntArray;
00085 class vtkModelMetadataSTLCloak;
00086
00087 class VTK_GRAPHICS_EXPORT vtkModelMetadata : public vtkObject
00088 {
00089 public:
00090 vtkTypeMacro(vtkModelMetadata, vtkObject);
00091 virtual void PrintSelf(ostream &os, vtkIndent indent);
00092 static vtkModelMetadata *New();
00093
00098 virtual void PrintGlobalInformation();
00099
00110 virtual void PrintLocalInformation();
00111
00113
00114 vtkSetStringMacro(Title);
00115 const char *GetTitle() const {return this->Title;}
00117
00119 void SetInformationLines(int numLines, char **lines);
00120
00122 void AddInformationLine(char *info);
00123
00126 int GetInformationLines(char ***lines) const;
00127
00129
00130 int GetNumberOfInformationLines() const {
00131 return this->NumberOfInformationLines;}
00133
00137 void SetQARecords(int numberOfRecords, char *QARecords[][4]);
00138
00142 void AddQARecord(char *name, char *version, char *date, char *time);
00143
00145
00146 void GetQARecord(int which, char **name, char **version,
00147 char **date, char **time) const;
00149
00151 int GetNumberOfQARecords() const {return this->NumberOfQARecords;}
00152
00154
00157 vtkSetMacro(TimeStepIndex, int);
00158 int GetTimeStepIndex() const {return this->TimeStepIndex;}
00160
00162
00165 void SetTimeSteps(int numberOfTimeSteps, float *timeStepValues);
00166 int GetNumberOfTimeSteps() const {return this->NumberOfTimeSteps;}
00168
00170 float *GetTimeStepValues() const {return this->TimeStepValues;}
00171
00173
00174 void SetCoordinateNames(int dimension, char **);
00175 char **GetCoordinateNames() const {return this->CoordinateNames;}
00177
00180 int GetDimension() const {return this->Dimension;}
00181
00183
00185 vtkSetMacro(NumberOfBlocks, int);
00186 int GetNumberOfBlocks() const {return this->NumberOfBlocks;}
00188
00190
00192 void SetBlockIds(int *);
00193 int *GetBlockIds() const {return this->BlockIds;}
00195
00197
00200 void SetBlockElementType(char **);
00201 char **GetBlockElementType() const {return this->BlockElementType;}
00203
00205
00208 int SetBlockNumberOfElements(int *nelts);
00209 int *GetBlockNumberOfElements()const{return this->BlockNumberOfElements;}
00211
00213
00216 void SetBlockNodesPerElement(int *);
00217 int *GetBlockNodesPerElement()const{return this->BlockNodesPerElement;}
00219
00221
00224 void SetBlockElementIdList(int *);
00225 int *GetBlockElementIdList() const {return this->BlockElementIdList;}
00227
00229 int GetSumElementsPerBlock() const {return this->SumElementsPerBlock;}
00230
00233 int *GetBlockElementIdListIndex()const {return this->BlockElementIdListIndex;}
00234
00236
00239 int SetBlockNumberOfAttributesPerElement(int *natts);
00240 int *GetBlockNumberOfAttributesPerElement()const {return this->BlockNumberOfAttributesPerElement;}
00242
00244
00247 void SetBlockAttributes(float *);
00248 float *GetBlockAttributes()const {return this->BlockAttributes;}
00250
00252
00253 int GetSizeBlockAttributeArray() const {
00254 return this->SizeBlockAttributeArray;}
00256
00259 int *GetBlockAttributesIndex() const {return this->BlockAttributesIndex;}
00260
00262
00264 vtkSetMacro(NumberOfNodeSets, int);
00265 int GetNumberOfNodeSets() const {return this->NumberOfNodeSets;}
00267
00269
00272 void SetNodeSetIds(int *);
00273 int *GetNodeSetIds() const {return this->NodeSetIds;}
00275
00277
00280 int SetNodeSetSize(int *);
00281 int *GetNodeSetSize() const {return this->NodeSetSize;}
00283
00285
00289 void SetNodeSetNodeIdList(int *);
00290 int *GetNodeSetNodeIdList() const {return this->NodeSetNodeIdList;}
00292
00294
00298 int SetNodeSetNumberOfDistributionFactors(int *);
00299 int *GetNodeSetNumberOfDistributionFactors() const
00300 {return this->NodeSetNumberOfDistributionFactors;}
00302
00304
00307 void SetNodeSetDistributionFactors(float *);
00308 float *GetNodeSetDistributionFactors() const {
00309 return this->NodeSetDistributionFactors;}
00311
00313 int GetSumNodesPerNodeSet() const {return this->SumNodesPerNodeSet;}
00314
00316 int GetSumDistFactPerNodeSet() const {return this->SumDistFactPerNodeSet;}
00317
00319
00321 int *GetNodeSetNodeIdListIndex() const {
00322 return this->NodeSetNodeIdListIndex;}
00324
00326
00328 int *GetNodeSetDistributionFactorIndex() const {
00329 return this->NodeSetDistributionFactorIndex;}
00331
00333
00335 vtkSetMacro(NumberOfSideSets, int);
00336 int GetNumberOfSideSets() const {return this->NumberOfSideSets;}
00338
00340
00342 void SetSideSetIds(int *);
00343 int *GetSideSetIds() const {return this->SideSetIds;}
00345
00347
00350 int SetSideSetSize(int *sizes);
00351 int *GetSideSetSize() const {return this->SideSetSize;}
00353
00355
00359 int SetSideSetNumberOfDistributionFactors(int *df);
00360 int *GetSideSetNumberOfDistributionFactors() const {
00361 return this->SideSetNumberOfDistributionFactors;}
00363
00365
00369 void SetSideSetElementList(int *);
00370 int *GetSideSetElementList() const {return this->SideSetElementList;}
00372
00374
00379 void SetSideSetSideList(int *);
00380 int *GetSideSetSideList() const {return this->SideSetSideList;}
00382
00384
00388 void SetSideSetNumDFPerSide(int *numNodes);
00389 int *GetSideSetNumDFPerSide() const {return this->SideSetNumDFPerSide;}
00391
00393
00401 void SetSideSetDistributionFactors(float *);
00402 float *GetSideSetDistributionFactors() const {
00403 return this->SideSetDistributionFactors;}
00405
00407 int GetSumSidesPerSideSet() const {return this->SumSidesPerSideSet;}
00408
00410 int GetSumDistFactPerSideSet() const {return this->SumDistFactPerSideSet;}
00411
00414 int *GetSideSetListIndex() const {return this->SideSetListIndex;}
00415
00417
00419 int *GetSideSetDistributionFactorIndex() const {
00420 return this->SideSetDistributionFactorIndex;}
00422
00424
00425 int GetNumberOfBlockProperties() const {
00426 return this->NumberOfBlockProperties;}
00428
00430
00431 void SetBlockPropertyNames(int numProp, char **names);
00432 char **GetBlockPropertyNames() const {return this->BlockPropertyNames;}
00434
00436
00438 void SetBlockPropertyValue(int *);
00439 int *GetBlockPropertyValue() const {return this->BlockPropertyValue;}
00441
00443
00444 int GetNumberOfNodeSetProperties() const {
00445 return this->NumberOfNodeSetProperties;}
00447
00449
00450 void SetNodeSetPropertyNames(int numProp, char **names);
00451 char **GetNodeSetPropertyNames() const {return this->NodeSetPropertyNames;}
00453
00455
00457 void SetNodeSetPropertyValue(int *);
00458 int *GetNodeSetPropertyValue() const {return this->NodeSetPropertyValue;}
00460
00462
00463 int GetNumberOfSideSetProperties() const {
00464 return this->NumberOfSideSetProperties;}
00466
00468
00469 void SetSideSetPropertyNames(int numProp, char **names);
00470 char **GetSideSetPropertyNames() const {return this->SideSetPropertyNames;}
00472
00474
00476 void SetSideSetPropertyValue(int *);
00477 int *GetSideSetPropertyValue() const {return this->SideSetPropertyValue;}
00479
00481
00482 int GetNumberOfGlobalVariables() const {
00483 return this->NumberOfGlobalVariables;}
00485
00487
00488 void SetGlobalVariableNames(int numVarNames, char **n);
00489 char **GetGlobalVariableNames() const {return this->GlobalVariableNames;}
00491
00493
00495 void SetGlobalVariableValue(float *f);
00496 float *GetGlobalVariableValue() const {return this->GlobalVariableValue;}
00498
00500
00509 void SetElementVariableInfo(int numOrigNames, char **origNames,
00510 int numNames, char **names, int *numComp,
00511 int *map);
00513
00515
00524 void SetNodeVariableInfo(int numOrigNames, char **origNames,
00525 int numNames, char **names, int *numComp,
00526 int *map);
00528
00530
00534 void SetElementVariableTruthTable(int *);
00535 int *GetElementVariableTruthTable() const {
00536 return this->ElementVariableTruthTable;}
00538
00540
00542 vtkSetMacro(AllVariablesDefinedInAllBlocks, int);
00543 vtkBooleanMacro(AllVariablesDefinedInAllBlocks, int);
00544 int GetAllVariablesDefinedInAllBlocks() const {
00545 return this->AllVariablesDefinedInAllBlocks;}
00547
00554 int ElementVariableIsDefinedInBlock(char *varname, int blockId);
00555
00557
00569 int GetOriginalNumberOfElementVariables() const {
00570 return this->OriginalNumberOfElementVariables;}
00571 char **GetOriginalElementVariableNames() const {
00572 return this->OriginalElementVariableNames;}
00573 int GetNumberOfElementVariables() const {
00574 return this->NumberOfElementVariables;}
00575 char **GetElementVariableNames() const {
00576 return this->ElementVariableNames;}
00577 int *GetElementVariableNumberOfComponents() const {
00578 return this->ElementVariableNumberOfComponents;}
00579 int *GetMapToOriginalElementVariableNames() const {
00580 return this->MapToOriginalElementVariableNames;}
00582
00583 int GetOriginalNumberOfNodeVariables() const {
00584 return this->OriginalNumberOfNodeVariables;}
00585 char **GetOriginalNodeVariableNames() const {
00586 return this->OriginalNodeVariableNames;}
00587 int GetNumberOfNodeVariables() const {
00588 return this->NumberOfNodeVariables;}
00589 char **GetNodeVariableNames() const {
00590 return this->NodeVariableNames;}
00591 int *GetNodeVariableNumberOfComponents() const {
00592 return this->NodeVariableNumberOfComponents;}
00593 int *GetMapToOriginalNodeVariableNames() const {
00594 return this->MapToOriginalNodeVariableNames;}
00595
00600 char *FindOriginalElementVariableName(const char *name, int component);
00601
00606 char *FindOriginalNodeVariableName(const char *name, int component);
00607
00610 static int HasMetadata(vtkDataSet *grid);
00611
00614 static void RemoveMetadata(vtkDataSet *grid);
00615
00617 void Pack(vtkDataSet *ugrid);
00618
00623 int Unpack(vtkDataSet *ugrid, int deleteIt);
00624
00626
00637 int AddUGridElementVariable(char *ugridVarName, char *origName, int numComponents);
00638 int RemoveUGridElementVariable(char *ugridVarName);
00640
00641 int AddUGridNodeVariable(char *ugridVarName, char *origName, int numComponents);
00642 int RemoveUGridNodeVariable(char *ugridVarName);
00643
00652 int MergeModelMetadata(const vtkModelMetadata *em);
00653
00657 int MergeGlobalInformation(const vtkModelMetadata *em);
00658
00660
00665 vtkModelMetadata *ExtractModelMetadata(vtkIdTypeArray *globalCellIdList,
00666 vtkDataSet *grid);
00668
00671 vtkModelMetadata *ExtractGlobalMetadata();
00672
00674
00683 void FreeAllGlobalData();
00684 void FreeAllLocalData();
00685 void FreeBlockDependentData();
00686 void FreeOriginalElementVariableNames();
00687 void FreeOriginalNodeVariableNames();
00688 void FreeUsedElementVariableNames();
00689 void FreeUsedNodeVariableNames();
00690 void FreeUsedElementVariables();
00691 void FreeUsedNodeVariables();
00693
00695 void Reset();
00696
00699 int GetBlockLocalIndex(int id);
00700
00701 protected:
00702 vtkModelMetadata();
00703 ~vtkModelMetadata();
00704
00705 private:
00706 void InitializeAllMetadata();
00707 void InitializeAllIvars();
00708
00709 void FreeAllMetadata();
00710 void FreeAllIvars();
00711
00712 void FreeQARecords();
00713
00714 int BuildBlockElementIdListIndex();
00715 int BuildBlockAttributesIndex();
00716 int BuildNodeSetNodeIdListIndex();
00717 int BuildNodeSetDistributionFactorIndex();
00718 int BuildSideSetListIndex();
00719 int BuildSideSetDistributionFactorIndex();
00720
00721 int InitializeFromSizeArray(vtkIntArray *ia, int &maxStr, int &maxLine);
00722 vtkIntArray *PackSizeArray(int maxStr, int maxLine);
00723 int InitializeFromIntArray(vtkModelMetadata *sizes, vtkIntArray *ia);
00724 vtkIntArray *PackIntArray();
00725 int InitializeFromCharArray(vtkModelMetadata *sizes,
00726 vtkCharArray *uca, int maxStr, int maxLine);
00727 vtkCharArray *PackCharArray(int maxStr, int maxLine);
00728 int InitializeFromFloatArray(vtkFloatArray *fa);
00729 vtkFloatArray *PackFloatArray();
00730
00731 static char *StrDupWithNew(const char *s);
00732
00733 static char *WriteLines(char *p, int maxLines, int maxLen, char **lines);
00734 static char *ReadLines(char ***to, int maxLines,
00735 int maxLen, char *from);
00736 static char **CopyLines(char **lines, int num);
00737 static int *CopyInts(int *vals, int num);
00738
00739 static int FindNameOnList(char *name, char **list, int listLen);
00740
00741 int MergeIdLists(int numSubLists,
00742 int *id1, int *id1Idx, int id1Len,
00743 float *dist1, int *dist1Idx, int dist1Len,
00744 int *id2, int *id2Idx, int id2Len,
00745 float *dist2, int *dist2Idx, int dist2Len,
00746 int **idNew, int **idNewIdx, int *idNewLen,
00747 float **distNew, int **distNewIdx, int *distNewLen);
00748
00749 int AppendFloatLists(int numSubLists,
00750 float *id1, int *id1Idx, int id1Len,
00751 float *id2, int *id2Idx, int id2Len,
00752 float **idNew, int **idNewIdx, int *idNewLen);
00753
00754 int AppendIntegerLists(int numSubLists,
00755 int *id1, int *id1Idx, int id1Len,
00756 int *id2, int *id2Idx, int id2Len,
00757 int **idNew, int **idNewIdx, int *idNewLen);
00758
00759 void ExtractCellsFromBlockData(vtkModelMetadataSTLCloak *idset,
00760 vtkModelMetadata *mmd);
00761 void ExtractNodesFromNodeSetData(vtkModelMetadataSTLCloak *idset,
00762 vtkModelMetadata *mmd);
00763 void ExtractSidesFromSideSetData(vtkModelMetadataSTLCloak *idset,
00764 vtkModelMetadata *mmd);
00765
00766 void ShowFloats(const char *what, int num, float *f);
00767 void ShowLines(const char *what, int num, char **l);
00768 void ShowIntArray(const char *what, int numx, int numy, int *id);
00769 void ShowInts(const char *what, int num, int *id);
00770 void ShowListsOfInts(const char *what, int *list,
00771 int nlists, int *idx, int len, int verbose);
00772 void ShowListsOfFloats(const char *what, float *list,
00773 int nlists, int *idx, int len, int verbose);
00774
00775 void SetOriginalElementVariableNames(int nvars, char **names);
00776 void SetElementVariableNames(int nvars, char **names);
00777 void SetElementVariableNumberOfComponents(int *comp);
00778 void SetMapToOriginalElementVariableNames(int *map);
00779
00780 void SetOriginalNodeVariableNames(int nvars, char **names);
00781 void SetNodeVariableNames(int nvars, char **names);
00782 void SetNodeVariableNumberOfComponents(int *comp);
00783 void SetMapToOriginalNodeVariableNames(int *map);
00784
00785 int CalculateMaximumLengths(int &maxString, int &maxLine);
00786
00787
00788
00789
00790
00791
00792 char *Title;
00793
00794 int NumberOfQARecords;
00795
00796 char *(*QARecord)[4];
00797
00798
00799 int NumberOfInformationLines;
00800 char **InformationLine;
00801
00802 int Dimension;
00803 char **CoordinateNames;
00804
00805
00806
00807 int TimeStepIndex;
00808 int NumberOfTimeSteps;
00809 float *TimeStepValues;
00810
00811
00812
00813 int NumberOfBlocks;
00814
00815 int *BlockIds;
00816 char **BlockElementType;
00817 int *BlockNumberOfElements;
00818 int *BlockNodesPerElement;
00819 int *BlockNumberOfAttributesPerElement;
00820 int *BlockElementIdList;
00821 float *BlockAttributes;
00822
00823
00824
00825 int SumElementsPerBlock;
00826 int SizeBlockAttributeArray;
00827
00828 int *BlockElementIdListIndex;
00829 int *BlockAttributesIndex;
00830
00831 vtkModelMetadataSTLCloak *BlockIdIndex;
00832
00833
00834
00835 int NumberOfNodeSets;
00836
00837 int *NodeSetIds;
00838 int *NodeSetSize;
00839 int *NodeSetNumberOfDistributionFactors;
00840 int *NodeSetNodeIdList;
00841 float *NodeSetDistributionFactors;
00842
00843
00844
00845 int SumNodesPerNodeSet;
00846 int SumDistFactPerNodeSet;
00847
00848 int *NodeSetNodeIdListIndex;
00849 int *NodeSetDistributionFactorIndex;
00850
00851
00852
00853 int NumberOfSideSets;
00854
00855 int *SideSetIds;
00856 int *SideSetSize;
00857 int *SideSetNumberOfDistributionFactors;
00858 int *SideSetElementList;
00859 int *SideSetSideList;
00860 int *SideSetNumDFPerSide;
00861 float *SideSetDistributionFactors;
00862
00863
00864
00865 int SumSidesPerSideSet;
00866 int SumDistFactPerSideSet;
00867
00868 int *SideSetListIndex;
00869 int *SideSetDistributionFactorIndex;
00870
00871
00872
00873 int NumberOfBlockProperties;
00874 char **BlockPropertyNames;
00875 int *BlockPropertyValue;
00876
00877 int NumberOfNodeSetProperties;
00878 char **NodeSetPropertyNames;
00879 int *NodeSetPropertyValue;
00880
00881 int NumberOfSideSetProperties;
00882 char **SideSetPropertyNames;
00883 int *SideSetPropertyValue;
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893 int NumberOfGlobalVariables;
00894 char **GlobalVariableNames;
00895 float *GlobalVariableValue;
00896
00897
00898
00899
00900
00901
00902
00903 int OriginalNumberOfElementVariables;
00904 char **OriginalElementVariableNames;
00905 int NumberOfElementVariables;
00906 int MaxNumberOfElementVariables;
00907 char **ElementVariableNames;
00908 int *ElementVariableNumberOfComponents;
00909 int *MapToOriginalElementVariableNames;
00910
00911 int OriginalNumberOfNodeVariables;
00912 char **OriginalNodeVariableNames;
00913 int NumberOfNodeVariables;
00914 int MaxNumberOfNodeVariables;
00915 char **NodeVariableNames;
00916 int *NodeVariableNumberOfComponents;
00917 int *MapToOriginalNodeVariableNames;
00918
00919 int *ElementVariableTruthTable;
00920 int AllVariablesDefinedInAllBlocks;
00921
00922 private:
00923 vtkModelMetadata(const vtkModelMetadata&);
00924 void operator=(const vtkModelMetadata&);
00925 };
00926 #endif