Skip to content

Commit d1a93f3

Browse files
committed
Helped by Fabio Azevedo, the code is compiling in Windows too
1 parent a28f82f commit d1a93f3

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

ca_smoothing.cxx

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,21 @@
3333
#include <vtkXMLPolyDataWriter.h>
3434
#include <vtkCell.h>
3535

36+
typedef struct _Point
37+
{
38+
double x;
39+
double y;
40+
double z;
41+
} Point;
42+
3643
vtkPolyData* read_stl(char*);
3744
vtkIdList* find_staircase_artifacts(vtkPolyData*, const double[3], double);
3845
vtkIdList* get_near_vertices_to_v(vtkPolyData*, int, double);
3946
vtkDoubleArray* calc_artifacts_weight(vtkPolyData*, vtkIdList*, double, double);
40-
void calc_d(vtkPolyData*, int, double[3]);
47+
Point calc_d(vtkPolyData*, int);
4148
vtkPolyData* taubin_smooth(vtkPolyData*, vtkDoubleArray*, double, double, int);
4249

50+
4351
int main(int argc, char *argv[])
4452
{
4553
const double stack_orientation[3] = { 0, 0, 1 };
@@ -69,7 +77,7 @@ int main(int argc, char *argv[])
6977

7078
vtkXMLPolyDataWriter *writer = vtkXMLPolyDataWriter::New();
7179
writer->SetInput(tpd);
72-
writer->SetFileName("/tmp/saida.vtp");
80+
writer->SetFileName("saida.vtp");
7381
writer->Write();
7482
return 0;
7583
}
@@ -160,7 +168,7 @@ vtkIdList* get_near_vertices_to_v(vtkPolyData* pd, int v, double dmax){
160168

161169
for(int i=0; i < 3; i++) {
162170
int vjid = face->GetPointId(i);
163-
if (status_v.find(vjid) == status_v.end() or !status_v[vjid]) {
171+
if (status_v.find(vjid) == status_v.end() || !status_v[vjid]) {
164172
pd->GetPoint(vjid, vj);
165173
d = sqrt((vi[0] - vj[0]) * (vi[0] - vj[0])\
166174
+ (vi[1] - vj[1]) * (vi[1] - vj[1])\
@@ -230,7 +238,8 @@ vtkDoubleArray* calc_artifacts_weight(vtkPolyData* pd, vtkIdList* vertices_stair
230238
return weights;
231239
}
232240

233-
void calc_d(vtkPolyData* pd, int vid, double D[3]){
241+
Point calc_d(vtkPolyData* pd, int vid){
242+
Point D;
234243
int nf, fid, n=0;
235244
double vi[3], vj[3];
236245
std::set<int> vertices;
@@ -246,51 +255,54 @@ void calc_d(vtkPolyData* pd, int vid, double D[3]){
246255
vertices.insert(vjid);
247256
}
248257
}
249-
250-
D[0] = 0;
251-
D[1] = 0;
252-
D[2] = 0;
258+
D.x = 0;
259+
D.y = 0;
260+
D.z = 0;
253261

254262
pd->GetPoint(vid, vi); // The position of vertex v
255263
for (it=vertices.begin(); it!=vertices.end(); it++) {
256264
pd->GetPoint(*it, vj);
257-
D[0] = D[0] + (vi[0] - vj[0]);
258-
D[1] = D[1] + (vi[1] - vj[1]);
259-
D[2] = D[2] + (vi[2] - vj[2]);
265+
D.x = D.x + (vi[0] - vj[0]);
266+
D.y = D.y + (vi[1] - vj[1]);
267+
D.z = D.z + (vi[2] - vj[2]);
260268
n++;
261269
}
262-
D[0] = D[0] / n;
263-
D[1] = D[1] / n;
264-
D[2] = D[2] / n;
270+
271+
D.x = D.x / n;
272+
D.y = D.y / n;
273+
D.z = D.z / n;
274+
return D;
265275
}
266276

267277
vtkPolyData* taubin_smooth(vtkPolyData* pd, vtkDoubleArray* weights, double l, double m, int steps){
268278
double vi[3];
269-
std::vector<double[3]> D;
270279
vtkPolyData* new_pd = vtkPolyData::New();
271280
new_pd->DeepCopy(pd);
272-
D.reserve(pd->GetNumberOfPoints());
273-
281+
std::vector<Point> D(pd->GetNumberOfPoints());
282+
//D.reserve(pd->GetNumberOfPoints());
283+
274284
for (int s=0; s < steps; s++) {
275285
for (int i=0; i < pd->GetNumberOfPoints(); i++) {
276-
calc_d(new_pd, i, D[i]);
286+
D[i] = calc_d(new_pd, i);
277287
}
288+
278289
for (int i=0; i < pd->GetNumberOfPoints(); i++) {
279290
new_pd->GetPoint(i, vi);
280-
vi[0] = vi[0] + weights->GetValue(i)*l*D[i][0];
281-
vi[1] = vi[1] + weights->GetValue(i)*l*D[i][1];
282-
vi[2] = vi[2] + weights->GetValue(i)*l*D[i][2];
291+
vi[0] = vi[0] + weights->GetValue(i)*l*D[i].x;
292+
vi[1] = vi[1] + weights->GetValue(i)*l*D[i].y;
293+
vi[2] = vi[2] + weights->GetValue(i)*l*D[i].z;
283294
new_pd->GetPoints()->SetPoint(i, vi);
284295
}
285296

286297
for (int i=0; i < pd->GetNumberOfPoints(); i++) {
287-
calc_d(new_pd, i, D[i]);
298+
D[i] = calc_d(new_pd, i);
288299
}
300+
289301
for (int i=0; i < pd->GetNumberOfPoints(); i++) {
290302
new_pd->GetPoint(i, vi);
291-
vi[0] = vi[0] + weights->GetValue(i)*m*D[i][0];
292-
vi[1] = vi[1] + weights->GetValue(i)*m*D[i][1];
293-
vi[2] = vi[2] + weights->GetValue(i)*m*D[i][2];
303+
vi[0] = vi[0] + weights->GetValue(i)*m*D[i].x;
304+
vi[1] = vi[1] + weights->GetValue(i)*m*D[i].y;
305+
vi[2] = vi[2] + weights->GetValue(i)*m*D[i].z;
294306
new_pd->GetPoints()->SetPoint(i, vi);
295307
}
296308
}

0 commit comments

Comments
 (0)