Skip to content

Commit

Permalink
Add a LOD selector to the viewer's options menu
Browse files Browse the repository at this point in the history
  • Loading branch information
tordanik committed Jul 14, 2023
1 parent b5ce9fc commit 0f0ab22
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.osm2world.viewer.control.actions;

import java.awt.event.ActionEvent;
import java.io.Serial;

import javax.swing.*;

import org.apache.commons.configuration.Configuration;
import org.osm2world.core.target.common.mesh.LevelOfDetail;
import org.osm2world.viewer.model.Data;
import org.osm2world.viewer.model.RenderOptions;
import org.osm2world.viewer.view.ViewerFrame;

public class SetLodAction extends AbstractAction {

@Serial
private static final long serialVersionUID = 1L;

LevelOfDetail lod;
ViewerFrame viewerFrame;
Data data;
RenderOptions renderOptions;

public SetLodAction(LevelOfDetail lod, ViewerFrame viewerFrame, Data data, RenderOptions renderOptions) {

super(lod.name());

putValue(SELECTED_KEY, lod == renderOptions.getLod());

this.lod = lod;
this.viewerFrame = viewerFrame;
this.data = data;
this.renderOptions = renderOptions;

}

@Override
public void actionPerformed(ActionEvent e) {

renderOptions.setLod(lod);

Configuration config = data.getConfig();
config.clearProperty("lod");
config.addProperty("lod", lod.ordinal());
data.setConfig(config);

putValue(SELECTED_KEY, lod == renderOptions.getLod());

}

}
23 changes: 15 additions & 8 deletions src/main/java/org/osm2world/viewer/model/Data.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,20 @@ public Configuration getConfig() {
return config;
}

/** updates the configuration */
public void setConfig(Configuration config) {

this.config = config;

ConfigUtil.parseFonts(config);

if (conversionResults != null) {
this.setChanged();
this.notifyObservers();
}

}

/** reloads the configuration from the config file */
public void reloadConfig() throws ConfigurationException {

Expand All @@ -45,14 +59,7 @@ public void reloadConfig() throws ConfigurationException {
fileConfig.setListDelimiter(';');
fileConfig.load(configFile);

this.config = fileConfig;

ConfigUtil.parseFonts(fileConfig);

if (conversionResults != null) {
this.setChanged();
this.notifyObservers();
}
this.setConfig(fileConfig);

}

Expand Down
12 changes: 12 additions & 0 deletions src/main/java/org/osm2world/viewer/model/RenderOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
import java.util.HashSet;
import java.util.Set;

import javax.annotation.Nullable;

import org.osm2world.core.map_elevation.creation.EleConstraintEnforcer;
import org.osm2world.core.map_elevation.creation.NoneEleConstraintEnforcer;
import org.osm2world.core.map_elevation.creation.TerrainInterpolator;
import org.osm2world.core.map_elevation.creation.ZeroInterpolator;
import org.osm2world.core.target.common.mesh.LevelOfDetail;
import org.osm2world.core.target.common.rendering.Camera;
import org.osm2world.core.target.common.rendering.Projection;
import org.osm2world.viewer.view.debug.DebugView;
Expand All @@ -22,6 +25,8 @@ public class RenderOptions {
private boolean wireframe = false;
private boolean backfaceCulling = true;

private @Nullable LevelOfDetail lod = null;

Class<? extends TerrainInterpolator> interpolatorClass = ZeroInterpolator.class;
Class<? extends EleConstraintEnforcer> enforcerClass = NoneEleConstraintEnforcer.class;

Expand All @@ -44,6 +49,13 @@ public void setBackfaceCulling(boolean backfaceCulling) {
this.backfaceCulling = backfaceCulling;
}

public @Nullable LevelOfDetail getLod() {
return lod;
}
public void setLod(LevelOfDetail lod) {
this.lod = lod;
}

public Class<? extends TerrainInterpolator> getInterpolatorClass() {
return interpolatorClass;
}
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/org/osm2world/viewer/view/ViewerFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import org.apache.commons.configuration.Configuration;
import org.osm2world.core.map_elevation.creation.*;
import org.osm2world.core.target.common.mesh.LevelOfDetail;
import org.osm2world.viewer.control.actions.*;
import org.osm2world.viewer.control.navigation.DefaultNavigation;
import org.osm2world.viewer.model.Data;
Expand Down Expand Up @@ -172,6 +173,17 @@ private void createMenuBar() {
JMenu subMenu = new JMenu("Options");
subMenu.setMnemonic(VK_O);

JMenu lodMenu = new JMenu("Level of Detail");
subMenu.add(lodMenu);

var lodGroup = new ButtonGroup();

for (LevelOfDetail lod : LevelOfDetail.values()) {
var item = new JRadioButtonMenuItem(new SetLodAction(lod, this, data, renderOptions));
lodGroup.add(item);
lodMenu.add(item);
}

JMenu interpolatorMenu = new JMenu("TerrainInterpolator");
subMenu.add(interpolatorMenu);

Expand Down

0 comments on commit 0f0ab22

Please sign in to comment.