Circle Brush and TerrainBrush

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[x
brushSize+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 = value
255;

brushHeight[xbrushSize+y] = (int) (255 - value);

if(brushHeight[x
brushSize+y] < 0){



brushHeight[xbrushSize+y] = 0;



}



}

else{



brushHeight[x
brushSize+y] = 0;



}



}



}

}



}



}

[/java]



I’ve want your point of view to start comment.