How to upload obj with mtl and textures to bucket? - autodesk-forge

As the title suggests, how do I upload the obj model's material file and textures, as they are hard coded in the obj file.
Can I upload zipped dir structure or multiple files that are in correct relation (because of the hard coded nature of obj)?

Here is an OBJ model with material and texture on the dotty trial site:
http://trial.dotdotty.com/share/?shareId=cdc9-523f-305f-7ddb-5cc4
That was uploaded as a single zip file containing OBJ, MTL and PNG.
Here is the same model on A360:
http://a360.co/21rt4OK
That was uploaded by selecting all three files and specifying the OBJ as the main model.

A .ZIP file should work for Autodesk Model Derivative as long as the same works locally (meaning all references are working).

Related

How can I download the svf file in the forge api?

How can I convert the file I uploaded to Forge to svf format and then download it to my own server?
I wanted to do these operations using your project "https://github.com/Autodesk-Forge/forge-bucketsmanager-desktop/tree/master/bucket.manager". As a result, I downloaded it, but there are files in it that I will not use. The reason for this is that the load on the download process increases. I just want the "3d views" folder. Can you help with this?
As Alex said, the structure of an SVF asset can vary depending on the input file format. For more details on how to download the SVF (or just some of its parts), take a look at the forge-convert-utils library, specifically the SvfDownloader. It parses the actual SVF file to identify all the additional assets (e.g., geometry files, textures, property database files, etc.) that need to be downloaded as well.

How can I find which Revit files are linked in BIM 360 via Forge?

In certain circumstances, BIM360 will serve a zip file of a Revit document along with its links, such as explained here: https://forums.autodesk.com/t5/bim-360-document-management/linked-revit-files-in-bim-360-docs/td-p/8774004
In this circumstances, however, when interacting with GET projects/:project_id/folders/:folder_id/contents the file still is shown as a regular file (potentially the isCompositeDesign attribute distinguishes it) with a .rvt file extension. In addition, the filesize shown in storageSize of the object is the sum of the main Revit file and all of its links. Checking the details in GET buckets/:bucketKey/objects/:objectName/details equally show the size object size attribute to be the sum of the main Revit file and all of its links.
I cannot seem to find functionality in Forge that:
Distinguishes a zip file from a lone file (potentially the isCompositeDesign attribute does this)
Provides a list of which other files are linked into the main file, or a list of the zip file contents and their URNs.
Provides a true filesize of the main revit file itself, not just the sum of all linked files in the zip.
Ideas?
Revit 4 worksharing, publishes a file to BIM360.
This file is named as a .rvt file (ie. 'mybigrevitproject.rvt'), but in fact, it's really a zip file in disguise. If you rename it to zip, download it, and unzip it, you'll find lots of .RVT inside the zip.
There's a neat trick to figuring this out, without downloading the entire file.
Use a range GET on the first 16 bytes, and check for the magic header.
For full details, check out this repo: https://github.com/wallabyway
Here's a snippet of the code that will help:
https://github.com/wallabyway/bim360-zip-extract/blob/master/server.js#L167
I think it's related to this question: Forge Data management returns zip file

Forge DWG file translation

When translating and downloading DWG files from a server, the downloaded content contains different folders like
24d925af-2793-8061-0b78-6eba65e7eba8_f2d,
382a3ef0-6066-5db8-8f62-79017ae1e777_f2d,
4215b4a9-11b7-7e99-6d6f-4f124effceea_f2d etc.
which each contain a primaryGraphics.f2d file.
What is the use of these different folders and the primaryGraphics.f2d files in them?
Each f2d file represents a layout in the original DWG file.
I think you might probably refer to what https://extract.autodesk.io/ provided. The code workflow is to get the urn of the derivative,
https://github.com/cyrillef/extract.autodesk.io/blob/838b63f1f76668081c789d9962b93a0f97d9555c/server/bubble.js#L110
self.extractPathsFromGraphicsUrn (node.urn, item) ;
and get out the section of guid ***_f2d
https://github.com/cyrillef/extract.autodesk.io/blob/838b63f1f76668081c789d9962b93a0f97d9555c/server/bubble.js#L391
var basePath =urn.slice (0, urn.lastIndexOf ('/') + 1) ;
finally this guid ***_f2d will be used for the folder of the zip.
The urn of the derivative can be achieved by https://developer.autodesk.com/en/docs/model-derivative/v2/reference/http/urn-manifest-GET/ .
The following is the example of one of my test models:
Hope it helps.

Update 3D Scene Programmatically to be Showed in Blend4Web WebPlayer (JSON)

I created a blender project, exported it as JSON+BIN files and showed it through the blend4web webplayer. Everything goes fine until my need to change the JSON file programmatically to add/remove a new 3D object (e.g. a cube or rectangle). I want to renderize the already showed 3D model adding or removing a 3D object. However, since the exportation of a project to blend4web generate a .bin file, if I change only the .json the model was not showed as expected. Considering this scenario, the unique way to change the model is modifing the .blend file and exports it again from Blender. But based on my need, I can't add a new 3D object in a Blender project programmatically considering the .json file. Additionally, the .json file which I am updating/using is considering data retrieved from a Database, such data indicates how and the position where the new 3D object will be displayed in the scene, which hinder me to use Blender to create a 3D Model modificated.
In this perspective, I need help to identify:
Which is the best way to change the scene and show it in blend4web programmatically and mainly considering a .json as an input for the model?
Is there any python script to user a blend4web .json file as an input to be compiled, without the Blender project and regenerate the .bin file, making it possible to show correctly my 3D model using the blend4web webplayer for JSON files?
Or, is there some (easy) way to modify a project from Blender considering data in JSON format, compile and generate the files to be shown programmatically by the blend4web webplayer (for JSON)?
Thanks in advance.

Weird url pathing for autodesk forge db jsons

I've implemented offline viewing based on the tutorial and github here. The problem I'm having is forge is looking for the db jsons in an odd location that makes url pathing awkward. The files in particular are 'objects_attrs.json.gz', 'objects_vals.json.gz', 'objects_offs.json.gz', 'objects_ids.json.gz', 'objects_avs.json.gz'. For some reason the forge viewer strips two layers of directories off the url then looks for the files there. Afterword Forge looks for the files in the original location but, looks for the straight json instead of the gziped jsons.
This can be handled in a few hacky ways like creating two arbitrary parent directories in the url and accepting files at the higher url as well. Or unzipping the gzips and saving them in location. But, these kind of hacks could easily be unstable if I'm not exactly right about the forge implementation.
Is there any reason these files are searched for in a different location? For example are these files also used by the 2d files not just the 3d files? Are there other files like this?
Look for the .svf file, say it's Design.svf. Rename it to Design.zip, and then upzip the file. This will get you the manifest.json.
Inside the manifest.json file, you'll file the URI's of all the files, including the one's you mentioned (the property database files).
Modify the URI as you wish, save the manifest.json file and re-zip it back up and rename it back to Design.svf.
If you got the URI path matching your file-system, then those property files will now load correctly.
Good luck!