use of spacegraph.space2d.widget.button.PushButton in project narchy by automenta.
the class AllOrNothingSlider method AllOrNothingSlider.
public static Gridding AllOrNothingSlider(FloatSlider f) {
PushButton zeroButton = new PushButton("-").click((cb) -> f.valueRelative(0f));
PushButton oneButton = new PushButton("+").click((cb) -> f.valueRelative(1f));
return new Gridding(Gridding.HORIZONTAL, f, new Gridding(Gridding.VERTICAL, zeroButton, oneButton));
}
use of spacegraph.space2d.widget.button.PushButton in project narchy by automenta.
the class NAgentX method chart.
public static void chart(NAgent a) {
NAR nar = a.nar();
nar.runLater(() -> {
SpaceGraph.window(grid(new AutoSurface(a), Vis.beliefCharts(nar.dur() * 64, a.actions.keySet(), a.nar()), new EmotionPlot(64, a), grid(// concept query box
new TextEdit() {
@Override
protected void onKeyEnter() {
String s = text();
text("");
try {
nar.conceptualize(s);
} catch (Narsese.NarseseException e) {
e.printStackTrace();
}
Vis.conceptWindow(s, nar);
}
}.surface(), // new WindowButton("log", () -> Vis.logConsole(nar, 80, 25, new FloatParam(0f))),
new PushButton("dump", () -> {
try {
nar.output(Files.createTempFile(a.toString(), "" + System.currentTimeMillis()).toFile(), false);
} catch (IOException e) {
e.printStackTrace();
}
}), new PushButton("clear", () -> {
nar.runLater(NAR::clear);
}), new PushButton("prune", () -> {
nar.runLater(() -> {
DoubleHistogram i = new DoubleHistogram(2);
nar.tasks(true, false, false, false).forEach(t -> i.recordValue(t.conf()));
float confThresh = (float) i.getValueAtPercentile(25);
nar.tasks(true, false, false, false).filter(t -> t.conf() < confThresh).forEach(Task::delete);
});
}), new WindowToggleButton("top", () -> new ConsoleTerminal(new nars.TextUI(nar).session(10f))), new WindowToggleButton("concept graph", () -> {
DynamicConceptSpace sg;
SpaceGraphPhys3D s = new SpaceGraphPhys3D<>(sg = new DynamicConceptSpace(nar, () -> nar.exe.active().iterator(), 128, 16));
EdgeDirected fd = new EdgeDirected();
s.dyn.addBroadConstraint(fd);
fd.attraction.set(fd.attraction.get() * 8);
s.add(new SubOrtho(// window(
grid(new AutoSurface<>(fd), new AutoSurface<>(sg.vis))) {
}.posWindow(0, 0, 1f, 0.2f));
// , 400, 400);
// .pos(0, 0, 0.5f, 0.5f)
s.camPos(0, 0, 90);
return s;
}), a instanceof NAgentX ? new WindowToggleButton("vision", () -> grid(((NAgentX) a).sensorCam.stream().map(cs -> new AspectAlign(new CameraSensorView(cs, a).withControls(), AspectAlign.Align.Center, cs.width, cs.height)).toArray(Surface[]::new))) : grid())), //
900, 600);
});
}
use of spacegraph.space2d.widget.button.PushButton in project narchy by automenta.
the class TasksView method layoutTimeline.
public void layoutTimeline() {
final MapNodeGraph<Surface, String> graph = new MapNodeGraph();
float tScale = 100;
float tMin = tScale;
for (Surface cc : children()) {
// TODO make window content iteration method
TaskIcon c = (TaskIcon) cc;
Task t = c.task;
NodeGraph.MutableNode<Surface, String> tn = graph.addNode(c);
for (long e : t.stamp()) {
NodeGraph.Node en = graph.node(evidences.getIfAbsentPutWithKey(e, (ee) -> {
Surface s = new PushButton("_" + ee);
// TODO make evidence buttons visibility toggleable
// children.add(s);
graph.addNode(s);
return s;
}));
graph.addEdge((NodeGraph.MutableNode) en, "stamp", tn);
}
float minH = 30;
float maxH = 200;
float h = t.isQuestOrQuestion() ? Util.lerp(t.originality() / 2f, minH, maxH) : Util.lerp(t.originality() * t.conf(), minH, maxH);
long start, end;
if (!t.isEternal()) {
start = t.start();
end = t.end();
} else {
start = t.creation();
// TODO max time
end = 10;
}
float x1 = start * tScale;
float x2 = end * tScale;
if (x2 - x1 < tMin) {
float x = (x1 + x2) / 2f;
x1 = x - tMin / 2;
x2 = x + tMin / 2;
}
float y = (float) (Math.random() * 500);
c.pos(x1, y, x2, y + h);
}
graph.print();
new Thread(() -> {
int iterations = 300;
for (int i = 0; i < iterations; i++) {
layoutForceDirect(graph);
layout();
Util.sleep(5);
}
}).start();
}
use of spacegraph.space2d.widget.button.PushButton in project narchy by automenta.
the class DynamicConceptSpace method get.
@Override
protected List<ConceptWidget> get() {
if (updated.get()) {
List<ConceptWidget> w;
w = next.write();
w.clear();
concepts.forEach((clink) -> {
// ConceptWidget cw = space.getOrAdd(clink.get().id, ConceptWidget::new);
Concept cc = clink.get().id;
ConceptWidget cw = cc.meta(spaceID, (sid) -> new ConceptWidget(cc) {
@Override
protected void onClicked(PushButton b) {
SpaceGraph.window(new ConceptSurface(id.term(), nar), 800, 700);
}
});
if (cw != null) {
cw.activate();
cw.pri = clink.priElseZero();
w.add(cw);
}
// space.getOrAdd(concept.term(), materializer).setConcept(concept, now)
});
vis.accept(next.write());
next.commit();
updated.set(false);
}
return next.read();
}
use of spacegraph.space2d.widget.button.PushButton in project narchy by automenta.
the class PhyWall method snake.
protected Snake snake(Wire wire, Runnable onRemove) {
Surface source = wire.a;
Surface target = wire.b;
assert (source != target);
float sa = source.bounds.area();
float ta = target.bounds.area();
float areaDiff = Math.abs(sa - ta) / (sa + ta);
// heuristic estimate: larger area difference = shorter snake
int segments = Util.lerp(areaDiff, 8, 6);
float EXPAND_SCALE_FACTOR = 4;
PushButton deleteButton = new PushButton("x");
Surface menu = new TabPane(ButtonSet.Mode.Multi, Map.of("o", () -> new Gridding(new Label(source.toString()), new Label(target.toString()), deleteButton)), (l) -> new CheckBox(l) {
@Override
protected String label(String text, boolean on) {
// override just display the 'o'
return text;
}
@Override
public ToggleButton set(boolean expanded) {
super.set(expanded);
synchronized (wire) {
PhyWindow w = parent(PhyWindow.class);
if (w == null)
return this;
float cx = w.cx();
float cy = w.cy();
float ww, hh;
if (expanded) {
// grow
ww = w.w() * EXPAND_SCALE_FACTOR;
hh = w.h() * EXPAND_SCALE_FACTOR;
} else {
// shrink
ww = w.w() / EXPAND_SCALE_FACTOR;
hh = w.h() / EXPAND_SCALE_FACTOR;
}
w.pos(cx - ww / 2, cy - hh / 2, cx + ww / 2, cy + hh / 2);
}
return this;
}
});
PhyWindow menuBody = put(menu, RectFloat2D.mid(source.bounds, target.bounds, 0.1f));
float mw = menuBody.radius();
Snake s = new Snake(source, target, segments, 1.618f * 2 * mw, mw) {
@Override
public void remove() {
onRemove.run();
super.remove();
}
};
s.attach(menuBody.body, segments / 2 - 1);
deleteButton.click(s::remove);
int jj = 0;
for (Joint j : s.joints) {
float p = ((float) jj) / (segments - 1);
// custom joint renderer: color coded indicate activity and type of data
j.setData((ObjectLongProcedure<GL2>) (g, now) -> {
int TIME_DECAY_MS = 250;
boolean side = p < 0.5f;
float activity = wire.activity(side, now, TIME_DECAY_MS);
// Util.lerp(p, wire.activity(false, now, TIME_DECAY_MS), wire.activity(true, now, TIME_DECAY_MS));
int th = wire.typeHash(side);
if (th == 0) {
g.glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
} else {
Draw.colorHash(g, th, 0.9f, 0.5f + 0.5f * activity, 0.5f + 0.4f * activity);
}
g.glLineWidth(10f + activity * 10f);
// Draw.line(g, w.a.cx(), w.a.cy(), w.b.cx(), w.b.cy());
// return;
});
jj++;
}
return s;
}
Aggregations