/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package desenho.formas; import controlador.Diagrama; import desenho.linhas.PontoDeLinha; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Paint; import java.awt.Point; import java.awt.Polygon; import java.awt.Rectangle; import java.awt.Shape; /** * * @author ccandido */ public class FormaLosangular extends FormaNaoRetangularBase { private static final long serialVersionUID = 8855549220259709835L; public FormaLosangular(Diagrama modelo) { super(modelo); setTipo(TipoDePontos.tp4Pontos); } public FormaLosangular(Diagrama modelo, String texto) { super(modelo, texto); setTipo(TipoDePontos.tp4Pontos); } @Override public Shape getRegiao() { if (Regiao == null) { Rectangle r = new Rectangle(getLeft(), getTop(), getWidth(), getHeight()); //getBounds(); Polygon los = new Polygon(); los.addPoint(r.x, r.y + r.height / 2); los.addPoint(r.x + r.width / 2, r.y); los.addPoint(r.x + r.width, r.y + r.height / 2); los.addPoint(r.x + r.width / 2, r.y + r.height); Regiao = los; } return Regiao; } // <editor-fold defaultstate="collapsed" desc="SubPontos"> public Point[] getAllSubPoints() { calculePontos(); return SubPointos; } protected Point[] SubPointos = null; @Override protected void calculePontos() { if (!needRecalPts) { return; } super.calculePontos(); int x = pontoPosi6.x - pontoPosi3.x; int y = pontoPosi3.y - pontoPosi7.y; int tam = x / 3; int nvX1 = x - tam; int nvX2 = nvX1 - tam; tam = y / 3; int nvY2 = y - tam; int nvY1 = nvY2 - tam; SubPointos = new Point[12]; SubPointos[0] = pontoPosi7; SubPointos[1] = pontoPosi4; SubPointos[2] = pontoPosi5; SubPointos[3] = pontoPosi6; SubPointos[4] = new Point(nvX2 + pontoPosi0.x, nvY2 + pontoPosi0.y); //0 SubPointos[5] = new Point(nvX1 + pontoPosi0.x, nvY1 + pontoPosi0.y); //1 // * 0----4-----1 // * | 0 1 | // * 7 5 // * | 3 2 | // * 3----6-----2 SubPointos[6] = new Point(nvX1 + pontoPosi4.x, nvY2 + pontoPosi1.y); //2 SubPointos[7] = new Point(nvX2 + pontoPosi6.x, nvY2 + pontoPosi5.y); //3 SubPointos[11] = new Point(nvX1 + pontoPosi7.x, nvY2 + pontoPosi7.y); //3 SubPointos[9] = new Point(nvX2 + pontoPosi4.x, nvY1 + pontoPosi1.y); //1 SubPointos[10] = new Point(nvX1 + pontoPosi6.x, nvY1 + pontoPosi5.y); //2 SubPointos[8] = new Point(nvX2 + pontoPosi7.x, nvY1 + pontoPosi7.y); //0 //needRecalPts = false; // o super faz isso! } // </editor-fold> @Override protected void Posicione4Pontos(PontoDeLinha ponto) { Point centro = ponto.getCentro(); Point[] ll = getAllSubPoints(); //pegar todos int mx = retorneProximidade(centro, ll); ponto.setCentro(ll[mx]); if (mx > 3) mx-= 4; if (mx > 3) mx-= 4; ponto.setLado(mx); } @Override protected void DoPaintDoks(Graphics2D g) { Point[] pts = getAllSubPoints(); Paint bkpP = g.getPaint(); g.setPaint(Color.orange); for (Point pt : pts) { g.fillRect(pt.x - 2, pt.y - 2, 4, 4); } g.setPaint(bkpP); } }