## Test lire un chemin Gimp ## ## Eric Francony ## ############################## import Blender from Blender import * from math import * from Blender.BGL import * from Blender.Draw import * import string import math global fichier,path,contenu,listePoints global p0,p1,p2,p3,t,coor mesh=Blender.NMesh.GetRaw() ########################################### ## fonction Bezier ########################################### def Bezier(p0,p1,p2,p3,t): t2=1-t coor=(pow(t2,3)*p0)+(3*pow(t2,2)*t*p1)+(3*t2*pow(t,2)*p2)+(pow(t,3)*p3) return (coor) ############################################## ## ouverture du fichier ############################################ path="C:/3D/Chemin4.txt" try: fichier=open(path,"ra") print "Fichier trouve" print contenu=fichier.readlines(255) fichier.close() except IOError: print "Fichier introuvable" exit ############################################## ## Traitement des donnees ############################################## ############################################ ## Recherche premiere donnees ############################################ index=-1 trouv=-1 while (trouv==-1): print "index= ",index index=index+1 ligne=contenu[index] trouv=ligne.find("TYPE") print "trouv= ",trouv print index ########################################### ## Lecture des donnees ########################################### ListePoints=[] ListeBezier=[] ListeCourbe=[] flag=0 tmp=[] echelle=100 ##Suivant taille de l' image for i in range(index,len(contenu)): texte=contenu[i] if (len(texte)>3):##Sauter chaines vides type=texte[0:7] texte=texte[10:len(texte)-1] place=texte.find(" Y:") place2=place+3 x=float(texte[0:place])/echelle y=float(texte[place2:len(texte)])/echelle tmp=[x,y] if (type=="TYPE: 1"): if flag==0: ListePoints.append(tmp) prem=tmp ## memoriser pour fermer flag=1 else: ListePoints.append(tmp) ListeBezier.append(ListePoints) ListePoints=[] ListePoints.append(tmp) if (type=="TYPE: 2"): ListePoints.append(tmp) if (type=="TYPE: 3"): flag=1 ListePoints.append(prem) ListeBezier.append(ListePoints) ListeCourbe.append(ListeBezier) prem=tmp ListePoints=[] ListePoints.append(tmp) ListeBezier=[] ListePoints.append(prem)## Forcer la ListeBezier.append(ListePoints)## Fermeture ListeCourbe.append(ListeBezier) ListeBezier=[] print "Fin Etape 1" ############################################################ ## ListeCourbe [num coube][num 4pts][numpts][x ou y] ############################################################# PointsBlender=[] tmp=[] interval=0.2 nb=0 print "Etape 2" for i in range(0,len(ListeCourbe)):####NumCourbe print i for j in range(0,len(ListeCourbe[i])):###Num 4 pts #print ListeCourbe[i][j] t=interval x=ListeCourbe[i][j][0][0] ####Pas de calcul pour t=0 y=ListeCourbe[i][j][0][1] PointsBlender.append([x,y]) print"i= ",i,"j= ",j while (t<1): p0=ListeCourbe[i][j][0][0] p1=ListeCourbe[i][j][1][0] p2=ListeCourbe[i][j][2][0] p3=ListeCourbe[i][j][3][0] x=Bezier(p0,p1,p2,p3,t) p0=ListeCourbe[i][j][0][1] p1=ListeCourbe[i][j][1][1] p2=ListeCourbe[i][j][2][1] p3=ListeCourbe[i][j][3][1] y=Bezier(p0,p1,p2,p3,t) PointsBlender.append([x,y]) t=t+interval x=ListeCourbe[i][j][3][0]####Pas de calcul pour t=1 y=ListeCourbe[i][j][3][1] PointsBlender.append([x,y]) #print PointsBlender ########################################################## ## Partie Blender ####################################################### ## Création des points for p in range(0,len(PointsBlender)): point=PointsBlender[p] vert=NMesh.Vert(point[0],point[1],0) mesh.verts.append(vert) ##Création des faces for i in range (0,len(PointsBlender)-1): face=NMesh.Face() face.v.append(mesh.verts[i+nb]) face.v.append(mesh.verts[i+1+nb]) mesh.faces.append(face) nb=nb+len(PointsBlender) PointsBlender=[] ## Faire REM DOUBLE NMesh.PutRaw(mesh,"Selection",1) Blender.Redraw()