JaRMoS  1.1
Java Reduced Model Simulations
 All Classes Namespaces Files Functions Variables Enumerator Groups Pages
VisualizationData.java
Go to the documentation of this file.
1 package jarmos.visual;
2 
3 import jarmos.Log;
8 
9 import java.nio.ByteBuffer;
10 import java.nio.ByteOrder;
11 import java.nio.FloatBuffer;
12 import java.nio.ShortBuffer;
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.List;
16 
26 public class VisualizationData {
27 
31  public static final int SHORT_MAX = 250000;
32 
36  public static final int FLOAT_MAX = 1000000;
37 
42  public static FloatBuffer createFloatBuffer(int size) {
43  Log.d("VisualizationData", "Allocating GL float buffer:" + size * 4 + " bytes");
44  ByteBuffer fbb = ByteBuffer.allocateDirect(size * 4);
45  fbb.order(ByteOrder.nativeOrder()).position(0);
46  return fbb.asFloatBuffer();
47  }
48 
54  public static FloatBuffer createFloatBuffer() {
56  }
57 
62  public static ShortBuffer createShortBuffer(int size) {
63  Log.d("VisualizationData", "Allocating GL short buffer:" + size * 2 + " bytes");
64  ByteBuffer vbb = ByteBuffer.allocateDirect(size * 2);
65  vbb.order(ByteOrder.nativeOrder()).position(0);
66  return vbb.asShortBuffer();
67  }
68 
74  public static ShortBuffer createShortBuffer() {
76  }
77 
81  private List<VisualFeature> visFeatures;
82 
83  // private List<LogicSolutionField> logicfields;
84 
85  private FloatBuffer floatBuf;
86  private ShortBuffer shortBuf;
87 
88  public int numFrames;
89 
90  private GeometryData gData;
91  private SimulationResult simres;
92 
94  this(fGeo, createFloatBuffer(), createShortBuffer());
95  }
96 
97  public VisualizationData(GeometryData fGeo, FloatBuffer fBuf, ShortBuffer sBuf) {
98  // Use size one per default
99  visFeatures = new ArrayList<VisualFeature>(1);
100  this.gData = fGeo;
101  floatBuf = fBuf;
102  shortBuf = sBuf;
103  }
104 
106  return gData;
107  }
108 
109  public int getNumVisFeatures() {
110  return visFeatures.size();
111  }
112 
117  public VisualFeature getVisualizationFeature(int featureNr) {
118  return visFeatures.get(featureNr);
119  }
120 
121  public void useResult(SimulationResult res) {
122  if (res.getNumParts() != res.getTransforms().size()) {
123  throw new RuntimeException("Invalid simulation result, number of parts (" + res.getNumParts()
124  + ") does not match transformation count (" + res.getTransforms().size()
125  + "). Forgot to add default transformation?");
126  }
127 
128  // Handle geometric transformations
129  gData.createMesh(res.getTransforms(), !res.hasDisplacements());
130 
131  for (LogicSolutionField f : res.getLogicFields()) {
136  if (f instanceof DisplacementField) {
137  gData.addDisplacements((DisplacementField) f, res.getNumParts());
138  }
139  }
140  simres = res;
141  numFrames = res.getNumParts();
142  }
143 
144  // /**
145  // * Checks if the logical solution field is constant or not.
146  // *
147  // * @param fieldnr
148  // * @return
149  // */
150  // public boolean isConstantFeature(int fieldnr) {
151  // return fieldColors != null ? fieldColors.get(fieldnr).isConstant() :
152  // true;
153  // }
154 
165  // Clear old colors
166  visFeatures.clear();
167  if (simres.getLogicFields() != null) {
168  // For displacement-only we add an default-color field
169  if (simres.hasDisplacements() && simres.getNumValueFields() == 1) {
170  visFeatures.add(new VisualFeature("Displacements", cg.getDefaultColor(gData.getNumVertices()
171  * simres.getNumParts()), null));
172  }
173  for (int fieldNr = 0; fieldNr < simres.getLogicFields().size(); fieldNr++) {
174  LogicSolutionField f = simres.getLogicFields().get(fieldNr);
175  if (f.isConstant()) {
176  Log.d("VisData", "Using default colors " + Arrays.toString(cg.getDefaultColor(1))
177  + " for constant logical field '" + f.descriptor + "'");
178  visFeatures.add(new VisualFeature(f.descriptor.Name + " (constant)",
179  cg.getDefaultColor(f.getSize()), f));
180  } else {
181  /*
182  * Check if the colors have to be mapped from element to vertex values
183  */
184  Log.d("VisData",
185  "Computing visual features for logical field '" + f.descriptor + "' of size " + f.getSize());
186  /*
187  * Decide which feature to present/compute depending on logical field
188  */
189  for (VisualFeature vf : f.getVisualFeatures(cg)) {
190  visFeatures.add(vf);
191  }
192  }
193  }
194  } else {
195  Log.w("VisData",
196  "No solution fields given, using default color data " + Arrays.toString(cg.getDefaultColor(1))
197  + " for " + gData.getNumVertices() + " vertices");
198  visFeatures.add(new VisualFeature("No field data", cg.getDefaultColor(gData.getNumVertices()), null));
199  }
200  }
201 
202  // private float[] getColors(ColorGenerator cg, float[] values, boolean
203  // convert) {
204  // float[] colors = cg.computeColors(values);
205  // if (convert) {
206  // Log.d("VisualizationData",
207  // "Converting element color data to vertex color data");
208  // colors = elementToVertexColors(colors);
209  // }
210  // return colors;
211  // }
212 
213  public FloatBuffer getFloatBuffer() {
214  return floatBuf;
215  }
216 
217  public ShortBuffer getShortBuffer() {
218  return shortBuf;
219  }
220 }
abstract int getSize()
Returns the number of graphical elements (nodes/vertices or elements/faces) that this field contains ...
The displacement field is a logical solution field describing displacements of geometry nodes/vertice...
VisualFeature getVisualizationFeature(int featureNr)
Represents a logical solution field of a simulation.
void useResult(SimulationResult res)
static ShortBuffer createShortBuffer(int size)
Allocates short and float buffers for the rendering process and sets the position to zero...
Represents the results of a simulation.
static final int FLOAT_MAX
The default size for the float buffers.
abstract VisualFeature[] getVisualFeatures(ColorGenerator cg)
Abstract method that returns all available visual features for a logical solution field...
int getNumParts()
The number of parts in each LogicSolutionField.
static FloatBuffer createFloatBuffer()
Creates the default float buffer of size FLOAT_MAX.
VisualizationData(GeometryData fGeo, FloatBuffer fBuf, ShortBuffer sBuf)
float[] getDefaultColor(int size)
Returns an array with &quot;size&quot; default colors (effectively 4*size RGBT values)
static ShortBuffer createShortBuffer()
Creates the default float buffer of size FLOAT_MAX.
Simple class for feature that can be visualized.
A container class for all model visual data.
void computeVisualFeatures(ColorGenerator cg)
Checks if the logical solution field is constant or not.
Provides a Log class imitating the Android Log class when not used on android systems.
Definition: Log.java:11
static FloatBuffer createFloatBuffer(int size)
Allocates short and float buffers for the rendering process and sets the position to zero...
This is a container class for all geometry-related data of a reduced model.
The color generator is used to produce RGBA (RGB+Alpha) values from a given array of floats...
abstract boolean isConstant()
Convenience method to determine if the solution field is constant in value.
List< LogicSolutionField > getLogicFields()
static final int SHORT_MAX
The default size for the short buffers.
int getNumVertices()
The number of (original) vertices of the geometry.