Exemplo n.º 1
0
CC_FILE_ERROR FileIOFilter::SaveToFile(ccHObject* entities, const char* filename, CC_FILE_TYPES fType)
{
    if (!entities || !filename || fType == UNKNOWN_FILE)
        return CC_FERR_BAD_ARGUMENT;

	FileIOFilter* fio = CreateFilter(fType);
	if (!fio)
        return CC_FERR_WRONG_FILE_TYPE;

    //if the file name has no extension, we had a default one!
    QString completeFileName(filename);
	if (QFileInfo(filename).suffix().isEmpty())
        completeFileName += QString(".%1").arg(CC_FILE_TYPE_DEFAULT_EXTENSION[fType]);

    CC_FILE_ERROR result = fio->saveToFile(entities, qPrintable(completeFileName));

    delete fio;
    fio = 0;

    return result;
}
Exemplo n.º 2
0
ccHObject* FileIOFilter::LoadFromFile(const QString& filename,
										CC_FILE_TYPES fType,
										bool alwaysDisplayLoadDialog/*=true*/,
										bool* coordinatesShiftEnabled/*=0*/,
										CCVector3d* coordinatesShift/*=0*/)
{
	//check file existence
    QFileInfo fi(filename);
    if (!fi.exists())
    {
        ccLog::Error(QString("[Load] File '%1' doesn't exist!").arg(filename));
        return 0;
    }

	//do we need to guess file format?
	if (fType == UNKNOWN_FILE)
	{
		//look for file extension (we trust Qt on this task)
		QString extension = QFileInfo(filename).suffix();
		if (extension.isEmpty())
		{
			ccLog::Error("[Load] Can't guess file format: no file extension");
			return 0;
		}

		//convert extension to file format
		fType = GuessFileFormatFromExtension(qPrintable(extension.toUpper()));

		//unknown extension?
		if (fType == UNKNOWN_FILE)
		{
			ccLog::Error(QString("[Load] Can't guess file format: unknown file extension '%1'").arg(extension));
			return 0;
		}
	}

	//get corresponding loader
	FileIOFilter* fio = CreateFilter(fType);
    if (!fio)
        return 0;

	//load file
    ccHObject* container = new ccHObject();
	CC_FILE_ERROR result = CC_FERR_NO_ERROR;
	try
	{
		result = fio->loadFile(	qPrintable(filename),
								*container,
								alwaysDisplayLoadDialog,
								coordinatesShiftEnabled,
								coordinatesShift);
	}
	catch(...)
	{
		ccLog::Warning("[I/O] Exception caught during file opening!");
		if (container)
			container->removeAllChildren();
		result = CC_FERR_CONSOLE_ERROR;
	}

	//we can release the loader instance
    delete fio;
    fio = 0;

	if (result != CC_FERR_NO_ERROR)
        DisplayErrorMessage(result,"loading",fi.baseName());
	else
		ccLog::Print(QString("[I/O] File '%1' loaded successfully").arg(fi.baseName()));

    unsigned childrenCount = container->getChildrenNumber();
    if (childrenCount != 0)
    {
		//we set the main container name as the full filename (with path)
        container->setName(QString("%1 (%2)").arg(fi.fileName()).arg(fi.absolutePath()));
        for (unsigned i=0;i<childrenCount;++i)
        {
            ccHObject* child = container->getChild(i);
			QString newName = child->getName();
			if (newName.startsWith("unnamed"))
			{
				//we automatically replace occurences of 'unnamed' in entities names by the base filename (no path, no extension)
				newName.replace(QString("unnamed"),fi.baseName());
				child->setName(newName);
			}
        }
    }
	else
    {
        delete container;
        container = 0;
    }

	return container;
}
Exemplo n.º 3
0
ccHObject* FileIOFilter::LoadFromFile(const QString& filename,
										CC_FILE_TYPES fType,
										bool alwaysDisplayLoadDialog/*=true*/,
										bool* coordinatesShiftEnabled/*=0*/,
										double* coordinatesShift/*=0*/)
{
	//check file existence
    QFileInfo fi(filename);
    if (!fi.exists())
    {
        ccLog::Error(QString("[Load] File '%1' doesn't exist!").arg(filename));
        return 0;
    }

	//do we need to guess file format?
	if (fType == UNKNOWN_FILE)
	{
		//look for file extension (we trust Qt on this task)
		QString extension = QFileInfo(filename).suffix();
		if (extension.isEmpty())
		{
			ccLog::Error("[Load] Can't guess file format: no file extension");
			return 0;
		}

		//convert extension to file format
		fType = StringToFileFormat(qPrintable(extension.toUpper()));

		//unknown extension?
		if (fType == UNKNOWN_FILE)
		{
			ccLog::Error(QString("[Load] Can't guess file format: unknown file extension '%1'").arg(extension));
			return 0;
		}
	}

	//get corresponding loader
	FileIOFilter* fio = NULL;
	switch (fType)
	{
	case BIN:
		fio = (FileIOFilter*)(new BinFilter());
		break;
	case OBJ:
		fio = (FileIOFilter*)(new ObjFilter());
		break;
	case PLY:
		fio = (FileIOFilter*)(new PlyFilter());
		break;
	case ICM:
		fio = (FileIOFilter*)(new IcmFilter());
		break;
	case ASCII:
		fio = (FileIOFilter*)(new AsciiFilter());
		break;
	case SOI:
		fio = (FileIOFilter*)(new SoiFilter());
		break;
	case PN:
		fio = (FileIOFilter*)(new PNFilter());
		break;
	case PV:
		fio = (FileIOFilter*)(new PVFilter());
		break;
    case DM_ASCII:
        fio = (FileIOFilter*)(new DepthMapFileFilter());
        break;
	case POV:
		fio = (FileIOFilter*)(new PovFilter());
		break;
	case BUNDLER:
		fio = (FileIOFilter*)(new BundlerFilter());
		break;
	case VTK:
		fio = (FileIOFilter*)(new VTKFilter());
		break;
#ifdef CC_X3D_SUPPORT
    case X3D:
		fio = (FileIOFilter*)(new X3DFilter());
		break;
#endif
#ifdef CC_E57_SUPPORT
    case E57:
		fio = (FileIOFilter*)(new E57Filter());
		break;
#endif
#ifdef CC_PDMS_SUPPORT
    case PDMS:
		fio = (FileIOFilter*)(new PDMSFilter());
		break;
#endif
#ifdef CC_LAS_SUPPORT
	case LAS:
		fio = (FileIOFilter*)(new LASFilter());
		break;
#endif
#ifdef CC_ULT_SUPPORT
	case ULT:
		fio = (FileIOFilter*)(new UltFilter());
		break;
#endif
    case MA:
    case UNKNOWN_FILE:
        //nothing to do
		break;
	}

    if (!fio)
        return 0;

	//load file
    ccHObject* container = new ccHObject();
	CC_FILE_ERROR result = fio->loadFile(qPrintable(filename),
											*container,
											alwaysDisplayLoadDialog,
											coordinatesShiftEnabled,
											coordinatesShift);
	//we can release the loader instance
    delete fio;
    fio=0;

	if (result != CC_FERR_NO_ERROR)
        DisplayErrorMessage(result,"loading",fi.baseName());

    unsigned childrenCount = container->getChildrenNumber();
    if (childrenCount != 0)
    {
		//we set the main container name as the full filename (with path)
        container->setName(qPrintable(QString("%1 (%2)").arg(fi.fileName()).arg(fi.absolutePath())));
        for (unsigned i=0;i<childrenCount;++i)
        {
            ccHObject* child = container->getChild(i);
			const char* name = child->getName();
			if (strncmp(name,"unnamed",7)==0)
			{
				//we automatically replace occurences of 'unnamed' in entities names by the base filename (no path, no extension)
				QString newName(name);
				newName.replace(QString("unnamed"),fi.baseName());
				child->setName(qPrintable(newName));
			}
        }
    }
	else
    {
        delete container;
        container=0;
    }

	return container;
}
Exemplo n.º 4
0
CC_FILE_ERROR FileIOFilter::SaveToFile(ccHObject* entities, const char* filename, CC_FILE_TYPES fType)
{
    if (!entities || !filename || fType == UNKNOWN_FILE)
        return CC_FERR_BAD_ARGUMENT;

	FileIOFilter* fio = NULL;

	switch (fType)
	{
	case BIN:
		fio = (FileIOFilter*)(new BinFilter());
		break;
	case ASCII:
		fio = (FileIOFilter*)(new AsciiFilter());
		break;
	case OBJ:
		fio = (FileIOFilter*)(new ObjFilter());
		break;
	case PLY:
		fio = (FileIOFilter*)(new PlyFilter());
		break;
	case PN:
		fio = (FileIOFilter*)(new PNFilter());
		break;
	case PV:
		fio = (FileIOFilter*)(new PVFilter());
		break;
	case MA:
		fio = (FileIOFilter*)(new MAFilter());
		break;
    case DM_ASCII:
        fio = (FileIOFilter*)(new DepthMapFileFilter());
        break;
	case VTK:
		fio = (FileIOFilter*)(new VTKFilter());
		break;
#ifdef CC_X3D_SUPPORT
    case X3D:
        fio = (FileIOFilter*)(new X3DFilter());
        break;
#endif
#ifdef CC_E57_SUPPORT
    case E57:
        fio = (FileIOFilter*)(new E57Filter());
        break;
#endif
#ifdef CC_PDMS_SUPPORT
    case PDMS:
		fio = (FileIOFilter*)(new PDMSFilter());
		break;
#endif
#ifdef CC_LAS_SUPPORT
    case LAS:
        fio = (FileIOFilter*)(new LASFilter());
        break;
#endif
#ifdef CC_ULT_SUPPORT
    case ULT:
        fio = (FileIOFilter*)(new UltFilter());
        break;
#endif
	case POV:
        //TODO
		//fio = (FileIOFilter*)(new PovFilter());
		break;
    case SOI:
    case ICM:
    case BUNDLER:
    case UNKNOWN_FILE:
        //nothing to do
		break;
	}

	if (!fio)
        return CC_FERR_WRONG_FILE_TYPE;

    //if the file name has no extension, we had a default one!
    char completeFileName[1024];
    strcpy(completeFileName,filename);

    int ppos = QString(filename).lastIndexOf(QChar('.'));
    if (ppos<0)
    {
        completeFileName[ppos]=0;
        sprintf(completeFileName,"%s.%s",completeFileName,CC_FILE_TYPE_DEFAULT_EXTENSION[fType]);
    }

    CC_FILE_ERROR result = fio->saveToFile(entities, completeFileName);

    delete fio;
    fio=0;

    return result;
}
Exemplo n.º 5
0
CC_FILE_ERROR FileIOFilter::SaveToFile(ccHObject* entities, const char* filename, CC_FILE_TYPES fType)
{
    if (!entities || !filename || fType == UNKNOWN_FILE)
        return CC_FERR_BAD_ARGUMENT;

    FileIOFilter* fio = NULL;

    switch (fType)
    {
    case BIN:
        fio = new BinFilter();
        break;
    case ASCII:
        fio = new AsciiFilter();
        break;
    case OBJ:
        fio = new ObjFilter();
        break;
    case PLY:
        fio = new PlyFilter();
        break;
    case PN:
        fio = new PNFilter();
        break;
    case PV:
        fio = new PVFilter();
        break;
    case MA:
        fio = new MAFilter();
        break;
    case DM_ASCII:
        fio = new DepthMapFileFilter();
        break;
    case VTK:
        fio = new VTKFilter();
        break;
    case STL:
        fio = new STLFilter();
        break;
    case PCD:
        fio = new PCDFilter();
        break;
#ifdef CC_X3D_SUPPORT
    case X3D:
        fio = new X3DFilter();
        break;
#endif
#ifdef CC_E57_SUPPORT
    case E57:
        fio = new E57Filter();
        break;
#endif
#ifdef CC_PDMS_SUPPORT
    case PDMS:
        fio = new PDMSFilter();
        break;
#endif
#ifdef CC_LAS_SUPPORT
    case LAS:
        fio = new LASFilter();
        break;
#endif
    case POV:
        //TODO
        //fio = new PovFilter();
        break;
    case SOI:
    case ICM:
    case BUNDLER:
    case UNKNOWN_FILE:
    case FILE_TYPES_COUNT:
        //nothing to do
        break;
    }

    if (!fio)
        return CC_FERR_WRONG_FILE_TYPE;

    //if the file name has no extension, we had a default one!
    QString completeFileName(filename);
    if (QFileInfo(filename).suffix().isEmpty())
        completeFileName += QString(".%1").arg(CC_FILE_TYPE_DEFAULT_EXTENSION[fType]);

    CC_FILE_ERROR result = fio->saveToFile(entities, qPrintable(completeFileName));

    delete fio;
    fio=0;

    return result;
}