LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
entityops.cpp
Go to the documentation of this file.
1 #include "entityops.h"
3 
5 using namespace lc;
6 using namespace lc::operation;
7 
8 /********************************************************************************************************/
10 /********************************************************************************************************/
12 }
13 
14 std::vector<entity::CADEntity_CSPtr> Begin::process(
15  const std::shared_ptr<Document> document,
16  const std::vector<entity::CADEntity_CSPtr> entitySet,
17  std::vector<entity::CADEntity_CSPtr>& workingBuffer,
18  std::vector<entity::CADEntity_CSPtr>& removals,
19  const std::vector<Base_SPtr>) {
20  _entities.insert(_entities.end(), entitySet.begin(), entitySet.end());
21  return entitySet;
22 }
23 
24 std::vector<entity::CADEntity_CSPtr> Begin::getEntities() const {
25  return _entities;
26 }
27 
29 
30 }
31 
33 
34 }
35 
36 /********************************************************************************************************/
38 /********************************************************************************************************/
39 Loop::Loop(const int numTimes) : Base(), _numTimes(numTimes) {
40 }
41 
42 std::vector<entity::CADEntity_CSPtr> Loop::process(
43  const std::shared_ptr<Document> document,
44  const std::vector<entity::CADEntity_CSPtr> entitySet,
45  std::vector<entity::CADEntity_CSPtr>& _workingBuffer,
46  std::vector<entity::CADEntity_CSPtr>& removals,
47  const std::vector<Base_SPtr> _stack) {
48  std::vector<entity::CADEntity_CSPtr> final;
49 
50  // Find the start
51  std::vector<entity::CADEntity_CSPtr> _start;
52 
53  for (auto base : _stack) {
54  //TODO can we get rid of dynamic_cast??
55  const lc::operation::Begin* begin = dynamic_cast<const lc::operation::Begin*>(base.get());
56 
57  if (begin != nullptr) {
58  auto entities = begin->getEntities();
59  _start.insert(_start.end(), entities.begin(), entities.end());
60  }
61  }
62 
63 
64  // run the operation queue
65  std::vector<entity::CADEntity_CSPtr> entitySet2(entitySet);
66 
67  for (int n = 0; n < _numTimes - 1; n++) {
68  for (auto base : _stack) {
69  entitySet2 = base->process(document, entitySet2, _workingBuffer, removals, _stack);
70  }
71  }
72 
73  return entitySet2;
74 }
75 
77 
78 }
79 
80 /********************************************************************************************************/
82 /********************************************************************************************************/
83 Move::Move(const geo::Coordinate& offset) : Base(), _offset(offset) {
84 }
85 
86 std::vector<entity::CADEntity_CSPtr> Move::process(
87  const std::shared_ptr<Document> document,
88  const std::vector<entity::CADEntity_CSPtr> entitySet,
89  std::vector<entity::CADEntity_CSPtr>&,
90  std::vector<entity::CADEntity_CSPtr>&,
91  const std::vector<Base_SPtr>) {
92  std::vector<entity::CADEntity_CSPtr> newQueue;
93 
94  for (auto entity : entitySet) {
95  auto e = entity->move(_offset);
96  newQueue.push_back(e);
97  }
98 
99  return newQueue;
100 }
101 
103 
104 }
105 
106 /********************************************************************************************************/
108 /********************************************************************************************************/
109 Copy::Copy(const geo::Coordinate& offset) : Base(), _offset(offset) {
110 }
111 
112 std::vector<entity::CADEntity_CSPtr> Copy::process(
113  const std::shared_ptr<Document> document,
114  const std::vector<entity::CADEntity_CSPtr> entitySet,
115  std::vector<entity::CADEntity_CSPtr>& workingBuffer,
116  std::vector<entity::CADEntity_CSPtr>&,
117  const std::vector<Base_SPtr>) {
118  std::vector<entity::CADEntity_CSPtr> newQueue;
119 
120  for (auto entity : entitySet) {
121  auto e = entity->copy(_offset);
122  workingBuffer.push_back(entity);
123  newQueue.push_back(e);
124  }
125 
126  return newQueue;
127 }
128 
130 
131 }
132 
133 /********************************************************************************************************/
135 /********************************************************************************************************/
136 Scale::Scale(const geo::Coordinate& scale_center, const geo::Coordinate& scale_factor) : Base(), _scale_center(scale_center), _scale_factor(scale_factor) {
137 }
138 
139 std::vector<entity::CADEntity_CSPtr> Scale::process(
140  const std::shared_ptr<Document> document,
141  const std::vector<entity::CADEntity_CSPtr> entitySet,
142  std::vector<entity::CADEntity_CSPtr>&,
143  std::vector<entity::CADEntity_CSPtr>&,
144  const std::vector<Base_SPtr>) {
145  std::vector<entity::CADEntity_CSPtr> newQueue;
146 
147  for (auto entity : entitySet) {
148  auto e = entity->scale(_scale_center, _scale_factor);
149  newQueue.push_back(e);
150  }
151 
152  return newQueue;
153 }
154 
156 
157 }
158 
159 /********************************************************************************************************/
161 /********************************************************************************************************/
162 Rotate::Rotate(const geo::Coordinate& rotation_center, const double rotation_angle) : Base(), _rotation_center(rotation_center), _rotation_angle(rotation_angle) {
163 }
164 
165 std::vector<entity::CADEntity_CSPtr> Rotate::process(
166  const std::shared_ptr<Document> document,
167  const std::vector<entity::CADEntity_CSPtr> entitySet,
168  std::vector<entity::CADEntity_CSPtr>&,
169  std::vector<entity::CADEntity_CSPtr>&,
170  const std::vector<Base_SPtr>) {
171  std::vector<entity::CADEntity_CSPtr> newQueue;
172 
173  for (auto entity : entitySet) {
174  auto e = entity->rotate(_rotation_center, _rotation_angle);
175  newQueue.push_back(e);
176  }
177 
178  return newQueue;
179 }
180 
182 
183 }
184 
185 /********************************************************************************************************/
187 /********************************************************************************************************/
189 }
190 
191 std::vector<entity::CADEntity_CSPtr> Push::process(
192  const std::shared_ptr<Document> document,
193  const std::vector<entity::CADEntity_CSPtr> entitySet,
194  std::vector<entity::CADEntity_CSPtr>& workingBuffer,
195  std::vector<entity::CADEntity_CSPtr>&,
196  const std::vector<Base_SPtr>) {
197  std::vector<entity::CADEntity_CSPtr> newQueue(workingBuffer);
198  newQueue.insert(newQueue.end(), entitySet.begin(), entitySet.end());
199  workingBuffer.clear();
200  return newQueue;
201 }
202 
204 
205 }
206 
207 /********************************************************************************************************/
209 /********************************************************************************************************/
210 SelectByLayer::SelectByLayer(const Layer_CSPtr layer) : Base(), _layer(layer) {
211 }
212 
213 std::vector<entity::CADEntity_CSPtr> SelectByLayer::process(
214  const std::shared_ptr<Document> document,
215  const std::vector<entity::CADEntity_CSPtr>,
216  std::vector<entity::CADEntity_CSPtr>& workingBuffer,
217  std::vector<entity::CADEntity_CSPtr>&,
218  const std::vector<Base_SPtr>) {
219 
220  std::vector<entity::CADEntity_CSPtr> e;
221 
222  for(auto it = workingBuffer.begin(); it != workingBuffer.end();) {
223  if((*it)->layer() == _layer) {
224  e.push_back(*it);
225  it = workingBuffer.erase(it);
226  }
227  else {
228  it++;
229  }
230  }
231 
232  return e;
233 }
234 
235 SelectByLayer::~SelectByLayer() {
236 
237 }
238 
239 /********************************************************************************************************/
241 /********************************************************************************************************/
242 Remove::Remove() : Base() {
243 }
244 
245 std::vector<entity::CADEntity_CSPtr> Remove::process(
246  const std::shared_ptr<Document> document,
247  const std::vector<entity::CADEntity_CSPtr> entitySet,
248  std::vector<entity::CADEntity_CSPtr>&,
249  std::vector<entity::CADEntity_CSPtr>& removals,
250  const std::vector<Base_SPtr>) {
251  removals.insert(removals.end(), entitySet.begin(), entitySet.end());
252  std::vector<entity::CADEntity_CSPtr> e;
253  return e;
254 }
255 
256 Remove::~Remove() {
257 
258 }
geo::Coordinate _rotation_center
Definition: entityops.h:212
std::vector< entity::CADEntity_CSPtr > getEntities() const
Definition: entityops.cpp:24
Copy(const geo::Coordinate &offset)
Definition: entityops.cpp:109
Move(const geo::Coordinate &offset)
Definition: entityops.cpp:83
virtual std::vector< entity::CADEntity_CSPtr > process(const std::shared_ptr< Document > document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:191
The begin class Allows for setting up the beginning of a loop (NOT YET IMPLEMENTED) ...
Definition: entityops.h:86
virtual std::vector< entity::CADEntity_CSPtr > process(const std::shared_ptr< Document > document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:139
geo::Coordinate _scale_center
Definition: entityops.h:232
geo::Coordinate _offset
Definition: entityops.h:138
virtual std::vector< entity::CADEntity_CSPtr > process(const std::shared_ptr< Document > document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:86
Definition: cadentity.h:12
Loop(const int numTimes)
Definition: entityops.cpp:39
Scale(const geo::Coordinate &scale_center, const geo::Coordinate &scale_factor)
Definition: entityops.cpp:136
virtual std::vector< entity::CADEntity_CSPtr > process(const std::shared_ptr< Document > document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:165
geo::Coordinate _scale_factor
Definition: entityops.h:232
virtual std::vector< entity::CADEntity_CSPtr > process(const std::shared_ptr< Document > document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:14
Rotate(const geo::Coordinate &rotation_center, const double rotation_angle)
Definition: entityops.cpp:162
virtual std::vector< entity::CADEntity_CSPtr > process(const std::shared_ptr< Document > document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:112
virtual std::vector< entity::CADEntity_CSPtr > process(const Document_SPtr document, std::vector< entity::CADEntity_CSPtr > entities, std::vector< entity::CADEntity_CSPtr > &workingBuffer, std::vector< entity::CADEntity_CSPtr > &removals, const std::vector< Base_SPtr > operationStack)
Definition: entityops.cpp:42
std::vector< entity::CADEntity_CSPtr > _entities
Definition: entityops.h:102
geo::Coordinate _offset
Definition: entityops.h:175