1 // utils.cpp: Stuff that's useful to have kicking around, in one spot
3 // Part of the Architektonas Project
4 // (C) 2015 Underground Software
5 // See the README and GPLv3 files for licensing and warranty information
7 // JLH = James Hammons <jlhamm@acm.org>
10 // --- ---------- -------------------------------------------------------------
11 // JLH 05/01/2015 Created this file
15 #include <string.h> // For memcpy()
19 // Copy objects in one vector to another, creating copies and placing them in
20 // the other vector. Clearing & etc. of vectors is responsibility of the caller!
22 void CopyObjects(std::vector<void *> & from, std::vector<void *> & to)
24 std::vector<void *>::iterator i;
26 for(i=from.begin(); i!=from.end(); i++)
28 Object * obj = (Object *)(*i);
29 Object * newObject = CopyObject(obj);
30 to.push_back(newObject);
36 // Create a copy of the passed in object.
38 Object * CopyObject(Object * obj)
40 Object * newObject = NULL;
45 newObject = (Object *)new Line();
46 memcpy(newObject, obj, sizeof(Line));
49 newObject = (Object *)new Circle();
50 memcpy(newObject, obj, sizeof(Circle));
53 newObject = (Object *)new Ellipse();
54 memcpy(newObject, obj, sizeof(Ellipse));
57 newObject = (Object *)new Arc();
58 memcpy(newObject, obj, sizeof(Arc));
61 newObject = (Object *)new Dimension();
62 memcpy(newObject, obj, sizeof(Dimension));
66 newObject = (Object *)new Spline();
67 memcpy(newObject, obj, sizeof(Spline));
71 newObject = (Object *)new Text();
72 memcpy(newObject, obj, sizeof(Text));
73 ((Text *)newObject)->s = ((Text *)obj)->s;
76 newObject = (Object *)new Container();
78 // memcpy(newObject, obj, sizeof(Line));
79 CopyObjects(((Container *)obj)->objects, ((Container *)newObject)->objects);
86 if (newObject && (newObject->type != OTContainer))
87 newObject->id = Global::objectID;
93 void AddObjectsTo(std::vector<void *> & dest, std::vector<void *> & from)
95 for(std::vector<void *>::iterator i=from.begin(); i!=from.end(); i++)
100 void ClearSelected(std::vector<void *> & v)
102 std::vector<void *>::iterator i;
104 for(i=v.begin(); i!=v.end(); i++)
105 ((Object *)(*i))->selected = false;
109 void DeleteSelectedObjects(std::vector<void *> & v)
111 std::vector<void *>::iterator i = v.begin();
115 Object * obj = (Object *)(*i);
128 void SavePointsFrom(std::vector<void *> & v, std::vector<Object> & save)
133 for(std::vector<void *>::iterator i=v.begin(); i!=v.end(); i++)
135 memcpy(&o, (*i), sizeof(Object));
141 void RestorePointsTo(std::vector<void *> & v, std::vector<Object> & s)
143 std::vector<Object>::iterator i = s.begin();
144 std::vector<void *>::iterator j = v.begin();
146 for(; i!=s.end(); i++, j++)
148 Object * obj2 = (Object *)(*j);
149 obj2->p[0] = (*i).p[0];
150 obj2->p[1] = (*i).p[1];
151 obj2->angle[0] = (*i).angle[0];
152 obj2->angle[1] = (*i).angle[1];
153 //we don't do this because we want to keep selected & friends from changing
154 // memcpy(obj2, *j, sizeof(Object));