]> Shamusworld >> Repos - architektonas/commitdiff
Initial changes to support Dimension offsets.
authorShamus Hammons <jlhamm@acm.org>
Fri, 24 Apr 2020 03:06:37 +0000 (22:06 -0500)
committerShamus Hammons <jlhamm@acm.org>
Fri, 24 Apr 2020 03:06:37 +0000 (22:06 -0500)
src/drawingview.cpp
src/fileio.cpp
src/fileio.h
src/structs.h

index 7c5107ea3dd037284cfd6e24369124f7707452f2..842c5b382fefd3a88f9e2936550a2fc3bd7ce95a 100644 (file)
@@ -541,10 +541,10 @@ void DrawingView::RenderObjects(Painter * painter, std::vector<void *> & v, int
 
                        unit = Vector(d->lp[0], d->lp[1]).Unit();
 
-                       Point p1 = d->lp[0] + (ortho * 10.0 * scaledThickness);
-                       Point p2 = d->lp[1] + (ortho * 10.0 * scaledThickness);
-                       Point p3 = d->lp[0] + (ortho * 16.0 * scaledThickness);
-                       Point p4 = d->lp[1] + (ortho * 16.0 * scaledThickness);
+                       Point p1 = d->lp[0] + (ortho * (10.0 + d->offset) * scaledThickness);
+                       Point p2 = d->lp[1] + (ortho * (10.0 + d->offset) * scaledThickness);
+                       Point p3 = d->lp[0] + (ortho * (16.0 + d->offset) * scaledThickness);
+                       Point p4 = d->lp[1] + (ortho * (16.0 + d->offset) * scaledThickness);
                        Point p5 = d->p[0] + (ortho * 4.0 * scaledThickness);
                        Point p6 = d->p[1] + (ortho * 4.0 * scaledThickness);
 
@@ -2514,8 +2514,8 @@ bool DrawingView::HitTest(Object * obj, Point point)
                Vector orthogonal = Vector::Normal(d->lp[0], d->lp[1]);
                // Get our line parallel to our points
                float scaledThickness = Global::scale * obj->thickness;
-               Point p1 = d->lp[0] + (orthogonal * 10.0 * scaledThickness);
-               Point p2 = d->lp[1] + (orthogonal * 10.0 * scaledThickness);
+               Point p1 = d->lp[0] + (orthogonal * (10.0 + d->offset) * scaledThickness);
+               Point p2 = d->lp[1] + (orthogonal * (10.0 + d->offset) * scaledThickness);
                Point p3(p1, point);
 
                Vector v1(d->p[0], point);
index ace5bfa247713a3adc4aabee61f0dc3871a4c0aa..53911621df677879cfeb652f9ab94c0f567d4de3 100644 (file)
@@ -304,7 +304,7 @@ enum ObjectTypeFile { OTFContainer, OTFContainerEnd, OTFObject, OTFEndOfFile };
        while (!feof(file))
        {
                // Reconstruct the object (extended format!)
-               Object * obj = GetObjectFromFile(file, true);
+               Object * obj = GetObjectFromFile(file, true, true);
 
                // objectFileType is set in GetObjectFromFile()...
                if (objectFileType == OTFObject)
@@ -346,7 +346,7 @@ enum ObjectTypeFile { OTFContainer, OTFContainerEnd, OTFObject, OTFEndOfFile };
 }
 
 
-/*static*/ Object * FileIO::GetObjectFromFile(FILE * file, bool extended/*= false*/)
+/*static*/ Object * FileIO::GetObjectFromFile(FILE * file, bool extended/*= false*/, bool ext2/*= false*/)
 {
        char buffer[256];
        char textBuffer[65536];
@@ -415,8 +415,13 @@ if (errno)
        {
                Point p1, p2;
                DimensionType type;
+               double offset = 0;
                fscanf(file, "(%lf,%lf) (%lf,%lf) %i", &p1.x, &p1.y, &p2.x, &p2.y, (int *)&type);
-               obj = (Object *)new Dimension(p1, p2, type);
+
+               if (ext2)
+                       fscanf(file, " %lf", &offset);
+
+               obj = (Object *)new Dimension(p1, p2, type, offset);
        }
        else if (strcmp(buffer, "CONTAINER") == 0)
        {
@@ -440,7 +445,7 @@ if (errno)
 
                if (extended && (obj->type != OTContainer))
                {
-                       fscanf(file, " (%i, %f, %i)", &obj->color, &obj->thickness, &obj->style);
+                       fscanf(file, " (%i, %f, %i)\n", &obj->color, &obj->thickness, &obj->style);
                }
        }
 
@@ -471,7 +476,7 @@ if (errno)
                break;
        case OTDimension:
 //             fprintf(file, "DIMENSION %i (%lf,%lf) (%lf,%lf) %i\n", layer, position.x, position.y, endpoint.x, endpoint.y, dimensionType);
-               fprintf(file, "DIMENSION %i (%lf,%lf) (%lf,%lf) %i", obj->layer, obj->p[0].x, obj->p[0].y, obj->p[1].x, obj->p[1].y, ((Dimension *)obj)->subtype);
+               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);
                break;
        case OTSpline:
                break;
index 29a9afe09abd56b269a56d034c6518a3325e2a60..84755a0ac5391d77e30698b48aa8ccfe91437865 100644 (file)
@@ -19,7 +19,7 @@ class FileIO
                static bool LoadVersion1_1(FILE *, Container *);
                static bool LoadVersion1_2(FILE *, Container *);
 //             static bool GetObjectFromFile(FILE *, Object *, Object **, int *);
-               static Object * GetObjectFromFile(FILE *, bool extended = false);
+               static Object * GetObjectFromFile(FILE *, bool extended = false, bool ext2 = false);
                static bool WriteObjectToFile(FILE *, Object *);
 
                static int objectFileType;
index c1b33fb2958ee3133aae136199c345df547a0039..5f694886d5b079843c05ce5db191f8bd8a9c8525 100644 (file)
@@ -94,10 +94,10 @@ struct Dimension {
        Dimension(): type(OTDimension), id(Global::objectID++), selected(false),
                hovered(false), hitObject(false)
                { hitPoint[0] = hitPoint[1] = hitPoint[2] = hitPoint[3] = hitPoint[4] = false; }
-       Dimension(Vector pt1, Vector pt2, DimensionType dt = DTLinear, float th = 1.0, uint32_t c = 0x0000FF, int l = LSSolid):
+       Dimension(Vector pt1, Vector pt2, DimensionType dt = DTLinear, double offs = 0, float th = 1.0, uint32_t c = 0x0000FF, int l = LSSolid):
                type(OTDimension), id(Global::objectID++), layer(0), color(c),
                thickness(th), style(l), selected(false), hovered(false),
-               hitObject(false), subtype(dt), offset(0)
+               hitObject(false), subtype(dt), offset(offs)
                { p[0] = pt1; p[1] = pt2; hitPoint[0] = hitPoint[1] = hitPoint[2] = hitPoint[3] = hitPoint[4] = false; }
 };