From 38434e9184d4398046709eeb69c6b21a2f6b9dcd Mon Sep 17 00:00:00 2001 From: Stephen Mather <1174901+smathermather@users.noreply.github.com> Date: Thu, 15 Apr 2021 23:21:55 -0400 Subject: [PATCH 01/15] Add kmz output (#1268) * Add flag check for kmz * Add generate_kmz * remove osparam from systemrun * Remove extra aaarg * Add orthophoto-kmz argument to parser --- opendm/config.py | 8 ++++++++ opendm/orthophoto.py | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/opendm/config.py b/opendm/config.py index 7b51974b..8928525f 100755 --- a/opendm/config.py +++ b/opendm/config.py @@ -542,6 +542,14 @@ def config(argv=None, parser=None): default=False, help='Set this parameter if you want to generate a PNG rendering of the orthophoto. ' 'Default: %(default)s') + + parser.add_argument('--orthophoto-kmz', + action=StoreTrue, + nargs=0, + default=False, + help='Set this parameter if you want to generate a Google Earth (KMZ) rendering of the orthophoto. ' + 'Default: %(default)s') + parser.add_argument('--orthophoto-compression', metavar='', diff --git a/opendm/orthophoto.py b/opendm/orthophoto.py index 2d37586f..ebcfe746 100644 --- a/opendm/orthophoto.py +++ b/opendm/orthophoto.py @@ -54,7 +54,20 @@ def generate_png(orthophoto_file, output_file=None, outsize=None): system.run('gdal_translate -of png "%s" "%s" %s %s ' '--config GDAL_CACHEMAX %s%% ' % (orthophoto_file, output_file, osparam, bandparam, get_max_memory())) +def generate_kmz(orthophoto_file, output_file=None, outsize=None): + if output_file is None: + base, ext = os.path.splitext(orthophoto_file) + output_file = base + '.kmz' + + # See if we need to select top three bands + bandparam = "" + gtif = gdal.Open(orthophoto_file) + if gtif.RasterCount > 4: + bandparam = "-b 1 -b 2 -b 3 -a_nodata 0" + system.run('gdal_translate -of KMLSUPEROVERLAY -co FORMAT=JPEG "%s" "%s" %s ' + '--config GDAL_CACHEMAX %s%% ' % (orthophoto_file, output_file, bandparam, get_max_memory())) + def post_orthophoto_steps(args, bounds_file_path, orthophoto_file, orthophoto_tiles_dir): if args.crop > 0: Cropper.crop(bounds_file_path, orthophoto_file, get_orthophoto_vars(args), keep_original=not args.optimize_disk_space, warp_options=['-dstalpha']) @@ -64,6 +77,9 @@ def post_orthophoto_steps(args, bounds_file_path, orthophoto_file, orthophoto_ti if args.orthophoto_png: generate_png(orthophoto_file) + + if args.orthophoto_kmz: + generate_kmz(orthophoto_file) if args.tiles: generate_orthophoto_tiles(orthophoto_file, orthophoto_tiles_dir, args.max_concurrency) From 64861119cc10e22911d6cc7a3c73c6112456c333 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Sat, 17 Apr 2021 11:28:35 -0400 Subject: [PATCH 02/15] Update gpu.py --- opendm/gpu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendm/gpu.py b/opendm/gpu.py index 1455d339..06d7aacb 100644 --- a/opendm/gpu.py +++ b/opendm/gpu.py @@ -11,7 +11,7 @@ def has_gpus(): try: import pyopencl except: - log.ODM_INFO("PyOpenCL is missing (not a GPU build)") + log.ODM_INFO("NOt using the GPU") return False try: From 1a34343a73340eb7f2b5a2446157e98f00a04843 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Sat, 17 Apr 2021 11:28:50 -0400 Subject: [PATCH 03/15] Update gpu.py --- opendm/gpu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendm/gpu.py b/opendm/gpu.py index 06d7aacb..3335b2e5 100644 --- a/opendm/gpu.py +++ b/opendm/gpu.py @@ -11,7 +11,7 @@ def has_gpus(): try: import pyopencl except: - log.ODM_INFO("NOt using the GPU") + log.ODM_INFO("Not using the GPU") return False try: From 08c0e45a28b18eec379aac6489daf190f771f694 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 20 Apr 2021 10:00:03 -0400 Subject: [PATCH 04/15] Fix local variable 'octx' referenced before assignment --- stages/openmvs.py | 2 +- stages/run_opensfm.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/stages/openmvs.py b/stages/openmvs.py index 276eb32c..15bd7054 100644 --- a/stages/openmvs.py +++ b/stages/openmvs.py @@ -17,6 +17,7 @@ class ODMOpenMVSStage(types.ODM_Stage): tree = outputs['tree'] reconstruction = outputs['reconstruction'] photos = reconstruction.photos + octx = OSFMContext(tree.opensfm) if not photos: log.ODM_ERROR('Not enough photos in photos array to start OpenMVS') @@ -31,7 +32,6 @@ class ODMOpenMVSStage(types.ODM_Stage): # export reconstruction from opensfm openmvs_scene_file = os.path.join(tree.openmvs, "scene.mvs") if not io.file_exists(openmvs_scene_file) or self.rerun(): - octx = OSFMContext(tree.opensfm) cmd = 'export_openmvs' octx.run(cmd) else: diff --git a/stages/run_opensfm.py b/stages/run_opensfm.py index 9a54196a..5344b54e 100644 --- a/stages/run_opensfm.py +++ b/stages/run_opensfm.py @@ -28,8 +28,6 @@ class ODMOpenSfMStage(types.ODM_Stage): exit(1) octx = OSFMContext(tree.opensfm) - # TODO REMOVE - # octx.setup(args, tree.dataset_raw, reconstruction=reconstruction, rerun=False) octx.setup(args, tree.dataset_raw, reconstruction=reconstruction, rerun=self.rerun()) octx.extract_metadata(self.rerun()) self.update_progress(20) From 78a1fdd6132775ab18664aa2d6149947b189ff73 Mon Sep 17 00:00:00 2001 From: charnesp Date: Thu, 22 Apr 2021 20:23:35 +0200 Subject: [PATCH 05/15] Avoid bug when `resize-to=1` in WebODM When `resize-to`is set to `-1` in WebODM (default case in WebODM), `resize_to_is_set`is equal to `-1`, thus `feature_process_size`is set to `-1` and opensfm works at full image size. This patch avoid it. --- opendm/osfm.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opendm/osfm.py b/opendm/osfm.py index 8e337b1e..7f68ab99 100644 --- a/opendm/osfm.py +++ b/opendm/osfm.py @@ -157,7 +157,7 @@ class OSFMContext: # Compute feature_process_size feature_process_size = 2048 # default - if 'resize_to_is_set' in args: + if ('resize_to_is_set' in args) and (int(args.resize_to) != -1): # Legacy log.ODM_WARNING("Legacy option --resize-to (this might be removed in a future version). Use --feature-quality instead.") feature_process_size = int(args.resize_to) @@ -175,6 +175,7 @@ class OSFMContext: if max_dim > 0: log.ODM_INFO("Maximum photo dimensions: %spx" % str(max_dim)) feature_process_size = int(max_dim * feature_quality_scale[args.feature_quality]) + log.ODM_INFO("Photo dimensions for feature phase process: %i px" % feature_process_size) else: log.ODM_WARNING("Cannot compute max image dimensions, going with defaults") From 9be3e3ff4d04fd4c313ed1fd2a8e4b761b873505 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Thu, 22 Apr 2021 14:38:24 -0400 Subject: [PATCH 06/15] Minor style adjustment --- opendm/osfm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendm/osfm.py b/opendm/osfm.py index 7f68ab99..299bb7f6 100644 --- a/opendm/osfm.py +++ b/opendm/osfm.py @@ -157,7 +157,7 @@ class OSFMContext: # Compute feature_process_size feature_process_size = 2048 # default - if ('resize_to_is_set' in args) and (int(args.resize_to) != -1): + if ('resize_to_is_set' in args) and args.resize_to > 0: # Legacy log.ODM_WARNING("Legacy option --resize-to (this might be removed in a future version). Use --feature-quality instead.") feature_process_size = int(args.resize_to) @@ -175,7 +175,7 @@ class OSFMContext: if max_dim > 0: log.ODM_INFO("Maximum photo dimensions: %spx" % str(max_dim)) feature_process_size = int(max_dim * feature_quality_scale[args.feature_quality]) - log.ODM_INFO("Photo dimensions for feature phase process: %i px" % feature_process_size) + log.ODM_INFO("Photo dimensions for feature extraction: %ipx" % feature_process_size) else: log.ODM_WARNING("Cannot compute max image dimensions, going with defaults") From c256a87920940e7afe1773a9850e00c1d4f9b8bf Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Mon, 26 Apr 2021 11:12:33 -0400 Subject: [PATCH 07/15] Removed VTK, odm_cleanmesh module --- SuperBuild/cmake/External-OpenMVS.cmake | 2 +- licenses/license.md | 1 - modules/CMakeLists.txt | 1 - modules/odm_cleanmesh/CMakeLists.txt | 19 -- modules/odm_cleanmesh/src/CmdLineParser.h | 106 ------- modules/odm_cleanmesh/src/CmdLineParser.inl | 300 -------------------- modules/odm_cleanmesh/src/Logger.h | 33 --- modules/odm_cleanmesh/src/main.cpp | 114 -------- modules/odm_orthophoto/CMakeLists.txt | 1 - opendm/context.py | 1 + opendm/mesh.py | 26 +- snap/snapcraft.yaml | 2 - 12 files changed, 16 insertions(+), 590 deletions(-) delete mode 100644 modules/odm_cleanmesh/CMakeLists.txt delete mode 100644 modules/odm_cleanmesh/src/CmdLineParser.h delete mode 100644 modules/odm_cleanmesh/src/CmdLineParser.inl delete mode 100644 modules/odm_cleanmesh/src/Logger.h delete mode 100644 modules/odm_cleanmesh/src/main.cpp diff --git a/SuperBuild/cmake/External-OpenMVS.cmake b/SuperBuild/cmake/External-OpenMVS.cmake index c4bf3677..fec75ba9 100644 --- a/SuperBuild/cmake/External-OpenMVS.cmake +++ b/SuperBuild/cmake/External-OpenMVS.cmake @@ -20,7 +20,7 @@ ExternalProject_Add(${_proj_name} #--Download step-------------- DOWNLOAD_DIR ${SB_DOWNLOAD_DIR} GIT_REPOSITORY https://github.com/OpenDroneMap/openMVS - GIT_TAG 247 + GIT_TAG 2411 #--Update/Patch step---------- UPDATE_COMMAND "" #--Configure step------------- diff --git a/licenses/license.md b/licenses/license.md index 8648350f..11357853 100644 --- a/licenses/license.md +++ b/licenses/license.md @@ -19,7 +19,6 @@ Licensing for portions of OpenDroneMap are as follows: * Flann - BSD2 - http://opensource.org/licenses/bsd-license.php * Eigen - MPL2 - http://www.mozilla.org/MPL/2.0 * Qhull - http://www.qhull.org/COPYING.txt - * vtk5 - BSD - http://www.vtk.org/VTK/project/license.html * libext - https://github.com/OpenDroneMap/OpenDroneMap/blob/gh-pages/licenses/libext_copyright.txt * libx11 - https://github.com/OpenDroneMap/OpenDroneMap/blob/gh-pages/licenses/libx11_copyright.txt * MVS Texturing - BSD - https://github.com/nmoehrle/mvs-texturing/blob/master/LICENSE.txt diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 484900c9..5c372a95 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -5,4 +5,3 @@ endif() # Add ODM sub-modules add_subdirectory(odm_orthophoto) -add_subdirectory(odm_cleanmesh) diff --git a/modules/odm_cleanmesh/CMakeLists.txt b/modules/odm_cleanmesh/CMakeLists.txt deleted file mode 100644 index af97ab51..00000000 --- a/modules/odm_cleanmesh/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -project(odm_cleanmesh) -cmake_minimum_required(VERSION 2.8) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}) - -set (CMAKE_CXX_STANDARD 11) -find_package(VTK REQUIRED) -include(${VTK_USE_FILE}) - -# Add compiler options. -add_definitions(-Wall -Wextra) - -# Add source directory -aux_source_directory("./src" SRC_LIST) - -# Add exectuteable -add_executable(${PROJECT_NAME} ${SRC_LIST}) - -target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES}) diff --git a/modules/odm_cleanmesh/src/CmdLineParser.h b/modules/odm_cleanmesh/src/CmdLineParser.h deleted file mode 100644 index a1fbd0e3..00000000 --- a/modules/odm_cleanmesh/src/CmdLineParser.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - -#ifndef CMD_LINE_PARSER_INCLUDED -#define CMD_LINE_PARSER_INCLUDED - -#include -#include -#include -#include -#include - -#ifdef WIN32 -int strcasecmp( const char* c1 , const char* c2 ); -#endif // WIN32 - -class cmdLineReadable -{ -public: - bool set; - char *name; - cmdLineReadable( const char *name ); - virtual ~cmdLineReadable( void ); - virtual int read( char** argv , int argc ); - virtual void writeValue( char* str ) const; -}; - -template< class Type > void cmdLineWriteValue( Type t , char* str ); -template< class Type > void cmdLineCleanUp( Type* t ); -template< class Type > Type cmdLineInitialize( void ); -template< class Type > Type cmdLineCopy( Type t ); -template< class Type > Type cmdLineStringToType( const char* str ); - -template< class Type > -class cmdLineParameter : public cmdLineReadable -{ -public: - Type value; - cmdLineParameter( const char *name ); - cmdLineParameter( const char *name , Type v ); - ~cmdLineParameter( void ); - int read( char** argv , int argc ); - void writeValue( char* str ) const; - bool expectsArg( void ) const { return true; } -}; - -template< class Type , int Dim > -class cmdLineParameterArray : public cmdLineReadable -{ -public: - Type values[Dim]; - cmdLineParameterArray( const char *name, const Type* v=NULL ); - ~cmdLineParameterArray( void ); - int read( char** argv , int argc ); - void writeValue( char* str ) const; - bool expectsArg( void ) const { return true; } -}; - -template< class Type > -class cmdLineParameters : public cmdLineReadable -{ -public: - int count; - Type *values; - cmdLineParameters( const char* name ); - ~cmdLineParameters( void ); - int read( char** argv , int argc ); - void writeValue( char* str ) const; - bool expectsArg( void ) const { return true; } -}; - -void cmdLineParse( int argc , char **argv, cmdLineReadable** params ); -char* FileExtension( char* fileName ); -char* LocalFileName( char* fileName ); -char* DirectoryName( char* fileName ); -char* GetFileExtension( const char* fileName ); -char* GetLocalFileName( const char* fileName ); -char** ReadWords( const char* fileName , int& cnt ); - -#include "CmdLineParser.inl" -#endif // CMD_LINE_PARSER_INCLUDED diff --git a/modules/odm_cleanmesh/src/CmdLineParser.inl b/modules/odm_cleanmesh/src/CmdLineParser.inl deleted file mode 100644 index 84574a57..00000000 --- a/modules/odm_cleanmesh/src/CmdLineParser.inl +++ /dev/null @@ -1,300 +0,0 @@ -/* -*- C++ -*- -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - -#include -#include - -#if defined( WIN32 ) || defined( _WIN64 ) -inline int strcasecmp( const char* c1 , const char* c2 ){ return _stricmp( c1 , c2 ); } -#endif // WIN32 || _WIN64 - -template< > void cmdLineCleanUp< int >( int* t ){ *t = 0; } -template< > void cmdLineCleanUp< float >( float* t ){ *t = 0; } -template< > void cmdLineCleanUp< double >( double* t ){ *t = 0; } -template< > void cmdLineCleanUp< char* >( char** t ){ if( *t ) free( *t ) ; *t = NULL; } -template< > int cmdLineInitialize< int >( void ){ return 0; } -template< > float cmdLineInitialize< float >( void ){ return 0.f; } -template< > double cmdLineInitialize< double >( void ){ return 0.; } -template< > char* cmdLineInitialize< char* >( void ){ return NULL; } -template< > void cmdLineWriteValue< int >( int t , char* str ){ sprintf( str , "%d" , t ); } -template< > void cmdLineWriteValue< float >( float t , char* str ){ sprintf( str , "%f" , t ); } -template< > void cmdLineWriteValue< double >( double t , char* str ){ sprintf( str , "%f" , t ); } -template< > void cmdLineWriteValue< char* >( char* t , char* str ){ if( t ) sprintf( str , "%s" , t ) ; else str[0]=0; } -template< > int cmdLineCopy( int t ){ return t; } -template< > float cmdLineCopy( float t ){ return t; } -template< > double cmdLineCopy( double t ){ return t; } -#if defined( WIN32 ) || defined( _WIN64 ) -template< > char* cmdLineCopy( char* t ){ return _strdup( t ); } -#else // !WIN32 && !_WIN64 -template< > char* cmdLineCopy( char* t ){ return strdup( t ); } -#endif // WIN32 || _WIN64 -template< > int cmdLineStringToType( const char* str ){ return atoi( str ); } -template< > float cmdLineStringToType( const char* str ){ return float( atof( str ) ); } -template< > double cmdLineStringToType( const char* str ){ return double( atof( str ) ); } -#if defined( WIN32 ) || defined( _WIN64 ) -template< > char* cmdLineStringToType( const char* str ){ return _strdup( str ); } -#else // !WIN32 && !_WIN64 -template< > char* cmdLineStringToType( const char* str ){ return strdup( str ); } -#endif // WIN32 || _WIN64 - - -///////////////////// -// cmdLineReadable // -///////////////////// -#if defined( WIN32 ) || defined( _WIN64 ) -inline cmdLineReadable::cmdLineReadable( const char *name ) : set(false) { this->name = _strdup( name ); } -#else // !WIN32 && !_WIN64 -inline cmdLineReadable::cmdLineReadable( const char *name ) : set(false) { this->name = strdup( name ); } -#endif // WIN32 || _WIN64 - -inline cmdLineReadable::~cmdLineReadable( void ){ if( name ) free( name ) ; name = NULL; } -inline int cmdLineReadable::read( char** , int ){ set = true ; return 0; } -inline void cmdLineReadable::writeValue( char* str ) const { str[0] = 0; } - -////////////////////// -// cmdLineParameter // -////////////////////// -template< class Type > cmdLineParameter< Type >::~cmdLineParameter( void ) { cmdLineCleanUp( &value ); } -template< class Type > cmdLineParameter< Type >::cmdLineParameter( const char *name ) : cmdLineReadable( name ){ value = cmdLineInitialize< Type >(); } -template< class Type > cmdLineParameter< Type >::cmdLineParameter( const char *name , Type v ) : cmdLineReadable( name ){ value = cmdLineCopy< Type >( v ); } -template< class Type > -int cmdLineParameter< Type >::read( char** argv , int argc ) -{ - if( argc>0 ) - { - cmdLineCleanUp< Type >( &value ) , value = cmdLineStringToType< Type >( argv[0] ); - set = true; - return 1; - } - else return 0; -} -template< class Type > -void cmdLineParameter< Type >::writeValue( char* str ) const { cmdLineWriteValue< Type >( value , str ); } - - -/////////////////////////// -// cmdLineParameterArray // -/////////////////////////// -template< class Type , int Dim > -cmdLineParameterArray< Type , Dim >::cmdLineParameterArray( const char *name , const Type* v ) : cmdLineReadable( name ) -{ - if( v ) for( int i=0 ; i( v[i] ); - else for( int i=0 ; i(); -} -template< class Type , int Dim > -cmdLineParameterArray< Type , Dim >::~cmdLineParameterArray( void ){ for( int i=0 ; i( values+i ); } -template< class Type , int Dim > -int cmdLineParameterArray< Type , Dim >::read( char** argv , int argc ) -{ - if( argc>=Dim ) - { - for( int i=0 ; i( values+i ) , values[i] = cmdLineStringToType< Type >( argv[i] ); - set = true; - return Dim; - } - else return 0; -} -template< class Type , int Dim > -void cmdLineParameterArray< Type , Dim >::writeValue( char* str ) const -{ - char* temp=str; - for( int i=0 ; i( values[i] , temp ); - temp = str+strlen( str ); - } -} -/////////////////////// -// cmdLineParameters // -/////////////////////// -template< class Type > -cmdLineParameters< Type >::cmdLineParameters( const char* name ) : cmdLineReadable( name ) , values(NULL) , count(0) { } -template< class Type > -cmdLineParameters< Type >::~cmdLineParameters( void ) -{ - if( values ) delete[] values; - values = NULL; - count = 0; -} -template< class Type > -int cmdLineParameters< Type >::read( char** argv , int argc ) -{ - if( values ) delete[] values; - values = NULL; - - if( argc>0 ) - { - count = atoi(argv[0]); - if( count <= 0 || argc <= count ) return 1; - values = new Type[count]; - if( !values ) return 0; - for( int i=0 ; i( argv[i+1] ); - set = true; - return count+1; - } - else return 0; -} -template< class Type > -void cmdLineParameters< Type >::writeValue( char* str ) const -{ - char* temp=str; - for( int i=0 ; i( values[i] , temp ); - temp = str+strlen( str ); - } -} - - -inline char* FileExtension( char* fileName ) -{ - char* temp = fileName; - for( unsigned int i=0 ; i=0 ; i-- ) - if( fileName[i] =='\\' ) - { - fileName[i] = 0; - return fileName; - } - fileName[0] = 0; - return fileName; -} - -inline void cmdLineParse( int argc , char **argv , cmdLineReadable** params ) -{ - while( argc>0 ) - { - if( argv[0][0]=='-' ) - { - cmdLineReadable* readable=NULL; - for( int i=0 ; params[i]!=NULL && readable==NULL ; i++ ) if( !strcasecmp( params[i]->name , argv[0]+1 ) ) readable = params[i]; - if( readable ) - { - int j = readable->read( argv+1 , argc-1 ); - argv += j , argc -= j; - } - else - { - fprintf( stderr , "[WARNING] Invalid option: %s\n" , argv[0] ); - for( int i=0 ; params[i]!=NULL ; i++ ) printf( "\t-%s\n" , params[i]->name ); - } - } - else fprintf( stderr , "[WARNING] Parameter name should be of the form -: %s\n" , argv[0] ); - ++argv , --argc; - } -} - -inline char** ReadWords(const char* fileName,int& cnt) -{ - char** names; - char temp[500]; - FILE* fp; - - fp=fopen(fileName,"r"); - if(!fp){return NULL;} - cnt=0; - while(fscanf(fp," %s ",temp)==1){cnt++;} - fclose(fp); - - names=new char*[cnt]; - if(!names){return NULL;} - - fp=fopen(fileName,"r"); - if(!fp){ - delete[] names; - cnt=0; - return NULL; - } - cnt=0; - while(fscanf(fp," %s ",temp)==1){ - names[cnt]=new char[strlen(temp)+1]; - if(!names){ - for(int j=0;j -#include -#include "CmdLineParser.h" - -struct Logger{ - bool verbose; - const char* outputFile; - - Logger(){ - this->verbose = false; - this->outputFile = NULL; - } - - void operator() ( const char* format , ... ) - { - if( outputFile ) - { - FILE* fp = fopen( outputFile , "a" ); - va_list args; - va_start( args , format ); - vfprintf( fp , format , args ); - fclose( fp ); - va_end( args ); - } - if( verbose ) - { - va_list args; - va_start( args , format ); - vprintf( format , args ); - va_end( args ); - } - } -}; diff --git a/modules/odm_cleanmesh/src/main.cpp b/modules/odm_cleanmesh/src/main.cpp deleted file mode 100644 index c5251c0f..00000000 --- a/modules/odm_cleanmesh/src/main.cpp +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "CmdLineParser.h" -#include "Logger.h" - -Logger logWriter; - -cmdLineParameter< char* > - InputFile( "inputFile" ) , - OutputFile( "outputFile" ); -cmdLineParameter< int > - DecimateMesh( "decimateMesh" ); -cmdLineReadable - RemoveIslands( "removeIslands" ) , - Verbose( "verbose" ); - -cmdLineReadable* params[] = { - &InputFile , &OutputFile , &DecimateMesh, &RemoveIslands, &Verbose , - NULL -}; - -void help(char *ex){ - std::cout << "Usage: " << ex << std::endl - << "\t -" << InputFile.name << " " << std::endl - << "\t -" << OutputFile.name << " " << std::endl - << "\t [-" << DecimateMesh.name << " ]" << std::endl - << "\t [-" << RemoveIslands.name << "]" << std::endl - - << "\t [-" << Verbose.name << "]" << std::endl; - exit(EXIT_FAILURE); -} - - -void logArgs(cmdLineReadable* params[], Logger& logWriter){ - logWriter("Running with parameters:\n"); - char str[1024]; - for( int i=0 ; params[i] ; i++ ){ - if( params[i]->set ){ - params[i]->writeValue( str ); - if( strlen( str ) ) logWriter( "\t--%s %s\n" , params[i]->name , str ); - else logWriter( "\t--%s\n" , params[i]->name ); - } - } -} - - -int main(int argc, char **argv) { - cmdLineParse( argc-1 , &argv[1] , params ); - if( !InputFile.set || !OutputFile.set ) help(argv[0]); - if( !RemoveIslands.set && !DecimateMesh.set ) help (argv[0]); - - - logWriter.verbose = Verbose.set; - // logWriter.outputFile = "odm_cleanmesh_log.txt"; - logArgs(params, logWriter); - - vtkSmartPointer reader = - vtkSmartPointer::New(); - reader->SetFileName ( InputFile.value ); - reader->Update(); - - vtkPolyData *nextOutput = reader->GetOutput(); - - vtkSmartPointer connectivityFilter = - vtkSmartPointer::New(); - connectivityFilter->SetExtractionModeToLargestRegion(); - - vtkSmartPointer decimationFilter = - vtkSmartPointer::New(); - - if (RemoveIslands.set){ - logWriter("Removing islands\n"); - connectivityFilter->SetInputData(nextOutput); - connectivityFilter->Update(); - nextOutput = connectivityFilter->GetOutput(); - } - - if (DecimateMesh.set){ - logWriter("Decimating mesh\n"); - - int vertexCount = nextOutput->GetNumberOfPoints(); - logWriter("Current vertex count: %d\n", vertexCount); - logWriter("Wanted vertex count: %d\n", DecimateMesh.value); - - if (vertexCount > DecimateMesh.value){ - double targetReduction = 1.0 - static_cast(DecimateMesh.value) / static_cast(vertexCount); - logWriter("Target reduction set to %f\n", targetReduction); - decimationFilter->SetTargetReduction(targetReduction); - decimationFilter->SetInputData(nextOutput); - decimationFilter->Update(); - nextOutput = decimationFilter->GetOutput(); - }else{ - logWriter("Skipping decimation\n"); - } - } - - logWriter("Saving cleaned mesh to file... \n"); - - vtkSmartPointer plyWriter = - vtkSmartPointer::New(); - plyWriter->SetFileName(OutputFile.value); - plyWriter->SetFileTypeToBinary(); - plyWriter->SetInputData(nextOutput); - plyWriter->Write(); - - logWriter("OK\n"); -} diff --git a/modules/odm_orthophoto/CMakeLists.txt b/modules/odm_orthophoto/CMakeLists.txt index 68e18ec0..6c8f20e0 100644 --- a/modules/odm_orthophoto/CMakeLists.txt +++ b/modules/odm_orthophoto/CMakeLists.txt @@ -9,7 +9,6 @@ set(OPENCV_DIR "OPENCV_DIR-NOTFOUND" CACHE "OPENCV_DIR" "Path to the OPENCV inst add_definitions(-Wall -Wextra) # Find pcl at the location specified by PCL_DIR -find_package(VTK 6.0 REQUIRED) find_package(PCL 1.8 HINTS "${PCL_DIR}/share/pcl-1.8" REQUIRED) find_package(GDAL REQUIRED) include_directories(${GDAL_INCLUDE_DIR}) diff --git a/opendm/context.py b/opendm/context.py index 387686c2..f050234e 100644 --- a/opendm/context.py +++ b/opendm/context.py @@ -36,6 +36,7 @@ mvstex_path = os.path.join(superbuild_path, "install/bin/texrecon") # openmvs paths omvs_densify_path = os.path.join(superbuild_path, "install/bin/OpenMVS/DensifyPointCloud") +omvs_reconstructmesh_path = os.path.join(superbuild_path, "install/bin/OpenMVS/ReconstructMesh") # define txt2las path txt2las_path = os.path.join(superbuild_path, 'src/las-tools/bin') diff --git a/opendm/mesh.py b/opendm/mesh.py index f8bb51da..05b5fabd 100644 --- a/opendm/mesh.py +++ b/opendm/mesh.py @@ -117,17 +117,18 @@ def dem_to_mesh_gridded(inGeotiff, outMesh, maxVertexCount, verbose=False, maxCo # Cleanup and reduce vertex count if necessary # (as dem2mesh cannot guarantee that we'll have the target vertex count) cleanupArgs = { - 'bin': context.odm_modules_path, + 'reconstructmesh': context.omvs_reconstructmesh_path, 'outfile': outMesh, 'infile': outMeshDirty, - 'max_vertex': maxVertexCount, + 'max_faces': maxVertexCount * 2, 'verbose': '-verbose' if verbose else '' } - system.run('{bin}/odm_cleanmesh -inputFile {infile} ' - '-outputFile {outfile} ' - '-removeIslands ' - '-decimateMesh {max_vertex} {verbose} '.format(**cleanupArgs)) + system.run('{reconstructmesh} --mesh-file "{infile}" ' + '-o "{outfile}" ' + '--remove-spikes 0 --remove-spurious 0 --smooth 0 ' + '--target-face-num {max_faces} ' + '{verbose} '.format(**cleanupArgs)) # Delete intermediate results os.remove(outMeshDirty) @@ -170,17 +171,18 @@ def screened_poisson_reconstruction(inPointCloud, outMesh, depth = 8, samples = # Cleanup and reduce vertex count if necessary cleanupArgs = { - 'bin': context.odm_modules_path, + 'reconstructmesh': context.omvs_reconstructmesh_path, 'outfile': outMesh, 'infile': outMeshDirty, - 'max_vertex': maxVertexCount, + 'max_faces': maxVertexCount * 2, 'verbose': '-verbose' if verbose else '' } - system.run('{bin}/odm_cleanmesh -inputFile {infile} ' - '-outputFile {outfile} ' - '-removeIslands ' - '-decimateMesh {max_vertex} {verbose} '.format(**cleanupArgs)) + system.run('{reconstructmesh} --mesh-file "{infile}" ' + '-o "{outfile}" ' + '--remove-spikes 0 --remove-spurious 0 --smooth 0 ' + '--target-face-num {max_faces} ' + '{verbose} '.format(**cleanupArgs)) # Delete intermediate results os.remove(outMeshDirty) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 478f803f..37359d88 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -93,7 +93,6 @@ parts: - libswscale-dev - libtbb-dev - libtiff-dev - - libvtk6-dev - libxext-dev - proj-bin stage-packages: @@ -109,7 +108,6 @@ parts: - libswscale5 - libtbb2 - libtiff5 - - libvtk6.3 - libwebpdemux2 - libxext6 From 63a2a160fe9aa7271e6700e856092eeaccb5b342 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Mon, 26 Apr 2021 11:14:21 -0400 Subject: [PATCH 08/15] Bump version --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index b0f6bf0c..11e32126 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.4.10 +2.4.11 From c9f56c33ebfa878e04dcf6a69660be1fcc79c028 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Mon, 26 Apr 2021 14:22:00 -0400 Subject: [PATCH 09/15] Do not build with VTK --- SuperBuild/cmake/External-PCL.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/SuperBuild/cmake/External-PCL.cmake b/SuperBuild/cmake/External-PCL.cmake index ff30e21b..7c547228 100644 --- a/SuperBuild/cmake/External-PCL.cmake +++ b/SuperBuild/cmake/External-PCL.cmake @@ -35,6 +35,7 @@ ExternalProject_Add(${_proj_name} -DBUILD_tools=OFF -DBUILD_tracking=OFF -DBUILD_visualization=OFF + -DWITH_VTK=OFF -DWITH_QT=OFF -DBUILD_OPENNI=OFF -DBUILD_OPENNI2=OFF From 520277e89875a8d49b9e3ce6f67d311402ba4e85 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Mon, 26 Apr 2021 14:50:35 -0400 Subject: [PATCH 10/15] Update PCL to 1.11.1 --- SuperBuild/cmake/External-PCL.cmake | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/SuperBuild/cmake/External-PCL.cmake b/SuperBuild/cmake/External-PCL.cmake index 7c547228..93895ade 100644 --- a/SuperBuild/cmake/External-PCL.cmake +++ b/SuperBuild/cmake/External-PCL.cmake @@ -7,14 +7,7 @@ ExternalProject_Add(${_proj_name} STAMP_DIR ${_SB_BINARY_DIR}/stamp #--Download step-------------- DOWNLOAD_DIR ${SB_DOWNLOAD_DIR} - - # PCL 1.8 + Fix for loading large point clouds https://github.com/OpenDroneMap/pcl/commit/924ab1137fbfa3004f222fb0834e3d66881ec057 - URL https://github.com/OpenDroneMap/pcl/archive/master.zip - - #-- TODO: Use PCL 1.9.1 when we upgrade to a newer version of Ubuntu. Currently - #-- it's troublesome to compile due to the older version of Boost shipping with 16.04. - #-- URL https://github.com/PointCloudLibrary/pcl/archive/pcl-1.9.1.tar.gz - + URL https://github.com/PointCloudLibrary/pcl/archive/refs/tags/pcl-1.11.1.zip #--Update/Patch step---------- UPDATE_COMMAND "" #--Configure step------------- From 8040c1763ffe51c8cbb8e1bd7ef2548f0b690cae Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Mon, 26 Apr 2021 14:59:04 -0400 Subject: [PATCH 11/15] Remove zstd, do not require OpenGL for PCL --- SuperBuild/CMakeLists.txt | 7 ++-- SuperBuild/cmake/External-PCL.cmake | 1 + SuperBuild/cmake/External-PDAL.cmake | 48 ++++++++++++++-------------- SuperBuild/cmake/External-Zstd.cmake | 26 --------------- 4 files changed, 28 insertions(+), 54 deletions(-) delete mode 100644 SuperBuild/cmake/External-Zstd.cmake diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt index 0a5b9ab9..e8961770 100644 --- a/SuperBuild/CMakeLists.txt +++ b/SuperBuild/CMakeLists.txt @@ -106,12 +106,11 @@ SETUP_EXTERNAL_PROJECT(Hexer 1.4 ON) set(custom_libs OpenSfM LASzip - Zstd PDAL - Untwine - Entwine + Untwine + Entwine MvsTexturing - OpenMVS + OpenMVS ) foreach(lib ${custom_libs}) diff --git a/SuperBuild/cmake/External-PCL.cmake b/SuperBuild/cmake/External-PCL.cmake index 93895ade..914fc680 100644 --- a/SuperBuild/cmake/External-PCL.cmake +++ b/SuperBuild/cmake/External-PCL.cmake @@ -28,6 +28,7 @@ ExternalProject_Add(${_proj_name} -DBUILD_tools=OFF -DBUILD_tracking=OFF -DBUILD_visualization=OFF + -DWITH_OPENGL=OFF -DWITH_VTK=OFF -DWITH_QT=OFF -DBUILD_OPENNI=OFF diff --git a/SuperBuild/cmake/External-PDAL.cmake b/SuperBuild/cmake/External-PDAL.cmake index 879826c0..3f8bf88a 100644 --- a/SuperBuild/cmake/External-PDAL.cmake +++ b/SuperBuild/cmake/External-PDAL.cmake @@ -2,7 +2,7 @@ set(_proj_name pdal) set(_SB_BINARY_DIR "${SB_BINARY_DIR}/${_proj_name}") ExternalProject_Add(${_proj_name} - DEPENDS zstd hexer laszip + DEPENDS hexer laszip PREFIX ${_SB_BINARY_DIR} TMP_DIR ${_SB_BINARY_DIR}/tmp STAMP_DIR ${_SB_BINARY_DIR}/stamp @@ -17,29 +17,29 @@ ExternalProject_Add(${_proj_name} -DBUILD_PGPOINTCLOUD_TESTS=OFF -DBUILD_PLUGIN_PGPOINTCLOUD=OFF -DBUILD_PLUGIN_CPD=OFF - -DBUILD_PLUGIN_GREYHOUND=OFF - -DBUILD_PLUGIN_HEXBIN=ON - -DBUILD_PLUGIN_ICEBRIDGE=OFF - -DBUILD_PLUGIN_MRSID=OFF - -DBUILD_PLUGIN_NITF=OFF - -DBUILD_PLUGIN_OCI=OFF - -DBUILD_PLUGIN_P2G=OFF - -DBUILD_PLUGIN_SQLITE=OFF - -DBUILD_PLUGIN_RIVLIB=OFF - -DBUILD_PLUGIN_PYTHON=OFF - -DWITH_ZSTD=ON - -DENABLE_CTEST=OFF - -DWITH_APPS=ON - -DWITH_LAZPERF=OFF - -DWITH_GEOTIFF=ON - -DWITH_LASZIP=ON - -DLASZIP_FOUND=TRUE - -DLASZIP_LIBRARIES=${SB_INSTALL_DIR}/lib/liblaszip.so - -DLASZIP_VERSION=3.1.1 - -DLASZIP_INCLUDE_DIR=${SB_INSTALL_DIR}/include - -DLASZIP_LIBRARY=${SB_INSTALL_DIR}/lib/liblaszip.so - -DWITH_TESTS=OFF - -DCMAKE_BUILD_TYPE=Release + -DBUILD_PLUGIN_GREYHOUND=OFF + -DBUILD_PLUGIN_HEXBIN=ON + -DBUILD_PLUGIN_ICEBRIDGE=OFF + -DBUILD_PLUGIN_MRSID=OFF + -DBUILD_PLUGIN_NITF=OFF + -DBUILD_PLUGIN_OCI=OFF + -DBUILD_PLUGIN_P2G=OFF + -DBUILD_PLUGIN_SQLITE=OFF + -DBUILD_PLUGIN_RIVLIB=OFF + -DBUILD_PLUGIN_PYTHON=OFF + -DWITH_ZSTD=OFF + -DENABLE_CTEST=OFF + -DWITH_APPS=ON + -DWITH_LAZPERF=OFF + -DWITH_GEOTIFF=ON + -DWITH_LASZIP=ON + -DLASZIP_FOUND=TRUE + -DLASZIP_LIBRARIES=${SB_INSTALL_DIR}/lib/liblaszip.so + -DLASZIP_VERSION=3.1.1 + -DLASZIP_INCLUDE_DIR=${SB_INSTALL_DIR}/include + -DLASZIP_LIBRARY=${SB_INSTALL_DIR}/lib/liblaszip.so + -DWITH_TESTS=OFF + -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=${SB_INSTALL_DIR} #--Build step----------------- BINARY_DIR ${_SB_BINARY_DIR} diff --git a/SuperBuild/cmake/External-Zstd.cmake b/SuperBuild/cmake/External-Zstd.cmake deleted file mode 100644 index 5fc23bef..00000000 --- a/SuperBuild/cmake/External-Zstd.cmake +++ /dev/null @@ -1,26 +0,0 @@ -set(_proj_name zstd) -set(_SB_BINARY_DIR "${SB_BINARY_DIR}/${_proj_name}") - -ExternalProject_Add(${_proj_name} - PREFIX ${_SB_BINARY_DIR} - TMP_DIR ${_SB_BINARY_DIR}/tmp - STAMP_DIR ${_SB_BINARY_DIR}/stamp - #--Download step-------------- - DOWNLOAD_DIR ${SB_DOWNLOAD_DIR} - GIT_REPOSITORY https://github.com/facebook/zstd - GIT_TAG b84274da0f641907dfe472d5da132d872202e9b8 - #--Update/Patch step---------- - UPDATE_COMMAND "" - #--Configure step------------- - SOURCE_DIR ${SB_SOURCE_DIR}/${_proj_name} - CONFIGURE_COMMAND ${CMAKE_COMMAND} -DZSTD_BUILD_PROGRAMS=OFF -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=${SB_INSTALL_DIR} - /build/cmake - #--Build step----------------- - BINARY_DIR ${_SB_BINARY_DIR} - #--Install step--------------- - INSTALL_DIR ${SB_INSTALL_DIR} - #--Output logging------------- - LOG_DOWNLOAD OFF - LOG_CONFIGURE OFF - LOG_BUILD OFF -) From 3a1048eba4fbe0eeac88b31527c06202d48aea4e Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Mon, 26 Apr 2021 18:00:57 -0400 Subject: [PATCH 12/15] Don't build entwine with zstd --- SuperBuild/cmake/External-Entwine.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SuperBuild/cmake/External-Entwine.cmake b/SuperBuild/cmake/External-Entwine.cmake index 45c6a7ae..eb29b6e5 100644 --- a/SuperBuild/cmake/External-Entwine.cmake +++ b/SuperBuild/cmake/External-Entwine.cmake @@ -18,7 +18,8 @@ ExternalProject_Add(${_proj_name} -DCMAKE_CXX_FLAGS=-isystem\ ${SB_SOURCE_DIR}/pdal -DADDITIONAL_LINK_DIRECTORIES_PATHS=${SB_INSTALL_DIR}/lib -DWITH_TESTS=OFF - -DCMAKE_BUILD_TYPE=Release + -DWITH_ZSTD=OFF + -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=${SB_INSTALL_DIR} #--Build step----------------- BINARY_DIR ${_SB_BINARY_DIR} From 4ba45dcd2fcd1c09da90c8562f12e5fbc231d176 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 27 Apr 2021 09:15:37 -0400 Subject: [PATCH 13/15] Entwine without zstd support --- SuperBuild/cmake/External-Entwine.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SuperBuild/cmake/External-Entwine.cmake b/SuperBuild/cmake/External-Entwine.cmake index eb29b6e5..fbb36b9f 100644 --- a/SuperBuild/cmake/External-Entwine.cmake +++ b/SuperBuild/cmake/External-Entwine.cmake @@ -8,8 +8,8 @@ ExternalProject_Add(${_proj_name} STAMP_DIR ${_SB_BINARY_DIR}/stamp #--Download step-------------- DOWNLOAD_DIR ${SB_DOWNLOAD_DIR} - GIT_REPOSITORY https://github.com/connormanning/entwine/ - GIT_TAG 2.1.0 + GIT_REPOSITORY https://github.com/OpenDroneMap/entwine/ + GIT_TAG 2411 #--Update/Patch step---------- UPDATE_COMMAND "" #--Configure step------------- From f7dfc9883252782712b9e2794563ef68ece890a8 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 27 Apr 2021 11:43:51 -0400 Subject: [PATCH 14/15] dem2points, dem2mesh install targets --- SuperBuild/CMakeLists.txt | 10 ++++------ configure.sh | 7 +++++-- opendm/context.py | 12 +++++------- snap/snapcraft.yaml | 3 ++- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt index e8961770..df5e604f 100644 --- a/SuperBuild/CMakeLists.txt +++ b/SuperBuild/CMakeLists.txt @@ -134,19 +134,17 @@ externalproject_add(poissonrecon externalproject_add(dem2mesh GIT_REPOSITORY https://github.com/OpenDroneMap/dem2mesh.git GIT_TAG master + PREFIX ${SB_BINARY_DIR}/dem2mesh SOURCE_DIR ${SB_SOURCE_DIR}/dem2mesh - UPDATE_COMMAND "" - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "" + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SB_INSTALL_DIR} ) externalproject_add(dem2points GIT_REPOSITORY https://github.com/OpenDroneMap/dem2points.git GIT_TAG master + PREFIX ${SB_BINARY_DIR}/dem2points SOURCE_DIR ${SB_SOURCE_DIR}/dem2points - UPDATE_COMMAND "" - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "" + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SB_INSTALL_DIR} ) externalproject_add(lastools diff --git a/configure.sh b/configure.sh index 4b3ff049..96cd7dee 100755 --- a/configure.sh +++ b/configure.sh @@ -185,10 +185,13 @@ clean() { ${RUNPATH}/SuperBuild/src/opengv \ ${RUNPATH}/SuperBuild/src/pcl \ ${RUNPATH}/SuperBuild/src/pdal \ + ${RUNPATH}/SuperBuild/src/dem2mesh \ + ${RUNPATH}/SuperBuild/build/dem2mesh \ + ${RUNPATH}/SuperBuild/src/dem2points \ + ${RUNPATH}/SuperBuild/build/dem2points \ ${RUNPATH}/SuperBuild/src/openmvs \ ${RUNPATH}/SuperBuild/build/openmvs \ - ${RUNPATH}/SuperBuild/src/vcg \ - ${RUNPATH}/SuperBuild/src/zstd + ${RUNPATH}/SuperBuild/src/vcg # find in /code and delete static libraries and intermediate object files find ${RUNPATH} -type f -name "*.a" -delete -or -type f -name "*.o" -delete diff --git a/opendm/context.py b/opendm/context.py index f050234e..1ccd6cba 100644 --- a/opendm/context.py +++ b/opendm/context.py @@ -8,8 +8,6 @@ root_path, _ = os.path.split(current_path) superbuild_path = os.path.join(root_path, 'SuperBuild') superbuild_bin_path = os.path.join(superbuild_path, 'install', 'bin') -tests_path = os.path.join(root_path, 'tests') -tests_data_path = os.path.join(root_path, 'tests/test_data') # add opencv,opensfm to python path python_packages_paths = [os.path.join(superbuild_path, p) for p in [ @@ -28,15 +26,15 @@ opensfm_path = os.path.join(superbuild_path, "src/opensfm") orb_slam2_path = os.path.join(superbuild_path, "src/orb_slam2") poisson_recon_path = os.path.join(superbuild_path, 'src', 'PoissonRecon', 'Bin', 'Linux', 'PoissonRecon') -dem2mesh_path = os.path.join(superbuild_path, 'src', 'dem2mesh', 'dem2mesh') -dem2points_path = os.path.join(superbuild_path, 'src', 'dem2points', 'dem2points') +dem2mesh_path = os.path.join(superbuild_bin_path, 'dem2mesh') +dem2points_path = os.path.join(superbuild_path, 'dem2points') # define mvstex path -mvstex_path = os.path.join(superbuild_path, "install/bin/texrecon") +mvstex_path = os.path.join(superbuild_bin_path, "texrecon") # openmvs paths -omvs_densify_path = os.path.join(superbuild_path, "install/bin/OpenMVS/DensifyPointCloud") -omvs_reconstructmesh_path = os.path.join(superbuild_path, "install/bin/OpenMVS/ReconstructMesh") +omvs_densify_path = os.path.join(superbuild_bin_path, "OpenMVS", "DensifyPointCloud") +omvs_reconstructmesh_path = os.path.join(superbuild_bin_path, "OpenMVS", "ReconstructMesh") # define txt2las path txt2las_path = os.path.join(superbuild_path, 'src/las-tools/bin') diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 37359d88..61d0883a 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -213,7 +213,8 @@ parts: - -odm/SuperBuild/src/pcl - -odm/SuperBuild/src/pdal - -odm/SuperBuild/src/vcg - - -odm/SuperBuild/src/zstd + - -odm/SuperBuild/src/dem2mesh + - -odm/SuperBuild/src/dem2points prime: # remove any static-libraries - -**/*.a From 5a5685e70574d4436e74af4d0da7b8267186e1d0 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 27 Apr 2021 13:00:13 -0400 Subject: [PATCH 15/15] Fix odm_orthophoto link to boost --- modules/odm_orthophoto/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/odm_orthophoto/CMakeLists.txt b/modules/odm_orthophoto/CMakeLists.txt index 6c8f20e0..bd7217c5 100644 --- a/modules/odm_orthophoto/CMakeLists.txt +++ b/modules/odm_orthophoto/CMakeLists.txt @@ -11,6 +11,10 @@ add_definitions(-Wall -Wextra) # Find pcl at the location specified by PCL_DIR find_package(PCL 1.8 HINTS "${PCL_DIR}/share/pcl-1.8" REQUIRED) find_package(GDAL REQUIRED) + +# PCL should already link to Boost, but for some reason it doesn't... +find_package(Boost COMPONENTS filesystem REQUIRED) + include_directories(${GDAL_INCLUDE_DIR}) # Find OpenCV at the default location @@ -35,4 +39,4 @@ add_executable(${PROJECT_NAME} ${SRC_LIST}) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11 ) -target_link_libraries(odm_orthophoto ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} ${PCL_SURFACE_LIBRARIES} ${OpenCV_LIBS} ${GDAL_LIBRARY}) +target_link_libraries(odm_orthophoto ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} ${PCL_SURFACE_LIBRARIES} ${OpenCV_LIBS} ${GDAL_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})