/*******************************************************************************
* Copyright (c) 2010 Oak Ridge National Laboratory.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.eclipse.nebula.visualization.widgets.figures;
import java.beans.PropertyDescriptor;
import org.eclipse.draw2d.Figure;
import org.eclipse.nebula.visualization.widgets.datadefinition.ColorMap;
import org.eclipse.nebula.visualization.widgets.datadefinition.ColorMap.PredefinedColorMap;
import org.eclipse.nebula.visualization.widgets.figures.IntensityGraphFigure;
import org.eclipse.swt.widgets.Display;
/**
* @author Xihui Chen
*
*/
public class IntensityGraphManualTest extends AbstractWidgetTest{
private static final int DataHeight = 1024;
private static final int DataWidth = 1280;
public static int count=0;
public static int count2=0;
long start = System.nanoTime();
@Override
public Figure createTestWidget() {
final IntensityGraphFigure figure = new IntensityGraphFigure();
final short[] simuData = new short[DataWidth*DataHeight*2];
final short[] data = new short[DataWidth*DataHeight];
int seed = count++;
for(int i=0; i<DataHeight; i++){
for(int j=0; j<DataWidth; j++){
int x = j-DataWidth;
int y = i-DataHeight;
int p = (int) Math.sqrt(x*x + y*y);
simuData[i*DataWidth + j] = (short) ( Math.sin(p*2*Math.PI/DataWidth + seed*Math.PI/100)*100);
}
}
Thread t = new Thread(new Runnable() {
public void run() {
while (true) {
count++;
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// long nanoTime = System.nanoTime();
System.arraycopy(simuData, count%DataWidth, data, 0, DataWidth*DataHeight);
// System.out.println((System.nanoTime()-nanoTime)/1000000 + " generating "+ data[0] + "Count: " +count);
// start=System.nanoTime();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
// long nanoTime = 0;//System.nanoTime();
count2++;
figure.setDataArray(data);
// System.out.println(System.nanoTime()/1000 + " setting " + data[0] + "Count: " +count2);
}
});
}
}
});
t.start();
figure.setMax(100);
figure.setMin(-100);
figure.setDataHeight(DataHeight);
figure.setDataWidth(DataWidth);
figure.setColorMap(new ColorMap(PredefinedColorMap.JET, true, true));
return figure;
}
@Override
public String[] getPropertyNames() {
String[] superProps = super.getPropertyNames();
String[] myProps = new String[]{
"colorMap",
"cropBottom",
"cropLeft",
"cropRight",
"cropTop",
"dataArray",
"dataHeight",
"dataWidth",
"max",
"min",
"runMode",
"showRamp"
};
return concatenateStringArrays(superProps, myProps);
}
@Override
public Object generateTestData(PropertyDescriptor pd, Object seed) {
if(pd.getName().equals("dataArray") && seed != null && seed instanceof Integer){
double[] simuData = new double[65536];
for(int i=0; i<256; i++){
for(int j=0; j<256; j++){
int x = j-128;
int y = i-128;
int p = (int) Math.sqrt(x*x + y*y);
simuData[i*256 + j] = Math.sin(p*2*Math.PI/256 + (Integer)seed);
}
}
return simuData;
}else if(pd.getName().equals("dataWidth") || pd.getName().equals("dataHeight"))
return 256;
else if(pd.getName().equals("max"))
return 1;
else if(pd.getName().equals("min"))
return -1;
else if(pd.getName().equals("colorMap") && seed != null && seed instanceof Integer)
return new ColorMap(PredefinedColorMap.values()[(Integer)seed % 6 + 1], true, true);
return super.generateTestData(pd, seed);
}
@Override
public boolean isAutoTest() {
return false;
}
}