Developer Notes

Useful notes from the Unreal & 3D Repo development teams

F
Written by Faisal Ramady
Updated over a week ago

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 FSoftObjectPaths, 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"
}
}
)

Did this answer your question?