Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions examples/processes/voxelizers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
heightmaps:
ground:
default: 0
water:
default: 0

forEachTile:

fetchAltitude:
type: fetchData
modelType: altitude
provider:
type: wmsFloat
url: https://data.geopf.fr/wms-r/wms
layer: RGEALTI-MNT_PYR-ZIP_FXX_LAMB93_WMS
processor:
type: floatMatrix
retry: 5
retryDelay: 1

setAltitude:
after: fetchAltitude
type: populateHeightmap
models:
type: altitude
heightmap: ground

setSpawn:
after: setAltitude
type: setSpawn
heightmap:
sum: [ground, 1]
x: 0
y: 0

renderGround:
after: setAltitude
type: renderHeightmap
at: ground
place:
structure:
- put: *voxel-grass
at: [0, 0, 0]
- put: *voxel-dirt
at: [0, 0, -3..-1]
- put: *voxel-stone
at: [0, 0, -20..-4]

fetchBuildings:
type: fetchData
modelType: buildings
provider:
type: wfs
url: https://data.geopf.fr/wfs/wfs
features: BDTOPO_V3:batiment
maxFeaturesPerQuery: 500

renderBuildings:
after: fetchBuildings
type: place
models:
type: buildings
voxels:
type: setAltitude
voxels:
type: surface
altitude: ground
place: default:sand

Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import com.ignfab.minalac.generator.parameters.tasks.FillBetweenHeightmapAndMetadataTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.HeightmapStatsTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.NoOperationTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.PlaceTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.PopulateHeightmapTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.RenderBuildingsTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.RenderHeightmapTaskParams;
Expand All @@ -51,6 +52,8 @@
import com.ignfab.minalac.generator.parameters.tasks.ScheduleTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.SequenceTaskParams;
import com.ignfab.minalac.generator.parameters.tasks.SetSpawnTaskParams;
import com.ignfab.minalac.generator.parameters.voxelizers.voxelizers2d.Voxelizer2dParams;
import com.ignfab.minalac.generator.parameters.voxelizers.voxelizers3d.Voxelizer3dParams;
import com.ignfab.minalac.generator.utils.FileHelpers;
import com.ignfab.minalac.generator.utils.execution.TaskFailedException;
import com.ignfab.minalac.generator.utils.modules.ModulesLoader;
Expand Down Expand Up @@ -124,6 +127,7 @@ public static void main(String[] args) throws FactoryException, InterruptedExcep
parser.registerParams("computeHeightmapStats", HeightmapStatsTaskParams.class);
parser.registerParams("fetchData", FetchDataTaskParams.class);
parser.registerParams("fillBetweenHeightmapAndMetadata", FillBetweenHeightmapAndMetadataTaskParams.class);
parser.registerParams("place", PlaceTaskParams.class);
parser.registerParams("populateHeightmap", PopulateHeightmapTaskParams.class);
parser.registerParams("renderBuildings", RenderBuildingsTaskParams.class);
parser.registerParams("renderHeightmap", RenderHeightmapTaskParams.class);
Expand Down Expand Up @@ -155,6 +159,9 @@ public static void main(String[] args) throws FactoryException, InterruptedExcep
parser.registerParams("geometryBuffer", JTSGeometryBufferPostProcessorParams.class);
parser.registerParams("remap", MetadataValueMappingPostProcessorParams.class);

Voxelizer2dParams.register(parser);
Voxelizer3dParams.register(parser);

modules.registerParams(parser);

