Exemplo n.º 1
0
        /// <summary>
        /// Query media informations.
        /// </summary>
        /// <param name="path">
        /// A <see cref="String"/> that specify the media path.
        /// </param>
        /// <param name="criteria">
        /// A <see cref="MediaCodecCriteria"/> that specify parameters for loading an media stream.
        /// </param>
        /// <returns>
        /// A <see cref="SceneObjectInfo"/> containing information about the specified media.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// Exception thrown if <paramref name="stream"/> or <paramref name="criteria"/> is null.
        /// </exception>
        public SceneObjectInfo QueryInfo(Stream stream, SceneObjectCodecCriteria criteria)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (criteria == null)
            {
                throw new ArgumentNullException("criteria");
            }

            SceneObjectInfo info = new SceneObjectInfo();

            return(info);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Load media from stream.
        /// </summary>
        /// <param name="stream">
        /// A <see cref="Stream"/> where the media data is stored.
        /// </param>
        /// <param name="criteria">
        /// A <see cref="MediaCodecCriteria"/> that specify parameters for loading an media stream.
        /// </param>
        /// <returns>
        /// An <see cref="SceneObject"/> holding the media data.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// Exception thrown if <paramref name="stream"/> or <paramref name="criteria"/> is null.
        /// </exception>
        public SceneObject Load(Stream stream, SceneObjectCodecCriteria criteria)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (criteria == null)
            {
                throw new ArgumentNullException("criteria");
            }

            // Load OBJ information
            ObjContext objContext = LoadOBJ(stream, criteria);

            // Process OBJ information
            return(ProcessOBJ(objContext));
        }
Exemplo n.º 3
0
        private static ObjContext LoadOBJ(Stream stream, SceneObjectCodecCriteria criteria)
        {
            FileStream fileStream = stream as FileStream;

            if (fileStream == null)
            {
                throw new InvalidOperationException("only FileStream are supported");
            }

            ObjContext objContext = new ObjContext(fileStream.Name);

            using (StreamReader sr = new StreamReader(stream)) {
                string objLine;

                while ((objLine = sr.ReadLine()) != null)
                {
                    // Trim spaces
                    objLine = objLine.Trim();
                    // Skip empty lines and comments
                    if (objLine.Length == 0 || _CommentLine.IsMatch(objLine))
                    {
                        continue;
                    }

                    Match commandMatch = _ObjCommandLine.Match(objLine);

                    if (commandMatch.Success == false)
                    {
                        continue;
                    }

                    string   command = commandMatch.Groups["Command"].Value;
                    string   tokens  = commandMatch.Groups["Tokens"].Value.Trim();
                    string[] token   = Regex.Split(tokens, " +");

                    switch (command)
                    {
                    case "mtllib":
                        ParseMaterialLib(objContext, token);
                        break;

                    case "usemtl":
                        if (objContext.Groups.Count == 0)
                        {
                            break;
                        }

                        ObjMaterial objMaterial;

                        if (objContext.Materials.TryGetValue(token[0], out objMaterial) == false)
                        {
                            throw new InvalidOperationException(String.Format("unknown material '{0}'", token[0]));
                        }

                        objContext.Groups[objContext.Groups.Count - 1].Geometries.Add(new ObjGeometry(objMaterial));
                        break;

                    case "v":
                        ParseVertex(objContext, token);
                        break;

                    case "vn":
                        ParseNormal(objContext, token);
                        break;

                    case "vt":
                        ParseTexCoord(objContext, token);
                        break;

                    case "f":
                        ParseFace(objContext, token);
                        break;

                    case "s":
                        // ?
                        break;

                    case "g":
                        if (token.Length < 1)
                        {
                            throw new InvalidOperationException();
                        }
                        objContext.Groups.Add(new ObjGroup(token[0]));
                        break;

                    case "vl":
                    case "vp":
                        // Ignored
                        break;

                    default:
                        throw new InvalidOperationException(String.Format("unknown OBJ command {0}", command));
                    }
                }
            }

            return(objContext);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Save media to stream.
 /// </summary>
 /// <param name="stream">
 /// A <see cref="IO.Stream"/> which stores the media data.
 /// </param>
 /// <param name="sceneObject">
 /// A <see cref="SceneObject"/> holding the data to be stored.
 /// </param>
 /// <param name="format">
 /// A <see cref="String"/> that specify the media format to used for saving <paramref name="sceneObject"/>.
 /// </param>
 /// <param name="criteria">
 /// A <see cref="MediaCodecCriteria"/> that specify parameters for loading an sceneObject stream.
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// Exception thrown if <paramref name="stream"/>, <paramref name="sceneObject"/> or <paramref name="criteria"/> is null.
 /// </exception>
 public void Save(Stream stream, SceneObject sceneObject, string format, SceneObjectCodecCriteria criteria)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 5
0
 /// <summary>
 /// Save media to stream.
 /// </summary>
 /// <param name="path">
 /// A <see cref="String"/> that specify the media path.
 /// </param>
 /// <param name="sceneObject">
 /// A <see cref="SceneObject"/> holding the data to be stored.
 /// </param>
 /// <param name="format">
 /// A <see cref="String"/> that specify the media format to used for saving <paramref name="sceneObject"/>.
 /// </param>
 /// <param name="criteria">
 /// A <see cref="MediaCodecCriteria"/> that specify parameters for loading an sceneObject stream.
 /// </param>
 /// <exception cref="ArgumentNullException">
 /// Exception thrown if <paramref name="stream"/>, <paramref name="sceneObject"/> or <paramref name="criteria"/> is null.
 /// </exception>
 public void Save(string path, SceneObject sceneObject, string format, SceneObjectCodecCriteria criteria)
 {
     using (FileStream fs = new FileStream(path, FileMode.CreateNew, FileAccess.Write)) {
         Save(fs, sceneObject, format, criteria);
     }
 }
Exemplo n.º 6
0
 /// <summary>
 /// Load media from stream.
 /// </summary>
 /// <param name="stream">
 /// A <see cref="Stream"/> where the media data is stored.
 /// </param>
 /// <param name="criteria">
 /// A <see cref="MediaCodecCriteria"/> that specify parameters for loading an media stream.
 /// </param>
 /// <returns>
 /// An <see cref="SceneObject"/> holding the media data.
 /// </returns>
 /// <exception cref="ArgumentNullException">
 /// Exception thrown if <paramref name="stream"/> or <paramref name="criteria"/> is null.
 /// </exception>
 public SceneObject Load(string path, SceneObjectCodecCriteria criteria)
 {
     using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) {
         return(Load(fs, criteria));
     }
 }