Exemplo n.º 1
0
            /// <summary>
            /// Initializes a new instance of the <see cref="ImporterConfiguration"/> class.
            /// </summary>
            public ImporterConfiguration()
            {
#if WINDOWS_UWP
                TexturePathResolver = new UWPTextureLoader();
#else
                TexturePathResolver = new DefaultTexturePathResolver();
#endif
            }
Exemplo n.º 2
0
 /// <summary>
 /// Convert the assimp scene to Helix Scene.
 /// </summary>
 /// <param name="assimpScene">The assimp scene.</param>
 /// <param name="filePath">The filePath of the model. It is used for texture loading</param>
 /// <param name="texturePathResolver">Custom texture path resolver</param>
 /// <param name="scene">The scene.</param>
 /// <returns></returns>
 public ErrorCode Load(Scene assimpScene, string filePath, out HelixToolkitScene scene, ITexturePathResolver texturePathResolver = null)
 {
     path = filePath;
     Configuration.TexturePathResolver = texturePathResolver;
     return(BuildScene(assimpScene, out scene));
 }
Exemplo n.º 3
0
            /// <summary>
            /// Loads the specified file stream. User must provider custom texture loader to load texture files.
            /// </summary>
            /// <param name="fileStream">The file stream.</param>
            /// <param name="filePath">The filePath. Used to load texture.</param>
            /// <param name="formatHint">The format hint.</param>
            /// <param name="texturePathResolver">The custom texture path resolver</param>
            /// <param name="scene">The scene.</param>
            /// <returns></returns>
            public ErrorCode Load(Stream fileStream, string filePath, string formatHint, out HelixToolkitScene scene, ITexturePathResolver texturePathResolver = null)
            {
                path      = filePath;
                ErrorCode = ErrorCode.None;
                AssimpContext importer  = null;
                var           useExtern = false;

                if (Configuration.ExternalContext != null)
                {
                    importer  = Configuration.ExternalContext;
                    useExtern = true;
                }
                else
                {
                    importer = new AssimpContext();
                }
                configuration.TexturePathResolver = texturePathResolver;
                Clear();
                scene = null;
                try
                {
                    if (!importer.IsImportFormatSupported(formatHint))
                    {
                        return(ErrorCode.FileTypeNotSupported | ErrorCode.Failed);
                    }
                    if (!useExtern && Configuration.AssimpPropertyConfig != null)
                    {
                        foreach (var config in Configuration.AssimpPropertyConfig)
                        {
                            importer.SetConfig(config);
                        }
                    }
                    importer.Scale = configuration.GlobalScale;
                    var postProcess = configuration.AssimpPostProcessSteps;
                    if (configuration.FlipWindingOrder)
                    {
                        postProcess |= PostProcessSteps.FlipWindingOrder;
                    }
                    var assimpScene = importer.ImportFileFromStream(fileStream, postProcess, formatHint);
                    return(BuildScene(assimpScene, out scene));
                }
                catch (Exception ex)
                {
                    logger.LogError(ex.Message);
                    ErrorCode = ErrorCode.Failed;
                    AssimpExceptionOccurred?.Invoke(this, ex);
                    return(ErrorCode);
                }
                finally
                {
                    if (!useExtern)
                    {
                        importer.Dispose();
                    }
                }
            }