I created a class to generate a Circle Brush to edit the terrain. This class giving us something like this :
[java]
package mygame;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public abstract class TerrainBrush
{
public final int brushSize = 128; //Maximum size of the texture
public int[] brushHeight = new int[brushSizebrushSize];
public abstract void generateBrush();
public TerrainBrush(){
}
public void negate(){
for(int i = 0; i<brushHeight.length; i++){
brushHeight = -(brushHeight - 255);
}
}
public void reduceOpacity(int value){
for(int i = 0; i<brushHeight.length; i++){
brushHeight = brushHeight - value;
if(brushHeight < 0){
brushHeight = 0;
}
}
}
protected void createImage(){
BufferedImage tempImage = new BufferedImage(brushSize,brushSize,BufferedImage.TYPE_INT_RGB);
for(int x = 0; x<brushSize;x++){
for(int y = 0; y<brushSize; y++){
int tempColor = brushHeight[xbrushSize+y];
tempImage.setRGB(x, y, new Color(tempColor,tempColor,tempColor).getRGB());
}
}
try {
// Save as JPEG
File file = new File(“newimage.jpg”);
ImageIO.write(tempImage, “jpg”, file);
} catch (IOException e) {}
}
}
[/java]
[java]
package mygame;
import com.jme3.math.FastMath;
public class CircleBrush extends TerrainBrush
{
private int outerRadius;
private int innerRadius;
public CircleBrush(int oRad,int iRad){
super();
changeBrush(oRad,iRad);
}
public void changeBrush(int oRad, int iRad){
if(oRad > brushSize/2){
outerRadius = brushSize/2;
}
else{
this.outerRadius = oRad;
}
if(innerRadius+10 >= outerRadius){
this.innerRadius = outerRadius - 10;
}
else{
this.innerRadius = iRad;
}
generateBrush();
}
@Override
public void generateBrush() {
int ramp = outerRadius - innerRadius;
for(int x = 0; x<brushSize; x++){
for(int y = 0; y<brushSize; y++){
float distance = FastMath.sqrt(FastMath.sqr(x-brushSize/2)+FastMath.sqr(y-brushSize/2));
if(FastMath.sqr(x-brushSize/2)+FastMath.sqr(y-brushSize/2) <= FastMath.sqr(innerRadius)){
brushHeight[xbrushSize+y] = 255;
}
else{
if(FastMath.sqr(x-brushSize/2)+FastMath.sqr(y-brushSize/2) <= FastMath.sqr(outerRadius)){
float value = (int) (distance - innerRadius);
value = value/ramp;
value = FastMath.sqr(value);
value = value255;
brushHeight[xbrushSize+y] = (int) (255 - value);
if(brushHeight[xbrushSize+y] < 0){
brushHeight[xbrushSize+y] = 0;
}
}
else{
brushHeight[xbrushSize+y] = 0;
}
}
}
}
}
}
[/java]
I’ve want your point of view to start comment.