{"id":19593693,"url":"https://github.com/vimaec/vim-datasmith","last_synced_at":"2025-04-27T15:33:07.990Z","repository":{"id":47649762,"uuid":"368272402","full_name":"vimaec/vim-datasmith","owner":"vimaec","description":"A VIM to DataSmith converter. ","archived":false,"fork":false,"pushed_at":"2021-08-19T17:47:14.000Z","size":651,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-05T01:02:24.338Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vimaec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-05-17T17:41:07.000Z","updated_at":"2023-11-06T02:19:17.000Z","dependencies_parsed_at":"2022-09-23T15:12:34.957Z","dependency_job_id":null,"html_url":"https://github.com/vimaec/vim-datasmith","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vimaec%2Fvim-datasmith","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vimaec%2Fvim-datasmith/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vimaec%2Fvim-datasmith/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vimaec%2Fvim-datasmith/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vimaec","download_url":"https://codeload.github.com/vimaec/vim-datasmith/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251162403,"owners_count":21545766,"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":[],"created_at":"2024-11-11T08:40:45.370Z","updated_at":"2025-04-27T15:33:02.973Z","avatar_url":"https://github.com/vimaec.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vim-datasmith\nA **VIM to DataSmith** converter. \n\n## Build requirements\n* You must build the Datasmith SDK\n\t* With Git\n\t\t* For that you need to get Unreal Engine git repository. Branch 4.27\n\t\t* For mac OS : Replace the files with the ones provided vim-datasmith/Settings folder.\n\t\t\t* \"Engine/Source/Programs/Enterprise/Datasmith/DatasmithSDK/DatasmithSDK.Target.cs\"\n\t\t\t* \"Engine/Source/Programs/Enterprise/Datasmith/DatasmithSDK/DatasmithSDK.Build.cs\"\n\t\t* Run \"Setup.command\"\n\t\t* Run GenerateProjectFiles.command\n\t\t* Open the UE4 project and build scheme \"DatasmithSDK\"\n\t* With Perforce\n\t\t* Just use the force (a lots) and everything will goes well.\n\t* In the file \n\t\t* In Vim-Datasmith.xcconfig - Edit \"DatasmithSDKFolder\" for the real path of your builded SDK\n\t* At this point you are ready to build the converter application.\n\nGood Luck\n\nRichard Young\n\n\n## Current status\n\nThe current version is the basis of the final product, it lacks:\n* Geometry:\n\t* UV coordinate processing\n\t* Determine pivot (i.e. not 0, 0, 0) for objects without transformations\n\n* Materials:\n\t* A flag to use or not the textures.\n\t* Refine the material settings.\n\n* Naming:\n\t* The converter use hashing to name Datasmith elements (Actor, Mesh, Metadata, Textures...)\n\t* Until VIM defines GUIDs for its elements, this approach will minimize reimports in Datasmith importers.\n\n## Entity relations\n\nHere is a simplified entity relationships diagram. The goal is to allow a quick visualization of the chosen approach to convert between the vim elements and those of Datasmith.\n\n\n![Simple diagram](Documentation/VimToDatasmithMCD.png)\n\nThis diagram have been done with: [MoCoDo online](http://mocodo.wingi.net).\nPaste it text from file: [Documentation/VimToDatasmithMCD.txt](Documentation/VimToDatasmithMCD.txt)\n\n## Strong Typing\nIn VIM, almost all data is referred by index. In order to improve the readability of the code and reduce the errors that could result from it, I typed all these indexes and created encapsulations (see TVector template) for their containers\n```\n// Here are all VIM index. Use of enum to get some type checking\nenum ElementIndex : uint32_t { kNoElement = (uint32_t)-1 };\nenum NodeIndex : uint32_t { kNoNode = (uint32_t)-1 };\nenum GeometryIndex : uint32_t { kNoGeometry = (uint32_t)-1 };\nenum ParentIndex : uint32_t { kNoParent = (uint32_t)-1 };\nenum VertexIndex : uint32_t { kInvalidVertex = (uint32_t)-1 };\nenum GroupIndex : uint32_t { kInvalidGroup = (uint32_t)-1 };\nenum MaterialId : uint32_t { kInvalidMaterial = (uint32_t)-1 };\nenum IndiceIndex : uint32_t { kInvalidIndice = (uint32_t)-1 };\nenum FaceIndex : uint32_t { kInvalidFace = (uint32_t)-1 }; // FaceIndex is same as Indices index / 3\nenum StringIndex : uint32_t { kInvalidString = (uint32_t)-1 };\n\n// Basic vector class\ntemplate \u003cclass C, class Indexor = std::size_t\u003e class TVector {\n\t...\n};\n```\n\n## Development tools\n\nDebugTools provide services to do all invariants tests (this code use a lots of them) and to do reports.\n\nTimeStat permit to measure CPU and realtime taken for a code to execute. Note that CPU can be between ]0..CPUcount] * realtime.\n\t(Ex. 1 - On a 20 CPU machine, you can execute up 20 CPU seconds in 1 real seconds)\n\t(Ex. 2 - Can be less than one if process is waiting for ressources (disk access))\n\nTaskMgr create a CPU count threads pool.\n\t- You can add task and join all of them when needed.\n\t- You can also use CTaskJointer and add it joinable task or functor task.\n\t\n## Datasmith tools\n\nDatasmithHashTool and DatasmithSceneValidator are tool extracted from UnrealEngine/Engine/Source/Programs/Enterprise/Datasmith/DatasmithARCHICADExporter.\nThey got some adjustment to compile in VimToDatasmith.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvimaec%2Fvim-datasmith","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvimaec%2Fvim-datasmith","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvimaec%2Fvim-datasmith/lists"}