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