@@ -693,7 +693,7 @@ inline int Geometry::loadSweep(lbRegion reg, pugi::xml_node node)
693
693
int order=1;
694
694
attr = node.attribute("order");
695
695
if (attr) order = attr.as_int();
696
- double dl=1e-3 ;
696
+ double dl=1e-4 ;
697
697
attr = node.attribute("step");
698
698
if (attr) dl = attr.as_double();
699
699
attr = node.attribute("steps");
@@ -724,19 +724,31 @@ inline int Geometry::loadSweep(lbRegion reg, pugi::xml_node node)
724
724
order = n-1;
725
725
}
726
726
output("Making a Sweep over region (%ld) with %lf step\n",reg.size(), dl);
727
- for (int x = reg.dx; x < reg.dx + reg.nx; x++)
728
- for (int y = reg.dy; y < reg.dy + reg.ny; y++)
729
- for (int z = reg.dz; z < reg.dz + reg.nz; z++) {
730
- for (double l=0;l<1; l+= dl) {
731
- double x0 = bspline(l, nx, order);
732
- double y0 = bspline(l, ny, order);
733
- double z0 = bspline(l, nz, order);
734
- double r = bspline(l, nr, order);
735
- if ((x-x0)*(x-x0)+(y-y0)*(y-y0)+(z-z0)*(z-z0) < r*r) {
736
- Dot(x, y, z);
727
+
728
+ double x0_=-999.0, y0_=-999.0, z0_=-999.0, r0_=-999.0;
729
+ for (double l=0;l<1; l+= dl) {
730
+ double x0 = bspline(l, nx, order);
731
+ double y0 = bspline(l, ny, order);
732
+ double z0 = bspline(l, nz, order);
733
+ double r = bspline(l, nr, order);
734
+
735
+ if (abs(x0-x0_) < 0.25 &&
736
+ abs(y0-y0_) < 0.25 &&
737
+ abs(z0-z0_) < 0.25 &&
738
+ abs(r-r0_) < 0.25) {
739
+ continue;
740
+ }
741
+ x0_ = x0; y0_ = y0; z0_ = z0; r0_ = r;
742
+
743
+ lbRegion tmpReg=reg.intersect(lbRegion(x0-r-1,y0-r-1,z0-r-1,2*r+2,2*r+2,2*r+2));
744
+ for (int x = tmpReg.dx; x < tmpReg.dx + tmpReg.nx; x++)
745
+ for (int y = tmpReg.dy; y < tmpReg.dy + tmpReg.ny; y++)
746
+ for (int z = tmpReg.dz; z < tmpReg.dz + tmpReg.nz; z++) {
747
+ if ((.5+x-x0)*(.5+x-x0)+(.5+y-y0)*(.5+y-y0)+(.5+z-z0)*(.5+z-z0) < r*r) {
748
+ Dot(x, y, z);
737
749
}
738
750
}
739
- }
751
+ }
740
752
741
753
return 0;
742
754
}
0 commit comments