use of org.pepsoft.util.ProgressReceiver.OperationCancelled in project WorldPainter by Captain-Chaos.
the class FillDialog method fillWithLayer.
private void fillWithLayer(ProgressReceiver progressReceiver) throws UnsupportedOperationException, OperationCancelled {
Layer layer = (Layer) comboBoxSetLayer.getSelectedItem();
if (layer.getDataSize() == Layer.DataSize.NIBBLE) {
int baseLayerValue = Math.round((sliderLayerValue.getValue() + 2) / 6.667f);
dimension.visitTiles().forFilter(filter).andDo(tile -> {
final int worldTileX = tile.getX() << TILE_SIZE_BITS;
final int worldTileY = tile.getY() << TILE_SIZE_BITS;
for (int x = 0; x < TILE_SIZE; x++) {
for (int y = 0; y < TILE_SIZE; y++) {
int layerValue;
if (filter == null) {
layerValue = baseLayerValue;
} else {
layerValue = (int) (filter.modifyStrength(worldTileX | x, worldTileY | y, 1.0f) * baseLayerValue);
}
if (tile.getLayerValue(layer, x, y) < layerValue) {
tile.setLayerValue(layer, x, y, layerValue);
}
}
}
}, progressReceiver);
} else if (layer.getDataSize() == Layer.DataSize.BIT) {
dimension.visitTiles().forFilter(filter).andDo(tile -> {
final int worldTileX = tile.getX() << TILE_SIZE_BITS;
final int worldTileY = tile.getY() << TILE_SIZE_BITS;
for (int x = 0; x < TILE_SIZE; x++) {
for (int y = 0; y < TILE_SIZE; y++) {
boolean set;
if (filter == null) {
set = true;
} else {
float strength = filter.modifyStrength(worldTileX | x, worldTileY | y, 1.0f);
set = (strength > 0.95f) || (Math.random() < strength);
}
if (set && (!tile.getBitLayerValue(layer, x, y))) {
tile.setBitLayerValue(layer, x, y, true);
}
}
}
}, progressReceiver);
} else if (layer.getDataSize() == Layer.DataSize.BIT_PER_CHUNK) {
dimension.visitTiles().forFilter(filter).andDo(tile -> {
final int worldTileX = tile.getX() << TILE_SIZE_BITS;
final int worldTileY = tile.getY() << TILE_SIZE_BITS;
for (int x = 0; x < TILE_SIZE; x += 16) {
for (int y = 0; y < TILE_SIZE; y += 16) {
boolean set;
if (filter == null) {
set = true;
} else {
float strength = filter.modifyStrength(worldTileX | x, worldTileY | y, 1.0f);
set = (strength > 0.95f) || (Math.random() < strength);
}
if (set && (!tile.getBitLayerValue(layer, x, y))) {
tile.setBitLayerValue(layer, x, y, true);
}
}
}
}, progressReceiver);
} else {
throw new UnsupportedOperationException();
}
}
use of org.pepsoft.util.ProgressReceiver.OperationCancelled in project WorldPainter by Captain-Chaos.
the class FillDialog method invertLayer.
private void invertLayer(ProgressReceiver progressReceiver) throws UnsupportedOperationException, OperationCancelled {
Layer layer = (Layer) comboBoxInvertLayer.getSelectedItem();
if (layer.getDataSize() == Layer.DataSize.NIBBLE) {
dimension.visitTiles().forFilter(filter).andDo(tile -> {
final int worldTileX = tile.getX() << TILE_SIZE_BITS;
final int worldTileY = tile.getY() << TILE_SIZE_BITS;
for (int x = 0; x < TILE_SIZE; x++) {
for (int y = 0; y < TILE_SIZE; y++) {
boolean set;
if (filter == null) {
set = true;
} else {
float strength = filter.modifyStrength(worldTileX | x, worldTileY | y, 1.0f);
set = (strength > 0.95f) || (Math.random() < strength);
}
if (set) {
tile.setLayerValue(layer, x, y, 15 - tile.getLayerValue(layer, x, y));
}
}
}
}, progressReceiver);
} else if (layer.getDataSize() == Layer.DataSize.BIT) {
dimension.visitTiles().forFilter(filter).andDo(tile -> {
final int worldTileX = tile.getX() << TILE_SIZE_BITS;
final int worldTileY = tile.getY() << TILE_SIZE_BITS;
for (int x = 0; x < TILE_SIZE; x++) {
for (int y = 0; y < TILE_SIZE; y++) {
boolean set;
if (filter == null) {
set = true;
} else {
float strength = filter.modifyStrength(worldTileX | x, worldTileY | y, 1.0f);
set = (strength > 0.95f) || (Math.random() < strength);
}
if (set) {
tile.setBitLayerValue(layer, x, y, !tile.getBitLayerValue(layer, x, y));
}
}
}
}, progressReceiver);
} else if (layer.getDataSize() == Layer.DataSize.BIT_PER_CHUNK) {
dimension.visitTiles().forFilter(filter).andDo(tile -> {
final int worldTileX = tile.getX() << TILE_SIZE_BITS;
final int worldTileY = tile.getY() << TILE_SIZE_BITS;
for (int x = 0; x < TILE_SIZE; x += 16) {
for (int y = 0; y < TILE_SIZE; y += 16) {
boolean set;
if (filter == null) {
set = true;
} else {
float strength = filter.modifyStrength(worldTileX | x, worldTileY | y, 1.0f);
set = (strength > 0.95f) || (Math.random() < strength);
}
if (set) {
tile.setBitLayerValue(layer, x, y, !tile.getBitLayerValue(layer, x, y));
}
}
}
}, progressReceiver);
} else {
throw new UnsupportedOperationException();
}
}
use of org.pepsoft.util.ProgressReceiver.OperationCancelled in project WorldPainter by Captain-Chaos.
the class ImportHeightMapDialog method getImportedWorld.
public World2 getImportedWorld() {
if (currentDimension != null) {
throw new IllegalStateException();
}
final HeightMapImporter importer = new HeightMapImporter();
HeightMap heightMap = new BitmapHeightMap(selectedFile.getName(), image, 0, selectedFile, false, false);
int scale = (Integer) spinnerScale.getValue();
int offsetX = (Integer) spinnerOffsetX.getValue();
int offsetY = (Integer) spinnerOffsetY.getValue();
if ((scale != 100) || (offsetX != 0) || (offsetY != 0)) {
((BitmapHeightMap) heightMap).setSmoothScaling(true);
heightMap = new TransformingHeightMap(heightMap.getName() + " transformed", heightMap, scale, scale, offsetX, offsetY, 0);
}
if (checkBoxInvert.isSelected()) {
if (image.getSampleModel().getSampleSize(0) == 16) {
heightMap = new DifferenceHeightMap(new ConstantHeightMap(65535f), heightMap);
} else {
heightMap = new DifferenceHeightMap(new ConstantHeightMap(255f), heightMap);
}
}
importer.setHeightMap(heightMap);
importer.setImageFile(selectedFile);
String name = selectedFile.getName();
int p = name.lastIndexOf('.');
if (p != -1) {
name = name.substring(0, p);
}
importer.setName(name);
importer.setTileFactory(tileFactory);
importer.setMaxHeight(Integer.parseInt((String) comboBoxHeight.getSelectedItem()));
importer.setImageLowLevel((Integer) spinnerImageLow.getValue());
importer.setImageHighLevel((Integer) spinnerImageHigh.getValue());
importer.setWorldLowLevel((Integer) spinnerWorldLow.getValue());
importer.setWorldWaterLevel((Integer) spinnerWorldMiddle.getValue());
importer.setWorldHighLevel((Integer) spinnerWorldHigh.getValue());
importer.setVoidBelowLevel(checkBoxVoid.isSelected() ? ((Integer) spinnerVoidBelow.getValue()) : 0);
World2 world = ProgressDialog.executeTask(this, new ProgressTask<World2>() {
@Override
public String getName() {
return "Importing height map";
}
@Override
public World2 execute(ProgressReceiver progressReceiver) throws OperationCancelled {
return importer.importToNewWorld(progressReceiver);
}
}, false);
Configuration.getInstance().setHeightMapsDirectory(selectedFile.getParentFile());
return world;
}
Aggregations