Revision: 18787
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18787
Author:   migius
Date:     2009-02-02 01:31:46 +0100 (Mon, 02 Feb 2009)

Log Message:
-----------
patch for paths_svg2obj.py by author jms:
This patch solves some major problems of the svg script :
- reading of the inkscape svg format
- parsing of the scientific numbers
- redundant arc data in the same path for only one command "a"
- blending of curves after several files import and at the end a more correct 
management of the current point.

Modified Paths:
--------------
    trunk/blender/release/scripts/bpymodules/paths_svg2obj.py

Modified: trunk/blender/release/scripts/bpymodules/paths_svg2obj.py
===================================================================
--- trunk/blender/release/scripts/bpymodules/paths_svg2obj.py   2009-02-01 
19:53:24 UTC (rev 18786)
+++ trunk/blender/release/scripts/bpymodules/paths_svg2obj.py   2009-02-02 
00:31:46 UTC (rev 18787)
@@ -1,7 +1,7 @@
 # -*- coding: latin-1 -*-
 """
-SVG 2 OBJ translater, 0.5.9h
-Copyright (c) jm soler juillet/novembre 2004-april 2007, 
+SVG 2 OBJ translater, 0.5.9n
+Copyright (c) jm soler juillet/novembre 2004-february 2009, 
 # ---------------------------------------------------------------
     released under GNU Licence 
     for the Blender 2.42 Python Scripts Bundle.
@@ -20,7 +20,6 @@
 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 MA 02111-1307, \xC9tats-Unis.
 
-
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
@@ -35,7 +34,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA    
 # ---------------------------------------------------------------
-
+#
 #---------------------------------------------------------------------------
 # Page officielle :
 #   http://jmsoler.free.fr/didacticiel/blender/tutor/cpl_import_svg.htm
@@ -253,15 +252,27 @@
 
      0.5.9h : - 2007/5/2 
               - script was updated with the modifs by cambo
-              - removed all debug statements
+              - removed  all debug statements
               - correction of a zero division error in the calc_arc function.
 
+                 0.5.9f: - 2007/15/7 
+              - Correction de plusieurs bugs sur l'attributions des couleurs 
et le nommage 
+                des courbes
+
+     0.5.9i : - ??/??/?? 
+              - Patch externe r\xE9alis\xE9 sur blender.org project.
+
+     0.5.9j : - 08/11/2008 
+     0.5.9k : - 14/01/2009 
+     0.5.9l : - 31/01/2009 
+     0.5.9n : - 01/02/2009
+
 
==================================================================================
   
 
=================================================================================="""
 SHARP_IMPORT=0
 SCALE=1
 scale_=1
-DEBUG = 0#print
+DEBUG = 0
 DEVELOPPEMENT=0
 TESTCOLOR=0
 
@@ -533,7 +544,7 @@
        scene.objects.selected = [] 
        
        if not SEPARATE_CURVES: 
-               c = Curve.New()   
+               c = Curve.New()  
                c.setResolu(24)  
 
        MATNAME=[]                      
@@ -709,7 +720,6 @@
        else : cx =float(prp['cx'])
        if 'cy' not in prp: cy=0.0
        else : cy =float(prp['cy'])
-       #print  prp.keys()
        r = float(prp['r'])
        D=['M',str(cx),str(cy+r),                  
                        'C',str(cx-r),       
str(cy+r*0.552),str(cx-0.552*r),str(cy+r),      str(cx),str(cy+r), 
@@ -852,7 +862,7 @@
 #--------------------
 # 0.3.9
 #--------------------
-def curve_to_a(c,D,n0,CP):  #A,a
+def curve_to_a(curves, c,D,n0,CP):  #A,a
        global SCALE
        l=[float(D[c[1]+1]),float(D[c[1]+2]),float(D[c[1]+3]),
                        
int(D[c[1]+4]),int(D[c[1]+5]),float(D[c[1]+6]),float(D[c[1]+7])]
@@ -866,8 +876,7 @@
        POINTS= calc_arc (CP[0],CP[1], 
                                                                                
l[0], l[1], l[2]*(PI / 180.0),
                                                                                
l[3], l[4], 
-                                                                               
l[5], l[6] )    
-       #if DEBUG == 1  : print POINTS    
+                                                                               
l[5], l[6] )     
        for p in POINTS :
                B=Bez()
                B.co=[ p[2][0],p[2][1], p[0][0],p[0][1], p[1][0],p[1][1]]       
      
