use of javafx.scene.Node in project FXyzLib by Birdasaur.
the class Histogram method setHeightData.
public void setHeightData(float[][] arrayY, int barSize, int spacing, Color color, boolean ambient, boolean fill) {
histogramDataGroup.getChildren().clear();
PhongMaterial phong = new PhongMaterial();
phong.setSpecularColor(color);
phong.setDiffuseColor(color);
float min = arrayY[0][0], max = arrayY[0][0];
// Find min and max's for color gradient
for (int x = 0; x < arrayY.length; x++) {
for (int z = 0; z < arrayY[0].length; z++) {
if (arrayY[x][z] < min) {
min = arrayY[x][z];
}
if (arrayY[x][z] > max) {
max = arrayY[x][z];
}
}
}
//
float range = max - min;
// Generate Bars
for (int x = 0; x < arrayY.length; x++) {
for (int z = 0; z < arrayY[0].length; z++) {
double ySize = arrayY[x][z];
if (ySize < 0) {
ySize *= -1;
}
Node bar = createDefaultNode(barSize, ySize);
bar.setTranslateX(x * spacing);
bar.setTranslateY(-arrayY[x][z]);
bar.setTranslateZ(z * spacing);
//Apply normalized color scale
double normalizedColor = (arrayY[x][z] - min) / range;
if (//if it is in the lower half of the range
arrayY[x][z] < range / 2) {
phong = new PhongMaterial(new Color(0.25, 0, normalizedColor, 1));
} else //if it is in the upper half of the range
{
phong = new PhongMaterial(new Color(normalizedColor, 0, 0.25, 1));
}
switch(getDefaultNodeType()) {
case CYLINDER:
{
((Cylinder) bar).setMaterial(phong);
((Cylinder) bar).setCullFace(CullFace.BACK);
if (fill) {
((Cylinder) bar).setDrawMode(DrawMode.FILL);
} else {
//show lines only by default
((Cylinder) bar).setDrawMode(DrawMode.LINE);
}
break;
}
case CUBE:
default:
{
((Box) bar).setMaterial(phong);
((Box) bar).setCullFace(CullFace.BACK);
if (fill) {
((Box) bar).setDrawMode(DrawMode.FILL);
} else {
//show lines only by default
((Box) bar).setDrawMode(DrawMode.LINE);
}
}
}
if (ambient) {
AmbientLight light = new AmbientLight(color);
light.getScope().add(bar);
histogramDataGroup.getChildren().add(light);
}
histogramDataGroup.getChildren().add(bar);
}
}
}
use of javafx.scene.Node in project FXyzLib by Birdasaur.
the class ScatterPlot method setzAxisData.
/**
* @param data the zAxisData to set
*/
public void setzAxisData(List<Double> data) {
zAxisData = data;
scatterDataGroup.getChildren().clear();
for (int i = 0; i < zAxisData.size(); i++) {
// final Sphere dataSphere = new Sphere(scatterRadius);
// final Box dataSphere = new Box(scatterRadius, scatterRadius, scatterRadius);
final Node dataSphere = createDefaultNode(nodeRadius);
double translateX = 0.0;
double translateY = 0.0;
if (!xAxisData.isEmpty() && xAxisData.size() > i)
translateX = xAxisData.get(i);
if (!yAxisData.isEmpty() && yAxisData.size() > i)
translateY = yAxisData.get(i);
dataSphere.setTranslateX(translateX);
dataSphere.setTranslateY(translateY);
dataSphere.setTranslateZ(zAxisData.get(i));
scatterDataGroup.getChildren().add(dataSphere);
}
}
use of javafx.scene.Node in project FXyzLib by Birdasaur.
the class ScatterPlot method setxAxisData.
/**
* @param data the xAxisData to set
*/
public void setxAxisData(List<Double> data) {
xAxisData = data;
scatterDataGroup.getChildren().clear();
for (int i = 0; i < xAxisData.size(); i++) {
// final Sphere dataSphere = new Sphere(scatterRadius);
// final Box dataSphere = new Box(scatterRadius, scatterRadius, scatterRadius);
final Node dataSphere = createDefaultNode(nodeRadius);
double translateY = 0.0;
double translateZ = 0.0;
if (!yAxisData.isEmpty() && yAxisData.size() > i)
translateY = yAxisData.get(i);
if (!zAxisData.isEmpty() && zAxisData.size() > i)
translateZ = zAxisData.get(i);
dataSphere.setTranslateX(xAxisData.get(i));
dataSphere.setTranslateY(translateY);
dataSphere.setTranslateZ(translateZ);
scatterDataGroup.getChildren().add(dataSphere);
}
}
use of javafx.scene.Node in project aic-praise by aic-sri-international.
the class QueryController method displayQueryAnswer.
private void displayQueryAnswer(String query, Expression result, ParsedHOGModel parsedModel, long millisecondsToCompute) {
String answer = "P(" + query + " | ... ) = " + result;
String title = "Query" + duration(" took ", millisecondsToCompute) + " to compute '" + answer + "'";
HOGMCodeArea resultCodeArea = new HOGMCodeArea(false);
resultCodeArea.setText(answer);
resultCodeArea.setEditable(false);
Node resultContent = null;
if (SGSolverDemoController.isInDebugMode()) {
HOGMCodeArea parsedModelArea = createParsedModelView(parsedModel);
TabPane resultTabs = new TabPane();
resultTabs.getTabs().add(new Tab("Answer", resultCodeArea));
resultTabs.getTabs().add(new Tab("Parsed As", parsedModelArea));
resultContent = resultTabs;
} else {
resultContent = resultCodeArea;
}
TitledPane resultPane = new TitledPane(title, resultContent);
FXUtil.setTitledPaneIcon(resultPane, FontAwesomeIcons.CHECK);
showResultPane(resultPane);
}
use of javafx.scene.Node in project aic-praise by aic-sri-international.
the class QueryController method displayQueryErrors.
private void displayQueryErrors(String query, List<HOGMQueryError> queryErrors, ParsedHOGModel parsedModel, long millisecondsToCompute) {
String title = "Query '" + query + "' encountered " + queryErrors.size() + " error(s) when attempting to compute answer (" + duration("took ", millisecondsToCompute) + ")";
ListView<HOGMQueryError> errors = new ListView<>(FXCollections.observableList(queryErrors));
//errors.setFixedCellSize(24);
errors.setPrefHeight(24 * 5);
errors.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
errors.getSelectionModel().selectedIndexProperty().addListener((obs, oldValue, newValue) -> {
if (newValue.intValue() >= 0) {
HOGMQueryError qError = errors.getItems().get(newValue.intValue());
if (qError.getContext() == HOGMQueryError.Context.MODEL) {
modelPageEditor.highlight(qError.getStartContextIndex(), qError.getEndContextIndex());
} else if (qError.getContext() == HOGMQueryError.Context.QUERY) {
queryComboBox.getEditor().selectAll();
}
}
});
Node resultContent = null;
if (SGSolverDemoController.isInDebugMode()) {
HOGMCodeArea parsedModelArea = createParsedModelView(parsedModel);
TabPane resultTabs = new TabPane();
resultTabs.getTabs().add(new Tab("Errors", errors));
resultTabs.getTabs().add(new Tab("Parsed As", parsedModelArea));
resultContent = resultTabs;
} else {
resultContent = errors;
}
TitledPane resultPane = new TitledPane(title, resultContent);
FXUtil.setTitledPaneIcon(resultPane, FontAwesomeIcons.TIMES);
showResultPane(resultPane);
errors.getSelectionModel().selectFirst();
}
Aggregations