]> Shamusworld >> Repos - architektonas/blobdiff - src/utils.cpp
Further progress on Polylines: Polylines can be selected and moved.
[architektonas] / src / utils.cpp
index 7428fbe6a5bdb4f200e8d45a1014ffc8b8d22bef..cd05ba735e95f30ac96aacf56f205e6548840a79 100644 (file)
@@ -1,3 +1,4 @@
+//
 // utils.cpp: Stuff that's useful to have kicking around, in one spot
 //
 // Part of the Architektonas Project
@@ -72,6 +73,11 @@ Object * CopyObject(Object * obj)
                newObject = new Dimension();
                memcpy(newObject, obj, sizeof(Dimension));
                break;
+       case OTPolyline:
+               newObject = new Polyline();
+               memcpy(newObject, obj, sizeof(Polyline));
+               ((Polyline *)newObject)->points = ((Polyline *)obj)->points;
+               break;
        case OTSpline:
                newObject = new Spline();
                memcpy(newObject, obj, sizeof(Spline));
@@ -136,6 +142,12 @@ Object * CopyObject2(Object * obj)
                memcpy(newObject, obj, sizeof(Dimension));
                break;
 
+       case OTPolyline:
+               newObject = new Polyline();
+               memcpy(newObject, obj, sizeof(Polyline));
+               ((Polyline *)newObject)->points = ((Polyline *)obj)->points;
+               break;
+
        case OTSpline:
                newObject = new Spline();
                memcpy(newObject, obj, sizeof(Spline));
@@ -315,6 +327,25 @@ void RemoveSelectedObjects(VPVector & v)
        }
 }
 
+//
+// This is used to remove hovered objects from one container in order to delete
+// them from the same container.
+//
+void RemoveHoveredObjects(VPVector & v)
+{
+       VPVectorIter i = v.begin();
+
+       while (i != v.end())
+       {
+               Object * obj = (Object *)(*i);
+
+               if (obj->hovered)
+                       v.erase(i);
+               else
+                       i++;
+       }
+}
+
 void SavePointsFrom(VPVector & v, std::vector<Object> & save)
 {
        save.clear();
@@ -379,6 +410,8 @@ void TranslateObject(Object * obj, Point delta)
                for(VPVectorIter i=c->objects.begin(); i!=c->objects.end(); i++)
                        TranslateObject((Object *)*i, delta);
        }
+       else if (obj->type == OTPolyline)
+               ((Polyline *)obj)->Translate(delta);
 
        obj->p[0] += delta;
        obj->p[1] += delta;
@@ -462,6 +495,10 @@ void TranslateObjects(VPVector & v, Point delta)
                        Container * c = (Container *)obj;
                        TranslateObjects(c->objects, delta);
                }
+               else if (obj->type == OTPolyline)
+               {
+                       ((Polyline *)obj)->Translate(delta);
+               }
        }
 }