@@ -881,16 +890,23 @@
        BP.co[2]=BP.co[0]
        BP.co[3]=BP.co[1]
        CP=[l[5], l[6]]
+       #----------  059m------------
+       if len(D)>c[1]+7 and D[c[1]+8] not in TAGcourbe :
+               c[1]+=7
+               curves,n0,CP=curve_to_a(curves, c, D, n0,CP)       
+       #----------  059m------------
        return  curves,n0,CP    
 
-def move_to(c, D, n0,CP, proprietes):
+def move_to(curves, c, D, n0,CP, proprietes):
        global DEBUG,TAGcourbe, LAST_ID
        global  USE_COLORS
                
        l=[float(D[c[1]+1]),float(D[c[1]+2])]
+       
        if c[0]=='m':
                l=[l[0]+CP[0],
                                l[1] + CP[1]]
+                               
        if n0 in curves.ITEM:
                n0+=1
        CP=[l[0],l[1]] 
@@ -917,14 +933,12 @@
        B.co=[CP[0],CP[1],CP[0],CP[1],CP[0],CP[1]]
        B.ha=['L','C']
        B.tag=c[0]
-       curves.ITEM[n0].beziers_knot.append(B)
-       #if DEBUG==1: print curves.ITEM[n0], CP    
+       curves.ITEM[n0].beziers_knot.append(B)  
        return  curves,n0,CP     
 
-def close_z(c,D,n0,CP): #Z,z
+def close_z(curves, c,D,n0,CP): #Z,z
        curves.ITEM[n0].flagUV[0]=1
        if len(curves.ITEM[n0].beziers_knot)>1:
-               #print  len(curves.ITEM[n0].beziers_knot)
                BP=curves.ITEM[n0].beziers_knot[-1]
                BP0=curves.ITEM[n0].beziers_knot[0]
                if BP.tag in ['c','C','s','S',]: 
@@ -936,7 +950,7 @@
                n0-=1 
        return  curves,n0,CP    
 
-def curve_to_q(c,D,n0,CP):  #Q,q
+def curve_to_q(curves, c,D,n0,CP):  #Q,q
        l=[float(D[c[1]+1]),float(D[c[1]+2]),float(D[c[1]+3]),float(D[c[1]+4])]
        if c[0]=='q':
                l=[l[0]+CP[0], l[1]+CP[1], l[2]+CP[0], l[3]+CP[1]]
@@ -948,15 +962,14 @@
        BP.co[2]=BP.co[0]
        BP.co[3]=BP.co[1]
        curves.ITEM[n0].beziers_knot.append(B)
-       #if DEBUG==1: print B.co,BP.co
        CP=[l[2],l[3]]
        #if DEBUG==1:           pass 
        if len(D)>c[1]+5 and D[c[1]+5] not in TAGcourbe :
                c[1]+=4
-               curve_to_q(c, D, n0,CP)
+               curves,n0,CP=curve_to_q(curves, c, D, n0,CP)
        return  curves,n0,CP          
 
-def curve_to_t(c,D,n0,CP):  #T,t 
+def curve_to_t(curves, c,D,n0,CP):  #T,t 
        l=[float(D[c[1]+1]),float(D[c[1]+2])]
        if c[0]=='t':
                l=[l[0]+CP[0], l[1]+CP[1]]         
@@ -970,11 +983,10 @@
                BP.co[2]=l0[2]
                BP.co[3]=l0[3]
        curves.ITEM[n0].beziers_knot.append(B)
-       #if DEBUG==1: print B.co,BP.co
        CP=[l[0],l[1]]
        if len(D)>c[1]+3 and D[c[1]+3] not in TAGcourbe :
                c[1]+=4
