16 de julio de 2011

VisualBasic: Pegar formula en una celda


Private Sub CommandButton1_Click()

'1)--Este NO funciona--------------'
Hoja1.Cells(5, 3) = "=SUMA(C1:C4)"

'2)--Este NO funciona--------------'
Worksheets("Hoja1").Range("C6").Formula = "=SUMA(C1:C4)"

'3)--Este SI funciona--------------'
Worksheets("Hoja1").Range("C6").Formula = "=SUM(C1:C4)"

'4)--Este SI funciona--------------'
Worksheets("Hoja1").Range("C7").FormulaLocal = "=SUMA(C1:C4)"

'--Detector de formulas----------'
If Cells(5, 3).HasFormula Then
MsgBox "Si tiene Fórmula"
Else
MsgBox "No tiene Fórmula"
End If

End Sub


En 1) Excel me da error: "#¿NOMBRE?"
En 2) Creo que no detecta la fn "SUMA" y si "SUM" con .Formula
La de eleccion sería la 4).

15 de julio de 2011

Visual Basic: Copiar celdas entre tablas con variable


Private Sub CommandButton1_Click()

nMP = Hoja1.Cells(6, 2)
nNUT = Hoja1.Cells(5, 3)

Hoja3.Cells(1, 1) = nMP
Hoja3.Cells(2, 1) = nNUT

End Sub

N.B.: Hoja1 y Hoja3 son el nombre de las hojas, no sus etiquetas.

Visual Basic: Copiar Rangos de celdas entre hojas



Private Sub CommandButton1_Click()

'Copiar un rango de celdas'
Worksheets("TABLA_1").Range("a1", "e5").Value = Worksheets("TABLA_2").Range("a1", "e5").Value

'Copiar toda una linea de celdas'
Worksheets("TABLA_1").Range("6:6").Value = Worksheets("TABLA_2").Range("1:1").Value

'Copiar toda una columna de celdas'
Worksheets("TABLA_1").Range("A:A").Value = Worksheets("TABLA_2").Range("B:B").Value

End Sub

N.B.: TABLA_1 y TABLA_2 son las etiquetas de las tablas

13 de junio de 2011

Blender sky dome. Droid en Andrómeda

Continuando con proyecto Droid para ir probando poco a poco las posibilidades de Blender.
Una técnica para hacer un escenario o mejor dicho un paisaje realista 3D con Blender es hacer una cúpula y aplicarle como material una foto con nubes o en este caso un paisaje estelar.

Aquí hay un videotutorial que explica muy claro como hacerlo: Making a SkyDome:



Aplicando la técnica que describe he cambiado el escenario y he substituido la cúpula por un plano gigante con la imagen de la galaxia de Andrómeda (M31) y su pequena compañera M32 como fondo. El planeta cercano a M31 donde esta Droid lo he hecho con una porción de una esfera texturizada con cemento ligeramente virado al rojo.


De iluminación he puesto un Blender Sun y en el render un 0,10 de Ambient Oclusión.

Y este es el resultado:



9 de junio de 2011

Creando un video de imagenes con mencoder

Al utilizar las aplicaciones de renderizado distribuido con Blender
Obtenemos una colección de las imágenes que forman la animación.

Para crear el video con todas estas imágenes podemos usar la aplicación Linux:


Que es un completísimo programa en command line para visionar y codificar video.

También hay frontends que facilitan el manejo del programa: http://www.mplayerhq.hu

Teniendo las imágenes en un direcctorio ejecutamos el comando:

$ mencoder "mf://*.png" -mf fps=25 -o salida.avi -ovc lavc -lavcopts vcodec=mpeg4

Las imágenes estan en .png, los frames por segundo son 25 y el fichero de video salida.avi

Render distribuido con Blender

Una cosa que no ha cambiado desde mis primeros pasos con el 3D hasta hoy es el desesperante tiempo de renderizado. En Blender tenemos la alternativa de hacer un cluster o una red distribuida de ordenadores que renderizen en paralelo.

He encontrado dos aplicaciones:


Ambas programadas en java y crean una red distribuida de ordenadores que renderizan en paralelo un fichero de Blender.

Finalmente yo recomendaría LokiRender ya que la puesta en marcha es extremadamente sencilla y ademas se puede ejecutar desde la línea de comando lo que es muy útil si se accede a máquinas remotas por ssh.

Es necesario tener instalado Blender en las máquinas clientes.

Update: despues de publicar esta entrada, lokirender me ha dado problemas, apareciendo errores de renderización con Blender 2.5.

Y también he descubierto que el propio Blender tiene capacidad de renderizar de modo distribuido. Lo he probado y funciona de maravilla, sin necesidad de otras utilidades.

http://wiki.blender.org/index.php/Doc:2.5/Manual/Render/Engines/Netrender

Antes tendras que activar el add-on de Blender Network Renderer y seguir las intrucciones del tutorial.

Other Links: