Scripts:
- updating some bundled scripts, thanks to authors Jean-Michel Soler, Campbell Barton and Anthony D'Agostino. BPython: - removing wrong fix from BGL.c's glDrawPixels. note: applied guitargeek's setName patch to Blender.Key, but saw that he updated it with more functionality and assigned to stivs, so I won't commit this old version.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
""" Registration info for Blender menus: <- these words are ignored
|
||||
Name: 'Dispaint'
|
||||
Blender: 233
|
||||
Blender: 237
|
||||
Group: 'Mesh'
|
||||
Tip: 'use vertex paint color value to modify shape displacing vertices along normal'
|
||||
"""
|
||||
@@ -11,7 +11,7 @@ __author__ = "Jean-Michel Soler (jms)"
|
||||
__url__ = ("blender", "elysiun",
|
||||
"Script's homepage, http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_displacementpainting.htm",
|
||||
"Communicate problems and errors, http://www.zoo-logique.org/3D.Blender/newsportal/thread.php?group=3D.Blender")
|
||||
__version__ = "233i"
|
||||
__version__ = "237"
|
||||
|
||||
__bpydoc__ = """\
|
||||
This script displaces mesh vertices according to vertex color values.
|
||||
@@ -81,6 +81,7 @@ from Blender.Draw import *
|
||||
from Blender.BGL import *
|
||||
from Blender.Noise import *
|
||||
from Blender.Scene import *
|
||||
from Blender.Window import *
|
||||
sc=Scene.getCurrent()
|
||||
|
||||
# niveau du deplacement
|
||||
@@ -117,6 +118,7 @@ E_AXESELX = 46
|
||||
E_AXESELY = 47
|
||||
E_AXESELZ = 48
|
||||
|
||||
|
||||
E_NOISEME = 49
|
||||
E_NOISEH = 50
|
||||
E_NOISELAC = 51
|
||||
@@ -126,10 +128,28 @@ E_NOISEBAS = 54
|
||||
E_NOISEVAL=[E_NOISEH,E_NOISELAC,E_NOISEOCT,E_NOISEOFF,E_NOISEBAS]
|
||||
E_NOISEDIM = 55
|
||||
|
||||
E_GETCOLORS = 56
|
||||
E_UVCOLORS = 57
|
||||
E_SAVECOLORS = 58
|
||||
B_SAVECOLORS = 0
|
||||
|
||||
E_RESTCOLORS = 60
|
||||
V_RESTCOL=0
|
||||
F_RESTCOL=0
|
||||
|
||||
BUF_COLORS=[]
|
||||
|
||||
RVBA_VALUE=61
|
||||
RVBA_VERTICES=62
|
||||
RVBA_FACES=63
|
||||
|
||||
ExitTIP="Exit from this script session "
|
||||
CreateTIP="Create a new copy of the selected shape"
|
||||
ActionTIP="Do the current selected actions"
|
||||
|
||||
UVCOLORSTIP="Get colrs from first available UV image "
|
||||
GETCOLORSTIP="Get color from textures "
|
||||
REPEATTIP="Replay the same action with new values ."
|
||||
|
||||
def copy_transform(ozero,Obis):
|
||||
Obis.setSize(ozero.getSize());
|
||||
@@ -298,9 +318,23 @@ def DOCMat_list(TMATList):
|
||||
TMATList[0]=0
|
||||
return TMATList
|
||||
|
||||
MOname = "MODE MENU %t|Normal %x1|Material %x2|Selected %x3"
|
||||
MOname = "MODE MENU %t|Normal %x1|Material %x2|Selected %x3| Find color %x4"
|
||||
MOname_doc=["",
|
||||
"Displace all vertices",
|
||||
"Displace vertices only on selected materials . ",
|
||||
"Displace only selected vertices .",
|
||||
"Try to find and set selected the vertices with this color."]
|
||||
|
||||
ORname = "ORIENT MENU %t|From Normal %x1|Local Axes %x2| Noise %x3"
|
||||
NOname = "NOISE MENU %t|BLENDER %x1|STDPERLIN %x2|NEWPERLIN %x3|VORONOI_F1%x4|VORONOI_F2%x5|VORONOI_F3%x6|VORONOI_F4%x7|VORONOI_F2F1%x8|VORONOI_CRACKLE%x9|CELLNOISE%x10|HETEROTENOISE%x11"
|
||||
ORname_doc=["",
|
||||
"Use normal orientation to calculate displacement",
|
||||
"Use selected axes value to calculate displacement",
|
||||
"Blend the color value with Nosie values to calculate the displacement"]
|
||||
|
||||
NOname = "NOISE MENU %t|BLENDER %x1|STDPERLIN %x2|\
|
||||
NEWPERLIN %x3|VORONOI_F1%x4|VORONOI_F2%x5|\
|
||||
VORONOI_F3%x6|VORONOI_F4%x7|VORONOI_F2F1%x8|\
|
||||
VORONOI_CRACKLE%x9|CELLNOISE%x10|HETEROTENOISE%x11"
|
||||
|
||||
MODEMenu = Create(1)
|
||||
ORIENTMenu = Create(1)
|
||||
@@ -351,48 +385,190 @@ glCl3=glColor3f
|
||||
glCl4=glColor4f
|
||||
glRct=glRectf
|
||||
|
||||
def triangle(a,b,c):
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(a[2],a[3],a[4])
|
||||
glVertex2f(a[0],a[1]);
|
||||
glVertex2f(b[0],b[1]);
|
||||
glVertex2f(c[0],c[1]);
|
||||
glEnd();
|
||||
|
||||
def triangleFcolor(a,b,c):
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor4f(a[2],a[3],a[4],a[5])
|
||||
glVertex2f(a[0],a[1]);
|
||||
glColor4f(b[2],b[3],b[4],a[5])
|
||||
glVertex2f(b[0],b[1]);
|
||||
glColor4f(c[2],c[3],c[4],a[5])
|
||||
glVertex2f(c[0],c[1]);
|
||||
glEnd();
|
||||
|
||||
def Ltriangle(a,b,c,LC=0.5):
|
||||
TL=[a,b,c,a]
|
||||
for v in [0,1,2] :
|
||||
glBegin(GL_LINES);
|
||||
glColor3f(LC,LC,LC)
|
||||
glVertex2f(TL[v][0],TL[v][1]);
|
||||
glVertex2f(TL[v+1][0],TL[v+1][1]);
|
||||
glEnd();
|
||||
|
||||
|
||||
def carreFcolor(a,b,c,d):
|
||||
triangleFcolor(a,b,c)
|
||||
triangleFcolor(a,c,d)
|
||||
|
||||
RVBA=[Create(255),Create(255),Create(255),Create(255),Create(0)]
|
||||
|
||||
# _*_ p1
|
||||
# _/ \_
|
||||
# _/ \_
|
||||
# / \_
|
||||
# p0*_ /* p2
|
||||
# | \_ _/ |
|
||||
# | \_ _/ |
|
||||
# | \_ _/ |
|
||||
# | * p3 |
|
||||
# | | |
|
||||
# *_ | /* p4
|
||||
# p6 \_ | _/
|
||||
# \_ | _/
|
||||
# \_|_/
|
||||
# * p5
|
||||
|
||||
def flatcolorcube(r,g,b,a,m,x,y):
|
||||
h0=60
|
||||
v0=40
|
||||
A=[x, y, (r-m)/255.0,g/255.0,b/255.0,a/255.0] #p0
|
||||
B=[x+h0,y-v0, r/255.0,g/255.0,b/255.0,a/255.0] #p3
|
||||
c=[x+h0*2,y, r/255.0, g/255.0, (b-m)/255.0,a/255.0] #p2
|
||||
d=[x+h0,y+v0, (r-m)/255.0,g/255.0,(b-m)/255.0,a/255.0] #p1
|
||||
carreFcolor(A,B,c,d)
|
||||
|
||||
|
||||
A=[x,y,(r-m)/255.0,g/255.0,b/255.0,a/255.0] #p0
|
||||
B=[x+h0,y-v0,r/255.0,g/255.0,b/255.0,a/255.0] #p3
|
||||
c=[x+h0,y-v0*2.5, r/255.0, (g-m)/255.0, b/255.0,a/255.0] #p5
|
||||
d=[x,y-v0*1.5,(r-m)/255.0,(g-m)/255.0,b/255.0,a/255.0] #p6
|
||||
carreFcolor(A,B,c,d)
|
||||
|
||||
d=[x+h0,y-v0,r/255.0,g/255.0,b/255.0,a/255.0] #p3
|
||||
A=[x+h0*2,y,r/255.0,g/255.0,(b-m)/255.0,a/255.0] #p2
|
||||
B=[x+h0*2,y-v0*1.5, r/255.0, (g-m)/255.0,(b-m)/255.0,a/255.0] #p4
|
||||
c=[x+h0,y-v0*2.5,r/255.0,(g-m)/255.0,b/255.0,a/255.0] #p5
|
||||
carreFcolor(A,B,c,d)
|
||||
|
||||
def col_egal2col(col,RVBA):
|
||||
eps=RVBA[4].val
|
||||
if ( (RVBA[0].val-col[0]>=0 and RVBA[0].val-col[0]<=eps) and
|
||||
(RVBA[1].val-col[1]>=0 and RVBA[1].val-col[1]<=eps) and
|
||||
(RVBA[2].val-col[2]>=0 and RVBA[2].val-col[2]<=eps) and
|
||||
(RVBA[3].val-col[3]>=0 and RVBA[3].val-col[3]<=eps) ) :
|
||||
#print 'ok',col, [RVBA[n].val-col[n] for n in 0,1,2,3]
|
||||
return 1
|
||||
else:
|
||||
#print 'not',col, [RVBA[n].val-col[n] for n in 0,1,2,3]
|
||||
return 0
|
||||
|
||||
def select_bycolors(TYPE,RVBA):
|
||||
global RVBA_VERTICES, RVBA_FACES
|
||||
SEL = Blender.NMesh.FaceFlags['SELECT']
|
||||
try:
|
||||
ME=Blender.Scene.getCurrent().getActiveObject().getData()
|
||||
VC={}
|
||||
for f in ME.faces:
|
||||
for v in f.v:
|
||||
try:
|
||||
VC[v].append(f)
|
||||
except:
|
||||
VC[v]=[f]
|
||||
#print '.',
|
||||
for C in VC.iteritems():
|
||||
color=[0,0,0]
|
||||
for f in C[1]:
|
||||
col=f.col[f.v.index(C[0])]
|
||||
col=[col.r,col.g,col.b,col.a]
|
||||
if col_egal2col(col,RVBA):
|
||||
if TYPE== RVBA_VERTICES:
|
||||
C[0].sel=1
|
||||
else:
|
||||
f.sel=1
|
||||
f.flag |= SEL
|
||||
#VC[C[0]].append(color[:])
|
||||
ME.update()
|
||||
except:
|
||||
pass
|
||||
|
||||
def draw():
|
||||
global MODEMenu, NSIZE, TDOCMat,TMATList, TAXEList
|
||||
global mat, ORIName, NEWName, ORIENTMenu
|
||||
global NRepeat, ERROR, TextERROR , NOISE, NOISEMenu, NOISEDIMbout,NOISEDIM
|
||||
global NRepeat, ERROR, TextERROR , NOISE, NOISEMenu
|
||||
global NOISEDIMbout,NOISEDIM, RVBA,RVB_VALUE, RVBA_VERTICES
|
||||
global HBout,lacunarityBout,octavesBout,offsetBout,basisBout
|
||||
global noiseTYPE, ExitTIP, CreateTIP, ActionTIP
|
||||
|
||||
global noiseTYPE, ExitTIP, CreateTIP, ActionTIP, E_GETCOLORS
|
||||
global E_UVCOLORS, UVCOLORSTIP, GETCOLORSTIP, REPEATTIP,RVBA_FACES
|
||||
global E_SAVECOLORS, B_SAVECOLORS, E_RESTCOLORS, MOname_doc, ORname_doc
|
||||
|
||||
size=Buffer(GL_FLOAT, 4)
|
||||
glGetFloatv(GL_SCISSOR_BOX, size)
|
||||
size= size.list
|
||||
|
||||
for s in [0,1,2,3]: size[s]=int(size[s])
|
||||
|
||||
|
||||
glClearColor(0.72,0.72,0.72,1.0)
|
||||
glClear(GL_COLOR_BUFFER_BIT)
|
||||
|
||||
glColor3f(0.0,0.0,0.0)
|
||||
glRectf(4,size[3],534,size[3]-32 )
|
||||
glColor3f(0.66,0.66,0.66)
|
||||
glRectf(4,size[3]-4,404,size[3]-32 )
|
||||
|
||||
glColor3f(0.76,0.76,0.76)
|
||||
glRectf(4,size[3]-32,404,size[3]-294 )
|
||||
|
||||
triangle([4+9,size[3],0.72,0.72,0.72],
|
||||
[4,size[3],],
|
||||
[4,size[3]-9])
|
||||
|
||||
triangle([404-9,size[3],0.72,0.72,0.72],
|
||||
[404,size[3],],
|
||||
[404,size[3]-9])
|
||||
|
||||
triangle([404,size[3]-294,.72,0.72,0.72],
|
||||
[404,size[3]-294+9,],
|
||||
[404-9,size[3]-294])
|
||||
|
||||
triangle([4,size[3]-294,.72,0.72,0.72],
|
||||
[4,size[3]-294+9,],
|
||||
[4+9,size[3]-294])
|
||||
|
||||
glColor3f(1.0,1.0,1.0)
|
||||
glRasterPos2f(20, size[3]-15)
|
||||
Text("Script Python de displacement paintingt")
|
||||
Text("Script Python de displacement painting")
|
||||
|
||||
glRasterPos2f(20, size[3]-28)
|
||||
Text("Jean-michel Soler, juillet 2004")
|
||||
Text("Jean-michel Soler, Aout 2005")
|
||||
|
||||
|
||||
n0=70
|
||||
n1=55
|
||||
if MODEMenu.val<4 :
|
||||
Button("Create" ,E_CREATE ,5 ,size[3]-n0+11 ,60 ,20,CreateTIP)
|
||||
Button("Action" ,E_ACTION ,5 ,size[3]-n0-11 ,60 ,20,ActionTIP)
|
||||
NRepeat=Number("repeat" ,E_REPEAT ,5 ,size[3]-n0-56 ,75 ,20, NRepeat.val,1,10,REPEATTIP)
|
||||
|
||||
Button("Exit" ,E_EXIT ,5 ,size[3]-n0-32 ,60 ,20,ExitTIP)
|
||||
Button("Tex colors" ,E_GETCOLORS ,5 ,size[3]-n0-80 ,75 ,20,GETCOLORSTIP)
|
||||
Button("UV colors" ,E_UVCOLORS ,5 ,size[3]-n0-102 ,75 ,20,UVCOLORSTIP)
|
||||
if B_SAVECOLORS :
|
||||
Button("Rest colors" ,E_RESTCOLORS ,5 ,size[3]-n0-146 ,75 ,20,UVCOLORSTIP)
|
||||
else:
|
||||
Button("Save colors" ,E_SAVECOLORS ,5 ,size[3]-n0-124 ,75 ,20,GETCOLORSTIP)
|
||||
|
||||
|
||||
Button("Create" ,E_CREATE ,5 ,size[3]-n0+16 ,60 ,20,CreateTIP)
|
||||
Button("Action" ,E_ACTION ,5 ,size[3]-n0-4 ,60 ,20,ActionTIP)
|
||||
Button("Exit" ,E_EXIT ,5 ,size[3]-n0-24 ,60 ,20,ExitTIP)
|
||||
|
||||
NRepeat=Number("repeat" ,E_REPEAT ,5 ,size[3]-n0-50 ,75 ,20, NRepeat.val,1,10)
|
||||
|
||||
glColor3f(0.0,0.0,0.0)
|
||||
glRasterPos2f(80 ,size[3]-n0+24)
|
||||
Text("MODE")
|
||||
|
||||
MODEMenu= Menu(MOname, E_MODE ,80 ,size[3]-n0 ,100,20, MODEMenu.val, "MODE menu.")
|
||||
MODEMenu= Menu(MOname, E_MODE ,80 ,size[3]-n0 ,100,20, MODEMenu.val, MOname_doc[MODEMenu.val])
|
||||
|
||||
if MODEMenu.val==2:
|
||||
TDOCMat=Toggle("Doc Mat" ,E_DOCMAT ,180 ,size[3]-n0 ,60 ,20,TDOCMat.val)
|
||||
@@ -402,14 +578,22 @@ def draw():
|
||||
glCl3(TMATList[1][t][0],
|
||||
TMATList[1][t][1],
|
||||
TMATList[1][t][2])
|
||||
glRct(80+t*40,
|
||||
size[3]-n0-60,
|
||||
80+t*40+40,
|
||||
size[3]-n0-60+40)
|
||||
TMATList[2][t]=Toggle("%s"%t , 32+t ,80+t*40+5 ,size[3]-n0-50 ,30 , 20,TMATList[2][t].val)
|
||||
|
||||
if t<=7:
|
||||
glRct(80+t*40,
|
||||
size[3]-n0-60,
|
||||
80+t*40+40,
|
||||
size[3]-n0-60+40)
|
||||
TMATList[2][t]=Toggle("%s"%(t+1) , 32+t ,80+t*40+5 ,size[3]-n0-50 ,30 , 20,TMATList[2][t].val)
|
||||
else:
|
||||
glRct(80+(t-8)*40,
|
||||
size[3]-n0-50-50,
|
||||
80+(t-8)*40+40,
|
||||
size[3]-n0-60)
|
||||
TMATList[2][t]=Toggle("%s"%(t+1) , 32+t ,80+(t-8)*40+5 ,size[3]-n0-45*2 ,30 , 20,TMATList[2][t].val)
|
||||
|
||||
glColor3f(1.0,0.3,0.0)
|
||||
glRasterPos2f(80+40+5 ,size[3]-n0-80)
|
||||
glRasterPos2f(80+40+5 ,size[3]-n0-110)
|
||||
if ERROR>1:
|
||||
Text('Last error : '+TextERROR)
|
||||
else:
|
||||
@@ -417,35 +601,66 @@ def draw():
|
||||
|
||||
glColor3f(0.0,0.0,0.0)
|
||||
glRasterPos2f(240 ,size[3]-n0+24)
|
||||
Text("ORIENTATION")
|
||||
ORIENTMenu= Menu(ORname, E_ORIENT ,240 ,size[3]-n0 ,100,20, ORIENTMenu.val, "ORIENT menu.")
|
||||
|
||||
if ORIENTMenu.val==2 :
|
||||
for t in range(3):
|
||||
TAXEList[1][t]=Toggle("%s"%TAXEList[0][t],
|
||||
E_AXESEL+t,
|
||||
240+100+t*30 , size[3]-n0 ,30 , 20,
|
||||
TAXEList[1][t].val)
|
||||
|
||||
|
||||
if ORIENTMenu.val==3 :
|
||||
glRasterPos2f(240 ,size[3]-n0-90-4)
|
||||
Text("NOISE")
|
||||
NOISEMenu= Menu(NOname, E_NOISEME , 240 ,size[3]-n0-118 ,110,20, NOISEMenu.val, "NOISE menu.")
|
||||
NOISEDIMbout=Number(" Dim: " ,E_NOISEDIM , 240 ,size[3]-n0-138 ,110,20, NOISEDIMbout.val, 1,100)
|
||||
|
||||
if NOISEMenu.val==11:
|
||||
basisBout=Slider(noiseTYPE[basisBout.val],
|
||||
E_NOISEBAS ,40 ,size[3]-n0-118 ,175,20, basisBout.val, 0,9,)
|
||||
HBout= Slider("H", E_NOISEH ,40 ,size[3]-n0-138 ,175,20, HBout.val, -2.0,+2.0,0,)
|
||||
lacunarityBout=Slider("lacunarity", E_NOISELAC ,40 ,size[3]-n0-158 ,175,20, lacunarityBout.val, -4.0,+4.0,0,)
|
||||
octavesBout=Slider("octave", E_NOISEOCT ,40 ,size[3]-n0-178 ,175,20, octavesBout.val, -10.0,+10.0,0,)
|
||||
offsetBout=Slider("offset", E_NOISEOFF ,40 ,size[3]-n0-198 ,175,20, offsetBout.val, -5.0,+5.0,0,)
|
||||
|
||||
NSIZE= Slider("Disp Size", E_NSIZE ,80 ,size[3]-n0-20 ,260,20, NSIZE.val, -4.0,+4.0,0,"SIZE.")
|
||||
if MODEMenu.val<4:
|
||||
Text("ORIENTATION")
|
||||
ORIENTMenu= Menu(ORname, E_ORIENT ,240 ,size[3]-n0 ,100,20, ORIENTMenu.val, ORname_doc[ORIENTMenu.val])
|
||||
if ORIENTMenu.val==2 :
|
||||
for t in [0,1]:
|
||||
TAXEList[1][t]=Toggle("%s"%TAXEList[0][t],
|
||||
E_AXESEL+t,
|
||||
240+100+t*30+2 , size[3]-n0+10 ,28 , 18,
|
||||
TAXEList[1][t].val)
|
||||
TAXEList[1][2]=Toggle("%s"%TAXEList[0][2],
|
||||
E_AXESEL+2,
|
||||
int(240+100+.5*30+2) , size[3]-n0-10 ,28 , 18,
|
||||
TAXEList[1][2].val)
|
||||
if ORIENTMenu.val==3 :
|
||||
glRasterPos2f(240 ,size[3]-n0-120-4)
|
||||
Text("NOISE")
|
||||
NOISEMenu= Menu(NOname, E_NOISEME , 240 ,size[3]-n0-148 ,110,20, NOISEMenu.val, "NOISE menu.")
|
||||
NOISEDIMbout=Number(" Dim: " ,E_NOISEDIM , 240 ,size[3]-n0-172 ,110,20, NOISEDIMbout.val, 1,100)
|
||||
if NOISEMenu.val==11:
|
||||
basisBout=Slider(noiseTYPE[basisBout.val],
|
||||
E_NOISEBAS ,40 ,size[3]-n0-178 ,175,20, basisBout.val, 0,9,)
|
||||
HBout= Slider("H", E_NOISEH ,40 ,size[3]-n0-198 ,175,20, HBout.val, -2.0,+2.0,0,)
|
||||
lacunarityBout=Slider("lacunarity", E_NOISELAC ,40 ,size[3]-n0-218 ,175,20, lacunarityBout.val, -4.0,+4.0,0,)
|
||||
octavesBout=Slider("octave", E_NOISEOCT ,219 ,size[3]-n0-198 ,175,20, octavesBout.val, -10.0,+10.0,0,)
|
||||
offsetBout=Slider("offset", E_NOISEOFF ,219 ,size[3]-n0-218 ,175,20, offsetBout.val, -5.0,+5.0,0,)
|
||||
NSIZE= Slider("Disp Size", E_NSIZE ,80 ,size[3]-n0-20 ,260,20, NSIZE.val, -4.0,+4.0,0,"SIZE.")
|
||||
|
||||
|
||||
|
||||
else:
|
||||
# degrades de couleurs
|
||||
glShadeModel(GL_SMOOTH)
|
||||
#transparence
|
||||
glEnable(GL_BLEND)
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
||||
|
||||
RVBA[0]=Slider("Red :", RVBA_VALUE , 105 ,size[3]-n0-25 ,280,20, RVBA[0].val, 0,255,0,"")
|
||||
RVBA[1]=Slider("Green :", RVBA_VALUE , 105 ,size[3]-n0-47 ,280,20, RVBA[1].val, 0,255,0,"")
|
||||
RVBA[2]=Slider("Blue :", RVBA_VALUE , 105 ,size[3]-n0-69 ,280,20, RVBA[2].val, 0,255,0,"")
|
||||
RVBA[3]=Slider("Alpha :", RVBA_VALUE , 105 ,size[3]-n0-91 ,150,20, RVBA[3].val, 0,255,0,"")
|
||||
RVBA[4]=Slider("margin :", RVBA_VALUE , 105 ,size[3]-n0-113 ,150,20, RVBA[4].val, 0,255,0,"")
|
||||
flatcolorcube(RVBA[0].val,
|
||||
RVBA[1].val,
|
||||
RVBA[2].val,
|
||||
RVBA[3].val,
|
||||
RVBA[4].val,
|
||||
270,size[3]-n0-120)
|
||||
|
||||
Button("Vertex" ,RVBA_VERTICES ,5 ,size[3]-n0-148 ,75 ,20,CreateTIP)
|
||||
Button("Faces" ,RVBA_FACES ,5 ,size[3]-n0-169 ,75 ,20,ActionTIP)
|
||||
|
||||
|
||||
def on_MESH():
|
||||
Me=Object.GetSelected()
|
||||
if Me!=[] and Me[0].getType()=='Mesh':
|
||||
editmode = Window.EditMode()
|
||||
if editmode: Window.EditMode(0)
|
||||
return 1,Me[0].getData()
|
||||
else:
|
||||
return 0, None
|
||||
|
||||
def event(evt, val):
|
||||
if (evt== QKEY and not val): Exit()
|
||||
@@ -455,21 +670,20 @@ def bevent(evt):
|
||||
global mat, ORIENTMenu, NRepeat, TAXEList
|
||||
global ERROR,TextERROR, NOISE, NOISEMenu, NOISEDIMbout,NOISEDIM
|
||||
global HBout,lacunarityBout,octavesBout,offsetBout,basisBout
|
||||
global H,lacunarity,octaves,offset,basis
|
||||
|
||||
global H,lacunarity,octaves,offset,basis, E_RESTCOLORS, RVBA_VERTICES
|
||||
global E_GETCOLORS, E_UVCOLORS, E_SAVECOLORS, B_SAVECOLORS
|
||||
global V_RESTCOLORS, F_RESTCOLORS, BUF_COLORS, RVBA, RVBA_FACES
|
||||
|
||||
if (evt== E_EXIT):
|
||||
Exit()
|
||||
|
||||
|
||||
elif (evt== E_ACTION):
|
||||
for n in range(NRepeat.val):
|
||||
paint()
|
||||
|
||||
elif (evt== E_NSIZE):
|
||||
ng=NSIZE.val
|
||||
|
||||
elif (evt== E_DOCMAT) or (evt in E_MATVAL):
|
||||
Me=Object.GetSelected()
|
||||
|
||||
if Me!=[]:
|
||||
if Me[0].getType()=='Mesh':
|
||||
TMATList=DOCMat_list(TMATList)
|
||||
@@ -484,29 +698,68 @@ def bevent(evt):
|
||||
else:
|
||||
ERROR=1
|
||||
TextERROR='No Selected Object.'
|
||||
|
||||
|
||||
elif (evt== E_CREATE):
|
||||
|
||||
NEWMEcreation(Blender.Object.GetSelected()[0])
|
||||
Blender.Draw.Redraw()
|
||||
|
||||
ERROR=1
|
||||
TextERROR='No Selected Object.'
|
||||
|
||||
elif (evt== E_NOISEME):
|
||||
NOISE=NOISEMenu.val-1
|
||||
|
||||
elif (evt in E_NOISEVAL):
|
||||
H=HBout.val
|
||||
lacunarity=lacunarityBout.val
|
||||
octaves=octavesBout.val
|
||||
offset=offsetBout.val
|
||||
basis=basisBout.val
|
||||
|
||||
elif (evt== E_NOISEDIM):
|
||||
NOISEDIM=NOISEDIMbout.val
|
||||
|
||||
elif (evt == E_GETCOLORS):
|
||||
OK,MESH=on_MESH()
|
||||
if OK: MESH.update(1,0,1)
|
||||
elif (evt == E_UVCOLORS):
|
||||
OK,MESH=on_MESH()
|
||||
if OK and MESH.hasFaceUV():
|
||||
for f in MESH.faces:
|
||||
if f.image:
|
||||
im=Blender.Image.Get(f.image.name)
|
||||
break
|
||||
imX,imY = im.getMaxXY()
|
||||
for f in MESH.faces:
|
||||
for uv in f.uv:
|
||||
color=[int(c*255.0) for c in im.getPixelF(abs(uv[0]*imX%imX), abs(uv[1]*imY%imY))]
|
||||
f.col[f.uv.index(uv)].r=color[0]
|
||||
f.col[f.uv.index(uv)].g=color[1]
|
||||
f.col[f.uv.index(uv)].b=color[2]
|
||||
f.col[f.uv.index(uv)].a=color[3]
|
||||
MESH.update()
|
||||
elif (evt == E_SAVECOLORS):
|
||||
OK,MESH=on_MESH()
|
||||
print OK, MESH
|
||||
if OK and (MESH.hasFaceUV() or MESH.hasVertexColours()):
|
||||
F_RESTCOLORS=1
|
||||
for f in MESH.faces:
|
||||
b=[MESH.faces.index(f)]
|
||||
for c in f.col:
|
||||
b.append([c.r,c.g,c.b,c.a])
|
||||
BUF_COLORS.append(b)
|
||||
B_SAVECOLORS = 1
|
||||
else:
|
||||
B_SAVECOLORS = 0
|
||||
elif (evt == E_RESTCOLORS):
|
||||
OK,MESH=on_MESH()
|
||||
print F_RESTCOLORS, len(BUF_COLORS),len(MESH.faces)
|
||||
if OK and F_RESTCOLORS==1 and len(BUF_COLORS)==len(MESH.faces):
|
||||
for b in BUF_COLORS:
|
||||
ncol=0
|
||||
for c in MESH.faces[b[0]].col :
|
||||
print b[ncol+1]
|
||||
c.r,c.g,c.b,c.a= b[ncol+1]
|
||||
ncol+=1
|
||||
F_RESTCOLORS=0
|
||||
B_SAVECOLORS = 0
|
||||
BUF_COLORS=[]
|
||||
MESH.update()
|
||||
elif (evt == RVBA_VERTICES or evt == RVBA_FACES):
|
||||
select_bycolors(evt,RVBA)
|
||||
Blender.Draw.Redraw()
|
||||
|
||||
Register(draw, event, bevent)
|
||||
|
||||
Reference in New Issue
Block a user