# HG changeset patch # User Matti Hamalainen # Date 1349805570 -10800 # Node ID 98483680ea0fc12555e427207a30b9621bf623d9 # Parent 3520489320bc688ba4dd11779bd89299bb1fd77b Improve converter and adjust parser accordingly. diff -r 3520489320bc -r 98483680ea0f dmq3d.c --- 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); } diff -r 3520489320bc -r 98483680ea0f svg2qd.py --- 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)