Ejemplo n.º 1
0
bool MDAL::DriverGdal::canRead( const std::string &uri )
{
  try
  {
    registerDriver();
    parseDatasetNames( uri );
  }
  catch ( MDAL_Status )
  {
    return false;
  }
  return true;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[]) {
	if (argc != 2 || _stricmp(INSTALL_COMMAND, argv[1]) != 0 && _stricmp(UNINSTALL_COMMAND, argv[1]) != 0) {
		MessageBoxA(NULL, USAGE_MSG, INFORMATION_TITLE, MB_OK | MB_ICONINFORMATION);
		return 1;
	}
	if (_stricmp(UNINSTALL_COMMAND, argv[1]) == 0) {
		char pathName[MAX_PATH + 1];
		constructDriverPathName(pathName);
		deleteFileReliably(pathName);
		unregisterDriver();
		return 0;
	}
	int setupPathLen = strrchr(argv[0], '\\') - argv[0];
	if (setupPathLen > MAX_PATH - sizeof(MT32EMU_DRIVER_NAME) - 2) {
		MessageBoxA(NULL, CANNOT_INSTALL_PATH_TOO_LONG_ERR, ERROR_TITLE, MB_OK | MB_ICONEXCLAMATION);
		return 2;
	}
	bool installMode = true;
	if (!registerDriver(installMode)) {
		return 3;
	}
	char driverPathName[MAX_PATH + 1];
	constructDriverPathName(driverPathName);
	deleteFileReliably(driverPathName);
	char setupPathName[MAX_PATH + 1];
	strncpy(setupPathName, argv[0], setupPathLen);
	setupPathName[setupPathLen] = 0;
	strncat(setupPathName, PATH_SEPARATOR, MAX_PATH - strlen(setupPathName));
	strncat(setupPathName, MT32EMU_DRIVER_NAME, MAX_PATH - strlen(setupPathName));
	if (!CopyFileA(setupPathName, driverPathName, FALSE)) {
		MessageBoxA(NULL, CANNOT_INSTALL_FILE_COPY_ERR, FILE_ERROR_TITLE, MB_OK | MB_ICONEXCLAMATION);
		return 4;
	}
	MessageBoxA(NULL, installMode ? SUCCESSFULLY_INSTALLED_MSG : SUCCESSFULLY_UPDATED_MSG, INFORMATION_TITLE, MB_OK | MB_ICONINFORMATION);
	return 0;
}
Ejemplo n.º 3
0
std::unique_ptr<MDAL::Mesh> MDAL::LoaderGdal::load( MDAL_Status *status )
{
  if ( status ) *status = MDAL_Status::None ;

  mPafScanline = nullptr;
  mMesh.reset();

  try
  {
    registerDriver();

    // some formats like NETCFD has data stored in subdatasets
    std::vector<std::string> subdatasets = parseDatasetNames( mFileName );

    // First parse ALL datasets/bands to gather vector quantities
    // if case they are splitted in different subdatasets
    for ( auto iter = subdatasets.begin(); iter != subdatasets.end(); ++iter )
    {
      std::string gdal_dataset_name = *iter;
      // Parse dataset parameters and projection
      MDAL::GdalDataset *cfGDALDataset = new MDAL::GdalDataset;
      cfGDALDataset->init( gdal_dataset_name );

      if ( !mMesh )
      {
        // If it is first dataset, create mesh from it
        gdal_datasets.push_back( cfGDALDataset );

        // Init memory for data reader
        mPafScanline = new double [cfGDALDataset->mXSize];

        // Create mMesh
        createMesh();

        // Parse bands
        parseRasterBands( cfGDALDataset );

      }
      else if ( meshes_equals( meshGDALDataset(), cfGDALDataset ) )
      {
        gdal_datasets.push_back( cfGDALDataset );
        // Parse bands
        parseRasterBands( cfGDALDataset );
      }
      else
      {
        // Do not use
        delete cfGDALDataset;
      }
    }

    // Create MDAL datasets
    addDatasetGroups();
  }
  catch ( MDAL_Status error )
  {
    if ( status ) *status = ( error );
    mMesh.reset();
  }

  for ( auto it = gdal_datasets.begin(); it != gdal_datasets.end(); ++it )
  {
    delete ( *it );
  }
  gdal_datasets.clear();

  if ( mPafScanline ) delete[] mPafScanline;

  // do not allow mesh without any valid datasets
  if ( mMesh && ( mMesh->datasetGroups.empty() ) )
  {
    if ( status ) *status = MDAL_Status::Err_InvalidData;
    mMesh.reset();
  }
  return std::unique_ptr<Mesh>( mMesh.release() );
}
Ejemplo n.º 4
0
std::unique_ptr<MDAL::Mesh> MDAL::DriverGdal::load( const std::string &fileName, MDAL_Status *status )
{
  mFileName = fileName;
  if ( status ) *status = MDAL_Status::None ;

  mPafScanline = nullptr;
  mMesh.reset();

  try
  {
    registerDriver();

    // some formats like NETCFD has data stored in subdatasets
    std::vector<std::string> subdatasets = parseDatasetNames( mFileName );

    // First parse ALL datasets/bands to gather vector quantities
    // if case they are splitted in different subdatasets
    for ( auto iter = subdatasets.begin(); iter != subdatasets.end(); ++iter )
    {
      std::string gdal_dataset_name = *iter;
      // Parse dataset parameters and projection
      std::shared_ptr<MDAL::GdalDataset> cfGDALDataset = std::make_shared<MDAL::GdalDataset>();
      cfGDALDataset->init( gdal_dataset_name );

      if ( !mMesh )
      {
        // If it is first dataset, create mesh from it
        gdal_datasets.push_back( cfGDALDataset );

        // Init memory for data reader
        mPafScanline = new double [cfGDALDataset->mXSize];

        // Create mMesh
        createMesh();

        // Parse bands
        parseRasterBands( cfGDALDataset.get() );

      }
      else if ( meshes_equals( meshGDALDataset(), cfGDALDataset.get() ) )
      {
        gdal_datasets.push_back( cfGDALDataset );
        // Parse bands
        parseRasterBands( cfGDALDataset.get() );
      }
    }

    // Fix consistency of groups
    // It can happen that we thought that the
    // group is vector based on name, but it could be just coicidence
    // or clash in naming
    fixRasterBands();

    // Create MDAL datasets
    addDatasetGroups();
  }
  catch ( MDAL_Status error )
  {
    if ( status ) *status = ( error );
    mMesh.reset();
  }

  gdal_datasets.clear();

  if ( mPafScanline ) delete[] mPafScanline;

  // do not allow mesh without any valid datasets
  if ( mMesh && ( mMesh->datasetGroups.empty() ) )
  {
    if ( status ) *status = MDAL_Status::Err_InvalidData;
    mMesh.reset();
  }
  return std::unique_ptr<Mesh>( mMesh.release() );
}