CloudCompare / CloudComPy

Python wrapper for CloudCompare
Other
282 stars 39 forks source link

How to SavePointCloud use ascii format? #179

Open FlyChary opened 1 month ago

FlyChary commented 1 month ago

I want use cloudComPy to save a point clould. How can I save a file using 'format ascii' rather than 'format binary'?

` cc.SavePointCloud(sample_point, r"test.ply")

`

捕获
FlyChary commented 1 month ago

The original cpp code is showed below : I am not sure. Is it support Ascii format ?


::CC_FILE_ERROR SavePointCloud(ccPointCloud* cloud, const QString& filename, const QString& version, int pointFormat)
{
    CCTRACE("saving cloud, version " << version.toStdString());
    pyCC* capi = initCloudCompare();
    if ((cloud == nullptr) || filename.isEmpty())
        return ::CC_FERR_BAD_ARGUMENT;
    CCTRACE("cloud: " << cloud->getName().toStdString() << " file: " << filename.toStdString());
    FileIOFilter::SaveParameters parameters;
    parameters.alwaysDisplaySaveDialog = false;
    QFileInfo fi(filename);
    QString ext = fi.suffix();

    if (!version.isEmpty())
    {
        if (ext == "las" || ext == "laz")
        {
            if  (version =="1.2")
                parameters.minorVersion = 2;
            if  (version =="1.3")
                parameters.minorVersion = 3;
            if  (version =="1.4")
                parameters.minorVersion = 4;
            CCTRACE("parameters.minorVersion: " << parameters.minorVersion);
        }
    }
    if (pointFormat != -1)
    {
        parameters.pointFormat = pointFormat;
        CCTRACE("parameters.pointFormat: " << parameters.pointFormat);
    }

    QString fileFilter = "";
    const std::vector<FileIOFilter::Shared>& filters = FileIOFilter::GetFilters();
    for (const auto filter : filters)
    {
        //CCTRACE("filter:" << filter->getDefaultExtension().toStdString());
        QStringList theFilters = filter->getFileFilters(false);
//        for(auto filt : theFilters)
//            CCTRACE("filter: " << filt.toStdString());
        QStringList matches = theFilters.filter(ext);
        if (matches.size())
        {
//            for (auto filt : matches)
//                CCTRACE("filter: " << filt.toStdString());
            fileFilter = matches.first();
            break;
        }
    }
    CCTRACE("fileFilter: " << fileFilter.toStdString());
    ::CC_FILE_ERROR result = FileIOFilter::SaveToFile(cloud, filename, parameters, fileFilter); //AsciiFilter::GetFileFilter());
    return result;
}
``` cpp 
prascle commented 1 month ago

Hello, you are right, the option to save .ply in ascii format is missing, I 'll try to add that in the next release!

Best regards, Paul