/* * Here comes the text of your license * Each line should be prefixed with * */ package nars.gui.output.graph.layout; import automenta.vivisect.Video; import automenta.vivisect.graph.AbstractGraphVis; import automenta.vivisect.graph.EdgeVis; import automenta.vivisect.graph.GraphDisplay; import automenta.vivisect.graph.VertexVis; import nars.entity.Concept; import nars.entity.Item; /** * Item Hash = theta, Priority = radius */ public class HashPriorityPolarLayout implements GraphDisplay<Item, Object> { //# of radians to cover float arcStart, arcStop; float spacing; public HashPriorityPolarLayout(float arcStart, float arcStop, float spacing) { this.arcStart = arcStart; this.arcStop = arcStop; this.spacing = spacing; } @Override public void vertex(AbstractGraphVis<Item, Object> g, VertexVis<Item, Object> v) { Item vertex = v.getVertex(); float priority = vertex.getPriority(); double radius = (1.0 - priority) * spacing + 8; Object x = vertex; if (vertex instanceof Concept) { x = ((Concept) vertex).getTerm(); } float angle = ((arcStop - arcStart) * Video.hashFloat(x.hashCode()) + arcStart) * ((float) Math.PI * 2f); v.tx = (float) (Math.cos(angle) * radius) * spacing; v.ty = (float) (Math.sin(angle) * radius) * spacing; } @Override public void edge(AbstractGraphVis<Item, Object> g, EdgeVis<Item, Object> e) { } }