The folder containing the Unreal project must have the same name as the project itself (repounreal) for compilation to succeed.
The Instanced Materials assets are specified as FSoftObjectPath
s, so it would also be possible to expose this in the Editor and use the same loading functionality.
The meshes are created as Procedural Mesh Components. Each Procedural Mesh Component instance has its own Dynamic Material Instance. Procedural Mesh Component instances are created on-demand and added to a single ARepoSupermeshActor
.
Packaging
The Plugin can be packaged using the Package...
option in the Plugins dialog in the Editor. By default, support for Mac is disabled via the WhitelistPlatforms property to allow building on a standalone PC. Configure remote-compilation to build for Mac.
3D Repo Developer Notes
This project relies on changes to bouncer and 3drepo.io that are not in the main release. Use branches ISSUE_397 and ISSUE_2256 respectively to work with this project.
The plugin loads SRC (Shape Resource Container) stashes. These are not created unless the model was imported with the SRC flag enabled in the teamspace. For many existing models, these will have to be generated manually.
Start by finding the ID of the model. This can be found on the web. You can also look for 404 errors in the Unreal Console, which will print URIs containing the missing models.
e.g.
LogTemp: Error: Failure reading SRC 404 http://127.0.0.1:8189/api/Repo3DDemo/011382b0-2286-11eb-93c1-296aba26cc11/153cf665-2c84-4ff9-a9e2-ba495af8e6dc.src.mpc?key=835f9f88686abb7b0bbca48855250f27
Indicates SRC stashes are missing for Repo3DDemo 011382b0-2286-11eb-93c1-296aba26cc11
Once the teamspace and model have been found, use the 3drepobouncerClient
to create the SRC stash, with the following command:
3drepobouncerClient [config.json] genStash [teamspace] [model] src all
e.g.
3drepobouncerClient dev.json genStash Repo3DDemo 011382b0-2286-11eb-93c1-296aba26cc11 src all
The srcEnabled
flag is set per-user. It is a field in a user's customData
object.
In Robo3T
it is not possible to edit the customData
document, but the entire document can be set using the updateUser command. To do this, copy the existing customData
JSON outside Robo3T, add the srcEnabled flag set to true, then give the updateUser
command passing the updated customData
object as the value of the customData
field of the update object.
The following command sets Repo3DDemo
's customData
object to one with the srcEnabled
flag set:
db.updateUser("Repo3DDemo", { customData: { "srcEnabled" : true, "billing" : { "_id" : ObjectId("5fa917c244cde50549bee015"), "billingInfo" : { "company" : "3DRepo", "countryCode" : "GB", "lastName" : "Demo", "firstName" : "3D Repo", "_id" : ObjectId("5fa917c244cde572debee014") } }, "permissionTemplates" : [ { "_id" : "admin", "permissions" : [ "manage_model_permission" ] }, { "_id" : "viewer", "permissions" : [ "view_issue", "view_model" ] }, { "_id" : "commenter", "permissions" : [ "create_issue", "comment_issue", "view_issue", "view_model" ] }, { "_id" : "collaborator", "permissions" : [ "upload_files", "create_issue", "comment_issue", "view_issue", "view_model", "download_model", "edit_federation" ] } ], "permissions" : [ { "user" : "Repo3DDemo", "permissions" : [ "teamspace_admin" ] } ], "lastLoginAt" : ISODate("2020-12-14T11:49:55.595Z"), "mailListOptOut" : true, "email" : "test-repo3ddemo@3drepo.org", "lastName" : "Demo", "firstName" : "3D Repo", "createdAt" : ISODate("2020-11-09T10:19:46.154Z"), "apiKey" : "27daa5ae3850d7aa6a9112d88b627e05" } } )