public AnnotFloorPlan(FloorPlan fp, int ratio, int actualW, int actualH) { em = DatabaseService.getEntityManager(); floorPlan = fp; deadPoints = new HashSet<DeadPoint>(); this.ratio = ratio; this.actualW = actualW; this.actualH = actualH; // Width and height of each cell // unitW = fp.getWidth() * ratio / 100; // unitH = fp.getHeight() * ratio / 100; // Calc the number of rows and columns needed // rowCount = fp.getHeight() / unitH + 1; // colCount = fp.getWidth() / unitW + 1; rowCount = 50; colCount = 75; unitW = (int) Math.ceil(fp.getWidth() / colCount); unitH = (int) Math.ceil(fp.getHeight() / rowCount); cellContainer = new Cell[rowCount][colCount]; // init the graph g = new SimpleWeightedGraph<Cell, WeightedEdge>(WeightedEdge.class); initGraph(); }
/** * The coordinate is the top left corner * * @param xm x position in meters * @param ym y position in meters * @return [0] contains row; [1] contains col */ public int[] getNodePosition(double xm, double ym) { int pxW = floorPlan.getWidth(), pxH = floorPlan.getHeight(), pxX, pxY; double widthRatio = pxW / actualW, heightRatio = pxH / actualH; pxX = (int) Math.round(xm * widthRatio); pxY = (int) Math.round(ym * heightRatio); int pos[] = new int[2]; pos[0] = pxY / unitH; pos[1] = pxX / unitW; return pos; }
public void updateConfig(int ratio, int actualW, int actualH) { this.ratio = ratio; this.actualH = actualH; this.actualW = actualW; // Re-generate graph // Width and height of each cell unitW = floorPlan.getWidth() * ratio / 100; unitH = floorPlan.getHeight() * ratio / 100; // Calc the number of rows and columns needed rowCount = floorPlan.getHeight() / unitH + 1; colCount = floorPlan.getWidth() / unitW + 1; // init the graph g = new SimpleWeightedGraph<Cell, WeightedEdge>(WeightedEdge.class); updateGraph(); }