-               curve_to_t(c, D, n0,CP)    
+               curves,n0,CP=curve_to_t(curves, c, D, n0,CP)    
        return  curves,n0,CP     
 
 #--------------------
@@ -985,7 +997,7 @@
        Y=l[3]-(l[1]-l[3])
        return X,Y
 
-def curve_to_s(c,D,n0,CP):  #S,s
+def curve_to_s(curves, c,D,n0,CP):  #S,s
        l=[float(D[c[1]+1]),
                        float(D[c[1]+2]),
                        float(D[c[1]+3]),
@@ -1003,17 +1015,16 @@
        #--------------------
        BP.co[2],BP.co[3]=build_SYMETRIC([BP.co[4],BP.co[5],BP.co[0],BP.co[1]])
        curves.ITEM[n0].beziers_knot.append(B)
-       #if DEBUG==1: print B.co,BP.co
        #--------------------
        # 0.4.3
        #--------------------   
        CP=[l[2],l[3]]    
        if len(D)>c[1]+5 and D[c[1]+5] not in TAGcourbe :
                c[1]+=4
-               curve_to_c(c, D, n0,CP)       
+               curves,n0,CP=curve_to_c(curves, c, D, n0,CP)       
        return  curves,n0,CP
 
-def curve_to_c(c, D, n0,CP): #c,C
+def curve_to_c(curves, c, D, n0,CP): #c,C      
        l=[float(D[c[1]+1]),float(D[c[1]+2]),float(D[c[1]+3]),
                 float(D[c[1]+4]),float(D[c[1]+5]),float(D[c[1]+6])]
        if c[0]=='c':
@@ -1030,6 +1041,8 @@
                                l[5],
                                l[2],
                                l[3]] #plus toucher au 2-3
+                               
+                               
        B.ha=['C','C']
        B.tag=c[0]
        BP=curves.ITEM[n0].beziers_knot[-1]
@@ -1037,32 +1050,38 @@
        BP.co[3]=l[1]
        BP.ha[1]='C'
        curves.ITEM[n0].beziers_knot.append(B)
-       #if DEBUG==1: print B.co,BP.co
        CP=[l[4],l[5]]
        if len(D)>c[1]+7 and D[c[1]+7] not in TAGcourbe :
-               c[1]+=6
-               curve_to_c(c, D, n0,CP)
+                       c[1]+=6
+                       curves,n0,CP=curve_to_c(curves, c, D, n0,CP)
        return  curves,n0,CP
 
-def draw_line_l(c, D, n0,CP): #L,l
-       l=[float(D[c[1]+1]),float(D[c[1]+2])]
+def draw_line_l(curves, c, D, n0,CP): #L,l
+       
+       l=[float(D[c[1]+1]),float(D[c[1]+2])]           
        if c[0]=='l':
                l=[l[0]+CP[0],
-                               l[1]+CP[1]]
+                               l[1]+CP[1]]                                     
                        
        B=Bez()
-       B.co=[l[0],l[1],l[0],l[1],l[0],l[1]]
+       B.co=[l[0],l[1],
+             l[0],l[1],
+             l[0],l[1]]
+       
        B.ha=['L','L']
        B.tag=c[0]
        BP=curves.ITEM[n0].beziers_knot[-1]
        BP.ha[1]='L'
+       
        curves.ITEM[n0].beziers_knot.append(B)    
-       CP=[B.co[0],B.co[1]]
+       CP=[B.co[4],B.co[5]]
+               
        if len(D)>c[1]+3 and D[c[1]+3] not in TAGcourbe :
                c[1]+=2
-               draw_line_l(c, D, n0,CP) #L
+               curves,n0,CP=draw_line_l(curves, c, D, n0,CP) #L
+               
        return  curves,n0,CP    
 
-def draw_line_h(c,D,n0,CP): #H,h
+def draw_line_h(curves, c,D,n0,CP): #H,h
        if c[0]=='h':
                l=[float(D[c[1]+1])+float(CP[0]),CP[1]]
        else:
