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 private: 00458 00459 SbStringList* getArgListAsSbString() const; 00460 00465 bool isForEditing() const; 00466 void setIsForEditing(bool flag); 00467 void setDefaultValue(double value); 00468 double getDefaultValue() const; 00469 bool isTileDimDefault(); 00470 bool isRGBAModeDefault() const; 00471 void setIsFromWriter( bool flag ); 00472 bool isFromWriter() const; 00473 void setVerticalFlip(bool flag); 00474 bool isVerticalFlip() const; 00475 bool recomputeHistogram() const; 00476 void enableRecomputeHistogram(bool flag); 00477 00482 void enableTileMinMax(const bool flag); 00483 00487 bool isTileMinMaxEnabled() const; 00488 00489 private: protected: 00490 00491 bool m_verboseMode; 00492 bool m_outputDataTypeSpecified; 00493 bool m_inputDataRangeSpecified; 00494 bool m_headerOnly; 00495 bool m_crcCheck; 00496 bool m_useDefaultCompLevel; 00497 double m_defaultValue; 00498 bool m_RGBAMode; 00499 00500 int m_memSize; 00501 int m_currentWordFormat; 00502 int m_targetWordFormat; 00503 int m_compressionLevel; 00504 int m_pondCoeff; 00505 int m_nbArgs; 00506 00507 double m_undefValue; 00508 double m_dataRangeInMin; 00509 double m_dataRangeInMax; 00510 00511 SbString m_headerFileName; 00512 SbString m_dataSectionFileName; 00513 SbString m_dataFileName; 00514 SoDataSet* m_inputVolume; 00515 00516 SbString m_inputFileName; //file to convert 00517 SbString m_fileExt; 00518 SbString m_compressionName; 00519 00520 SampleType m_sampleType; 00521 SoDataSet::DataType m_dataTypeOut; 00522 SbVec3i32 m_tileDim; 00523 00524 SbStringList m_argListAsSbString; 00525 00526 // type dependent vars/macros 00527 static const char *m_dataTypeStr[]; 00528 static const char *m_dataTypeXml[]; 00529 00530 void buildOutputFileName(); 00531 bool m_isForEditing; 00532 bool m_isTileDimDefaultValue; 00533 bool m_savedAsBitSet; 00534 bool m_isRGBAModeDefault; 00535 bool m_doHistogram; 00536 bool m_recomputeHistogram; 00537 bool m_doTileMinMax; 00538 double m_bitsetThreshold; 00539 bool m_doUpdate; 00540 bool m_bVerticalFlip; 00541 00542 // Who instanciate the converterParameters 00543 bool m_bFromWriter; 00544 }; 00545 00546 #ifdef _MSC_VER 00547 #pragma warning( pop ) 00548 #endif 00549 00550 inline bool 00551 SoConverterParameters::isVerbose() const 00552 { 00553 return m_verboseMode; 00554 } 00555 00556 inline void 00557 SoConverterParameters::setVerbose(bool flag) 00558 { 00559 m_verboseMode = flag; 00560 } 00561 00562 inline SbVec3i32 00563 SoConverterParameters::getTileDim() const 00564 { 00565 return m_tileDim; 00566 } 00567 00568 inline void 00569 SoConverterParameters::setHeaderFileName( const SbString& headerFileName ) 00570 { 00571 m_headerFileName = headerFileName; 00572 m_dataFileName.makeEmpty(); 00573 m_dataSectionFileName.makeEmpty(); 00574 buildOutputFileName(); 00575 } 00576 00577 inline SbString 00578 SoConverterParameters::getHeaderFileName() const 00579 { 00580 return m_headerFileName; 00581 } 00582 00583 inline SbString 00584 SoConverterParameters::getDataSectionFileName() const 00585 { 00586 return m_dataSectionFileName; 00587 } 00588 00589 inline void 00590 SoConverterParameters::setDataFileName(const SbString& dataFileName) 00591 { 00592 m_dataFileName = dataFileName; 00593 m_dataSectionFileName = SbFileHelper::getBaseName( m_dataFileName ); 00594 } 00595 00596 inline SbString 00597 SoConverterParameters::getDataFileName() const 00598 { 00599 return m_dataFileName; 00600 } 00601 00602 inline int 00603 SoConverterParameters::getMaxMemory() const 00604 { 00605 return m_memSize; 00606 } 00607 00608 inline bool 00609 SoConverterParameters::getOutputHeaderOnly() const 00610 { 00611 return m_headerOnly; 00612 } 00613 00614 inline void 00615 SoConverterParameters::setOutputHeaderOnly(bool headerOnly) 00616 { 00617 m_headerOnly = headerOnly; 00618 } 00619 00620 inline SoDataSet::DataType 00621 SoConverterParameters::getOutputDataFormat() const 00622 { 00623 return m_dataTypeOut; 00624 } 00625 00626 inline int 00627 SoConverterParameters::getTargetWordFormat() const 00628 { 00629 return m_targetWordFormat; 00630 } 00631 00632 inline SbString 00633 SoConverterParameters::getCompressionName() const 00634 { 00635 return m_compressionName; 00636 } 00637 00638 inline int 00639 SoConverterParameters::getCompressionLevel() const 00640 { 00641 return m_compressionLevel; 00642 } 00643 00644 inline bool 00645 SoConverterParameters::isCrcCheckDone() const 00646 { 00647 return m_crcCheck; 00648 } 00649 00650 inline void 00651 SoConverterParameters::setCrcCheck ( bool addCrcCheck ) 00652 { 00653 m_crcCheck = addCrcCheck; 00654 } 00655 00656 inline void 00657 SoConverterParameters::getInputRangeMinMax(double& min, double& max) const 00658 { 00659 min = m_dataRangeInMin; 00660 max = m_dataRangeInMax; 00661 } 00662 00663 inline SoConverterParameters::SampleType 00664 SoConverterParameters::getLowResAlgorithm() const 00665 { 00666 return m_sampleType; 00667 } 00668 00669 inline double 00670 SoConverterParameters::getUndefinedValue() const 00671 { 00672 return m_undefValue; 00673 } 00674 00675 inline int 00676 SoConverterParameters::getNbArgs() const 00677 { 00678 return m_nbArgs; 00679 } 00680 00681 inline bool 00682 SoConverterParameters::useDefaultCompLvl() const 00683 { 00684 return m_useDefaultCompLevel; 00685 } 00686 00687 inline void 00688 SoConverterParameters::setUndefinedValue(double undefinedValue) 00689 { 00690 m_undefValue = undefinedValue; 00691 } 00692 00693 inline bool 00694 SoConverterParameters::isOutputDataTypeSpecified() const 00695 { 00696 return m_outputDataTypeSpecified; 00697 } 00698 00699 inline void 00700 SoConverterParameters::setInputFileName( const SbString& inputFileName ) 00701 { 00702 m_inputFileName = inputFileName; 00703 00704 buildOutputFileName(); 00705 } 00706 00707 inline SbString 00708 SoConverterParameters::getInputFileName() const 00709 { 00710 return m_inputFileName; 00711 } 00712 00713 inline SoDataSet* 00714 SoConverterParameters::getInputVolume() const 00715 { 00716 return m_inputVolume; 00717 } 00718 00719 inline void 00720 SoConverterParameters::setInputVolume(SoDataSet* inputVolume) 00721 { 00722 m_inputVolume = inputVolume; 00723 } 00724 00725 inline bool 00726 SoConverterParameters::isInputDataRangeSpecified() const 00727 { 00728 return m_inputDataRangeSpecified; 00729 } 00730 00731 inline int 00732 SoConverterParameters::getPondCoef() const 00733 { 00734 return m_pondCoeff; 00735 } 00736 00737 inline bool 00738 SoConverterParameters::isForEditing() const 00739 { 00740 return m_isForEditing; 00741 } 00742 00743 inline void 00744 SoConverterParameters::setDefaultValue(const double value) 00745 { 00746 m_defaultValue = value; 00747 } 00748 00749 inline double 00750 SoConverterParameters::getDefaultValue() const 00751 { 00752 return m_defaultValue; 00753 } 00754 00755 inline bool 00756 SoConverterParameters::isTileDimDefault() 00757 { 00758 return m_isTileDimDefaultValue; 00759 } 00760 00761 inline bool 00762 SoConverterParameters::isSavedAsBitSet() const 00763 { 00764 return m_savedAsBitSet; 00765 } 00766 00767 inline void 00768 SoConverterParameters::saveAsBitSet( bool flag, double bitsetThreshold ) 00769 { 00770 m_savedAsBitSet = flag; 00771 00772 if ( flag ) 00773 m_bitsetThreshold = bitsetThreshold; 00774 } 00775 00776 inline void 00777 SoConverterParameters::setRGBAMode(const bool flag) 00778 { 00779 m_isRGBAModeDefault = false; 00780 m_RGBAMode = flag; 00781 } 00782 00783 inline bool 00784 SoConverterParameters::isRGBAMode() const 00785 { 00786 return m_RGBAMode; 00787 } 00788 00789 inline void 00790 SoConverterParameters::enableHistogram(const bool flag) 00791 { 00792 m_doHistogram = flag; 00793 } 00794 00795 inline bool 00796 SoConverterParameters::isHistogramEnabled() const 00797 { 00798 return m_doHistogram && !isRGBAMode(); 00799 } 00800 00801 inline void 00802 SoConverterParameters::enableRecomputeHistogram(const bool flag) 00803 { 00804 m_recomputeHistogram = flag; 00805 } 00806 00807 inline bool 00808 SoConverterParameters::recomputeHistogram() const 00809 { 00810 return m_recomputeHistogram; 00811 } 00812 00813 inline void 00814 SoConverterParameters::enableTileMinMax(const bool flag) 00815 { 00816 m_doTileMinMax = flag; 00817 } 00818 00819 inline bool 00820 SoConverterParameters::isTileMinMaxEnabled() const 00821 { 00822 return m_doTileMinMax; 00823 } 00824 00825 inline bool 00826 SoConverterParameters::isRGBAModeDefault() const 00827 { 00828 return m_isRGBAModeDefault; 00829 } 00830 00831 inline double 00832 SoConverterParameters::getBitSetThreshold() const 00833 { 00834 return m_bitsetThreshold; 00835 } 00836 00837 inline void 00838 SoConverterParameters::setBitSetThreshold( double bitsetThreshold ) 00839 { 00840 m_bitsetThreshold = bitsetThreshold; 00841 } 00842 00843 inline bool 00844 SoConverterParameters::isFromWriter() const 00845 { 00846 return m_bFromWriter; 00847 } 00848 00849 inline void 00850 SoConverterParameters::setIsFromWriter( bool flag ) 00851 { 00852 m_bFromWriter = flag; 00853 } 00854 00855 inline void 00856 SoConverterParameters::doUpdate ( bool flag ) 00857 { 00858 m_doUpdate = flag; 00859 } 00860 00861 inline bool 00862 SoConverterParameters::isForUpdate() const 00863 { 00864 return m_doUpdate; 00865 } 00866 00867 inline bool 00868 SoConverterParameters::isVerticalFlip() const 00869 { 00870 return m_bVerticalFlip; 00871 } 00872 00873 inline void 00874 SoConverterParameters::setVerticalFlip( bool flag ) 00875 { 00876 m_bVerticalFlip = flag; 00877 } 00878 00879 #endif //_SO_BASE_CONVERTER_ 00880 00881 00882