{"id":20296850,"url":"https://github.com/asmaloney/meshio","last_synced_at":"2025-04-11T12:10:36.053Z","repository":{"id":53547341,"uuid":"173796518","full_name":"asmaloney/MeshIO","owner":"asmaloney","description":"CloudCompare plugin for loading COLLADA, glTF, and IFC-SPF 3D models","archived":false,"fork":false,"pushed_at":"2024-06-20T15:37:51.000Z","size":93,"stargazers_count":28,"open_issues_count":1,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-06-21T09:17:14.158Z","etag":null,"topics":["3d-mesh","cloudcompare","cloudcompare-plugin","collada","file-format","gltf","hacktoberfest","ifc"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asmaloney.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"asmaloney","ko_fi":"asmaloney"}},"created_at":"2019-03-04T18:11:09.000Z","updated_at":"2024-06-20T15:37:53.000Z","dependencies_parsed_at":"2024-06-21T08:18:23.691Z","dependency_job_id":"b6f09441-50a3-4c04-8a66-f5197efac318","html_url":"https://github.com/asmaloney/MeshIO","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmaloney%2FMeshIO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmaloney%2FMeshIO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmaloney%2FMeshIO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asmaloney%2FMeshIO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asmaloney","download_url":"https://codeload.github.com/asmaloney/MeshIO/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224648577,"owners_count":17346759,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-mesh","cloudcompare","cloudcompare-plugin","collada","file-format","gltf","hacktoberfest","ifc"],"created_at":"2024-11-14T15:41:33.808Z","updated_at":"2024-11-14T15:41:35.412Z","avatar_url":"https://github.com/asmaloney.png","language":"C++","funding_links":["https://github.com/sponsors/asmaloney","https://ko-fi.com/asmaloney"],"categories":[],"sub_categories":[],"readme":"[![CloudCompare Plugin](https://img.shields.io/badge/plugin-CloudCompare-brightgreen.svg)](https://github.com/CloudCompare/CloudCompare)\n[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n\n# \u003cimg src=\"https://github.com/asmaloney/MeshIO/blob/master/images/icon.png\" /\u003e MeshIO\n\nThis is a plugin for [CloudCompare](https://github.com/CloudCompare/CloudCompare) for reading 3D model files (meshes). It uses the [Open Asset Import Library](https://github.com/assimp/assimp) (Assimp).\n\nCurrently MeshIO supports reading the following formats:\n\n- [COLLADA](https://en.wikipedia.org/wiki/COLLADA) (\\*.dae)\n- [glTF](https://en.wikipedia.org/wiki/GlTF) (\\*.gltf \\*.glb)\n- [IFC-SPF](https://en.wikipedia.org/wiki/ISO_10303-21) a.k.a STEP (\\*.ifc \\*.stp \\*.step)\n\n## Requirements\n\nMeshIO has two requirements that are currently different from CloudCompare itself:\n\n1. CMake \u003e= 3.22\n2. C++17 compiler\n\n## Building\n\nUnfortunately, because of the way CloudCompare is set up, you have to build all of CloudCompare before you can build a plugin for it. So the first thing to do is to get the [CloudCompare source](https://github.com/CloudCompare/CloudCompare) and [build CloudCompare](https://github.com/CloudCompare/CloudCompare/blob/master/BUILD.md).\n\nOnce you have it building properly:\n\n- clone this repository into the `CloudCompare/plugins/private` directory:\n\n      cd CloudCompare/plugins/private\n      git clone --recursive https://github.com/asmaloney/MeshIO.git\n\n- re-run CloudCompare's cmake\n- turn on `PLUGIN-3rdParty_MESH_IO` in the CloudCompare cmake options\n- build CloudCompare\n\nNote: If you are building for _CloudCompare 2.11.x_, use the tagged version of MeshIO at `cloudcompare-2.11.x`\n\n## Adding Another Format\n\nAs long as it is a format supported by Assimp, getting the basics implemented is fairly straightforward (a bunch of copy-paste).\n\nFor example, to add a new format \"Foo\":\n\n- copy and rename the header \u0026 source file of an existing importer (e.g. glTF)\n- add the header \u0026 source files to the appropriate `CMakeLists.txt` files\n- change the `FilterInfo` info in the constructor for the new format (details of the struct are found in CloudCompare's FileIOFilter.h) - the `id` should start with `MeshIO`\n  ```cpp\n  FooFilter::FooFilter() :\n      // clang-format off\n      mioAbstractLoader( {\n          \"MeshIO Foo Filter\",\n          FileIOFilter::DEFAULT_PRIORITY,\n          QStringList{ \"foo\", \"bar\" },\n          \"foo\",\n          QStringList{ \"MeshIO - Foo file (*.foo *.bar)\" },\n          QStringList(),\n          Import\n      } )\n  {\n  }\n  ```\n- add the new importer to MeshIO::getFilters() in MeshIO.cpp:\n  ```cpp\n  ccIOPluginInterface::FilterList MeshIO::getFilters()\n  {\n    // clang-format off\n    return {\n        FileIOFilter::Shared( new COLLADAFilter ),\n        FileIOFilter::Shared( new glTFFilter ),\n        FileIOFilter::Shared( new IFCFilter ),\n        FileIOFilter::Shared( new FooFilter ),  // \u003c--\n    };\n  }\n  ```\n- set the CMake variable in `CMakeLists.txt` so that Assimp builds the format:\n  ```cmake\n  set( ASSIMP_BUILD_FOO_IMPORTER TRUE CACHE INTERNAL \"override ASSIMP flags\" FORCE )\n  ```\n\nThis should result in the basic geometry and materials being loaded.\n\n### Next Steps\n\nYou may need to massage the data a bit to make it suitable for working with in CloudCompare. For example the IFC importer cleans up some naming, and you might need to clean up object hierarchies. This can be done by overriding `mioAbstractLoader::_postProcess()`.\n\nOnce you have it working, please consider contributing it using a [pull request](https://github.com/asmaloney/MeshIO/pulls).\n\n## Caveat\n\nThis plugin is using [another library](https://github.com/assimp/assimp) to read these file formats. There will be problems with some files (e.g. [IFC-SPF](https://en.wikipedia.org/wiki/ISO_10303-21) is not 100% implemented). It also means that some mesh names might be lost when importing some formats.\n\nBecause this plugin is basically translating the [Assimp](https://github.com/assimp/assimp) data into something [CloudCompare](https://github.com/CloudCompare/CloudCompare) understands, it can be tricky to figure out where the problem lies since it could involve any or all of the three components.\n\nIf you find files that do not work as expected, please add an [issue here](https://github.com/asmaloney/MeshIO/issues) and attach the smallest example you have that isn't working. I will try to assess where the problem lies and either report it to the [Assimp](https://github.com/assimp/assimp) project or [CloudCompare](https://github.com/CloudCompare/CloudCompare) project as necessary.\n\n## Icon\n\nThe icon is by [qubodup](https://openclipart.org/detail/168258/3d-cube-icon) (Public Domain).\n\n## License\n\nThis project is licensed under the BSD 3-Clause license - see [LICENSE](https://github.com/asmaloney/MeshIO/blob/master/LICENSE) file for details.\n\nIndividual source files contain the following tag instead of the full license text:\n\n    SPDX-License-Identifier: BSD-3-Clause\n\nThis enables machine processing of license information based on [SPDX\nLicense Identifiers](https://spdx.org/ids).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasmaloney%2Fmeshio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasmaloney%2Fmeshio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasmaloney%2Fmeshio/lists"}