loadFromResources method

Future<List<Face3D>> loadFromResources(
  1. String objResourceName
)

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);
}