loadFromResources method
Parses a Wavefront OBJ file from the given objResourceName.
Implementation
Future<List<Face3D>> loadFromResources(String objResourceName) async {
assert(
!objResourceName.endsWith('.mtl'),
"The resource name must not end with '.mtl'. Use filename with obj extension: ${objResourceName.replaceAll(".mtl", ".obj")}",
);
final modelData = await rootBundle.loadString(objResourceName);
final resourcePath = Uri(path: objResourceName);
final dirPath =
resourcePath.pathSegments.take(resourcePath.pathSegments.length - 1);
final lines = _lineSplitter.convert(modelData);
final materialLib = <String, Map<String, ObjMaterial>>{};
for (var line in lines) {
if (line.startsWith(mtllib)) {
final libName = line.trim().split(_whiteSpace).last;
final content = await rootBundle
.loadString(Uri(pathSegments: [...dirPath, libName]).path)
.onError((_, __) => "");
final material = await parseMtlLib(content);
if (material != null) {
materialLib[libName] = material;
}
}
}
return parseLines(lines, materialLib: materialLib);
}