Skip to content

Commit cb61127

Browse files
committed
Adding a transform provider into the sweep to add spiral features
1 parent 5a78984 commit cb61127

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

src/main/java/eu/mihosoft/vrl/v3d/Extrude.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -578,21 +578,24 @@ public static ArrayList<Transform> bezierToTransforms(Vector3d start, Vector3d c
578578
// //com.neuronrobotics.sdk.common.Log.error("Parsing "+startString+" \nand\n"+b);
579579
return bezierToTransforms(path, path2, iterations, controlA, controlB);
580580
}
581-
582581
public static CSG sweep(Polygon p, Transform increment, Transform offset, int steps) {
582+
return sweep(p,increment,offset,steps, (u,d)->{return new Transform();});
583+
}
584+
public static CSG sweep(Polygon p, Transform increment, Transform offset, int steps,ITransformProvider provider) {
583585
Polygon offsetP = p.transformed(offset);
584586
List<Polygon> newPolygons = new ArrayList<>();
585587
newPolygons.addAll(PolygonUtil.concaveToConvex(offsetP));
586588
Transform running = new Transform();
587-
Polygon prev = offsetP;
589+
Polygon prev = offsetP.transformed(provider.get(0, steps));
588590
for (int i = 0; i < steps; i++) {
589591
running.apply(increment);
590-
Polygon step = offsetP.transformed(running);
592+
double unit = ((double)i)/((double)steps);
593+
Polygon step = offsetP.transformed(provider.get(unit, steps)).transformed(running);
591594
List<Polygon> parts = monotoneExtrude(prev, step);
592595
prev = step;
593596
newPolygons.addAll(parts);
594597
}
595-
Polygon polygon2 = offsetP.transformed(running);
598+
Polygon polygon2 = offsetP.transformed(provider.get(1, steps)).transformed(running);
596599
List<Polygon> topPolygons = PolygonUtil.concaveToConvex(polygon2.flipped());
597600
newPolygons.addAll(topPolygons);
598601

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package eu.mihosoft.vrl.v3d;
2+
3+
public interface ITransformProvider {
4+
/**
5+
* Provide a Transform based on the incoming state
6+
* @param unitVector a unit vector of progress a value from 0 to 1
7+
* @param domain The engineering units total for reference in the calculations
8+
* @return A transform for the given step
9+
*/
10+
public Transform get(double unitVector,double domain);
11+
}

0 commit comments

Comments
 (0)