changeset 251:98483680ea0f

Improve converter and adjust parser accordingly.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 09 Oct 2012 20:59:30 +0300
parents 3520489320bc
children 4b4123143b9e
files dmq3d.c svg2qd.py
diffstat 2 files changed, 32 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/dmq3d.c	Tue Oct 09 20:14:23 2012 +0300
+++ b/dmq3d.c	Tue Oct 09 20:59:30 2012 +0300
@@ -88,21 +88,22 @@
 }
 
 
-static inline DMFloat dmPX(DMVector p)
+static inline DMFloat dmPX(int cx, DMVector p)
 {
-    return 320 + p.x * 250.0f / (p.z + 501.0f);
+    return cx + (p.x * 250.0f) / p.z;
 }
 
 
-static inline DMFloat dmPY(DMVector p)
+static inline DMFloat dmPY(int cy, DMVector p)
 {
-    return 200 + p.y * 250.0f / (p.z + 501.0f);
+    return cy + (p.y * 250.0f) / p.z;
 }
 
 
 void dmDraw3DLineSpriteModel(SDL_Surface *screen, DM3DLineSpriteModel *model, DMVector *pos, DMMatrix *mat, SDL_Surface *fbmap, Uint32 lcol)
 {
     int i;
+    int cx = screen->w / 2, cy = screen->h / 2;
     for (i = 0; i < model->nlines; i++)
     {
         DM3DLine *line = &model->lines[i];
@@ -112,9 +113,9 @@
         dm_vector_mul_by_mat_n(pv, 2, mat);
         
         if (line->type > 1)
-            dmDrawLineSpec(screen, dmPX(pv[0]), dmPY(pv[0]), dmPX(pv[1]), dmPY(pv[1]), lcol, fbmap);
+            dmDrawLineSpec(screen, dmPX(cx, pv[0]), dmPY(cy, pv[0]), dmPX(cx, pv[1]), dmPY(cy, pv[1]), lcol, fbmap);
         else
-            dmDrawLine32(screen, dmPX(pv[0]), dmPY(pv[0]), dmPX(pv[1]), dmPY(pv[1]), lcol);
+            dmDrawLine32(screen, dmPX(cx, pv[0]), dmPY(cy, pv[0]), dmPX(cx, pv[1]), dmPY(cy, pv[1]), lcol);
     }
 
     for (i = 0; i < model->nsprites; i++)
@@ -124,7 +125,7 @@
         DMVector pv, pt;
         dm_vector_add_r(&pt, &model->vertices[sprite->v], pos);
         dm_vector_mul_by_mat(&pv, &pt, mat);
-        dmUnscaledBlitSurface32to32Transparent(bmp->img, dmPX(pv), dmPY(pv), screen);
+        dmUnscaledBlitSurface32to32Transparent(bmp->img, dmPX(cx, pv), dmPY(cy, pv), screen);
     }
 }
 
@@ -180,23 +181,31 @@
     dm_vector_copy(&v, pt);
     for (vertex = 0; vertex <= nvertices; vertex++)
     {
-        if (!dmReadCoordinate(&line, &p.x, TRUE)) return FALSE;
-        if (!dmReadCoordinate(&line, &p.y, TRUE)) return FALSE;
-        if (!dmReadCoordinate(&line, &p.z, FALSE)) return FALSE;
-        if (relative)
+        if (*line == 'Z')
         {
-            dm_vector_add(&v, &p);
-            t = &v;
+            indices[vertex] = indices[0];
+            line++;
         }
         else
         {
-            dm_vector_add_r(&v, &p, pt);
-            t = &v;
+            if (!dmReadCoordinate(&line, &p.x, TRUE)) return FALSE;
+            if (!dmReadCoordinate(&line, &p.y, TRUE)) return FALSE;
+            if (!dmReadCoordinate(&line, &p.z, FALSE)) return FALSE;
+            if (relative)
+            {
+                dm_vector_add(&v, &p);
+                t = &v;
+            }
+            else
+            {
+                dm_vector_add_r(&v, &p, pt);
+                t = &v;
+            }
+
+            if (dmAdd3DLineSpriteModelVertex(model, t, &indices[vertex]) != DMERR_OK)
+                goto error;
         }
 
-        if (dmAdd3DLineSpriteModelVertex(model, t, &indices[vertex]) != DMERR_OK)
-            goto error;
-
         line = dmSkipWhitespace(line, FALSE);
     }
     
--- a/svg2qd.py	Tue Oct 09 20:14:23 2012 +0300
+++ b/svg2qd.py	Tue Oct 09 20:59:30 2012 +0300
@@ -9,8 +9,10 @@
 
 
 def printVertex(v) :
-   return "{:.2f},{:.2f},{:.2f}".format(v[0], v[1], v[2])
-
+   if type(v) is list :
+      return "{:.2f},{:.2f},{:.2f}".format(v[0], v[1], v[2])
+   else :
+      return v
 
 def getTransform(elem) :
    if "transform" in elem.attrib :
@@ -58,17 +60,13 @@
    for elem in path.attrib["d"].split(" ") :
       if elem == "m" or elem == "M":
          out += printVertices(type, vertices, width)
-         pos = [0,0,0]
          type = elem
       elif elem == "z" :
-         v = vertices[0]
-         vertices.append([v[0] - pos[0], v[1] - pos[1], v[2] - pos[2]])
+         vertices.append("Z")
       else :
          tmp = elem.split(",")
          px = float(tmp[0])
          py = float(tmp[1])
-         pos[0] += px
-         pos[1] += py
          vertices.append([px, py, 0])
 
    out += printVertices(type, vertices, width)