Esempio n. 1
0
 /// <summary>
 /// Gera uma imagem relativa a um unico objeto de um arquivo FBX
 /// </summary>
 /// <param name="final">Estrutura, Objetos e Conexões do arquivo inserido</param>
 /// <param name="connectionRelated">A conexão na qual o objeto Child vai ser renderizado</param>
 /// <returns></returns>
 private byte[] GetImageFromLayer(Final final, FBXConnection connectionRelated, List <FBXConnection> connections)
 {
     ToggleChildNodes(connectionRelated, true, connections);
     FBXParser.FBXWritter writter = new FBXWritter();
     using (MemoryStream memory = new MemoryStream())
     {
         writter.WriteFBX(final.FBXFile, memory);
         return(memory.GetBuffer());
     }
 }
Esempio n. 2
0
        public async Task <HttpResponseMessage> DownloadFileSpeficated(SpecificFile specification)
        {
            var t = Request.Content.ReadAsStringAsync();

            if (!ModelState.IsValid)
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }

            ApplicationUser user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

            if (user == null)
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }

            if (!db.Files.Any(d => d.Id == specification.FileID))
            {
                return(new HttpResponseMessage(HttpStatusCode.NotFound));
            }

            var file = db.Files.First(d => d.Id == specification.FileID);

            if (!CheckIfUserHasAccess(user, file))
            {
                return(new HttpResponseMessage(HttpStatusCode.Unauthorized));
            }



            var final = (new BinaryFormatter().Deserialize(new MemoryStream(file.FinalInformation)) as Final);

            //Atravessa todas as conexões de um arquivo em que um objeto desativado esteja relacionado e desativa todos os seus nodes e propriedades filhos. Isso faz com que o node seja desconsiderado na hora da reescrita do arquivo a ser enviado como resposta.
            if (specification.DisabledObjectNames != null && specification.DisabledObjectNames.Count() > 0)
            {
                try
                {
                    foreach (var connection in final.Connections.Where(d => d != null && d.Child != null && specification.DisabledObjectNames.Contains(d.Child.Class)))
                    {
                        ToggleChildNodes(connection, false, final.Connections);
                    }
                }
                catch (Exception ex) { }
            }

            //Atravessa todas as conexões de animações desativadas e adiciona nelas uma propriedade que faz com que leitores desses arquivos desconsiderem essa animação. (Mute)
            if (specification.DisabledAnimmationNames != null && specification.DisabledAnimmationNames.Count() > 0)
            {
                foreach (var connection in final.Connections.Where(d => d != null && d.Child != null && specification.DisabledAnimmationNames.Contains(d.Child.Class)))
                {
                    var prop70 = connection.Child.RelatedNode.Properties.First(d => d.Name == "Properties70").Value as Node;
                    prop70.Properties.RemoveAll(d => (d.Value as List <string>).Contains("\"Mute\""));
                    prop70.Properties.Add(new Property("P", new List <string>()
                    {
                        "\"Mute\"", "\"bool\"", "\"\"", "\"\"", "1"
                    }, new List <string>()));
                }
            }
            //Processo de reescrita do arquivo.
            FBXWritter   writter = new FBXWritter();
            MemoryStream stream  = new MemoryStream();

            writter.WriteFBX(final.FBXFile, stream);

            //Envio da mensagem.
            HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);

            result.Content = new StreamContent(new MemoryStream(stream.GetBuffer()));
            result.Content.Headers.ContentType =
                new MediaTypeHeaderValue("application/octet-stream");
            writter.stWritter.Dispose();
            return(result);
        }