* removed lint functions

* replaced foobar==[]: with if foobar: - no reason to make empty lists for comparison.
* Would raise an error is importing a mesh with a blender that had objects in more then 1 scene.
* sped up some of the XML reading functions.
This commit is contained in:
2006-06-04 18:38:58 +00:00
parent df782b1122
commit 6fceac6ce4

View File

@@ -1,10 +1,9 @@
#!BPY #!BPY
""" Registration info for Blender menus: <- these words are ignored """ Registration info for Blender menus: <- these words are ignored
Name: 'KMZ/KML import'' Name: 'Google Map Model (KMZ/KML)'
Blender: 241 Blender: 241
Group: 'Import' Group: 'Import'
Tip: 'Import geometry of short google earth 3D models' Tip: 'Import Google earth models'
""" """
__author__ = "Jean-Michel Soler (jms)" __author__ = "Jean-Michel Soler (jms)"
@@ -36,33 +35,13 @@ __bpydoc__ = """\
import Blender import Blender
from Blender import Window from Blender import Window
import sys
from Blender import Mathutils from Blender import Mathutils
BLversion=Blender.Get('version')
SHIFT=Blender.Window.Qual.LSHIFT
try:
import nt
os=nt
os.sep='\\'
except:
import posix
os=posix
os.sep='/'
def isdir(path):
try:
st = os.stat(path)
return 1
except:
return 0
def split(pathname): def split(pathname):
if pathname.find(os.sep)!=-1: if pathname.find(Blender.sys.sep)!=-1:
k0=pathname.split(os.sep) k0=pathname.split(Blender.sys.sep)
else: else:
if os.sep=='/': if Blender.sys.sep=='/':
k0=pathname.split('\\') k0=pathname.split('\\')
else: else:
k0=pathname.split('/') k0=pathname.split('/')
@@ -72,11 +51,7 @@ def split(pathname):
return directory, Name return directory, Name
def join(l0,l1): def join(l0,l1):
return l0+os.sep+l1 return l0+Blender.sys.sep+l1
os.isdir=isdir
os.split=split
os.join=join
def fonctionSELECT(nom): def fonctionSELECT(nom):
scan_FILE(nom) scan_FILE(nom)
@@ -134,8 +109,7 @@ def cree_POLYGON(ME,TESSEL):
if UPDATE_F==[]: if UPDATE_F==[]:
POS=len(ME.verts) POS=len(ME.verts)
for VE in TESSEL[0]: UPDATE_V.extend(TESSEL[0])
UPDATE_V.append(VE)
if len(TESSEL[0])==3: if len(TESSEL[0])==3:
UPDATE_F.append([POS,POS+1,POS+2]) UPDATE_F.append([POS,POS+1,POS+2])
@@ -144,15 +118,15 @@ def cree_POLYGON(ME,TESSEL):
UPDATE_F.append([POS,POS+1,POS+2,POS+3]) UPDATE_F.append([POS,POS+1,POS+2,POS+3])
POS+=4 POS+=4
else : else :
if UPDATE_V!=[] : ME.verts.extend(UPDATE_V) if UPDATE_V: ME.verts.extend(UPDATE_V)
FACES=[] FACES=[]
if UPDATE_F!=[]: if UPDATE_F:
for FE in UPDATE_F: for FE in UPDATE_F:
if len(FE)==3: if len(FE)==3:
FACES.append([ME.verts[FE[0]],ME.verts[FE[1]],ME.verts[FE[2]]]) FACES.append([ME.verts[FE[0]],ME.verts[FE[1]],ME.verts[FE[2]]])
else : else :
FACES.append([ME.verts[FE[0]],ME.verts[FE[1]],ME.verts[FE[2]],ME.verts[FE[3]]]) FACES.append([ME.verts[FE[0]],ME.verts[FE[1]],ME.verts[FE[2]],ME.verts[FE[3]]])
if FACES!=[]: if FACES:
ME.faces.extend(FACES) ME.faces.extend(FACES)
FACES=[] FACES=[]
@@ -163,7 +137,7 @@ def cree_POLYGON(ME,TESSEL):
for T in TESSEL: for T in TESSEL:
ME.verts.extend(T) ME.verts.extend(T)
for t in range(len(T),1,-1): for t in xrange(len(T),1,-1):
ME.verts[-t].sel=1 ME.verts[-t].sel=1
EDGES.append([ME.verts[-t],ME.verts[-t+1]]) EDGES.append([ME.verts[-t],ME.verts[-t+1]])
ME.verts[-1].sel=1 ME.verts[-1].sel=1
@@ -171,15 +145,10 @@ def cree_POLYGON(ME,TESSEL):
ME.edges.extend(EDGES) ME.edges.extend(EDGES)
ME.fill() ME.fill()
if npoly %500 == 1 : if npoly %500 == 1 :
for v in ME.verts: ME.sel= True
v.sel=1
ME.remDoubles(0.0) ME.remDoubles(0.0)
for v in ME.verts: ME.sel= False
v.sel=0
TESSEL=[]
return ME,TESSEL
def cree_FORME(v,TESSEL): def cree_FORME(v,TESSEL):
if 1 : if 1 :
@@ -203,15 +172,14 @@ def active_FORME():
else : else :
FACES.append([ME.verts[FE[0]],ME.verts[FE[1]],ME.verts[FE[2]],ME.verts[FE[3]]]) FACES.append([ME.verts[FE[0]],ME.verts[FE[1]],ME.verts[FE[2]],ME.verts[FE[3]]])
#if len(ME.faces)%200==1 : print len(ME.faces) #if len(ME.faces)%200==1 : print len(ME.faces)
if FACES!=[]: if FACES:
ME.faces.extend(FACES) ME.faces.extend(FACES)
UPDATE_V=[] UPDATE_V=[]
UPDATE_F=[] UPDATE_F=[]
POS=0 POS=0
if len(ME.verts)>0: if ME.verts:
for v in ME.verts: ME.sel= True
v.sel=1
ME.remDoubles(0.0) ME.remDoubles(0.0)
def wash_DATA(ndata): def wash_DATA(ndata):
@@ -224,8 +192,8 @@ def wash_DATA(ndata):
ndata=ndata[1:] ndata=ndata[1:]
while ndata[-1]==' ': while ndata[-1]==' ':
ndata=ndata[:-1] ndata=ndata[:-1]
if ndata[0]==',':ndata=ndata[1:] if ndata[0]==',':ndata.pop(0)
if ndata[-1]==',':ndata=ndata[:-1] if ndata[-1]==',':ndata.pop()
ndata=ndata.replace(',,',',') ndata=ndata.replace(',,',',')
ndata=ndata.replace(' ',',') ndata=ndata.replace(' ',',')
ndata=ndata.split(',') ndata=ndata.split(',')
@@ -256,11 +224,12 @@ def contruit_HIERARCHIE(t):
global NUMBER, PLACEMARK global NUMBER, PLACEMARK
vv=[] vv=[]
TESSEL=[] TESSEL=[]
# De select all
for O in SC.getChildren(): O.sel= False
OB = Blender.Object.New('Mesh') OB = Blender.Object.New('Mesh')
SC.link(OB) SC.link(OB)
ME= OB.getData(mesh=1) ME= OB.getData(mesh=1)
[O.select(0) for O in Blender.Object.Get()] OB.sel= True
OB.select(1)
t=t.replace('\t',' ') t=t.replace('\t',' ')
while t.find(' ')!=-1: while t.find(' ')!=-1:
@@ -307,8 +276,20 @@ def contruit_HIERARCHIE(t):
if t[t0+2]=='-': if t[t0+2]=='-':
b=balisetype.index(t[t0+1])+1 b=balisetype.index(t[t0+1])+1
balise=BALISES[b] balise=BALISES[b]
# FIXME - JMS WHY IS STACK[-1] None Sometimes?
try:
if b==2 and t[t0:t1].find(STACK[-1])>-1: if b==2 and t[t0:t1].find(STACK[-1])>-1:
parent=STACK.pop(-1) parent=STACK.pop()
except:
#print 'ERROR'
#print b
#print STACK
#raise "Error"
STACK.pop() # Remove the None value
elif t[t1-1] in balisetype: elif t[t1-1] in balisetype:
balise=BALISES[balisetype.index(t[t1-1])+1] balise=BALISES[balisetype.index(t[t1-1])+1]
else: else:
@@ -326,11 +307,11 @@ def contruit_HIERARCHIE(t):
if balise=='O' and NOM in TAGS: if balise=='O' and NOM in TAGS:
STACK.append(NOM) STACK.append(NOM)
if not PLACEMARK : if not PLACEMARK :
if NOM.find('Style')==0: if NOM.startswith('Style'):
proprietes=collecte_ATTRIBUTS(t[t0:t1+ouvrante]) proprietes=collecte_ATTRIBUTS(t[t0:t1+ouvrante])
if NOM.find('PolyStyle')==0: elif NOM.startswith('PolyStyle'):
GETMAT=1 GETMAT=1
if NOM.find('color')==0 and GETMAT: elif NOM.startswith('color') and GETMAT:
COLOR=t[t2+1:t.find('</color',t2)] COLOR=t[t2+1:t.find('</color',t2)]
print COLOR print COLOR
COLOR=[eval('0x'+COLOR[0:2]), eval('0x'+COLOR[2:4]), eval('0x'+COLOR[4:6]), eval('0x'+COLOR[6:])] COLOR=[eval('0x'+COLOR[0:2]), eval('0x'+COLOR[2:4]), eval('0x'+COLOR[4:6]), eval('0x'+COLOR[6:])]
@@ -348,13 +329,13 @@ def contruit_HIERARCHIE(t):
PLACEMARK=1 PLACEMARK=1
if t[t2:t.find('</Placemark',t2)].find('Polygon')>-1 and len(ME.verts)>0: if t[t2:t.find('</Placemark',t2)].find('Polygon')>-1 and len(ME.verts)>0:
active_FORME() active_FORME()
OB.select(0) OB.sel= False
#[O.select(0) for O in Blender.Object.Get()] #[O.select(0) for O in Blender.Object.Get()]
OB = Blender.Object.New('Mesh') # link mesh to an object OB = Blender.Object.New('Mesh') # link mesh to an object
SC = Blender.Scene.GetCurrent() # link object to current scene SC = Blender.Scene.GetCurrent() # link object to current scene
SC.link(OB) SC.link(OB)
ME=OB.getData(mesh=1) ME=OB.getData(mesh=1)
OB.select(1) OB.sel= True
if NOM.find('styleUrl')>-1: if NOM.find('styleUrl')>-1:
material= t[t2+2:t.find('</styleUrl',t2)] material= t[t2+2:t.find('</styleUrl',t2)]
if material in MATERIALS : if material in MATERIALS :
@@ -368,9 +349,12 @@ def contruit_HIERARCHIE(t):
TESSEL.append([]) TESSEL.append([])
VAL=wash_DATA(VAL) VAL=wash_DATA(VAL)
vv=[[float(VAL[a+ii]) for ii in xrange(3)] for a in xrange(0,len(VAL),3)] vv=[[float(VAL[a+ii]) for ii in xrange(3)] for a in xrange(0,len(VAL),3)]
if vv!=[] : [cree_FORME(v,TESSEL[-1]) for v in vv] if vv: [cree_FORME(v,TESSEL[-1]) for v in vv]
del VAL del VAL
if n==0: ME,TESSEL=cree_POLYGON(ME,TESSEL) if n==0:
cree_POLYGON(ME,TESSEL)
TESSEL= []
elif balise=='O' : elif balise=='O' :
STACK.append(None) STACK.append(None)
D=[] D=[]
@@ -412,4 +396,5 @@ def scan_FILE(nom):
gt2=Blender.sys.time()-gt1 gt2=Blender.sys.time()-gt1
print int(gt2/60),':',int(gt2%60) print int(gt2/60),':',int(gt2%60)
Blender.Window.FileSelector (fonctionSELECT, 'SELECT a .KMZ FILE') if __name__ == '__main__':
Blender.Window.FileSelector (fonctionSELECT, 'SELECT a .KMZ FILE')