domingo, 23 de agosto de 2009

Extrator de .blend

.exe para .blend

Este script Python extrai um arquivo .blend de dentro de um executável (.exe). Funciona tanto no Blender, como também independentemente dele. Pode também extrair de mútiplos executáveis, de uma só vez. Basta arrastar os executáveis para o script, ou executar o script e digitar o nome do arquivo, para extrair os .blends. Atualizado para o Python 3.2 (Blender 2.5).

#!/usr/bin/python3
# -*- coding: UTF-8 -*-

""" Nome:   Extrator de .blend (extrator-blend.py)
    Versão: 1.4 (22 de outubro de 2011)
    Autor:  Ricardo Silva Veloso (Ricvelozo)
    Site:   http://ricvelozo.blogspot.com/

"""

import sys

class Blend_file:
    def __init__(self):
        self.blend = ""
        self.exe = ""
        self.nome = ""

    def read(self, nome):
        self.nome = nome
        self.exe = ""

        try:
            exe = open(nome, "rb")

        except IOError:
            print("O arquivo \"" + nome + "\" não foi encontrado!")
            return False

        else:
            print("Processando...")
            self.exe = exe.read()
            exe.close()
            return True

    def extrair(self):
        i = self.exe.find(b"BLENDER_v")

        if i == -1:
            i = self.exe.find(b"BLENDER_V")

        if i != -1:
            print("Extraindo...")
            self.blend = self.exe[i:len(self.exe)]
         
            try:
                blend = open(self.nome[0:len(self.nome)-3] + "blend", "wb")

            except IOError:
                print("Não foi possível criar o arquivo \"" +
                      self.nome[0:len(self.nome)-3] + "blend\"!")

            else:
                blend.write(self.blend)
                blend.close()
                print("O arquivo \"" + self.nome[0:len(self.nome)-3] +
                      "blend\" foi criado com sucesso!")

            self.blend = ""
            return True

        else:
            print("O arquivo \"" + self.nome + "\" não possui um .blend!")
            self.blend = ""
            return False

arquivo = Blend_file()

if len(sys.argv) > 1:
    args = sys.argv[1:len(sys.argv)]

    for arg in args:
        if arquivo.read(arg):
            arquivo.extrair()

    input()

else:
    while True:
        nome = input("Digite o nome do arquivo para extrair ou apenas " \
                     "Enter para sair:\n>>> ")

        # Linha vazia em Unix-like e Windows, respectivamente
        if len(nome) == 0 or nome == '\r':
            break

        else:
            # Remove o caractere '\r' no Windows
            if nome[-1] == '\r':
                nome = nome[0:len(nome)-1]

            # Extrai o arquivo .blend
            if arquivo.read(nome):
                arquivo.extrair()

A extração de arquivos .blend de executáveis não é algo ilegal, pelo fato de a licença especificar que tudo que for embutido no player, está automaticamente sob a GNU GPL. Para mais informações, consulte o artigo Blender na Wikipédia.

Postagens relacionadas

4 comentários:

Anônimo disse...

estive lendo as pagina ae e ta muito bacana ,adorei algums esclarecimentos ae vlws

Ricvelozo disse...

Obrigado!

Anônimo disse...

boa noite, existem blocos de imagens, tal como no autocad?

Ricvelozo disse...

Não. Mas é possível simular parcialmente a funcionalidade dos blocos usando bibliotecas e grupos, no Blender. Cria-se o objeto (bloco) e o carrega em outro arquivo como biblioteca. Ao modificar o objeto na biblioteca, ele é atualizado em todos os lugares. Os grupos podem ser usados para representar uma entidade.

Postar um comentário