Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I convert a USDZ to solid mesh such as stl

I used an ios app to create a usdz file using arkit but now I want to convert the scan to a solid 3d model such as an stl or obj. is there an ios or mac application that allows for this conversion. I cannot find any app that can open them other than xcode and preview but neither allow me to export to a 3d model.

like image 912
Samson T Avatar asked Feb 22 '19 05:02

Samson T


People also ask

What files can be converted to STL?

OBJ, 3dm, brep, step, a lot of file formats can be translated to STL, or from STL. You can download this 3D model converter for free and then upload your files to get them converted.


2 Answers

ModelIO can, at least in iOS.

import ModelIO

let usdz = URL(fileURLWithPath: "model.usdz")
let asset = MDLAsset(url: usdz)
let stl = URL(fileURLWithPath: "model.stl")
try asset.export(to: stl)

.usdz is just a zipped .usdc file with textures (from the offical documentation). If you want to export the file on a mac, change the file extension to .zip, unzip the file and use ModelIO to export a .stl file.

Open Xcode, create a new Playground, choose macOS as the platform. I have downloaded a test file from Apple's Quick Look Gallery, and unzipped an example to stratocoaster_usdz/ in my Downlaods directory. Then use the following code:

import ModelIO

// Get the path to the Downloads directory in your home folder
let directory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!
let usdc = URL(fileURLWithPath: "stratocaster_usdz/Stratocaster.usdc", relativeTo: directory)

// Load the usdc file that was packed in the usdz file
let asset = MDLAsset(url: usdc)

do {
    let target = URL(fileURLWithPath: "stratocaster.stl", relativeTo: directory)
    // Export to .stl
    try asset.export(to: target)
} catch {
    error
}
like image 151
jlsiewert Avatar answered Sep 21 '22 18:09

jlsiewert


Thanks! Exactly what I was looking for. I created a Mac OS script to automate this in Terminal. I also did something similar in an Automator Quick Action to run from Finder with a RightClick on the file, but couldn't figure out a way to attach that here.

#!/usr/bin/env osascript -l JavaScript

// Save to a file, e.g. usdz2stl.js
// chmod +x usdz2stl.js
// usdz2stl.js /path/to/model.usdz

ObjC.import('ModelIO')

function run(argv) {
  var inFile = argv[0];
  var outFile = inFile + ".stl";
  console.log("Converting " + inFile + " ...");
  var usdz = $.NSURL.alloc.initFileURLWithPath(inFile);
  var asset = $.MDLAsset.alloc.initWithURL(usdz);
  var stl = $.NSURL.alloc.initFileURLWithPath(outFile);
  asset.exportAssetToURL(stl);
  console.log("Conversion Complete: " + outFile);
}
like image 23
wr0ngway Avatar answered Sep 21 '22 18:09

wr0ngway