void NumChart3d() {
WContainerWidget container = new WContainerWidget();
final WCartesian3DChart chart = new WCartesian3DChart((WContainerWidget) container);
chart.setType(ChartType.Scatter);
chart.setRenderOptions(EnumSet.of(GLRenderOption.ClientSide, GLRenderOption.AntiAliasing));
final WCssDecorationStyle style = new WCssDecorationStyle();
style.setBorder(
new WBorder(BorderStyle.Solid, BorderWidth.Medium, new WColor(StandardColor.Black)));
chart.setDecorationStyle(style);
chart.resize(new WLength(900), new WLength(700));
chart.setGridEnabled(Plane.XY, Axis.X3D, true);
chart.setGridEnabled(Plane.XY, Axis.Y3D, true);
chart.setGridEnabled(Plane.XZ, Axis.X3D, true);
chart.setGridEnabled(Plane.XZ, Axis.Z3D, true);
chart.setGridEnabled(Plane.YZ, Axis.Y3D, true);
chart.setGridEnabled(Plane.YZ, Axis.Z3D, true);
chart.axis(Axis.X3D).setTitle("X");
chart.axis(Axis.Y3D).setTitle("Y");
chart.axis(Axis.Z3D).setTitle("Z");
chart.setIntersectionLinesEnabled(true);
chart.setIntersectionLinesColor(new WColor(0, 255, 255));
SombreroData model1 = new SombreroData(40, 40);
WGridData dataset1 = new WGridData(model1);
dataset1.setType(Series3DType.Surface);
dataset1.setSurfaceMeshEnabled(true);
WStandardColorMap colormap =
new WStandardColorMap(dataset1.minimum(Axis.Z3D), dataset1.maximum(Axis.Z3D), true);
dataset1.setColorMap(colormap);
PlaneData model2 = new PlaneData(40, 40);
for (int i = 0; i < model2.getRowCount(); i++) {
model2.setData(i, 0, 5, ItemDataRole.MarkerScaleFactor);
model2.setData(i, model2.getColumnCount() - 1, 5, ItemDataRole.MarkerScaleFactor);
}
for (int i = 0; i < model2.getColumnCount(); i++) {
model2.setData(0, i, 5, ItemDataRole.MarkerScaleFactor);
model2.setData(model2.getRowCount() - 1, i, 5, ItemDataRole.MarkerScaleFactor);
}
for (int i = 0; i < model2.getRowCount(); i++) {
model2.setData(i, 5, new WColor(0, 255, 0), ItemDataRole.MarkerBrushColor);
model2.setData(i, 6, new WColor(0, 0, 255), ItemDataRole.MarkerBrushColor);
model2.setData(i, 7, new WColor(0, 255, 0), ItemDataRole.MarkerBrushColor);
model2.setData(i, 8, new WColor(0, 0, 255), ItemDataRole.MarkerBrushColor);
}
WEquidistantGridData dataset2 = new WEquidistantGridData(model2, -10, 0.5f, -10, 0.5f);
SpiralData model3 = new SpiralData(100);
WScatterData dataset3 = new WScatterData(model3);
dataset3.setPointSize(5);
HorizontalPlaneData model4 = new HorizontalPlaneData(20, 20);
WEquidistantGridData dataset4 = new WEquidistantGridData(model4, -10, 1.0f, -10, 1.0f);
dataset4.setType(Series3DType.Surface);
dataset4.setSurfaceMeshEnabled(true);
chart.addDataSeries(dataset1);
chart.addDataSeries(dataset2);
chart.addDataSeries(dataset3);
chart.addDataSeries(dataset4);
chart.setBackground(new WColor(StandardColor.Transparent));
if (WApplication.getInstance().getTheme().getColorMode().equals("dark")) {
chart.setIntersectionLinesColor(new WColor(StandardColor.White));
chart.setGridLinesPen(new WPen(StandardColor.White));
chart.setCubeLinesPen(new WPen(StandardColor.White));
chart.axis(Axis.X3D).setPen(new WPen(StandardColor.White));
chart.axis(Axis.X3D).setTextPen(new WPen(StandardColor.White));
chart.axis(Axis.Y3D).setPen(new WPen(StandardColor.White));
chart.axis(Axis.Y3D).setTextPen(new WPen(StandardColor.White));
chart.axis(Axis.Z3D).setPen(new WPen(StandardColor.White));
chart.axis(Axis.Z3D).setTextPen(new WPen(StandardColor.White));
chart.setAlternativeContent(new WImage(new WLink("pics/numericalChartScreenshot-dark.png")));
} else {
chart.setAlternativeContent(new WImage(new WLink("pics/numericalChartScreenshot.png")));
}
WApplication.getInstance()
.themeColorModeChanged()
.addListener(
this,
(String mode) -> {
if (mode.equals("dark")) {
chart.setIntersectionLinesColor(new WColor(StandardColor.White));
chart.setGridLinesPen(new WPen(StandardColor.White));
chart.setCubeLinesPen(new WPen(StandardColor.White));
chart.axis(Axis.X3D).setPen(new WPen(StandardColor.White));
chart.axis(Axis.X3D).setTextPen(new WPen(StandardColor.White));
chart.axis(Axis.Y3D).setPen(new WPen(StandardColor.White));
chart.axis(Axis.Y3D).setTextPen(new WPen(StandardColor.White));
chart.axis(Axis.Z3D).setPen(new WPen(StandardColor.White));
chart.axis(Axis.Z3D).setTextPen(new WPen(StandardColor.White));
chart.setAlternativeContent(
new WImage(new WLink("pics/numericalChartScreenshot-dark.png")));
} else {
chart.setIntersectionLinesColor(new WColor(StandardColor.Black));
chart.setGridLinesPen(new WPen(StandardColor.Black));
chart.setCubeLinesPen(new WPen(StandardColor.Black));
chart.axis(Axis.X3D).setPen(new WPen(StandardColor.Black));
chart.axis(Axis.X3D).setTextPen(new WPen(StandardColor.Black));
chart.axis(Axis.Y3D).setPen(new WPen(StandardColor.Black));
chart.axis(Axis.Y3D).setTextPen(new WPen(StandardColor.Black));
chart.axis(Axis.Z3D).setPen(new WPen(StandardColor.Black));
chart.axis(Axis.Z3D).setTextPen(new WPen(StandardColor.Black));
chart.setAlternativeContent(
new WImage(new WLink("pics/numericalChartScreenshot.png")));
}
});
}