package org.geogebra.common.geogebra3D.euclidian3D.draw; import java.util.ArrayList; import java.util.TreeMap; import org.geogebra.common.awt.GColor; public class Trace extends TreeMap<TraceSettings, ArrayList<TraceIndex>> { /** Serialization version */ private static final long serialVersionUID = -7107935777385040694L; private transient TraceIndex lastTraceIndex; private transient ArrayList<TraceIndex> lastTraceIndices; private transient TraceSettings traceSettingsCurrent; public Trace() { traceSettingsCurrent = new TraceSettings(); } public void addLastTraceIndex() { if (lastTraceIndices != null) { lastTraceIndices.add(lastTraceIndex); } } public void setNext(ArrayList<TraceIndex> indices, Drawable3D d) { lastTraceIndices = indices; lastTraceIndex = d.newTraceIndex(); } @Override public void clear() { super.clear(); lastTraceIndices = null; } public void setSettings(GColor color, int alpha) { traceSettingsCurrent.setColor(color, alpha); } public ArrayList<TraceIndex> getTracesIndicesCurrent() { ArrayList<TraceIndex> indices = get(traceSettingsCurrent); if (indices == null) { indices = new ArrayList<TraceIndex>(); put(traceSettingsCurrent.copy(), indices); } return indices; } public void record(Drawable3D d) { setSettings(d.color[0], d.getAlpha()); ArrayList<TraceIndex> indices = getTracesIndicesCurrent(); // really add trace at next current geometry record addLastTraceIndex(); // prepare for next record setNext(indices, d); } }