Blender PT

Blender 3D, Modelação, Renderização, Arte tudo em Português

Você não está autenticado.

#1 2013-04-08 15:24:21

victorc
Membro
De: Leiria
Registado: 2013-04-08
Mensagens: 22

Script para importar texto

Aqui vai a minha primeira dúvida!

Criei o seguinte script com base no tutorial "Hello World" para editar um objecto de texto, substituindo o texto existente por "Vct Text Editor" e alterando posteriormente a dimensão:


import bpy

bpy.ops.object.editmode_toggle()

bpy.ops.font.delete()

bpy.ops.font.text_insert(text="Vct Text Editor")

bpy.ops.object.editmode_toggle()

bpy.context.object.dimensions[0] = 5


O que pretendo no script final é importar o text a partir de um ficheiro .txt. Isto é, em vez de introduzir manualmente o texto "Vct Text Editor", que o blender procure o texto a introduzir num ficheiro .txt específico.
Alguém tem uma solução ao sugestão?

Offline

#2 2013-04-08 18:42:42

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Re: Script para importar texto

Ora então para provar que o forum pode ser útil, tens aqui alguma informação sobre input e output para ficheiros externos: http://docs.python.org/2/tutorial/input … ting-files

estive a fazer uns testes e acho que código abaixo deve servir para o que pretendes.
para facilitar a leitura e dado que no python a indentação é importante, podes no forum escrever o código entre as tags code e /code, para não perder os espaços ou tabs no início da linha. (vê no fundo do forum o BBcode)

basicamente isto abre o ficheiro teste.txt no mesmo directório do ficheiro .blend. depois vai ler o ficheiro linha a linha e atribuindo o que lê em cada linha à variável texto. o .strip() é para eliminar o "\n" que aparece no fim de cada linha por carregarmos no enter. depois é só veres o que queres fazer com esse texto. neste exemplo fiz com que criasse um objecto de texto e atribui-lhe o que lê em cada linha, ou seja ficas com n objectos, todos no mesmo local. podes alterar a posição em que são inseridos, rotação, etc. mal inseres o objecto de texto se definires alguns atributos, como explica aqui: http://www.blender.org/documentation/bl … t.text_add

espero ter ajudado, qualquer coisa apita.


if os.path.exists("teste.txt"):
    with open("teste.txt", "r") as file:
        for line in file:
            texto=line.strip()
            # fazer aqui o que se quiser com o texto de cada linha, como por exemplo criar um objecto de texto novo e atribuir-lhe o texto da linha em questão
            bpy.ops.object.text_add()
            bpy.context.active_object.data.body=texto

Última edição por renatogsousa (2013-04-08 18:53:04)

Offline

#3 2013-04-08 20:08:59

ricaxe
Membro
De: porto
Registado: 2013-02-24
Mensagens: 243
Website

Re: Script para importar texto

Grande Renato ... big_smile


Quero Renders Muitos renders

Offline

#4 2013-04-08 22:07:28

victorc
Membro
De: Leiria
Registado: 2013-04-08
Mensagens: 22

Re: Script para importar texto

Obrigado Renato. Foi de facto uma resposta rápida e útil.

Vou testar e depois digo qualquer coisa.

Offline

#5 2013-04-10 17:24:21

victorc
Membro
De: Leiria
Registado: 2013-04-08
Mensagens: 22

Re: Script para importar texto

Renato não consegui executar o script. Testei o teu exemplo mas dá erro. Devo estar a fazer algo de errado.

Para a aplicação expecífica que pretendo cheguei à conclusão que é mais vantagoso utilizar o script externamente por isso já não se coloca o problema de importação de texto.
Apesar disso gostaria de resolver a questão mas deixa de ter carácter urgente.

Offline

#6 2013-04-10 17:37:15

renatogsousa
Membro
De: Vila do Conde
Registado: 2013-02-24
Mensagens: 263
Website

Re: Script para importar texto

Sabes que mensagem de erro é que dá na system console?

em princípio pode o problema ser de como se abre o ficheiro. se criares um ficheiro novo clicando no blender.exe penso que o path será diferente de clicar directamente num ficheiro .blend.

Experimenta abrir o ficheiro onde queres testar este script clicando directamente no .blend, para ver se será disso.

Offline

#7 2013-04-16 14:21:15

victorc
Membro
De: Leiria
Registado: 2013-04-08
Mensagens: 22

Re: Script para importar texto

Ainda não tive disponibilidade para voltar a testar. Tenho andado com outros projectos de scripts onde não necessito desta função. Quando tiver disponibilidade volto a atacar esta questão.

Offline

#8 2018-02-10 11:09:13

ricaxe
Membro
De: porto
Registado: 2013-02-24
Mensagens: 243
Website

Re: Script para importar texto

Meninos, ando a fazer uma torre de configuração de impressão 3d para calibração de temperatura, mas queria que o texto da torre fosse um TXT.txt exterior assim colocava la a list de temperaturas e o objecto texto do blender automaticamente ia ler os numeros do txt.
Como é renato? big_smile


Quero Renders Muitos renders

Offline

#9 2018-02-10 14:51:50

SlykDrako
Membro
De: Portugal
Registado: 2013-02-24
Mensagens: 552
Website

Re: Script para importar texto

Não sei se entendi bem, queres criar um script que crie objetos de texto com os números que estão no ficheiro .txt? Ou um único objecto de texto com todos os números do ficheiro?
Será que dava para colocares um exemplo de como seria o ficheiro de texto e o resultado que ficaria no blender?

Última edição por SlykDrako (2018-02-10 14:57:58)

Offline

#10 2018-02-12 22:32:28

SlykDrako
Membro
De: Portugal
Registado: 2013-02-24
Mensagens: 552
Website

Re: Script para importar texto

Boas Ricardo, a ver se isto ajuda wink (baseei-me no código que o Renato tinha colocado antes)

import bpy
import os
import mathutils

fichTexto = bpy.path.abspath("//txtnumtext.txt") # localização do ficheiro
posInc = mathutils.Vector((0.0, -1.0, 0.0)) # incremento da localização de cada objecto de texto (vários objectos)

class TXTNumText(bpy.types.Operator):
    bl_idname = "txtnum.text"
    bl_label = "TXTNumText"

    def unicoObj(self):
        if os.path.exists(fichTexto):
            with open(fichTexto, "r") as file:
                bpy.ops.object.text_add()
                bpy.context.active_object.data.body=file.read().strip()

    def variosObjs(self):
        loc = mathutils.Vector((0.0, 0.0, 0.0))
        if os.path.exists(fichTexto):
            with open(fichTexto, "r") as file:
                for line in file:
                    numero = line.strip()
                    bpy.ops.object.text_add()
                    obj = bpy.context.active_object
                    obj.data.body = numero
                    obj.location = obj.location + loc
                    loc = loc + posInc
	
    def invoke(self, context, event):
        self.unicoObj() # para criar um único objecto para todos os números
        #self.variosObjs() # para criar um objecto por cada número

        return {'FINISHED'}
		
	
def register():
    bpy.utils.register_module(__name__)

def unregister():
    bpy.utils.unregister_module(__name__)


if __name__ == "__main__":
    register()
    bpy.ops.txtnum.text('INVOKE_DEFAULT')

Offline

Rodapé do site