1 2 3 package org.catacomb.dataview.build; 4 5 6 import org.catacomb.datalish.Box; 7 import org.catacomb.graph.gui.Labellee; 8 import org.catacomb.graph.gui.Painter; 9 import org.catacomb.numeric.data.DataExtractor; 10 import org.catacomb.report.E; 11 12 13 14 15 public class Line extends Displayable { 16 17 public double width; 18 19 20 private int npts; 21 private double[] xpts; 22 private double[] ypts; 23 24 int ilabel = -1; 25 26 Labellee labellee; 27 28 29 30 31 32 public void markNeeded(DataExtractor dex) { 33 String sif = "-1"; 34 String xf = x.replaceAll("frame", sif); 35 String yf = y.replaceAll("frame", sif); 36 37 dex.mark(xf); 38 dex.mark(yf); 39 } 40 41 42 43 public void getData(DataExtractor dex, int iframe) { 44 String sif = "" + iframe; 45 String xf = x.replaceAll("frame", sif); 46 String yf = y.replaceAll("frame", sif); 47 48 xpts = dex.getVector(xf); 49 ypts = dex.getVector(yf); 50 51 if (xpts == null || ypts == null) { 52 xpts = null; 53 E.error("null data in line - wanted " + x + " and " + y); 54 } else { 55 56 npts = xpts.length; 57 if (npts == ypts.length) { 58 59 } else { 60 int n = ypts.length; 61 if (npts > n) { 62 npts = n; 63 } 64 65 E.warning("Line: idfferent array lengths " + xpts.length + " and " + ypts.length); 66 } 67 } 68 if (width < 0.5) { 69 width =1.; 70 } 71 72 if (label != null) { 73 if (labellee == null) { 74 labellee = new Labellee(xpts, ypts, label, getColor()); 75 } else { 76 labellee.update(xpts, ypts, label, getColor()); 77 } 78 } 79 } 80 81 82 public Labellee getLabellee() { 83 return labellee; 84 } 85 86 87 public void pushBox(Box b) { 88 for (int i = 0; i < npts; i++) { 89 b.extendTo(xpts[i], ypts[i]); 90 } 91 } 92 93 94 95 public void instruct(Painter p, int wf) { 96 if (xpts != null) { 97 p.setColor(getColor()); 98 p.drawPolyline(xpts, ypts, npts, getColor(), width * wf, true); 99 100 } 101 102 } 103 104 } 105