📄 gemlayoutcontroller.java
字号:
package org.jgraph.layout;
import java.util.Properties;
import javax.swing.JFrame;
import org.jgraph.layout.LayoutAlgorithm;
import org.jgraph.layout.LayoutController;
import org.jgraph.layout.GEMLayoutAlgorithm;
/**
* @author winkler
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
/******************************************************************************/
/*############################################################################*/
/*############################################################################*/
/*############################################################################*/
/*############################################################################*/
/******************************************************************************/
public class GEMLayoutController implements LayoutController {
public final static String KEY_TITLE = "GEM";
public final static String KEY_CONFIG_NAME = "CONFIG_NAME";
public final static String KEY_INIT_TEMPERATURE = "init temperature";
public final static String KEY_MIN_TEMPERATURE = "min temperature";
public final static String KEY_MAX_TEMPERATURE = "max temperature";
public final static String KEY_PREF_EDGE_LENGTH = "preferred Edge length";
public final static String KEY_GRAVITATION = "gravitation to barycenter";
public final static String KEY_RANDOM_IMPULSE_RANGE = "random impulse range";
public final static String KEY_COMPUTE_PERMUTATION = "compute permutation";
public final static String KEY_END_CONDITION_AVERAGE = "end condition average";
public final static String KEY_AVOID_OVERLAPPING = "avoid overlapping";
public final static String KEY_OVERLAPPING_DETECTION_WIDTH = "overlapping detection width";
public final static String KEY_OVERLAPPING_PREF_DISTANCE = "overlapping preferred distance";
public final static String KEY_ALPHA_OSC = "alpha oscillation";
public final static String KEY_ALPHA_ROT = "alpha rotation";
public final static String KEY_SIGMA_OSC = "sigma oscillation";
public final static String KEY_SIGMA_ROT = "sigma rotation";
public final static String KEY_OPTIMIZE_ALGORITHM_ENABLED = "optimization algorithm enabled";
public final static String KEY_OPTIMIZE_ALGORITHM_CONFIG = "optimization algorithm configuration";
public final static String KEY_LAYOUT_UPDATE_INIT_TEMPERATURE = "Layout Update init temperature";
public final static String KEY_LAYOUT_UPDATE_MIN_TEMPERATURE = "Layout Update min temperature";
public final static String KEY_LAYOUT_UPDATE_MAX_TEMPERATURE = "Layout Update max temperature";
public final static String KEY_LAYOUT_UPDATE_PREF_EDGE_LENGTH = "Layout Update preferred Edge length";
public final static String KEY_LAYOUT_UPDATE_GRAVITATION = "Layout Update gravitation to barycenter";
public final static String KEY_LAYOUT_UPDATE_RANDOM_IMPULSE_RANGE = "Layout Update random impulse range";
public final static String KEY_LAYOUT_UPDATE_COMPUTE_PERMUTATION = "Layout Update compute permutation";
public final static String KEY_LAYOUT_UPDATE_END_CONDITION_AVERAGE = "Layout Update end condition average";
public final static String KEY_LAYOUT_UPDATE_AVOID_OVERLAPPING = "Layout Update avoid overlapping";
public final static String KEY_LAYOUT_UPDATE_OVERLAPPING_DETECTION_WIDTH = "Layout Update overlapping detection width";
public final static String KEY_LAYOUT_UPDATE_OVERLAPPING_PREF_DISTANCE = "Layout Update overlapping preferred distance";
public final static String KEY_LAYOUT_UPDATE_ALPHA_ROT = "Layout Update alpha oscillation";
public final static String KEY_LAYOUT_UPDATE_ALPHA_OSC = "Layout Update alpha rotation";
public final static String KEY_LAYOUT_UPDATE_SIGMA_ROT = "Layout Update sigma oscillation";
public final static String KEY_LAYOUT_UPDATE_SIGMA_OSC = "Layout Update sigma rotation";
public final static String KEY_LAYOUT_UPDATE_ENABLED = "Layout Update enabled";
public final static String KEY_LAYOUT_UPDATE_METHOD = "Layout Update method";
public final static String KEY_LAYOUT_UPDATE_OPTIMIZE_ALGORITHM_ENABLED = "Layout Update optimization algorithm enabled";
public final static String KEY_LAYOUT_UPDATE_OPTIMIZE_ALGORITHM_CONFIG = "Layout Update optimization algorithm configuration";
public final static String KEY_LAYOUT_UPDATE_METHOD_NEIGHBORS_ONLY = "Neighbors only";
public final static String KEY_LAYOUT_UPDATE_METHOD_PERIMETERS = "Perimeter";
public final static String KEY_LAYOUT_UPDATE_DEPTH = "Layout Update depth";
public final static String KEY_LAYOUT_UPDATE_METHOD_PERIMETER_INIT_SIZE = "Layout Update method perimeter initial size";
public final static String KEY_LAYOUT_UPDATE_METHOD_PERIMETER_SIZE_INC = "Layout Update method perimeter size increase value";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_ENABLED = "clustering enabled";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_INIT_TEMPERATURE = "cluster init temperature";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_FORCE_SCALING_FACTOR = "clustering force scaling factor";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_FACTOR = "cluster size factor";
protected Properties[] configs;
protected Properties configuration;
protected GEMLayoutConfigurationDialog dialog;
protected AnnealingLayoutController optimizeController;
protected AnnealingLayoutController lu_optimizeController;
/******************************************************************************/
public GEMLayoutController(){
optimizeController = new AnnealingLayoutController(true);
lu_optimizeController = new AnnealingLayoutController(true);
configs = new Properties[2];
for( int i = 0; i < configs.length; i++ )
configs[i] = new Properties();
Properties optimizeConfig = optimizeController.getConfiguration();
optimizeConfig.put(AnnealingLayoutController.KEY_CONFIG_NAME,KEY_TITLE+" optimization values");
optimizeConfig.put(AnnealingLayoutController.KEY_COST_FUNCTION_CONFIG,"110111");
optimizeConfig.put(AnnealingLayoutController.KEY_INIT_TEMPERATURE,"40.0");
optimizeConfig.put(AnnealingLayoutController.KEY_MIN_DISTANCE,"100.0");
optimizeConfig.put(AnnealingLayoutController.KEY_TEMP_SCALE_FACTOR,"0.85");
optimizeController.setConfiguration(optimizeConfig);
Properties lu_optimizeConfig = lu_optimizeController.getConfiguration();
lu_optimizeConfig.put(AnnealingLayoutController.KEY_CONFIG_NAME,KEY_TITLE+" optimization values");
lu_optimizeConfig.put(AnnealingLayoutController.KEY_COST_FUNCTION_CONFIG,"110111");
lu_optimizeConfig.put(AnnealingLayoutController.KEY_INIT_TEMPERATURE,"40.0");
lu_optimizeConfig.put(AnnealingLayoutController.KEY_MIN_DISTANCE,"100.0");
lu_optimizeConfig.put(AnnealingLayoutController.KEY_TEMP_SCALE_FACTOR,"0.85");
lu_optimizeController.setConfiguration(lu_optimizeConfig);
configs[0].put(KEY_CONFIG_NAME ,"Default Values");
configs[0].put(KEY_INIT_TEMPERATURE , "50.0" );
configs[0].put(KEY_MIN_TEMPERATURE , "3.0" );
configs[0].put(KEY_MAX_TEMPERATURE ,"256.0" );
configs[0].put(KEY_PREF_EDGE_LENGTH ,"100.0" );
configs[0].put(KEY_GRAVITATION , "0.0625");
configs[0].put(KEY_RANDOM_IMPULSE_RANGE , "32.0" );
configs[0].put(KEY_COMPUTE_PERMUTATION , "true" );
configs[0].put(KEY_END_CONDITION_AVERAGE , "true" );
configs[0].put(KEY_AVOID_OVERLAPPING , "false" );
configs[0].put(KEY_OVERLAPPING_DETECTION_WIDTH, "40.0");
configs[0].put(KEY_OVERLAPPING_PREF_DISTANCE, "40.0");
configs[0].put(KEY_ALPHA_OSC ,String.valueOf(Math.PI/2.0));
configs[0].put(KEY_ALPHA_ROT ,String.valueOf(Math.PI/3.0));
configs[0].put(KEY_SIGMA_OSC ,String.valueOf(1.0/3.0)); //a higher value leads to a faster falling temperature
configs[0].put(KEY_SIGMA_ROT ,String.valueOf(1.0/2.0)); //as smaller this value is, the smaller the temperature alteration
configs[0].put(KEY_OPTIMIZE_ALGORITHM_ENABLED,"false");
configs[0].put(KEY_OPTIMIZE_ALGORITHM_CONFIG,optimizeConfig.clone());
configs[0].put(KEY_LAYOUT_UPDATE_INIT_TEMPERATURE ,"10.0");
configs[0].put(KEY_LAYOUT_UPDATE_MIN_TEMPERATURE ,"3.0");
configs[0].put(KEY_LAYOUT_UPDATE_MAX_TEMPERATURE ,"256.0");
configs[0].put(KEY_LAYOUT_UPDATE_PREF_EDGE_LENGTH ,"100.0");
configs[0].put(KEY_LAYOUT_UPDATE_GRAVITATION ,"0.0625");
configs[0].put(KEY_LAYOUT_UPDATE_RANDOM_IMPULSE_RANGE ,"32.0");
configs[0].put(KEY_LAYOUT_UPDATE_COMPUTE_PERMUTATION ,"true");
configs[0].put(KEY_LAYOUT_UPDATE_END_CONDITION_AVERAGE ,"true");
configs[0].put(KEY_LAYOUT_UPDATE_AVOID_OVERLAPPING ,"false");
configs[0].put(KEY_LAYOUT_UPDATE_OVERLAPPING_DETECTION_WIDTH,"40.0");
configs[0].put(KEY_LAYOUT_UPDATE_OVERLAPPING_PREF_DISTANCE, "40.0");
configs[0].put(KEY_LAYOUT_UPDATE_ALPHA_OSC ,String.valueOf(Math.toRadians(90.0)));
configs[0].put(KEY_LAYOUT_UPDATE_ALPHA_ROT ,String.valueOf(Math.toRadians(60.0)));
configs[0].put(KEY_LAYOUT_UPDATE_SIGMA_OSC ,String.valueOf(1.0/3.0));
configs[0].put(KEY_LAYOUT_UPDATE_SIGMA_ROT ,String.valueOf(1.0/2.0));
configs[0].put(KEY_LAYOUT_UPDATE_ENABLED ,"false");
configs[0].put(KEY_LAYOUT_UPDATE_DEPTH ,"1");
configs[0].put(KEY_LAYOUT_UPDATE_METHOD ,KEY_LAYOUT_UPDATE_METHOD_NEIGHBORS_ONLY);
configs[0].put(KEY_LAYOUT_UPDATE_OPTIMIZE_ALGORITHM_ENABLED,"false");
configs[0].put(KEY_LAYOUT_UPDATE_OPTIMIZE_ALGORITHM_CONFIG,lu_optimizeConfig.clone());
configs[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_ENABLED ,"false");
configs[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_INIT_TEMPERATURE ,"15.0");
configs[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_FORCE_SCALING_FACTOR ,"0.1");
configs[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_FACTOR ,"8.0");
configs[0].put(KEY_LAYOUT_UPDATE_METHOD_PERIMETER_INIT_SIZE ,"100.0");
configs[0].put(KEY_LAYOUT_UPDATE_METHOD_PERIMETER_SIZE_INC ,"20.0");
configs[1].put(KEY_CONFIG_NAME ,"Long running Values");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -