/** * With segmented selections, ignore first mouse up and finalize when user double-clicks, * control-clicks or clicks in start box. */ protected void handleMouseUp(int sx, int sy) { if (state == MOVING) { state = NORMAL; return; } if (state == MOVING_HANDLE) { cachedMask = null; // mask is no longer valid state = NORMAL; updateClipRect(); oldX = x; oldY = y; oldWidth = width; oldHeight = height; return; } if (state != CONSTRUCTING) return; if (IJ.spaceBarDown()) // is user scrolling image? return; boolean samePoint = false; if (xpf != null) samePoint = (xpf[nPoints - 2] == xpf[nPoints - 1] && ypf[nPoints - 2] == ypf[nPoints - 1]); else samePoint = (xp[nPoints - 2] == xp[nPoints - 1] && yp[nPoints - 2] == yp[nPoints - 1]); Rectangle biggerStartBox = new Rectangle(ic.screenXD(startXD) - 5, ic.screenYD(startYD) - 5, 10, 10); if (nPoints > 2 && (biggerStartBox.contains(sx, sy) || (ic.offScreenXD(sx) == startXD && ic.offScreenYD(sy) == startYD) || (samePoint && (System.currentTimeMillis() - mouseUpTime) <= 500))) { nPoints--; addOffset(); finishPolygon(); return; } else if (!samePoint) { mouseUpTime = System.currentTimeMillis(); if (type == ANGLE && nPoints == 3) { addOffset(); finishPolygon(); return; } // add point to polygon if (xpf != null) { xpf[nPoints] = xpf[nPoints - 1]; ypf[nPoints] = ypf[nPoints - 1]; nPoints++; if (nPoints == xpf.length) enlargeArrays(); } else { xp[nPoints] = xp[nPoints - 1]; yp[nPoints] = yp[nPoints - 1]; nPoints++; if (nPoints == xp.length) enlargeArrays(); } // if (lineWidth>1) fitSpline(); } }
private void init2(int type) { if (type == ANGLE && nPoints == 3) getAngleAsString(); if (type == POINT && Toolbar.getMultiPointMode()) { Prefs.pointAutoMeasure = false; Prefs.pointAutoNextSlice = false; Prefs.pointAddToManager = false; userCreated = true; } if (lineWidth > 1 && isLine()) updateWideLine(lineWidth); finishPolygon(); }
public void exitConstructingMode() { if (type == POLYLINE && state == CONSTRUCTING) { addOffset(); finishPolygon(); } }