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-2017 BY FEI S.A.S, *** 00017 *** MERIGNAC, 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 00176 void setInputFileName( const SbString& inputFileName ); 00177 00181 SbString getInputFileName() const ; 00182 00187 void setInputVolume(SoDataSet* inputVolume); 00188 00192 SoDataSet* getInputVolume() const; 00193 00199 bool setMaxMemory( int maxMemory ); 00200 00204 int getMaxMemory() const; 00205 00212 void setOutputHeaderOnly( bool headerOnly ); 00213 00217 bool getOutputHeaderOnly() const; 00218 00229 bool setOutputDataFormat( const SbString& dataFormat ); 00230 00237 bool setOutputDataFormat( const SoDataSet::DataType& dataType); 00238 00242 SoDataSet::DataType getOutputDataFormat() const; 00243 00250 bool setTargetWordFormat(int wordFormat); 00251 00255 int getTargetWordFormat() const; 00256 00263 bool setInputRangeMinMax( double min, double max ); 00264 00268 void getInputRangeMinMax( double& min, double& max ) const; 00269 00288 bool setCompressionName( const SbString& compressionName ); 00289 00307 void setCompressionLevel (int compressionLevel ); 00308 00316 void setCrcCheck (bool addCrcCheck ); 00317 00321 SbString getCompressionName() const; 00322 00323 /* 00324 * Returns compression level. 00325 */ 00326 int getCompressionLevel() const; 00327 00328 /* 00329 * Returns CRC check setting. 00330 */ 00331 bool isCrcCheckDone () const; 00332 00333 /* 00334 * Returns true if using default compression level. 00335 */ 00336 bool useDefaultCompLvl() const; 00337 00347 bool setLowResAlgorithm( int lowResAlgorithm ); 00348 00352 SampleType getLowResAlgorithm() const; 00353 00358 int getPondCoef() const; 00359 00366 void setUndefinedValue(double undefinedValue); 00367 00371 double getUndefinedValue() const; 00372 00376 int getNbArgs() const; 00377 00381 bool isOutputDataTypeSpecified() const; 00382 00386 bool isInputDataRangeSpecified() const; 00387 00391 void setRGBAMode(const bool flag); 00392 00396 bool isRGBAMode() const; 00397 00410 void enableHistogram(const bool flag); 00411 00415 bool isHistogramEnabled() const; 00416 00420 bool isSavedAsBitSet() const; 00421 00429 void saveAsBitSet( bool flag, double bitsetThreshold = 0); 00430 00434 double getBitSetThreshold() const; 00435 00442 void setBitSetThreshold( double bitsetThreshold ); 00443 00450 void doUpdate ( bool value ); 00451 00455 bool isForUpdate() const; 00456 00457 #if 1 SoDEPRECATED 00463 bool setBorder( const int border = 0 ); 00464 SoDEPRECATED 00469 int getBorder() const 00470 { return 0; } 00471 00472 #endif 00474 private: 00475 00476 SbStringList* getArgListAsSbString() const; 00477 00482 bool isForEditing() const; 00483 void setIsForEditing(bool flag); 00484 void setDefaultValue(double value); 00485 double getDefaultValue() const; 00486 bool isTileDimDefault(); 00487 bool isRGBAModeDefault() const; 00488 void setIsFromWriter( bool flag ); 00489 bool isFromWriter() const; 00490 void setVerticalFlip(bool flag); 00491 bool isVerticalFlip() const; 00492 bool recomputeHistogram() const; 00493 void enableRecomputeHistogram(bool flag); 00494 00499 void enableTileMinMax(const bool flag); 00500 00504 bool isTileMinMaxEnabled() const; 00505 00506 private: protected: 00507 00508 bool m_verboseMode; 00509 bool m_outputDataTypeSpecified; 00510 bool m_inputDataRangeSpecified; 00511 bool m_headerOnly; 00512 bool m_crcCheck; 00513 bool m_useDefaultCompLevel; 00514 double m_defaultValue; 00515 bool m_RGBAMode; 00516 00517 int m_memSize; 00518 int m_currentWordFormat; 00519 int m_targetWordFormat; 00520 int m_compressionLevel; 00521 int m_pondCoeff; 00522 int m_nbArgs; 00523 00524 double m_undefValue; 00525 double m_dataRangeInMin; 00526 double m_dataRangeInMax; 00527 00528 SbString m_headerFileName; 00529 SbString m_dataSectionFileName; 00530 SbString m_dataFileName; 00531 SoDataSet* m_inputVolume; 00532 00533 SbString m_inputFileName; //file to convert 00534 SbString m_fileExt; 00535 SbString m_compressionName; 00536 00537 SampleType m_sampleType; 00538 SoDataSet::DataType m_dataTypeOut; 00539 SbVec3i32 m_tileDim; 00540 00541 SbStringList m_argListAsSbString; 00542 00543 // type dependent vars/macros 00544 static const char *m_dataTypeStr[]; 00545 static const char *m_dataTypeXml[]; 00546 00547 void buildOutputFileName(); 00548 bool m_isForEditing; 00549 bool m_isTileDimDefaultValue; 00550 bool m_savedAsBitSet; 00551 bool m_isRGBAModeDefault; 00552 bool m_doHistogram; 00553 bool m_recomputeHistogram; 00554 bool m_doTileMinMax; 00555 double m_bitsetThreshold; 00556 bool m_doUpdate; 00557 bool m_bVerticalFlip; 00558 00559 // Who instanciate the converterParameters 00560 bool m_bFromWriter; 00561 }; 00562 00563 #ifdef _MSC_VER 00564 #pragma warning( pop ) 00565 #endif 00566 00567 inline bool 00568 SoConverterParameters::isVerbose() const 00569 { 00570 return m_verboseMode; 00571 } 00572 00573 inline void 00574 SoConverterParameters::setVerbose(bool flag) 00575 { 00576 m_verboseMode = flag; 00577 } 00578 00579 inline SbVec3i32 00580 SoConverterParameters::getTileDim() const 00581 { 00582 return m_tileDim; 00583 } 00584 00585 inline void 00586 SoConverterParameters::setHeaderFileName( const SbString& headerFileName ) 00587 { 00588 m_headerFileName = headerFileName; 00589 m_dataFileName.makeEmpty(); 00590 m_dataSectionFileName.makeEmpty(); 00591 buildOutputFileName(); 00592 } 00593 00594 inline SbString 00595 SoConverterParameters::getHeaderFileName() const 00596 { 00597 return m_headerFileName; 00598 } 00599 00600 inline SbString 00601 SoConverterParameters::getDataSectionFileName() const 00602 { 00603 return m_dataSectionFileName; 00604 } 00605 00606 inline void 00607 SoConverterParameters::setDataFileName(const SbString& dataFileName) 00608 { 00609 m_dataFileName = dataFileName; 00610 m_dataSectionFileName = SbFileHelper::getBaseName( m_dataFileName ); 00611 } 00612 00613 inline SbString 00614 SoConverterParameters::getDataFileName() const 00615 { 00616 return m_dataFileName; 00617 } 00618 00619 inline int 00620 SoConverterParameters::getMaxMemory() const 00621 { 00622 return m_memSize; 00623 } 00624 00625 inline bool 00626 SoConverterParameters::getOutputHeaderOnly() const 00627 { 00628 return m_headerOnly; 00629 } 00630 00631 inline void 00632 SoConverterParameters::setOutputHeaderOnly(bool headerOnly) 00633 { 00634 m_headerOnly = headerOnly; 00635 } 00636 00637 inline SoDataSet::DataType 00638 SoConverterParameters::getOutputDataFormat() const 00639 { 00640 return m_dataTypeOut; 00641 } 00642 00643 inline int 00644 SoConverterParameters::getTargetWordFormat() const 00645 { 00646 return m_targetWordFormat; 00647 } 00648 00649 inline SbString 00650 SoConverterParameters::getCompressionName() const 00651 { 00652 return m_compressionName; 00653 } 00654 00655 inline int 00656 SoConverterParameters::getCompressionLevel() const 00657 { 00658 return m_compressionLevel; 00659 } 00660 00661 inline bool 00662 SoConverterParameters::isCrcCheckDone() const 00663 { 00664 return m_crcCheck; 00665 } 00666 00667 inline void 00668 SoConverterParameters::setCrcCheck ( bool addCrcCheck ) 00669 { 00670 m_crcCheck = addCrcCheck; 00671 } 00672 00673 inline void 00674 SoConverterParameters::getInputRangeMinMax(double& min, double& max) const 00675 { 00676 min = m_dataRangeInMin; 00677 max = m_dataRangeInMax; 00678 } 00679 00680 inline SoConverterParameters::SampleType 00681 SoConverterParameters::getLowResAlgorithm() const 00682 { 00683 return m_sampleType; 00684 } 00685 00686 inline double 00687 SoConverterParameters::getUndefinedValue() const 00688 { 00689 return m_undefValue; 00690 } 00691 00692 inline int 00693 SoConverterParameters::getNbArgs() const 00694 { 00695 return m_nbArgs; 00696 } 00697 00698 inline bool 00699 SoConverterParameters::useDefaultCompLvl() const 00700 { 00701 return m_useDefaultCompLevel; 00702 } 00703 00704 inline void 00705 SoConverterParameters::setUndefinedValue(double undefinedValue) 00706 { 00707 m_undefValue = undefinedValue; 00708 } 00709 00710 inline bool 00711 SoConverterParameters::isOutputDataTypeSpecified() const 00712 { 00713 return m_outputDataTypeSpecified; 00714 } 00715 00716 inline void 00717 SoConverterParameters::setInputFileName( const SbString& inputFileName ) 00718 { 00719 m_inputFileName = inputFileName; 00720 00721 buildOutputFileName(); 00722 } 00723 00724 inline SbString 00725 SoConverterParameters::getInputFileName() const 00726 { 00727 return m_inputFileName; 00728 } 00729 00730 inline SoDataSet* 00731 SoConverterParameters::getInputVolume() const 00732 { 00733 return m_inputVolume; 00734 } 00735 00736 inline void 00737 SoConverterParameters::setInputVolume(SoDataSet* inputVolume) 00738 { 00739 m_inputVolume = inputVolume; 00740 } 00741 00742 inline bool 00743 SoConverterParameters::isInputDataRangeSpecified() const 00744 { 00745 return m_inputDataRangeSpecified; 00746 } 00747 00748 inline int 00749 SoConverterParameters::getPondCoef() const 00750 { 00751 return m_pondCoeff; 00752 } 00753 00754 inline bool 00755 SoConverterParameters::isForEditing() const 00756 { 00757 return m_isForEditing; 00758 } 00759 00760 inline void 00761 SoConverterParameters::setDefaultValue(const double value) 00762 { 00763 m_defaultValue = value; 00764 } 00765 00766 inline double 00767 SoConverterParameters::getDefaultValue() const 00768 { 00769 return m_defaultValue; 00770 } 00771 00772 inline bool 00773 SoConverterParameters::isTileDimDefault() 00774 { 00775 return m_isTileDimDefaultValue; 00776 } 00777 00778 inline bool 00779 SoConverterParameters::isSavedAsBitSet() const 00780 { 00781 return m_savedAsBitSet; 00782 } 00783 00784 inline void 00785 SoConverterParameters::saveAsBitSet( bool flag, double bitsetThreshold ) 00786 { 00787 m_savedAsBitSet = flag; 00788 00789 if ( flag ) 00790 m_bitsetThreshold = bitsetThreshold; 00791 } 00792 00793 inline void 00794 SoConverterParameters::setRGBAMode(const bool flag) 00795 { 00796 m_isRGBAModeDefault = false; 00797 m_RGBAMode = flag; 00798 } 00799 00800 inline bool 00801 SoConverterParameters::isRGBAMode() const 00802 { 00803 return m_RGBAMode; 00804 } 00805 00806 inline void 00807 SoConverterParameters::enableHistogram(const bool flag) 00808 { 00809 m_doHistogram = flag; 00810 } 00811 00812 inline bool 00813 SoConverterParameters::isHistogramEnabled() const 00814 { 00815 return m_doHistogram && !isRGBAMode(); 00816 } 00817 00818 inline void 00819 SoConverterParameters::enableRecomputeHistogram(const bool flag) 00820 { 00821 m_recomputeHistogram = flag; 00822 } 00823 00824 inline bool 00825 SoConverterParameters::recomputeHistogram() const 00826 { 00827 return m_recomputeHistogram; 00828 } 00829 00830 inline void 00831 SoConverterParameters::enableTileMinMax(const bool flag) 00832 { 00833 m_doTileMinMax = flag; 00834 } 00835 00836 inline bool 00837 SoConverterParameters::isTileMinMaxEnabled() const 00838 { 00839 return m_doTileMinMax; 00840 } 00841 00842 inline bool 00843 SoConverterParameters::isRGBAModeDefault() const 00844 { 00845 return m_isRGBAModeDefault; 00846 } 00847 00848 inline double 00849 SoConverterParameters::getBitSetThreshold() const 00850 { 00851 return m_bitsetThreshold; 00852 } 00853 00854 inline void 00855 SoConverterParameters::setBitSetThreshold( double bitsetThreshold ) 00856 { 00857 m_bitsetThreshold = bitsetThreshold; 00858 } 00859 00860 inline bool 00861 SoConverterParameters::isFromWriter() const 00862 { 00863 return m_bFromWriter; 00864 } 00865 00866 inline void 00867 SoConverterParameters::setIsFromWriter( bool flag ) 00868 { 00869 m_bFromWriter = flag; 00870 } 00871 00872 inline void 00873 SoConverterParameters::doUpdate ( bool flag ) 00874 { 00875 m_doUpdate = flag; 00876 } 00877 00878 inline bool 00879 SoConverterParameters::isForUpdate() const 00880 { 00881 return m_doUpdate; 00882 } 00883 00884 inline bool 00885 SoConverterParameters::isVerticalFlip() const 00886 { 00887 return m_bVerticalFlip; 00888 } 00889 00890 inline void 00891 SoConverterParameters::setVerticalFlip( bool flag ) 00892 { 00893 m_bVerticalFlip = flag; 00894 } 00895 00896 #endif //_SO_BASE_CONVERTER_ 00897 00898 00899