1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jcurl.demo.tactics.sg;
20
21 import java.awt.BasicStroke;
22 import java.awt.Paint;
23 import java.awt.RenderingHints;
24 import java.awt.Shape;
25 import java.awt.Stroke;
26
27 import org.jcurl.core.api.RockProps;
28 import org.jcurl.core.ui.GenTrajectoryFactory;
29 import org.jcurl.core.ui.IceShapes;
30 import org.jcurl.core.ui.JCurlShaper;
31 import org.jcurl.math.R1RNFunction;
32 import org.jcurl.math.Shaper;
33
34 import com.sun.scenario.scenegraph.SGGroup;
35 import com.sun.scenario.scenegraph.SGShape;
36 import com.sun.scenario.scenegraph.SGAbstractShape.Mode;
37
38
39
40
41
42
43
44
45 public abstract class SGTrajectoryFactory extends GenTrajectoryFactory<SGGroup> {
46 public static class Fancy extends SGTrajectoryFactory {
47
48 private static final Paint dark = IceShapes.trace(
49 new IceShapes.RockColors().dark, 255);
50 private static final Paint light = IceShapes.trace(
51 new IceShapes.RockColors().light, 255);
52
53 private static final Shaper sh = new JCurlShaper();
54
55 private static final Stroke stroke = new BasicStroke(
56 2 * RockProps.DEFAULT.getRadius(), BasicStroke.CAP_ROUND,
57 BasicStroke.JOIN_ROUND, 0);
58
59 @Override
60 protected void addSegment(final R1RNFunction src, final double tmin,
61 final double tmax, final boolean isDark, final SGGroup dst) {
62 final Shape s = sh.toShape(src, tmin, tmax);
63 if (s == null)
64 return;
65
66 final SGShape c = new SGShape();
67 c.setShape(s);
68 c.setDrawStroke(stroke);
69 c.setDrawPaint(isDark ? dark : light);
70 c.setAntialiasingHint(RenderingHints.VALUE_ANTIALIAS_ON);
71 c.setMode(Mode.STROKE);
72 dst.add(c);
73 }
74 }
75
76 @Override
77 protected SGGroup post(final SGGroup parent) {
78 parent.setVisible(true);
79 return parent;
80 }
81
82 @Override
83 protected SGGroup pre(SGGroup parent) {
84 if (parent == null)
85 parent = new SGGroup();
86 parent.setVisible(false);
87
88 for (int i = parent.getChildren().size() - 1; i >= 0; i--)
89 parent.remove(i);
90 return parent;
91 }
92 }