提交 2b137a91 编写于 作者: M Mathieu Bastian

Host appearance interpolator in function rather than in ranking

上级 12e3edd4
......@@ -188,13 +188,13 @@ public class AppearanceModelImpl implements AppearanceModel {
@Override
public void refreshGraphFunctions() {
if (!rankings.containsKey(getId("degree"))) {
rankings.put(getId("degree"), new DegreeRankingImpl(graph, defaultInterpolator));
rankings.put(getId("degree"), new DegreeRankingImpl(graph));
}
if (graph.isDirected()) {
if (!rankings.containsKey(getId("indegree"))) {
DirectedGraph directedGraph = (DirectedGraph) graph;
rankings.put(getId("indegree"), new InDegreeRankingImpl(directedGraph, defaultInterpolator));
rankings.put(getId("outdegree"), new OutDegreeRankingImpl(directedGraph, defaultInterpolator));
rankings.put(getId("indegree"), new InDegreeRankingImpl(directedGraph));
rankings.put(getId("outdegree"), new OutDegreeRankingImpl(directedGraph));
}
} else {
rankings.remove(getId("indegree"));
......@@ -207,7 +207,7 @@ public class AppearanceModelImpl implements AppearanceModel {
RankingImpl degreeRanking = rankings.get(getId("degree"));
if (!graphFunctions.containsKey(degreeId)) {
String name = NbBundle.getMessage(AppearanceModelImpl.class, "NodeGraphFunction.Degree.name");
graphFunctions.put(degreeId, new GraphFunctionImpl(degreeId, name, graph, t, getTransformerUI(t), degreeRanking));
graphFunctions.put(degreeId, new GraphFunctionImpl(degreeId, name, graph, t, getTransformerUI(t), degreeRanking, defaultInterpolator));
}
degreeRanking.refresh();
......@@ -220,8 +220,8 @@ public class AppearanceModelImpl implements AppearanceModel {
if (!graphFunctions.containsKey(indegreeId)) {
String inDegreeName = NbBundle.getMessage(AppearanceModelImpl.class, "NodeGraphFunction.InDegree.name");
String outDegreeName = NbBundle.getMessage(AppearanceModelImpl.class, "NodeGraphFunction.OutDegree.name");
graphFunctions.put(indegreeId, new GraphFunctionImpl(indegreeId, inDegreeName, graph, t, getTransformerUI(t), indegreeRanking));
graphFunctions.put(outdegreeId, new GraphFunctionImpl(outdegreeId, outDegreeName, graph, t, getTransformerUI(t), outdegreeRanking));
graphFunctions.put(indegreeId, new GraphFunctionImpl(indegreeId, inDegreeName, graph, t, getTransformerUI(t), indegreeRanking, defaultInterpolator));
graphFunctions.put(outdegreeId, new GraphFunctionImpl(outdegreeId, outDegreeName, graph, t, getTransformerUI(t), outdegreeRanking, defaultInterpolator));
}
indegreeRanking.refresh();
outdegreeRanking.refresh();
......@@ -267,7 +267,7 @@ public class AppearanceModelImpl implements AppearanceModel {
@Override
public void refreshGraphFunctions() {
if (!rankings.containsKey(getId("weight"))) {
rankings.put(getId("weight"), new EdgeWeightRankingImpl(graph, defaultInterpolator));
rankings.put(getId("weight"), new EdgeWeightRankingImpl(graph));
}
if (graph.getModel().isMultiGraph()) {
if (!partitions.containsKey(getId("type"))) {
......@@ -283,7 +283,7 @@ public class AppearanceModelImpl implements AppearanceModel {
RankingImpl ranking = rankings.get(getId("weight"));
if (!graphFunctions.containsKey(weightId)) {
String name = NbBundle.getMessage(AppearanceModelImpl.class, "EdgeGraphFunction.Weight.name");
graphFunctions.put(weightId, new GraphFunctionImpl(weightId, name, graph, t, getTransformerUI(t), ranking));
graphFunctions.put(weightId, new GraphFunctionImpl(weightId, name, graph, t, getTransformerUI(t), ranking, defaultInterpolator));
}
ranking.refresh();
}
......@@ -423,7 +423,7 @@ public class AppearanceModelImpl implements AppearanceModel {
partition = new AttributePartitionImpl(column, getIndex(false));
partitions.put(getId(column), partition);
} else {
ranking = new AttributeRankingImpl(column, getIndex(localScale), defaultInterpolator);
ranking = new AttributeRankingImpl(column, getIndex(localScale));
rankings.put(getId(column), ranking);
}
}
......@@ -442,7 +442,7 @@ public class AppearanceModelImpl implements AppearanceModel {
if (ranking != null) {
String id = getId(t, col);
if (!attributeFunctions.containsKey(id)) {
attributeFunctions.put(id, new AttributeFunctionImpl(id, graph, col, t, getTransformerUI(t), ranking));
attributeFunctions.put(id, new AttributeFunctionImpl(id, graph, col, t, getTransformerUI(t), ranking, defaultInterpolator));
}
}
}
......
......@@ -6,6 +6,7 @@
package org.gephi.appearance;
import org.gephi.appearance.api.AttributeFunction;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.Partition;
import org.gephi.appearance.api.PartitionFunction;
import org.gephi.appearance.api.Ranking;
......@@ -21,12 +22,22 @@ import org.gephi.graph.api.Graph;
*/
public class AttributeFunctionImpl extends FunctionImpl implements RankingFunction, PartitionFunction, AttributeFunction {
public AttributeFunctionImpl(String id, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking) {
super(id, null, graph, column, transformer, transformerUI, null, ranking);
public AttributeFunctionImpl(String id, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking, Interpolator interpolator) {
super(id, null, graph, column, transformer, transformerUI, null, ranking, interpolator);
}
public AttributeFunctionImpl(String id, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) {
super(id, null, graph, column, transformer, transformerUI, partition, null);
super(id, null, graph, column, transformer, transformerUI, partition, null, null);
}
@Override
public Interpolator getInterpolator() {
return interpolator;
}
@Override
public void setInterpolator(Interpolator interpolator) {
this.interpolator = interpolator;
}
@Override
......
......@@ -19,8 +19,8 @@ public class AttributeRankingImpl extends RankingImpl {
protected final Index index;
protected final Column column;
public AttributeRankingImpl(Column column, Index index, Interpolator interpolator) {
super(interpolator);
public AttributeRankingImpl(Column column, Index index) {
super();
this.column = column;
this.index = index;
}
......
......@@ -41,7 +41,6 @@
*/
package org.gephi.appearance;
import org.gephi.appearance.api.Interpolator;
import org.gephi.graph.api.Element;
import org.gephi.graph.api.Graph;
import org.gephi.graph.api.Node;
......@@ -54,8 +53,8 @@ public class DegreeRankingImpl extends RankingImpl {
private final Graph graph;
public DegreeRankingImpl(Graph graph, Interpolator interpolator) {
super(interpolator);
public DegreeRankingImpl(Graph graph) {
super();
this.graph = graph;
}
......
......@@ -65,7 +65,8 @@ public class EdgeTypePartitionImpl extends PartitionImpl {
@Override
public Iterable getValues() {
return Arrays.asList(model.getEdgeTypeLabels());
// return Arrays.asList(model.getEdgeTypeLabels());
return null;
}
@Override
......@@ -91,7 +92,8 @@ public class EdgeTypePartitionImpl extends PartitionImpl {
@Override
public int size() {
return model.getEdgeTypeCount();
// return model.getEdgeTypeCount();
return 0;
}
@Override
......
......@@ -41,7 +41,6 @@
*/
package org.gephi.appearance;
import org.gephi.appearance.api.Interpolator;
import org.gephi.graph.api.Edge;
import org.gephi.graph.api.Element;
import org.gephi.graph.api.Graph;
......@@ -54,8 +53,8 @@ public class EdgeWeightRankingImpl extends RankingImpl {
private final Graph graph;
public EdgeWeightRankingImpl(Graph graph, Interpolator interpolator) {
super(interpolator);
public EdgeWeightRankingImpl(Graph graph) {
super();
this.graph = graph;
}
......
......@@ -42,6 +42,7 @@
package org.gephi.appearance;
import org.gephi.appearance.api.Function;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.spi.PartitionTransformer;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.SimpleTransformer;
......@@ -65,8 +66,9 @@ public abstract class FunctionImpl implements Function {
protected final TransformerUI transformerUI;
protected final PartitionImpl partition;
protected final RankingImpl ranking;
protected Interpolator interpolator;
protected FunctionImpl(String id, String name, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition, RankingImpl ranking) {
protected FunctionImpl(String id, String name, Graph graph, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition, RankingImpl ranking, Interpolator interpolator) {
if (id == null) {
throw new NullPointerException("The id can't be null");
}
......@@ -74,6 +76,7 @@ public abstract class FunctionImpl implements Function {
this.name = name;
this.column = column;
this.graph = graph;
this.interpolator = interpolator;
try {
this.transformer = transformer.getClass().newInstance();
} catch (Exception ex) {
......@@ -90,7 +93,7 @@ public abstract class FunctionImpl implements Function {
((SimpleTransformer) transformer).transform(element);
} else if (isRanking()) {
Number val = ranking.getValue(element);
((RankingTransformer) transformer).transform(element, ranking, val);
((RankingTransformer) transformer).transform(element, ranking, interpolator, val);
} else if (isPartition()) {
Object val = partition.getValue(element);
((PartitionTransformer) transformer).transform(element, partition, val);
......
......@@ -6,9 +6,8 @@
package org.gephi.appearance;
import org.gephi.appearance.api.GraphFunction;
import org.gephi.appearance.api.Partition;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.PartitionFunction;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.api.RankingFunction;
import org.gephi.appearance.spi.Transformer;
import org.gephi.appearance.spi.TransformerUI;
......@@ -20,12 +19,22 @@ import org.gephi.graph.api.Graph;
*/
public class GraphFunctionImpl extends FunctionImpl implements GraphFunction, RankingFunction, PartitionFunction {
public GraphFunctionImpl(String id, String name, Graph graph, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking) {
super(id, name, graph, null, transformer, transformerUI, null, ranking);
public GraphFunctionImpl(String id, String name, Graph graph, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking, Interpolator interpolator) {
super(id, name, graph, null, transformer, transformerUI, null, ranking, interpolator);
}
public GraphFunctionImpl(String id, String name, Graph graph, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) {
super(id, name, graph, null, transformer, transformerUI, partition, null);
super(id, name, graph, null, transformer, transformerUI, partition, null, null);
}
@Override
public Interpolator getInterpolator() {
return interpolator;
}
@Override
public void setInterpolator(Interpolator interpolator) {
this.interpolator = interpolator;
}
@Override
......
......@@ -41,7 +41,6 @@
*/
package org.gephi.appearance;
import org.gephi.appearance.api.Interpolator;
import org.gephi.graph.api.DirectedGraph;
import org.gephi.graph.api.Element;
import org.gephi.graph.api.Node;
......@@ -54,8 +53,8 @@ public class InDegreeRankingImpl extends RankingImpl {
private final DirectedGraph graph;
public InDegreeRankingImpl(DirectedGraph graph, Interpolator interpolator) {
super(interpolator);
public InDegreeRankingImpl(DirectedGraph graph) {
super();
this.graph = graph;
}
......
......@@ -41,7 +41,6 @@
*/
package org.gephi.appearance;
import org.gephi.appearance.api.Interpolator;
import org.gephi.graph.api.DirectedGraph;
import org.gephi.graph.api.Element;
import org.gephi.graph.api.Node;
......@@ -54,8 +53,8 @@ public class OutDegreeRankingImpl extends RankingImpl {
private final DirectedGraph graph;
public OutDegreeRankingImpl(DirectedGraph graph, Interpolator interpolator) {
super(interpolator);
public OutDegreeRankingImpl(DirectedGraph graph) {
super();
this.graph = graph;
}
......
......@@ -50,12 +50,10 @@ import org.gephi.appearance.api.Ranking;
*/
public abstract class RankingImpl implements Ranking {
protected Interpolator interpolator;
protected Number min;
protected Number max;
protected RankingImpl(Interpolator interpolator) {
this.interpolator = interpolator;
protected RankingImpl() {
}
protected abstract void refresh();
......@@ -71,17 +69,7 @@ public abstract class RankingImpl implements Ranking {
}
@Override
public Interpolator getInterpolator() {
return interpolator;
}
@Override
public void setInterpolator(Interpolator interpolator) {
this.interpolator = interpolator;
}
@Override
public float normalize(Number value) {
public float normalize(Number value, Interpolator interpolator) {
float normalizedValue = (float) (value.doubleValue() - min.doubleValue()) / (float) (max.doubleValue() - min.doubleValue());
return interpolator.interpolate(normalizedValue);
}
......
......@@ -17,6 +17,6 @@ import org.gephi.graph.api.Graph;
public class SimpleFunctionImpl extends FunctionImpl implements SimpleFunction {
public SimpleFunctionImpl(String id, Graph graph, Transformer transformer, TransformerUI transformerUI) {
super(id, null, graph, null, transformer, transformerUI, null, null);
super(id, null, graph, null, transformer, transformerUI, null, null, null);
}
}
......@@ -53,11 +53,7 @@ public interface Ranking {
public Number getMaxValue();
public Interpolator getInterpolator();
public void setInterpolator(Interpolator interpolator);
public Number getValue(Element element);
public float normalize(Number value);
public float normalize(Number value, Interpolator interpolator);
}
......@@ -48,4 +48,8 @@ package org.gephi.appearance.api;
public interface RankingFunction extends Function {
public Ranking getRanking();
public void setInterpolator(Interpolator interpolator);
public Interpolator getInterpolator();
}
......@@ -41,6 +41,7 @@
*/
package org.gephi.appearance.spi;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.Ranking;
import org.gephi.graph.api.Element;
......@@ -50,5 +51,5 @@ import org.gephi.graph.api.Element;
*/
public interface RankingTransformer<E extends Element> extends Transformer {
public void transform(E element, Ranking ranking, Number value);
public void transform(E element, Ranking ranking, Interpolator interpolator, Number value);
}
......@@ -44,6 +44,7 @@ package org.gephi.appearance.plugin;
import java.awt.Color;
import java.io.Serializable;
import java.util.Arrays;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.Transformer;
......@@ -60,8 +61,8 @@ public class RankingElementColorTransformer implements RankingTransformer<Elemen
protected final LinearGradient linearGradient = new LinearGradient(new Color[]{Color.WHITE, Color.BLACK}, new float[]{0f, 1f});
@Override
public void transform(Element element, Ranking ranking, Number value) {
Color color = linearGradient.getValue(ranking.normalize(value));
public void transform(Element element, Ranking ranking, Interpolator interpolator, Number value) {
Color color = linearGradient.getValue(ranking.normalize(value, interpolator));
element.setColor(color);
}
......
......@@ -42,6 +42,7 @@
package org.gephi.appearance.plugin;
import java.awt.Color;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.spi.Transformer;
import org.gephi.graph.api.Element;
......@@ -55,8 +56,8 @@ import org.openide.util.lookup.ServiceProvider;
public class RankingLabelColorTransformer extends RankingElementColorTransformer {
@Override
public void transform(Element element, Ranking ranking, Number value) {
Color color = linearGradient.getValue(ranking.normalize(value));
public void transform(Element element, Ranking ranking, Interpolator interpolator, Number value) {
Color color = linearGradient.getValue(ranking.normalize(value, interpolator));
element.getTextProperties().setColor(color);
}
......
......@@ -41,6 +41,7 @@
*/
package org.gephi.appearance.plugin;
import org.gephi.appearance.api.Interpolator;
import org.gephi.appearance.api.Ranking;
import org.gephi.appearance.spi.RankingTransformer;
import org.gephi.appearance.spi.Transformer;
......@@ -58,8 +59,8 @@ public class RankingNodeSizeTransformer implements RankingTransformer<Node> {
protected float maxSize = 4f;
@Override
public void transform(Node node, Ranking ranking, Number value) {
float rankingValue = ranking.normalize(value);
public void transform(Node node, Ranking ranking, Interpolator interpolator, Number value) {
float rankingValue = ranking.normalize(value, interpolator);
float size = rankingValue * (maxSize - minSize) + minSize;
node.setSize(size);
}
......
......@@ -341,7 +341,7 @@ public class AppearanceTopComponent extends TopComponent implements Lookup.Provi
if (splineEditor == null) {
splineEditor = new SplineEditor(NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineEditor.title"));
}
Interpolator interpolator = function.getRanking().getInterpolator();
Interpolator interpolator = function.getInterpolator();
if (interpolator instanceof Interpolator.BezierInterpolator) {
Interpolator.BezierInterpolator bezierInterpolator = (Interpolator.BezierInterpolator) interpolator;
splineEditor.setControl1(bezierInterpolator.getControl1());
......@@ -351,7 +351,7 @@ public class AppearanceTopComponent extends TopComponent implements Lookup.Provi
splineEditor.setControl2(new Point2D.Float(1, 1));
}
splineEditor.setVisible(true);
function.getRanking().setInterpolator(
function.setInterpolator(
new Interpolator.BezierInterpolator(
(float) splineEditor.getControl1().getX(), (float) splineEditor.getControl1().getY(),
(float) splineEditor.getControl2().getX(), (float) splineEditor.getControl2().getY()));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册