From: Shamus Hammons Date: Fri, 24 Apr 2020 03:06:37 +0000 (-0500) Subject: Initial changes to support Dimension offsets. X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=architektonas;a=commitdiff_plain;h=c20f82651fdc4dd26172bcb71a85e6eb29eacd43 Initial changes to support Dimension offsets. --- diff --git a/src/drawingview.cpp b/src/drawingview.cpp index 7c5107e..842c5b3 100644 --- a/src/drawingview.cpp +++ b/src/drawingview.cpp @@ -541,10 +541,10 @@ void DrawingView::RenderObjects(Painter * painter, std::vector & 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); diff --git a/src/fileio.cpp b/src/fileio.cpp index ace5bfa..5391162 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -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; diff --git a/src/fileio.h b/src/fileio.h index 29a9afe..84755a0 100644 --- a/src/fileio.h +++ b/src/fileio.h @@ -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; diff --git a/src/structs.h b/src/structs.h index c1b33fb..5f69488 100644 --- a/src/structs.h +++ b/src/structs.h @@ -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; } };