![]() |
|
Bienvenido a Foros 3DPoder.. Usted esta viendo este foro como invitado, no esta registrado todavía, lo que limita su visión del foro. Si quiere unirse gratis a la mayor comunidad del diseño gráfico de habla hispana, tener acceso a publicar y responder mensajes, tener mensajes privados con otros miembros(PM), responder encuestas, publicar sus imágenes para que las vea el resto del mundo, tener acceso a los video_tutoriales, y muchas cosas más, no lo dude. Registrarse es rápido, simple y gratuito, agregate hoy a la mayor comunidad 3D de habla hispana! ! Si usted tiene algún problema con su registro, por favor , díganoslo aquí.
|
![]() ¿Te ayudo? |
|
|||||||
|
|
|
|
#76 |
|
Environment Artist
Fecha de Ingreso: febrero-2004
Ubicación: Barcelona
Mensajes: 850
|
Joder que cabron, lo has bordado klopes!!
Nada hombre, no te preocupes tio, yo habria tardado siglos para llegar aqui. A ver si lo podemos mejorar
__________________
Blog |
|
|
|
| Enlaces patrocinados |
|
|
#77 | |
|
12 meses, 12 pagas
Fecha de Ingreso: julio-2005
Ubicación: Bajo el sol monegrino
Mensajes: 5,018
|
Cita:
Si te interesa, puedes suscribirte a la lista de desarrollo, y ves lo que van discutiendo.
__________________
Y sus discípulos le preguntaron, diciendo: ¿Qué significa esta parábola? Y él dijo: A vosotros os es dado conocer los misterios del reino de Dios; pero a los otros por parábolas, para que viendo no vean, y oyendo no entiendan. Mateo 8, 9-10 |
|
|
|
|
|
|
#78 |
|
12 meses, 12 pagas
Fecha de Ingreso: julio-2005
Ubicación: Bajo el sol monegrino
Mensajes: 5,018
|
__________________
Y sus discípulos le preguntaron, diciendo: ¿Qué significa esta parábola? Y él dijo: A vosotros os es dado conocer los misterios del reino de Dios; pero a los otros por parábolas, para que viendo no vean, y oyendo no entiendan. Mateo 8, 9-10 |
|
|
|
|
|
#79 |
|
El Programador
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 687
|
Sinceramente los dos sois unos monstruos...
|
|
|
|
|
|
#80 |
|
Environment Artist
Fecha de Ingreso: febrero-2004
Ubicación: Barcelona
Mensajes: 850
|
He modificado un poco el tema.
Ahora pinta, o sea que no necesitas ir haciendo cada vez click para ir anyadiendo objetos. Cambiando el valor de sleep de 10 a 100 ponemos menos duplicados encima de la geometria Código:
# SPACEHANDLER.VIEW3D.EVENT
###########################
###~~~~~~~~~~~~~~~~~~~~~###
### Pegotes 0.1 ###
### ###
### Un capricho para ###
### contentar a Caronte ###
###~~~~~~~~~~~~~~~~~~~~~###
###########################
__author__ = "Carlos López (klopes)"
__url__ = ("http://www.3dpoder.com", "Author's web page, http://klopes.tk",
"Script's homepage, http://www.iespana.es/klopes/enchufes-guiri.htm",
)
__version__ = "1.0"
__bpydoc__ = """\
Pegotes sirve para colocar objetos sobre las caras de una malla, de acuerdo a su orientación.
No funciona sobre modificadores.
Buen uso:
* Activar Script Links en la ventana correspondiente.
* Abrir el script en una ventana de texto
* En una ventana 3D, Pinchar en View->Space Handler Scripts>pegamento.py
* Seleccionar una malla, y pinchar sobre ella innumerables veces y sin criterio ninguno.
"""
import Blender,BPyWindow,BPyMesh
from Blender import *
from Blender.Window import *
from Blender.Mathutils import *
evt = Blender.event
LMB = Window.MButs['L']
def event (evt, val):
# Loop until click
mouse_buttons = Window.GetMouseButtons()
while not mouse_buttons & LMB:
Blender.sys.sleep(10)
mouse_buttons = Window.GetMouseButtons()
print "UNPRESSED"
while mouse_buttons & LMB:
Blender.sys.sleep(10)
mouse_buttons = Window.GetMouseButtons()
pinta()
Draw.Exit()
def pinta():
print "Mmm..."
os = Blender.Object.GetSelected()[0]
m = NMesh.GetRawFromObject(os.name)
mc = GetMouseCoords()
ray = BPyWindow.mouseViewRay(mc[0],mc[1],os.matrix)
ori,dir= ray[1],ray[2]
f = BPyMesh.pickMeshRayFace(m,ori,dir)
if f[0]:
print "F", f
o=Object.New('Empty')
M0 = os.matrix
vs = f[0].v
v0 = Vector(vs[0])*M0
v1 = Vector(vs[1])*M0
v2 = Vector(vs[2])*M0
eX, e = (v1-v0).normalize(), v2-v0
eZ = CrossVecs(eX,e).normalize()
eY = CrossVecs(eX,eZ)
M = Matrix(-eX,eY,eZ)
o.setMatrix(M)
o.setLocation(f[1]*M0)
Scene.GetCurrent().link(o)
Redraw()
Blender.event=None
def gui():
print "gui"
Draw.Register(gui, event, pinta)
__________________
Blog Última edición por fog fecha: 26 sep 2007 a las 08:33. |
|
|
|
|
|
#82 |
|
Sexador de humanos
Fecha de Ingreso: junio-2003
Ubicación: Castellón
Mensajes: 11,293
|
Bueno, comienza añadiendo una interfaz chorra donde exista un deslizador de "espaciado de brocha" con el que puedas variar el tamaño del sleep en tiempo de ejecución.
|
|
|
|
|
|
#83 |
|
BlenderAdicto
Fecha de Ingreso: diciembre-2004
Ubicación: Valencia-España
Mensajes: 10,324
|
Eso está bien como opción, pero debería existir también el otro modo, porque nos dará más precisión.
|
|
|
|
|
|
#85 |
|
Sexador de humanos
Fecha de Ingreso: junio-2003
Ubicación: Castellón
Mensajes: 11,293
|
fog, es tan simple con que pongas una variable chivata que te permita pintar siempre que se haya dejado de hacer click o sigas haciendo click y hayan pasado los segundos que quieras, y en caso contrario no haga nada.
|
|
|
|
|
|
#86 |
|
Environment Artist
Fecha de Ingreso: febrero-2004
Ubicación: Barcelona
Mensajes: 850
|
Si Mars, a ver si puedo controlar eso, le falta poco.
Ahora lo que hace ya es pintar con el RMB sin parar, y con el boton del medio del Mouse paramos el script El problema ahora es poder acceder al Gui del script para cambiar el valor del spacing, pero peta..... Alguna idea? Código:
# SPACEHANDLER.VIEW3D.EVENT
###########################
###~~~~~~~~~~~~~~~~~~~~~###
### Pegotes 0.1 ###
### ###
### Un capricho para ###
### contentar a Caronte ###
###~~~~~~~~~~~~~~~~~~~~~###
###########################
__author__ = "Carlos López (klopes)"
__url__ = ("http://www.3dpoder.com", "Author's web page, http://klopes.tk",
"Script's homepage, http://www.iespana.es/klopes/enchufes-guiri.htm",
)
__version__ = "1.0"
__bpydoc__ = """\
Pegotes sirve para colocar objetos sobre las caras de una malla, de acuerdo a su orientación.
No funciona sobre modificadores.
Buen uso:
* Activar Script Links en la ventana correspondiente.
* Abrir el script en una ventana de texto
* En una ventana 3D, Pinchar en View->Space Handler Scripts>pegamento.py
* Seleccionar una malla, y pinchar sobre ella innumerables veces y sin criterio ninguno.
"""
import Blender,BPyWindow,BPyMesh
from Blender import *
from Blender.Window import *
from Blender.Mathutils import *
from Blender.BGL import *
RMB = Window.MButs['R']
def event (evt, val):
global mouse_state
mouse_buttons = Window.GetMouseButtons()
print mouse_buttons
while not mouse_buttons:
while not mouse_buttons & RMB:
Blender.sys.sleep(brush_spacing.val)
mouse_buttons = Window.GetMouseButtons()
print mouse_buttons
if mouse_buttons == 2:
Draw.Exit()
return
while mouse_buttons & RMB:
Blender.sys.sleep(brush_spacing.val)
mouse_buttons = Window.GetMouseButtons()
PaintGeom()
def PaintGeom():
#print "Mmm..."
os = Blender.Object.GetSelected()[0]
m = NMesh.GetRawFromObject(os.name)
mc = GetMouseCoords()
ray = BPyWindow.mouseViewRay(mc[0],mc[1],os.matrix)
ori,dir = ray[1],ray[2]
f = BPyMesh.pickMeshRayFace(m,ori,dir)
if f[0]:
#print "F", f
o=Object.New('Empty')
M0 = os.matrix
vs = f[0].v
v0 = Vector(vs[0])*M0
v1 = Vector(vs[1])*M0
v2 = Vector(vs[2])*M0
eX, e = (v1-v0).normalize(), v2-v0
eZ = CrossVecs(eX,e).normalize()
eY = CrossVecs(eX,eZ)
M = Matrix(-eX,eY,eZ)
o.setMatrix(M)
o.setLocation(f[1]*M0)
Scene.GetCurrent().link(o)
Redraw()
Blender.event=None
def Gui():
global brush_spacing, activeObj
glColor3f(0.7,0.7,0.7)
glRecti(15, 35, 320, 210)
glColor3f(0.1, 0.1, 0.1)
glRasterPos2f(35,190)
Draw.Text("Brush Spacing: ")
brush_spacing = Draw.Number('Value:', 1000, 35,160, 150,20, 100, 5,1000, '% of meshes with one stroke')
activeObj = Draw.Label("Object to paint: ", 40,120, 100, 30)
Draw.Register(Gui, event, PaintGeom)
__________________
Blog |
|
|
|
|
|
#87 |
|
BlenderAdicto
Fecha de Ingreso: diciembre-2004
Ubicación: Valencia-España
Mensajes: 10,324
|
No puedes usar el botón del medio, porque se usa para rotar la vista 3D y eso es esencial mientras pintamos.
|
|
|
|
|
|
#88 |
|
12 meses, 12 pagas
Fecha de Ingreso: julio-2005
Ubicación: Bajo el sol monegrino
Mensajes: 5,018
|
Primero: ten en cuenta esto que viene en las instrucciones de los Space Handlers:
Guidelines (important): * EVENT handlers can access and change Blender objects just like any other script, but they should not draw to the screen, use a DRAW handler to do that. Specifically: Draw.Image and the BGL drawing functions should not be used inside an EVENT handler. Es decir, olvídate de entornos gráficos en este texto, tendrás que usar otro. Léelo bien. Además estás mezclando los eventos controlados por una GUI con los detectados como space handler. O una cosa o la otra, o mete la GUI como un script SPACEHANDLER.VIEW3D.DRAW. En cuanto al spacing, no debería ser controlado por tiempo sino por la distancia al último objeto pegado. Guarda las coordenadas f[1]*M0 y no dibujes el siguiente hasta que la distancia sea mayor que una D.
__________________
Y sus discípulos le preguntaron, diciendo: ¿Qué significa esta parábola? Y él dijo: A vosotros os es dado conocer los misterios del reino de Dios; pero a los otros por parábolas, para que viendo no vean, y oyendo no entiendan. Mateo 8, 9-10 |
|
|
|
|
|
#89 |
|
-cristal lake resident-
|
crea un script para modelar igual que maya XD
|
|
|
|
|
|
#90 |
|
12 meses, 12 pagas
Fecha de Ingreso: julio-2005
Ubicación: Bajo el sol monegrino
Mensajes: 5,018
|
Bien, siguiendo con mi rollo de los script handlers, he adaptado unos toques de Fog en la primera idea, y aquí lo tenemos.
Un objeto se añade si la distancia al anterior es mayor que la variable Med, más un valor aleatorio sobre Var. EDITO: Lo que he escrito del Rand() era una gilipollez, ya está corregido. Ya le pondremos cabecera al final, ¿vale? Código:
# SPACEHANDLER.VIEW3D.EVENT
import Blender,BPyWindow,BPyMesh
from Blender import *
from Blender.Window import *
from Blender.Mathutils import *
evt = Blender.event
Med = 1.0
Var = 0.5
if evt == Draw.LEFTMOUSE:
R = 0
mouse_buttons = Window.GetMouseButtons()
os = Blender.Object.GetSelected()[0]
m = NMesh.GetRawFromObject(os.name)
M0 = os.matrix
LMB = Window.MButs['L']
L0 = Vector(-1000000.,0.,0.)
while mouse_buttons & LMB:
mouse_buttons = Window.GetMouseButtons()
mc = GetMouseCoords()
ray = BPyWindow.mouseViewRay(mc[0],mc[1],os.matrix)
ori,dir= ray[1],ray[2]
f = BPyMesh.pickMeshRayFace(m,ori,dir)
L = f[1]*M0
Dist= Vector(L-L0).magnitude
if f[0] and (Dist > Med+R):
R = Rand()
# print "F", f
o=Object.New('Empty')
L0 = L
vs = f[0].v
v0 = Vector(vs[0])*M0
v1 = Vector(vs[1])*M0
v2 = Vector(vs[2])*M0
eX, e = (v1-v0).normalize(), v2-v0
eZ = CrossVecs(eX,e).normalize()
eY = CrossVecs(eX,eZ)
M = Matrix(-eX,eY,eZ)
o.setMatrix(M)
o.setLocation(L)
Scene.GetCurrent().link(o)
Redraw()
Blender.event=None
__________________
Y sus discípulos le preguntaron, diciendo: ¿Qué significa esta parábola? Y él dijo: A vosotros os es dado conocer los misterios del reino de Dios; pero a los otros por parábolas, para que viendo no vean, y oyendo no entiendan. Mateo 8, 9-10 Última edición por Klópes fecha: 27 sep 2007 a las 09:17. |
|
|
|
![]() |
| Etiquetas Identificativas |
| blender, para, script, sugerencias |
| Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes) | |
| Herramientas | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Granja de PCs para renders en max | 3dpoder | 3DStudio Max | 14 | 20 ago 2008 |