]> Shamusworld >> Repos - architektonas/blobdiff - src/fileio.cpp
Preliminary support for Polylines.
[architektonas] / src / fileio.cpp
index 3ce447040014fe9ea7e53bb5d4be90bda16f0521..ad303f469cdcb0713a9afcb4e67533c1b428c3f3 100644 (file)
@@ -410,6 +410,20 @@ if (errno)
                fscanf(file, "(%lf,%lf) %lf, %lf, %lf", &p.x, &p.y, &r, &a1, &a2);
                obj = (Object *)new Arc(p, r, a1, a2);
        }
+       else if (strcmp(buffer, "POLYLINE") == 0)
+       {
+               long int size;
+               obj = (Object *)new Polyline();
+               fscanf(file, "(%li)", &size);
+               fscanf(file, " (%i, %f, %i)\n", &obj->color, &obj->thickness, &obj->style);
+
+               for(int i=0; i<size; i++)
+               {
+                       Object * po = new Object();
+                       fscanf(file, "(%lf,%lf,%lf)\n", &po->p[0].x, &po->p[0].y, &po->length);
+                       ((Polyline *)obj)->Add(po);
+               }
+       }
        else if (strcmp(buffer, "TEXT") == 0)
        {
                Point p;
@@ -448,7 +462,7 @@ if (errno)
        {
                obj->layer = foundLayer;
 
-               if (extended && (obj->type != OTContainer))
+               if (extended && (obj->type != OTContainer) && (obj->type != OTPolyline))
                {
                        fscanf(file, " (%i, %f, %i)\n", &obj->color, &obj->thickness, &obj->style);
                }
@@ -466,20 +480,31 @@ if (errno)
        switch (obj->type)
        {
        case OTLine:
-               fprintf(file, "LINE %i (%lf,%lf) (%lf,%lf)", obj->layer, obj->p[0].x, obj->p[0].y, obj->p[1].x, obj->p[1].y);
+               fprintf(file, "LINE %i (%.16lf,%.16lf) (%.16lf,%.16lf)", obj->layer, obj->p[0].x, obj->p[0].y, obj->p[1].x, obj->p[1].y);
                break;
        case OTCircle:
-               fprintf(file, "CIRCLE %i (%lf,%lf) %lf", obj->layer, obj->p[0].x, obj->p[0].y, obj->radius[0]);
+               fprintf(file, "CIRCLE %i (%.16lf,%.16lf) %.16lf", obj->layer, obj->p[0].x, obj->p[0].y, obj->radius[0]);
                break;
        case OTEllipse:
                break;
        case OTArc:
-               fprintf(file, "ARC %i (%lf,%lf) %lf, %lf, %lf", obj->layer, obj->p[0].x, obj->p[0].y, obj->radius[0], obj->angle[0], obj->angle[1]);
+               fprintf(file, "ARC %i (%.16lf,%.16lf) %.16lf, %.16lf, %.16lf", obj->layer, obj->p[0].x, obj->p[0].y, obj->radius[0], obj->angle[0], obj->angle[1]);
                break;
-       case OTPolygon:
+       case OTPolyline:
+       {
+               Polyline * p = (Polyline *)obj;
+               fprintf(file, "POLYLINE %i (%li)", p->layer, p->points.size());
+               fprintf(file, " (%i, %f, %i)\n", obj->color, obj->thickness, obj->style);
+
+               for(VPVectorIter i=p->points.begin(); i!=p->points.end(); i++)
+               {
+                       Object * po = (Object *)(*i);
+                       fprintf(file, "(%.16lf,%.16lf,%.16lf)\n", po->p[0].x, po->p[0].y, po->length);
+               }
+       }
                break;
        case OTDimension:
-               fprintf(file, "DIMENSION %i (%lf,%lf) (%lf,%lf) %i %lf", obj->layer, obj->p[0].x, obj->p[0].y, obj->p[1].x, obj->p[1].y, ((Dimension *)obj)->subtype, ((Dimension *)obj)->offset);
+               fprintf(file, "DIMENSION %i (%.16lf,%.16lf) (%.16lf,%.16lf) %i %lf", obj->layer, obj->p[0].x, obj->p[0].y, obj->p[1].x, obj->p[1].y, ((Dimension *)obj)->subtype, ((Dimension *)obj)->offset);
                break;
        case OTSpline:
                break;
@@ -507,7 +532,7 @@ if (errno)
                break;
        }
 
-       if (obj->type != OTContainer)
+       if ((obj->type != OTContainer) && (obj->type != OTPolyline))
                fprintf(file, " (%i, %f, %i)\n", obj->color, obj->thickness, obj->style);
 
        return true;