@@ -1077,7 +1096,7 @@
        CP=[l[0],l[1]]
        return  curves,n0,CP    
 
-def draw_line_v(c,D,n0,CP): #V, v    
+def draw_line_v(curves, c,D,n0,CP): #V, v    
        if c[0]=='v':
                l=[CP[0], float(D[c[1]+1])+CP[1]]
        else:
@@ -1121,17 +1140,31 @@
 tagTRANSFORM=0
  
 def wash_DATA(ndata):  
-       if ndata:
-               #if DEBUG==1: print ndata
+       if ndata:               
                ndata = ndata.strip()
+               
                if ndata[0]==',':ndata=ndata[1:]
                if ndata[-1]==',':ndata=ndata[:-1]
+               
                #--------------------
                # 0.4.0 : 'e'
                #--------------------
-               i = ndata.find('-')
-               if i != -1 and ndata[i-1] not in ' ,e':
-                       ndata=ndata.replace('-',',-')
+               ni=0
+               i = ndata.find('-',ni)          
+               if i != -1:
+                       while i>-1 :                    
+                               i = ndata.find('-',ni)  
+                               # 059l           ------
+                               if i>0 :                                        
+                                       if ndata[i-1] not in [' ',',','e']:
+                                               ndata=ndata[:i]+','+ndata[i:]
+                                               ni=i+2
+                                       else:
+                                               ni=i+1                          
                                                                
+                               elif i>-1:
+                                       ni=1
+                               # 059l           ------
+                                       
                ndata=ndata.replace(',,',',')    
                ndata=ndata.replace(' ',',')
                ndata=ndata.split(',')          
@@ -1153,7 +1186,7 @@
        #  borner les differents segments qui devront etre
        #  traites
        #  pour cela construire une liste avec chaque 
-       #  la position de chaqe emplacement tag de type 
+       #   position de chaque emplacement tag de type 
        #  commande path...
        # ----------------------------------------
        tagplace=[]
@@ -1169,8 +1202,10 @@
        # d'apparition des tags 
        #------------------------------------------
        tagplace.sort()
+       
+       tpn=range(len(tagplace))
 
-       tpn=range(len(tagplace))
+       
        #--------------------
        # 0.3.5 :: short data, only one tag
        #--------------------
@@ -1179,14 +1214,18 @@
                for t in tpn[:-1]: 
                        DATA2.append(DATA[tagplace[t]:tagplace[t]+1])    
                        ndata=DATA[tagplace[t]+1:tagplace[t+1]]
+                       
                        if DATA2[-1] not in ['z','Z'] :
                                ndata=wash_DATA(ndata)
                                DATA2.extend(ndata)
+                               
                DATA2.append(DATA[tagplace[t+1]:tagplace[t+1]+1])  
+               
                if DATA2[-1] not in ['z','Z'] and len(DATA)-1>=tagplace[t+1]+1:
                        ndata=DATA[tagplace[t+1]+1:]
                        ndata=wash_DATA(ndata)
                        DATA2.extend(ndata) #059a
+                       
        else:
                #--------------------   
                # 0.3.5 : short data,only one tag
@@ -1276,15 +1315,13 @@
                nt0=txt[t0:t1+1]
                t2=nt0[nt0.find('(')+1:-1]
                val=nt0[:nt0.find('(')]
+
                while t2.find('  ')!=-1:
                        t2=t2.replace('  ',' ')
+               while t2.find(', ')!=-1:                #059l
+                       t2=t2.replace(', ',',')   #059l
+               
                t2=t2.replace(' ',',')
-               
-               """
-               t2=t2.split(',')                
-               for index, t in enumerate(t2):
-                               t2[index]=float(t)
-               """
                t2=[float(t) for t in t2.split(',')]            
                
                if val=='rotate' :
@@ -1314,12 +1351,24 @@
                                                i= i+6
                                                
Courbe[n].color=[int(pr[i:i+2],16),int(pr[i+2:i+4],16),int(pr[i+4:i+6],16)]

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to