/* * Copyright (c) 2011-2015, Peter Abeles. All Rights Reserved. * * This file is part of BoofCV (http://boofcv.org). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package boofcv.gui.feature; import boofcv.struct.feature.ScalePoint; import georegression.struct.point.Point2D_I32; import java.awt.*; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; /** * @author Peter Abeles */ public class VisualizeFeatures { public static void drawPoints( Graphics2D g2 , Color color , java.util.List<Point2D_I32> points , int radius) { g2.setStroke(new BasicStroke(2)); int ro = radius+1; int wo = ro*2+1; int w = radius*2+1; for( Point2D_I32 p : points ) { g2.setColor(color); g2.fillOval(p.x-radius,p.y-radius,w,w); g2.setColor(Color.BLACK); g2.drawOval(p.x-ro,p.y-ro,wo,wo); } } public static void drawPoint( Graphics2D g2 , int x , int y , Color color ) { drawPoint(g2, x, y, 5, color); } public static void drawPoint( Graphics2D g2 , int x , int y ,int r, Color color ) { drawPoint(g2, x, y, r, color, true); } public static void drawPoint( Graphics2D g2 , int x , int y ,int r, Color color , boolean hasBorder) { int w = r*2+1; if( hasBorder ) { int r2 = r+2; int w2 = r2*2+1; g2.setColor(Color.BLACK); g2.fillOval(x - r2, y - r2, w2, w2); } g2.setColor(color); g2.fillOval(x - r, y - r, w, w); } public static void drawPoint( Graphics2D g2 , double x , double y ,double r, Color color , boolean hasBorder) { Ellipse2D.Double c = new Ellipse2D.Double(); double w = r*2; if( hasBorder ) { double r2 = r+2; double w2 = r2*2; g2.setColor(Color.BLACK); c.setFrame(x - r2, y - r2, w2, w2); g2.fill(c); } g2.setColor(color); c.setFrame(x - r, y - r, w, w); g2.fill(c); } public static void drawCross( Graphics2D g2 , int x , int y ,int r ) { g2.drawLine(x - r, y, x + r, y); g2.drawLine(x, y - r, x, y + r); } public static void drawCross( Graphics2D g2 , double x , double y ,double r ) { Line2D.Double l = new Line2D.Double(); l.setLine(x-r,y,x+r,y); g2.draw(l); l.setLine(x, y - r, x, y + r); g2.draw(l); } public static void drawScalePoints( Graphics2D g2 , java.util.List<ScalePoint> points , double scaleToRadius ) { g2.setStroke(new BasicStroke(3)); for( ScalePoint p : points ) { if( p.white ) { g2.setColor(Color.BLUE); } else { g2.setColor(Color.RED); } int r = (int)(p.scale*scaleToRadius +0.5); int w = r*2+1; g2.drawOval((int)p.x-r,(int)p.y-r,w,w); } } public static void drawCircle( Graphics2D g2 , double x , double y ,double r ) { Ellipse2D.Double c = new Ellipse2D.Double(); c.setFrame(x - r, y - r, 2 * r, 2 * r); g2.draw(c); } }