// JLH = James Hammons <jlhamm@acm.org>
//
// Who When What
-// --- ---------- -------------------------------------------------------------
+// --- ---------- ------------------------------------------------------------
// JLH 05/01/2015 Created this file
//
}
+void MoveSelectedObjectsTo(std::vector<void *> & dest, std::vector<void *> & from)
+{
+ std::vector<void *>::iterator i = from.begin();
+
+ while (i != from.end())
+ {
+ Object * obj = (Object *)(*i);
+
+ if (obj->selected)
+ {
+ dest.push_back(*i);
+ from.erase(i);
+ }
+ else
+ i++;
+ }
+}
+
+
void AddObjectsTo(std::vector<void *> & dest, std::vector<void *> & from)
{
for(std::vector<void *>::iterator i=from.begin(); i!=from.end(); i++)
}
+void SelectAll(std::vector<void *> & v)
+{
+ std::vector<void *>::iterator i;
+
+ for(i=v.begin(); i!=v.end(); i++)
+ ((Object *)(*i))->selected = true;
+}
+
+
+//
+// Recursively go down thru the Container's vectors, deleting all the objects
+// contained therein. Once that is done, the main Container can be deleted. We
+// don't have to worry about the underlying std::vectors, as they have their
+// own destructors--plus they don't take ownership of objects, which is why we
+// have to keep track of that stuff ourselves. :-P Believe it or not, this is a
+// Good Thing(TM). ;-)
+//
+void DeleteContents(std::vector<void *> & v)
+{
+ std::vector<void *>::iterator i;
+
+ for(i=v.begin(); i!=v.end(); i++)
+ {
+ Object * obj = (Object *)(*i);
+
+ if (obj->type == OTContainer)
+ DeleteContents(((Container *)obj)->objects);
+
+ delete obj;
+ }
+}
+
void DeleteSelectedObjects(std::vector<void *> & v)
{
std::vector<void *>::iterator i = v.begin();
}
+//
+// This is used to remove selected objects from one container in order to move
+// them to a different container.
+//
+void RemoveSelectedObjects(std::vector<void *> & v)
+{
+ std::vector<void *>::iterator i = v.begin();
+
+ while (i != v.end())
+ {
+ Object * obj = (Object *)(*i);
+
+ if (obj->selected)
+ v.erase(i);
+ else
+ i++;
+ }
+}
+
+
void SavePointsFrom(std::vector<void *> & v, std::vector<Object> & save)
{
save.clear();
Object * obj2 = (Object *)(*j);
obj2->p[0] = (*i).p[0];
obj2->p[1] = (*i).p[1];
+ obj2->angle[0] = (*i).angle[0];
+ obj2->angle[1] = (*i).angle[1];
+//we don't do this because we want to keep selected & friends from changing
+// memcpy(obj2, *j, sizeof(Object));
+ }
+}
+
+
+void TranslateObject(Object * obj, Point delta)
+{
+ if (obj->type == OTContainer)
+ {
+ Container * c = (Container *)obj;
+ std::vector<void *>::iterator i;
+
+ for(i=c->objects.begin(); i!=c->objects.end(); i++)
+ TranslateObject((Object *)*i, delta);
+ }
+ else
+ {
+ obj->p[0] += delta;
+ obj->p[1] += delta;
+ }
+}
+
+
+void TranslateObjects(std::vector<void *> & v, Point delta)
+{
+#if 0
+ if (obj->type == OTContainer)
+ {
+ Container * c = (Container *)obj;
+ std::vector<void *>::iterator i;
+
+ for(i=c->objects.begin(); i!=c->objects.end(); i++)
+ TranslateObject((Object *)*i, delta);
+ }
+ else
+ {
+ obj->p[0] += delta;
+ obj->p[1] += delta;
+ }
+#endif
+ // Handle containters too???
+ std::vector<void *>::iterator i;
+
+ for(i=v.begin(); i!=v.end(); i++)
+ {
+ Object * obj = (Object *)(*i);
+ obj->p[0] += delta;
+ obj->p[1] += delta;
}
}