40 return text; |
40 return text; |
41 } |
41 } |
42 |
42 |
43 // ============================================================================= |
43 // ============================================================================= |
44 // ----------------------------------------------------------------------------- |
44 // ----------------------------------------------------------------------------- |
45 vertex::vertex (double x, double y, double z) |
45 Vertex::Vertex (double x, double y, double z) |
46 { |
46 { |
47 m_coords[X] = x; |
47 m_coords[X] = x; |
48 m_coords[Y] = y; |
48 m_coords[Y] = y; |
49 m_coords[Z] = z; |
49 m_coords[Z] = z; |
50 } |
50 } |
51 |
51 |
52 // ============================================================================= |
52 // ============================================================================= |
53 // ----------------------------------------------------------------------------- |
53 // ----------------------------------------------------------------------------- |
54 void vertex::move (const vertex& other) |
54 void Vertex::move (const Vertex& other) |
55 { |
55 { |
56 for_axes (ax) |
56 for_axes (ax) |
57 m_coords[ax] += other[ax]; |
57 m_coords[ax] += other[ax]; |
58 } |
58 } |
59 |
59 |
60 // ============================================================================= |
60 // ============================================================================= |
61 // ----------------------------------------------------------------------------- |
61 // ----------------------------------------------------------------------------- |
62 double vertex::distanceTo (const vertex& other) const |
62 double Vertex::distanceTo (const Vertex& other) const |
63 { |
63 { |
64 double dx = abs (x() - other.x()); |
64 double dx = abs (x() - other.x()); |
65 double dy = abs (y() - other.y()); |
65 double dy = abs (y() - other.y()); |
66 double dz = abs (z() - other.z()); |
66 double dz = abs (z() - other.z()); |
67 return sqrt ((dx * dx) + (dy * dy) + (dz * dz)); |
67 return sqrt ((dx * dx) + (dy * dy) + (dz * dz)); |
68 } |
68 } |
69 |
69 |
70 // ============================================================================= |
70 // ============================================================================= |
71 // ----------------------------------------------------------------------------- |
71 // ----------------------------------------------------------------------------- |
72 vertex vertex::midpoint (const vertex& other) |
72 Vertex Vertex::midpoint (const Vertex& other) |
73 { |
73 { |
74 vertex mid; |
74 Vertex mid; |
75 |
75 |
76 for_axes (ax) |
76 for_axes (ax) |
77 mid[ax] = (m_coords[ax] + other[ax]) / 2; |
77 mid[ax] = (m_coords[ax] + other[ax]) / 2; |
78 |
78 |
79 return mid; |
79 return mid; |
80 } |
80 } |
81 |
81 |
82 // ============================================================================= |
82 // ============================================================================= |
83 // ----------------------------------------------------------------------------- |
83 // ----------------------------------------------------------------------------- |
84 str vertex::stringRep (bool mangled) const |
84 str Vertex::stringRep (bool mangled) const |
85 { |
85 { |
86 str fmtstr = "%1 %2 %3"; |
86 str fmtstr = "%1 %2 %3"; |
87 |
87 |
88 if (mangled) |
88 if (mangled) |
89 fmtstr = "(%1, %2, %3)"; |
89 fmtstr = "(%1, %2, %3)"; |
91 return fmt (fmtstr, coord (X), coord (Y), coord (Z)); |
91 return fmt (fmtstr, coord (X), coord (Y), coord (Z)); |
92 } |
92 } |
93 |
93 |
94 // ============================================================================= |
94 // ============================================================================= |
95 // ----------------------------------------------------------------------------- |
95 // ----------------------------------------------------------------------------- |
96 void vertex::transform (matrix matr, vertex pos) |
96 void Vertex::transform (Matrix matr, Vertex pos) |
97 { |
97 { |
98 double x2 = (matr[0] * x()) + (matr[1] * y()) + (matr[2] * z()) + pos[X]; |
98 double x2 = (matr[0] * x()) + (matr[1] * y()) + (matr[2] * z()) + pos[X]; |
99 double y2 = (matr[3] * x()) + (matr[4] * y()) + (matr[5] * z()) + pos[Y]; |
99 double y2 = (matr[3] * x()) + (matr[4] * y()) + (matr[5] * z()) + pos[Y]; |
100 double z2 = (matr[6] * x()) + (matr[7] * y()) + (matr[8] * z()) + pos[Z]; |
100 double z2 = (matr[6] * x()) + (matr[7] * y()) + (matr[8] * z()) + pos[Z]; |
101 |
101 |
104 z() = z2; |
104 z() = z2; |
105 } |
105 } |
106 |
106 |
107 // ============================================================================= |
107 // ============================================================================= |
108 // ----------------------------------------------------------------------------- |
108 // ----------------------------------------------------------------------------- |
109 vertex vertex::operator-() const |
109 Vertex Vertex::operator-() const |
110 { |
110 { |
111 return vertex (-m_coords[X], -m_coords[Y], -m_coords[Z]); |
111 return Vertex (-m_coords[X], -m_coords[Y], -m_coords[Z]); |
112 } |
112 } |
113 |
113 |
114 // ============================================================================= |
114 // ============================================================================= |
115 // ----------------------------------------------------------------------------- |
115 // ----------------------------------------------------------------------------- |
116 bool vertex::operator!= (const vertex& other) const |
116 bool Vertex::operator!= (const Vertex& other) const |
117 { |
117 { |
118 return !operator== (other); |
118 return !operator== (other); |
119 } |
119 } |
120 |
120 |
121 // ============================================================================= |
121 // ============================================================================= |
122 // ----------------------------------------------------------------------------- |
122 // ----------------------------------------------------------------------------- |
123 double& vertex::operator[] (const Axis ax) |
123 double& Vertex::operator[] (const Axis ax) |
124 { |
124 { |
125 return coord ( (int) ax); |
125 return coord ( (int) ax); |
126 } |
126 } |
127 |
127 |
128 const double& vertex::operator[] (const Axis ax) const |
128 const double& Vertex::operator[] (const Axis ax) const |
129 { |
129 { |
130 return coord ( (int) ax); |
130 return coord ( (int) ax); |
131 } |
131 } |
132 |
132 |
133 double& vertex::operator[] (const int ax) |
133 double& Vertex::operator[] (const int ax) |
134 { |
134 { |
135 return coord (ax); |
135 return coord (ax); |
136 } |
136 } |
137 |
137 |
138 const double& vertex::operator[] (const int ax) const |
138 const double& Vertex::operator[] (const int ax) const |
139 { |
139 { |
140 return coord (ax); |
140 return coord (ax); |
141 } |
141 } |
142 |
142 |
143 // ============================================================================= |
143 // ============================================================================= |
144 // ----------------------------------------------------------------------------- |
144 // ----------------------------------------------------------------------------- |
145 bool vertex::operator== (const vertex& other) const |
145 bool Vertex::operator== (const Vertex& other) const |
146 { |
146 { |
147 return coord (X) == other[X] && |
147 return coord (X) == other[X] && |
148 coord (Y) == other[Y] && |
148 coord (Y) == other[Y] && |
149 coord (Z) == other[Z]; |
149 coord (Z) == other[Z]; |
150 } |
150 } |
151 |
151 |
152 // ============================================================================= |
152 // ============================================================================= |
153 // ----------------------------------------------------------------------------- |
153 // ----------------------------------------------------------------------------- |
154 vertex& vertex::operator/= (const double d) |
154 Vertex& Vertex::operator/= (const double d) |
155 { |
155 { |
156 for_axes (ax) |
156 for_axes (ax) |
157 m_coords[ax] /= d; |
157 m_coords[ax] /= d; |
158 |
158 |
159 return *this; |
159 return *this; |
160 } |
160 } |
161 |
161 |
162 // ============================================================================= |
162 // ============================================================================= |
163 // ----------------------------------------------------------------------------- |
163 // ----------------------------------------------------------------------------- |
164 vertex vertex::operator/ (const double d) const |
164 Vertex Vertex::operator/ (const double d) const |
165 { |
165 { |
166 vertex other (*this); |
166 Vertex other (*this); |
167 return other /= d; |
167 return other /= d; |
168 } |
168 } |
169 |
169 |
170 // ============================================================================= |
170 // ============================================================================= |
171 // ----------------------------------------------------------------------------- |
171 // ----------------------------------------------------------------------------- |
172 vertex& vertex::operator+= (const vertex& other) |
172 Vertex& Vertex::operator+= (const Vertex& other) |
173 { |
173 { |
174 move (other); |
174 move (other); |
175 return *this; |
175 return *this; |
176 } |
176 } |
177 |
177 |
178 // ============================================================================= |
178 // ============================================================================= |
179 // ----------------------------------------------------------------------------- |
179 // ----------------------------------------------------------------------------- |
180 vertex vertex::operator+ (const vertex& other) const |
180 Vertex Vertex::operator+ (const Vertex& other) const |
181 { |
181 { |
182 vertex newvert (*this); |
182 Vertex newvert (*this); |
183 newvert.move (other); |
183 newvert.move (other); |
184 return newvert; |
184 return newvert; |
185 } |
185 } |
186 |
186 |
187 // ============================================================================= |
187 // ============================================================================= |
188 // ----------------------------------------------------------------------------- |
188 // ----------------------------------------------------------------------------- |
189 int vertex::operator< (const vertex& other) const |
189 int Vertex::operator< (const Vertex& other) const |
190 { |
190 { |
191 if (operator== (other)) |
191 if (operator== (other)) |
192 return false; |
192 return false; |
193 |
193 |
194 if (coord (X) < other[X]) |
194 if (coord (X) < other[X]) |
206 return coord (Z) < other[Z]; |
206 return coord (Z) < other[Z]; |
207 } |
207 } |
208 |
208 |
209 // ============================================================================= |
209 // ============================================================================= |
210 // ----------------------------------------------------------------------------- |
210 // ----------------------------------------------------------------------------- |
211 matrix::matrix (double vals[]) |
211 Matrix::Matrix (double vals[]) |
212 { |
212 { |
213 for (int i = 0; i < 9; ++i) |
213 for (int i = 0; i < 9; ++i) |
214 m_vals[i] = vals[i]; |
214 m_vals[i] = vals[i]; |
215 } |
215 } |
216 |
216 |
217 // ============================================================================= |
217 // ============================================================================= |
218 // ----------------------------------------------------------------------------- |
218 // ----------------------------------------------------------------------------- |
219 matrix::matrix (double fillval) |
219 Matrix::Matrix (double fillval) |
220 { |
220 { |
221 for (int i = 0; i < 9; ++i) |
221 for (int i = 0; i < 9; ++i) |
222 m_vals[i] = fillval; |
222 m_vals[i] = fillval; |
223 } |
223 } |
224 |
224 |
225 // ============================================================================= |
225 // ============================================================================= |
226 // ----------------------------------------------------------------------------- |
226 // ----------------------------------------------------------------------------- |
227 matrix::matrix (initlist<double> vals) |
227 Matrix::Matrix (initlist<double> vals) |
228 { |
228 { |
229 assert (vals.size() == 9); |
229 assert (vals.size() == 9); |
230 memcpy (&m_vals[0], & (*vals.begin()), sizeof m_vals); |
230 memcpy (&m_vals[0], & (*vals.begin()), sizeof m_vals); |
231 } |
231 } |
232 |
232 |
233 // ============================================================================= |
233 // ============================================================================= |
234 // ----------------------------------------------------------------------------- |
234 // ----------------------------------------------------------------------------- |
235 void matrix::puts() const |
235 void Matrix::puts() const |
236 { |
236 { |
237 for (int i = 0; i < 3; ++i) |
237 for (int i = 0; i < 3; ++i) |
238 { |
238 { |
239 for (int j = 0; j < 3; ++j) |
239 for (int j = 0; j < 3; ++j) |
240 log ("%1\t", m_vals[ (i * 3) + j]); |
240 log ("%1\t", m_vals[ (i * 3) + j]); |
260 return val; |
260 return val; |
261 } |
261 } |
262 |
262 |
263 // ============================================================================= |
263 // ============================================================================= |
264 // ----------------------------------------------------------------------------- |
264 // ----------------------------------------------------------------------------- |
265 void matrix::zero() |
265 void Matrix::zero() |
266 { |
266 { |
267 memset (&m_vals[0], 0, sizeof m_vals); |
267 memset (&m_vals[0], 0, sizeof m_vals); |
268 } |
268 } |
269 |
269 |
270 // ============================================================================= |
270 // ============================================================================= |
271 // ----------------------------------------------------------------------------- |
271 // ----------------------------------------------------------------------------- |
272 matrix matrix::mult (matrix other) const |
272 Matrix Matrix::mult (Matrix other) const |
273 { |
273 { |
274 matrix val; |
274 Matrix val; |
275 val.zero(); |
275 val.zero(); |
276 |
276 |
277 for (int i = 0; i < 3; ++i) |
277 for (int i = 0; i < 3; ++i) |
278 for (int j = 0; j < 3; ++j) |
278 for (int j = 0; j < 3; ++j) |
279 for (int k = 0; k < 3; ++k) |
279 for (int k = 0; k < 3; ++k) |
282 return val; |
282 return val; |
283 } |
283 } |
284 |
284 |
285 // ============================================================================= |
285 // ============================================================================= |
286 // ----------------------------------------------------------------------------- |
286 // ----------------------------------------------------------------------------- |
287 matrix& matrix::operator= (matrix other) |
287 Matrix& Matrix::operator= (Matrix other) |
288 { |
288 { |
289 memcpy (&m_vals[0], &other.m_vals[0], sizeof m_vals); |
289 memcpy (&m_vals[0], &other.m_vals[0], sizeof m_vals); |
290 return *this; |
290 return *this; |
291 } |
291 } |
292 |
292 |
293 // ============================================================================= |
293 // ============================================================================= |
294 // ----------------------------------------------------------------------------- |
294 // ----------------------------------------------------------------------------- |
295 double matrix::getDeterminant() const |
295 double Matrix::getDeterminant() const |
296 { |
296 { |
297 return (val (0) * val (4) * val (8)) + |
297 return (val (0) * val (4) * val (8)) + |
298 (val (1) * val (5) * val (6)) + |
298 (val (1) * val (5) * val (6)) + |
299 (val (2) * val (3) * val (7)) - |
299 (val (2) * val (3) * val (7)) - |
300 (val (2) * val (4) * val (6)) - |
300 (val (2) * val (4) * val (6)) - |
588 // ----------------------------------------------------------------------------- |
588 // ----------------------------------------------------------------------------- |
589 void LDBoundingBox::calcObject (LDObject* obj) |
589 void LDBoundingBox::calcObject (LDObject* obj) |
590 { |
590 { |
591 switch (obj->getType()) |
591 switch (obj->getType()) |
592 { |
592 { |
593 case LDObject::Line: |
593 case LDObject::ELine: |
594 case LDObject::Triangle: |
594 case LDObject::ETriangle: |
595 case LDObject::Quad: |
595 case LDObject::EQuad: |
596 case LDObject::CondLine: |
596 case LDObject::ECondLine: |
597 { |
597 { |
598 for (int i = 0; i < obj->vertices(); ++i) |
598 for (int i = 0; i < obj->vertices(); ++i) |
599 calcVertex (obj->getVertex (i)); |
599 calcVertex (obj->getVertex (i)); |
600 } break; |
600 } break; |
601 |
601 |
602 case LDObject::Subfile: |
602 case LDObject::ESubfile: |
603 { |
603 { |
604 LDSubfile* ref = static_cast<LDSubfile*> (obj); |
604 LDSubfile* ref = static_cast<LDSubfile*> (obj); |
605 QList<LDObject*> objs = ref->inlineContents (LDSubfile::DeepCacheInline); |
605 QList<LDObject*> objs = ref->inlineContents (LDSubfile::DeepCacheInline); |
606 |
606 |
607 for (LDObject * obj : objs) |
607 for (LDObject * obj : objs) |