Generation generation = parser.parse(parameters).create(destination, maxTileSize);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,22 @@ public class Generation {
private final Collection<WorldBBox2d> tiles;

private final Iterator<GenerationTile> tileIterator;

private static Generation currentGeneration = null;

/**
* @return current generation.
*/
public static Generation current() {
if (currentGeneration == null)
throw new IllegalStateException("No current generation!");
return currentGeneration;
}

/* package private */ static void setCurrent(Generation generation) {
currentGeneration = generation;
}

/**
* Constructs a new generation context.
* It sets {@code VoxelWorld}'s limits in way the center is at {@code WorldCoords2d} (0, 0).
Expand Down Expand Up @@ -115,6 +131,9 @@ public Generation(
voxelToCrs.rotate(angle);
voxelToCrs.scale(horizontalScale, horizontalScale);
voxelToCrs.translate(centerX, centerY);

// TODO: MANAGE THAT WITH SCOPED VALUES
setCurrent(this);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.ignfab.minalac.generator.utils.coordinates.WorldToMapConverter;
import com.ignfab.minalac.generator.utils.world2d.WorldBBox2d;
import com.ignfab.minalac.generator.utils.world2d.WorldCoords2d;
import com.ignfab.minalac.generator.voxelization.Matrix2d;
import com.ignfab.minalac.generator.voxelization.matrix2d.Matrix2d;

/**
* A model based on a matrix of floats (usually a heightmap model).
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.ignfab.minalac.generator.parameters.tasks;

import java.beans.ConstructorProperties;

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;

import com.ignfab.minalac.generator.generation.Generation;
import com.ignfab.minalac.generator.parameters.placeables.PlaceableParams;
import com.ignfab.minalac.generator.parameters.voxelizers.voxelizers3d.Voxelizer3dParams;
import com.ignfab.minalac.generator.tasks.PlaceTask;
import com.ignfab.minalac.generator.utils.execution.Task;

/**
* Parameters for a {@link PlaceTask}.
*/
public class PlaceTaskParams extends ModelTaskParams {

/**
* Voxelizer to use to determine where to place (required).
*/
@JsonSetter(nulls = Nulls.FAIL)
public Voxelizer3dParams voxels;

/**
* Placeable to place at points (required).
*/
@JsonSetter(nulls = Nulls.FAIL)
public PlaceableParams place;

/**
* Constructor used to ensure that the required fields are present during deserialization.
*
* @param voxels where to place
* @param place what to place
*/
@ConstructorProperties({ "voxels", "place"})
public PlaceTaskParams(Voxelizer3dParams voxels, PlaceableParams place) {
this.voxels = voxels;
this.place = place;
}

@Override
public void validate() {
super.validate();
voxels.validate();
place.validate();
}

@Override
public Task create(Generation generation) {
return new PlaceTask(
models.create(),
voxels.create(),
place.create(generation.seed())
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.ignfab.minalac.generator.parameters.voxelizers.voxelizers2d;

import com.ignfab.minalac.generator.voxelization.Voxelizer2d;
import com.ignfab.minalac.generator.voxelization.shape2d.voxelizer.PointVoxelizer2d;

/**
* Parameters for a {@link PointVoxelizer2d}.
*/
public class PointVoxelizer2dParams extends Voxelizer2dParams {

@Override
public Voxelizer2d create() {
return new PointVoxelizer2d();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.ignfab.minalac.generator.parameters.voxelizers.voxelizers2d;

import com.ignfab.minalac.generator.voxelization.Voxelizer2d;
import com.ignfab.minalac.generator.voxelization.shape2d.voxelizer.SurfaceVoxelizer2d;

/**
* Parameters for a {@link SurfaceVoxelizer2d}.
*/
public class SurfaceVoxelizer2dParams extends Voxelizer2dParams {

@Override
public Voxelizer2d create() {
return new SurfaceVoxelizer2d();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.ignfab.minalac.generator.parameters.voxelizers.voxelizers2d;

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;

import com.ignfab.minalac.generator.voxelization.Voxelizer2d;
import com.ignfab.minalac.generator.voxelization.shape2d.voxelizer.ThickLinearIndexedVoxelizer2d;

/**
* Parameters for a {@link ThickLinearIndexedVoxelizer2d}.
*/
public class ThickLineVoxelizer2dParams extends Voxelizer2dParams {

/**
* Thickness of the line, in voxels.
*/
@JsonSetter(nulls = Nulls.SKIP)
public double thickness = 1.0;

@Override
public Voxelizer2d create() {
return new ThickLinearIndexedVoxelizer2d(thickness);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.ignfab.minalac.generator.parameters.voxelizers.voxelizers2d;

import com.ignfab.minalac.generator.voxelization.Voxelizer2d;
import com.ignfab.minalac.generator.voxelization.shape2d.voxelizer.ThinLinearVoxelizer2d;

/**
* Parameters for a {@link ThinLinearVoxelizer2dParams}.
*/
public class ThinLinearVoxelizer2dParams extends Voxelizer2dParams {

@Override
public Voxelizer2d create() {
return new ThinLinearVoxelizer2d();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.ignfab.minalac.generator.parameters.voxelizers.voxelizers2d;

import java.beans.ConstructorProperties;

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;

import com.ignfab.minalac.generator.parameters.voxelizers.voxelizers3d.Voxelizer3dParams;
import com.ignfab.minalac.generator.voxelization.ToVoxelizer2d;
import com.ignfab.minalac.generator.voxelization.Voxelizer2d;

/**
* Parameters for a {@link ToVoxelizer2d}.
*/
public class ToVoxelizer2dParams extends Voxelizer2dParams {
/**
* Voxels (from voxelizer) to turn to 2d.
*/
@JsonSetter(nulls = Nulls.FAIL)
public Voxelizer3dParams voxels;

/**
* Constructor used to ensure that the required fields are present during deserialization.
*
* @param voxels voxelizer to transform
*/
@ConstructorProperties({ "voxels" })
public ToVoxelizer2dParams(Voxelizer3dParams voxels) {
this.voxels = voxels;
}

@Override
public void validate() {
voxels.validate();
}

@Override
public Voxelizer2d create() {
return new ToVoxelizer2d(voxels.create());
}
}
Loading
Loading