예제 #1
0
        private void ParseLine(string keyword, string data)
        {
            switch (keyword)
            {
            case "v":
                if (isLastLineAFace)
                {
                    graphObject.Groups.Add(group);
                    group           = new Group();
                    isLastLineAFace = false;
                }
                group.Vertices.Add(VertexParser.Parse(data));
                break;

            case "vt":
                group.VertexTextures.Add(VertexTextureParser.Parse(data));
                break;

            case "vn":
                group.VertexNormals.Add(VertexNormalParser.Parse(data));
                break;

            case "f":
                group.Faces.Add(FaceParser.Parse(data));
                isLastLineAFace = true;
                break;

            default:
                break;
            }
        }
        public IWavefrontObjLoader Create(IMaterialStreamProvider materialStreamProvider)
        {
            var dataStore = new DataStore();

            var faceParser    = new FaceParser(dataStore);
            var groupParser   = new GroupParser(dataStore);
            var normalParser  = new VertexNormalParser(dataStore);
            var textureParser = new TextureCoordinateParser(dataStore);
            var vertexParser  = new GeometricVertexParser(dataStore);

            var materialLibraryLoader       = new MaterialLibraryLoader(dataStore);
            var materialLibraryLoaderFacade = new MaterialLibraryLoaderFacade(materialLibraryLoader, materialStreamProvider);
            var materialLibraryParser       = new MaterialLibraryParser(materialLibraryLoaderFacade);
            var useMaterialParser           = new UseMaterialParser(dataStore);

            return(new WavefrontObjLoader(dataStore, faceParser, groupParser, normalParser, textureParser, vertexParser, materialLibraryParser, useMaterialParser));
        }