00001 /*======================================================================= 00002 *** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), *** 00003 *** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. *** 00004 *** *** 00005 *** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS *** 00006 *** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR *** 00007 *** WRITTEN AUTHORIZATION OF FEI S.A.S. *** 00008 *** *** 00009 *** RESTRICTED RIGHTS LEGEND *** 00010 *** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS *** 00011 *** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN *** 00012 *** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT *** 00013 *** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN *** 00014 *** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. *** 00015 *** *** 00016 *** COPYRIGHT (C) 1996-2026 BY FEI S.A.S, *** 00017 *** BORDEAUX, FRANCE *** 00018 *** ALL RIGHTS RESERVED *** 00019 **=======================================================================*/ 00020 /*======================================================================= 00021 ** Author : VSG3D (Jun 2009) 00022 **=======================================================================*/ 00023 00024 00025 #ifndef _SO_BASE_CONVERTER_PARAMETERS 00026 #define _SO_BASE_CONVERTER_PARAMETERS 00027 00028 #ifdef _MSC_VER 00029 #pragma warning( push ) 00030 #pragma warning(disable:4251) 00031 #endif 00032 00033 #include <Inventor/STL/vector> 00034 #include <Inventor/SbBox.h> 00035 #include <Inventor/SbPList.h> 00036 #include <LDM/compressors/SoDataCompressor.h> 00037 #include <Inventor/helpers/SbFileHelper.h> 00038 00051 class SoConverterParameters { 00052 00053 public: 00054 00055 enum SampleType 00056 { 00060 DECIMATION, 00064 AVERAGE 00065 }; 00066 00067 enum ParametersError 00068 { 00070 PARAM_NO_ERROR = 0, 00072 PARAM_ERROR = -1 00073 }; 00074 00075 00079 SoConverterParameters( ); 00080 00084 virtual ~SoConverterParameters(); 00085 00094 static SoConverterParameters* create( int argc, char** argv ); 00095 00108 static SoConverterParameters* create( const SbStringList& arguments ); 00109 00113 void setVerbose( const bool isVerbose ); 00114 00118 bool isVerbose() const; 00119 00126 void setTileDim( const int tileDim ); 00127 00135 void setTileDim(const SbVec3i32& tileDim); 00136 00140 SbVec3i32 getTileDim() const; 00141 00147 void setHeaderFileName( const SbString& headerFileName ); 00148 00152 SbString getHeaderFileName() const; 00153 00159 void setDataFileName( const SbString& dataFileName ); 00160 00164 SbString getDataSectionFileName() const; 00165 00169 SbString getDataFileName() const; 00170 00178 void setInputFileName( const SbString& inputFileName ); 00179 00183 SbString getInputFileName() const ; 00184 00189 void setInputVolume(SoDataSet* inputVolume); 00190 00194 SoDataSet* getInputVolume() const; 00195 00201 bool setMaxMemory( int maxMemory ); 00202 00206 int getMaxMemory() const; 00207 00214 void setOutputHeaderOnly( bool headerOnly ); 00215 00219 bool getOutputHeaderOnly() const; 00220 00231 bool setOutputDataFormat( const SbString& dataFormat ); 00232 00239 bool setOutputDataFormat( const SoDataSet::DataType& dataType); 00240 00244 SoDataSet::DataType getOutputDataFormat() const; 00245 00252 bool setTargetWordFormat(int wordFormat); 00253 00257 int getTargetWordFormat() const; 00258 00265 bool setInputRangeMinMax( double min, double max ); 00266 00270 void getInputRangeMinMax( double& min, double& max ) const; 00271 00286 bool setCompressionName( const SbString& compressionName ); 00287 00300 void setCompressionLevel (int compressionLevel ); 00301 00309 void setCrcCheck (bool addCrcCheck ); 00310 00314 SbString getCompressionName() const; 00315 00316 /* 00317 * Returns compression level. 00318 */ 00319 int getCompressionLevel() const; 00320 00321 /* 00322 * Returns CRC check setting. 00323 */ 00324 bool isCrcCheckDone () const; 00325 00326 /* 00327 * Returns true if using default compression level. 00328 */ 00329 bool useDefaultCompLvl() const; 00330 00340 bool setLowResAlgorithm( int lowResAlgorithm ); 00341 00345 SampleType getLowResAlgorithm() const; 00346 00351 int getPondCoef() const; 00352 00359 void setUndefinedValue(double undefinedValue); 00360 00364 double getUndefinedValue() const; 00365 00369 int getNbArgs() const; 00370 00374 bool isOutputDataTypeSpecified() const; 00375 00379 bool isInputDataRangeSpecified() const; 00380 00384 void setRGBAMode(const bool flag); 00385 00389 bool isRGBAMode() const; 00390 00403 void enableHistogram(const bool flag); 00404 00408 bool isHistogramEnabled() const; 00409 00413 bool isSavedAsBitSet() const; 00414 00422 void saveAsBitSet( bool flag, double bitsetThreshold = 0); 00423 00427 double getBitSetThreshold() const; 00428 00435 void setBitSetThreshold( double bitsetThreshold ); 00436 00443 void doUpdate ( bool value ); 00444 00448 bool isForUpdate() const; 00449 00450 #if 1 SoDEPRECATED 00456 bool setBorder( const int border = 0 ); 00457 SoDEPRECATED 00462 int getBorder() const 00463 { return 0; } 00464 00465 #endif 00467 private: 00468 00469 SbStringList* getArgListAsSbString() const; 00470 00475 bool isForEditing() const; 00476 void setIsForEditing(bool flag); 00477 void setDefaultValue(double value); 00478 double getDefaultValue() const; 00479 bool isTileDimDefault(); 00480 bool isRGBAModeDefault() const; 00481 void setIsFromWriter( bool flag ); 00482 bool isFromWriter() const; 00483 void setVerticalFlip(bool flag); 00484 bool isVerticalFlip() const; 00485 bool recomputeHistogram() const; 00486 void enableRecomputeHistogram(bool flag); 00487 00492 void enableTileMinMax(const bool flag); 00493 00497 bool isTileMinMaxEnabled() const; 00498 00499 private: protected: 00500 00501 bool m_verboseMode; 00502 bool m_outputDataTypeSpecified; 00503 bool m_inputDataRangeSpecified; 00504 bool m_headerOnly; 00505 bool m_crcCheck; 00506 bool m_useDefaultCompLevel; 00507 double m_defaultValue; 00508 bool m_RGBAMode; 00509 00510 int m_memSize; 00511 int m_currentWordFormat; 00512 int m_targetWordFormat; 00513 int m_compressionLevel; 00514 int m_pondCoeff; 00515 int m_nbArgs; 00516 00517 double m_undefValue; 00518 double m_dataRangeInMin; 00519 double m_dataRangeInMax; 00520 00521 SbString m_headerFileName; 00522 SbString m_dataSectionFileName; 00523 SbString m_dataFileName; 00524 SoDataSet* m_inputVolume; 00525 00526 SbString m_inputFileName; //file to convert 00527 SbString m_fileExt; 00528 SbString m_compressionName; 00529 00530 SampleType m_sampleType; 00531 SoDataSet::DataType m_dataTypeOut; 00532 SbVec3i32 m_tileDim; 00533 00534 SbStringList m_argListAsSbString; 00535 00536 // type dependent vars/macros 00537 static const char *m_dataTypeStr[]; 00538 static const char *m_dataTypeXml[]; 00539 00540 void buildOutputFileName(); 00541 bool m_isForEditing; 00542 bool m_isTileDimDefaultValue; 00543 bool m_savedAsBitSet; 00544 bool m_isRGBAModeDefault; 00545 bool m_doHistogram; 00546 bool m_recomputeHistogram; 00547 bool m_doTileMinMax; 00548 double m_bitsetThreshold; 00549 bool m_doUpdate; 00550 bool m_bVerticalFlip; 00551 00552 // Who instanciate the converterParameters 00553 bool m_bFromWriter; 00554 }; 00555 00556 #ifdef _MSC_VER 00557 #pragma warning( pop ) 00558 #endif 00559 00560 inline bool 00561 SoConverterParameters::isVerbose() const 00562 { 00563 return m_verboseMode; 00564 } 00565 00566 inline void 00567 SoConverterParameters::setVerbose(bool flag) 00568 { 00569 m_verboseMode = flag; 00570 } 00571 00572 inline SbVec3i32 00573 SoConverterParameters::getTileDim() const 00574 { 00575 return m_tileDim; 00576 } 00577 00578 inline void 00579 SoConverterParameters::setHeaderFileName( const SbString& headerFileName ) 00580 { 00581 m_headerFileName = headerFileName; 00582 m_dataFileName.makeEmpty(); 00583 m_dataSectionFileName.makeEmpty(); 00584 buildOutputFileName(); 00585 } 00586 00587 inline SbString 00588 SoConverterParameters::getHeaderFileName() const 00589 { 00590 return m_headerFileName; 00591 } 00592 00593 inline SbString 00594 SoConverterParameters::getDataSectionFileName() const 00595 { 00596 return m_dataSectionFileName; 00597 } 00598 00599 inline void 00600 SoConverterParameters::setDataFileName(const SbString& dataFileName) 00601 { 00602 m_dataFileName = dataFileName; 00603 m_dataSectionFileName = SbFileHelper::getBaseName( m_dataFileName ); 00604 } 00605 00606 inline SbString 00607 SoConverterParameters::getDataFileName() const 00608 { 00609 return m_dataFileName; 00610 } 00611 00612 inline int 00613 SoConverterParameters::getMaxMemory() const 00614 { 00615 return m_memSize; 00616 } 00617 00618 inline bool 00619 SoConverterParameters::getOutputHeaderOnly() const 00620 { 00621 return m_headerOnly; 00622 } 00623 00624 inline void 00625 SoConverterParameters::setOutputHeaderOnly(bool headerOnly) 00626 { 00627 m_headerOnly = headerOnly; 00628 } 00629 00630 inline SoDataSet::DataType 00631 SoConverterParameters::getOutputDataFormat() const 00632 { 00633 return m_dataTypeOut; 00634 } 00635 00636 inline int 00637 SoConverterParameters::getTargetWordFormat() const 00638 { 00639 return m_targetWordFormat; 00640 } 00641 00642 inline SbString 00643 SoConverterParameters::getCompressionName() const 00644 { 00645 return m_compressionName; 00646 } 00647 00648 inline int 00649 SoConverterParameters::getCompressionLevel() const 00650 { 00651 return m_compressionLevel; 00652 } 00653 00654 inline bool 00655 SoConverterParameters::isCrcCheckDone() const 00656 { 00657 return m_crcCheck; 00658 } 00659 00660 inline void 00661 SoConverterParameters::setCrcCheck ( bool addCrcCheck ) 00662 { 00663 m_crcCheck = addCrcCheck; 00664 } 00665 00666 inline void 00667 SoConverterParameters::getInputRangeMinMax(double& min, double& max) const 00668 { 00669 min = m_dataRangeInMin; 00670 max = m_dataRangeInMax; 00671 } 00672 00673 inline SoConverterParameters::SampleType 00674 SoConverterParameters::getLowResAlgorithm() const 00675 { 00676 return m_sampleType; 00677 } 00678 00679 inline double 00680 SoConverterParameters::getUndefinedValue() const 00681 { 00682 return m_undefValue; 00683 } 00684 00685 inline int 00686 SoConverterParameters::getNbArgs() const 00687 { 00688 return m_nbArgs; 00689 } 00690 00691 inline bool 00692 SoConverterParameters::useDefaultCompLvl() const 00693 { 00694 return m_useDefaultCompLevel; 00695 } 00696 00697 inline void 00698 SoConverterParameters::setUndefinedValue(double undefinedValue) 00699 { 00700 m_undefValue = undefinedValue; 00701 } 00702 00703 inline bool 00704 SoConverterParameters::isOutputDataTypeSpecified() const 00705 { 00706 return m_outputDataTypeSpecified; 00707 } 00708 00709 inline void 00710 SoConverterParameters::setInputFileName( const SbString& inputFileName ) 00711 { 00712 m_inputFileName = inputFileName; 00713 00714 buildOutputFileName(); 00715 } 00716 00717 inline SbString 00718 SoConverterParameters::getInputFileName() const 00719 { 00720 return m_inputFileName; 00721 } 00722 00723 inline SoDataSet* 00724 SoConverterParameters::getInputVolume() const 00725 { 00726 return m_inputVolume; 00727 } 00728 00729 inline void 00730 SoConverterParameters::setInputVolume(SoDataSet* inputVolume) 00731 { 00732 m_inputVolume = inputVolume; 00733 } 00734 00735 inline bool 00736 SoConverterParameters::isInputDataRangeSpecified() const 00737 { 00738 return m_inputDataRangeSpecified; 00739 } 00740 00741 inline int 00742 SoConverterParameters::getPondCoef() const 00743 { 00744 return m_pondCoeff; 00745 } 00746 00747 inline bool 00748 SoConverterParameters::isForEditing() const 00749 { 00750 return m_isForEditing; 00751 } 00752 00753 inline void 00754 SoConverterParameters::setDefaultValue(const double value) 00755 { 00756 m_defaultValue = value; 00757 } 00758 00759 inline double 00760 SoConverterParameters::getDefaultValue() const 00761 { 00762 return m_defaultValue; 00763 } 00764 00765 inline bool 00766 SoConverterParameters::isTileDimDefault() 00767 { 00768 return m_isTileDimDefaultValue; 00769 } 00770 00771 inline bool 00772 SoConverterParameters::isSavedAsBitSet() const 00773 { 00774 return m_savedAsBitSet; 00775 } 00776 00777 inline void 00778 SoConverterParameters::saveAsBitSet( bool flag, double bitsetThreshold ) 00779 { 00780 m_savedAsBitSet = flag; 00781 00782 if ( flag ) 00783 m_bitsetThreshold = bitsetThreshold; 00784 } 00785 00786 inline void 00787 SoConverterParameters::setRGBAMode(const bool flag) 00788 { 00789 m_isRGBAModeDefault = false; 00790 m_RGBAMode = flag; 00791 } 00792 00793 inline bool 00794 SoConverterParameters::isRGBAMode() const 00795 { 00796 return m_RGBAMode; 00797 } 00798 00799 inline void 00800 SoConverterParameters::enableHistogram(const bool flag) 00801 { 00802 m_doHistogram = flag; 00803 } 00804 00805 inline bool 00806 SoConverterParameters::isHistogramEnabled() const 00807 { 00808 return m_doHistogram && !isRGBAMode(); 00809 } 00810 00811 inline void 00812 SoConverterParameters::enableRecomputeHistogram(const bool flag) 00813 { 00814 m_recomputeHistogram = flag; 00815 } 00816 00817 inline bool 00818 SoConverterParameters::recomputeHistogram() const 00819 { 00820 return m_recomputeHistogram; 00821 } 00822 00823 inline void 00824 SoConverterParameters::enableTileMinMax(const bool flag) 00825 { 00826 m_doTileMinMax = flag; 00827 } 00828 00829 inline bool 00830 SoConverterParameters::isTileMinMaxEnabled() const 00831 { 00832 return m_doTileMinMax; 00833 } 00834 00835 inline bool 00836 SoConverterParameters::isRGBAModeDefault() const 00837 { 00838 return m_isRGBAModeDefault; 00839 } 00840 00841 inline double 00842 SoConverterParameters::getBitSetThreshold() const 00843 { 00844 return m_bitsetThreshold; 00845 } 00846 00847 inline void 00848 SoConverterParameters::setBitSetThreshold( double bitsetThreshold ) 00849 { 00850 m_bitsetThreshold = bitsetThreshold; 00851 } 00852 00853 inline bool 00854 SoConverterParameters::isFromWriter() const 00855 { 00856 return m_bFromWriter; 00857 } 00858 00859 inline void 00860 SoConverterParameters::setIsFromWriter( bool flag ) 00861 { 00862 m_bFromWriter = flag; 00863 } 00864 00865 inline void 00866 SoConverterParameters::doUpdate ( bool flag ) 00867 { 00868 m_doUpdate = flag; 00869 } 00870 00871 inline bool 00872 SoConverterParameters::isForUpdate() const 00873 { 00874 return m_doUpdate; 00875 } 00876 00877 inline bool 00878 SoConverterParameters::isVerticalFlip() const 00879 { 00880 return m_bVerticalFlip; 00881 } 00882 00883 inline void 00884 SoConverterParameters::setVerticalFlip( bool flag ) 00885 { 00886 m_bVerticalFlip = flag; 00887 } 00888 00889 #endif //_SO_BASE_CONVERTER_ 00890 00891 00892