⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 block.java

📁 emboss的linux版本的源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        if(draw != null)          draw.repaint();      }    });    bacross.add(tail);    none.addActionListener(new ActionListener()    {      public void actionPerformed(ActionEvent e)      {        if(none.isSelected())        {          marker.setElementAt(new Boolean(false),6);          marker.setElementAt(new Boolean(false),5);        }        if(draw != null)          draw.repaint();      }    });    bacross.add(none);    bacross.add(Box.createHorizontalGlue());    bdown.add(bacross);    bacross = Box.createHorizontalBox();    bacross.add(delete);    bacross.add(Box.createHorizontalGlue());    bdown.add(bacross);    ButtonGroup group = new ButtonGroup();    group.add(head);    group.add(tail);    group.add(none);    if(arrowHead)      head.setSelected(true);    else if(arrowTail)      tail.setSelected(true);    f.pack();    f.setVisible(true);  }  protected void drawLinear(Graphics2D g2)  {    String markerLabel = (String)marker.elementAt(0);    int bstart = ((Integer)marker.elementAt(1)).intValue();    int bend   = ((Integer)marker.elementAt(2)).intValue();    Color colour = (Color)marker.elementAt(3);    float strokeSize  = ((Float)marker.elementAt(4)).floatValue();    float strokeSize2 = strokeSize/2.f;    boolean arrowHead = ((Boolean)marker.elementAt(5)).booleanValue();    boolean arrowTail = ((Boolean)marker.elementAt(6)).booleanValue();    FontMetrics fm = g2.getFontMetrics();    double hgt = fm.getAscent();    g2.setColor(colour);    double ddiameter   = current_dna.getDiameter();    double widthPanel  = current_dna.getWidth();    double heightPanel = current_dna.getHeight();    Point location = current_dna.getLocationPoint();    int ymid  = (int)(heightPanel/2.);    int shift = (int)fracRadii;    if(shift > 1 && shift < (int)heightPanel)      ymid  = shift;    int start = current_dna.getStart();    int end   = current_dna.getEnd();    g2.setStroke(new BasicStroke(strokeSize));    int xend   = (((int)ddiameter-location.x)*(bend-start)/                   (end-start))+location.x-(int)strokeSize2;    int xstart = (((int)ddiameter-location.x)*(bstart-start)/                   (end-start))+location.x+(int)strokeSize2;    if(arrowHead)    {      xend-=strokeSize2;      int[] xPoints = {xend,xend,xend+(int)strokeSize};      int[] yPoints = {ymid+(int)strokeSize,ymid-(int)strokeSize,ymid};      g2.fillPolygon(xPoints,yPoints,3);      g2.drawLine(xstart,ymid,xend,ymid);       }    else if(arrowTail)    {      xstart+=strokeSize2;      int[] xPoints = {xstart,xstart,xstart-(int)strokeSize};      int[] yPoints = {ymid+(int)strokeSize,ymid-(int)strokeSize,ymid};      g2.fillPolygon(xPoints,yPoints,3);      g2.drawLine(xstart,ymid,xend,ymid);    }    else      g2.drawLine(xstart,ymid,xend,ymid);    rect.setLocation(xstart,ymid-(int)strokeSize2);    rect.setSize(xend-xstart,(int)strokeSize);    int xmid = xstart+(int)(((xend-xstart)/2.)-(fm.stringWidth(markerLabel)/2.));    g2.drawString(markerLabel,xmid,ymid-strokeSize);      }  protected void drawCircular(Graphics2D g2)  {    String markerLabel = (String)marker.elementAt(0);    int bstart = ((Integer)marker.elementAt(1)).intValue();    int bend   = ((Integer)marker.elementAt(2)).intValue();    Color colour = (Color)marker.elementAt(3);    float strokeSize  = ((Float)marker.elementAt(4)).floatValue();    boolean arrowHead = ((Boolean)marker.elementAt(5)).booleanValue();    boolean arrowTail = ((Boolean)marker.elementAt(6)).booleanValue();    FontMetrics fm = g2.getFontMetrics();    double hgt = fm.getAscent();    g2.setColor(colour);      double ddiameter   = current_dna.getDiameter();    double widthPanel  = current_dna.getWidth();    double heightPanel = current_dna.getHeight();    double dradii      = ddiameter/2.d;    double rad = 360.d;    Point location = current_dna.getLocationPoint();    AffineTransform origin  = g2.getTransform();    AffineTransform newOrig = (AffineTransform)(origin.clone());    //angle taken by brush stroke    double stroke  = Math.toDegrees(Math.asin(strokeSize/(dradii)));    double stroke2 = stroke/2.d;    angStart = current_dna.getAngleFromPosition(bstart,rad) - stroke2;    angEnd   = current_dna.getAngleFromPosition(bend,rad) + stroke2 - angStart;    int shift = (int)(dradii*(1.d-fracRadii));    double bdiameter = ddiameter*fracRadii;     if(arrowHead)    {      angEnd += stroke2;      newOrig.rotate(Math.toRadians(-angStart-angEnd),                     widthPanel/2.d,heightPanel/2.d);      angEnd += stroke2/3.d;      int xmid = location.x+(int)(ddiameter-shift);      int ymid = location.y+(int)(dradii);      int[] xPoints = {xmid-(int)strokeSize,xmid+(int)strokeSize,xmid};      int[] yPoints = {ymid,ymid,ymid+(int)strokeSize};      g2.setTransform(newOrig);      g2.fillPolygon(xPoints,yPoints,3);    }    else if(arrowTail)    {      angStart += stroke2;      newOrig.rotate(Math.toRadians(-angStart),                     widthPanel/2.d,heightPanel/2.d);      angStart -= stroke;      angEnd += stroke2;      int xmid = location.x+(int)(ddiameter-shift);      int ymid = location.y+(int)(dradii);      int[] xPoints = {xmid-(int)strokeSize,xmid+(int)strokeSize,xmid};      int[] yPoints = {ymid+(int)strokeSize,ymid+(int)strokeSize,ymid};      g2.setTransform(newOrig);      g2.fillPolygon(xPoints,yPoints,3);    }     g2.setStroke(new BasicStroke(strokeSize));    g2.setTransform(origin);    g2.drawArc(location.x+shift,location.y+shift,               (int)(bdiameter),(int)(bdiameter),               Math.round(Math.round(angStart)),               Math.round(Math.round(angEnd)));    newOrig = (AffineTransform)(origin.clone());    newOrig.rotate(Math.toRadians(-angStart-(angEnd/2.d)),                   widthPanel/2.d,heightPanel/2.d);       int xblock = 0;    int yblock = 0;    int widMarker = fm.stringWidth(markerLabel)/2;    xblock = (int)( dradii - (shift/2.d) + (newOrig.getScaleX()*                   (dradii - 3 - widMarker - ((shift+strokeSize)/2.d))) -                    widMarker );    xblock = (int)( dradii + (newOrig.getScaleX()*                   (dradii - shift - 3 - widMarker - (strokeSize/2.d))) -                    widMarker );    yblock = (int)( dradii + (newOrig.getShearY()*                   (dradii - shift - 3 - ((strokeSize + hgt)/2.d))) +                    hgt/2.d );    g2.drawString(markerLabel,                  location.x+xblock,                  location.y+yblock);  }  /**  *  * Routine to set the position of the block  * @param x    x position   * @param y    y position  *  */  public void setBlockLocation(int x, int y)  {    if(current_dna.isCircular())    {      double dradii = current_dna.getDiameter()/2.d;      Point location = current_dna.getLocationPoint();      double x_origin = location.x+dradii;      double y_origin = location.y+dradii;      double len = Math.sqrt(Math.pow((y_origin-y),2)+                             Math.pow((x_origin-x),2));         fracRadii = len/dradii;    }    else      fracRadii = y;        repaint();  }  /**  *  * Routine to check whether a given location is over  * the drawn block.  * @param x	x position   * @param y	y position  *  */  public boolean isOverMe(int x, int y)  {    if(current_dna.isCircular())    {      double dradii = current_dna.getDiameter()/2.d;      Point location = current_dna.getLocationPoint();      double x_origin = location.x+dradii;      double y_origin = location.y+dradii;      double ttheta = (y_origin-y)/(x_origin-x);      double ang = 180-Math.toDegrees(Math.atan(ttheta));      if(x>x_origin)        ang+=180;      if(ang>360)        ang-=360;/*    System.out.println("ANGLE "+ang);    System.out.println("START "+(360+angStart));    System.out.println("END   "+(360+angStart+angEnd));*/      // check it is within the right angle and      // at the correct distance from the origin      if( ang < (360+angStart) &&          ang > (360+angStart+angEnd) )      {        double len = Math.sqrt(Math.pow((y_origin-y),2)+                               Math.pow((x_origin-x),2));        double rat = (len/dradii)/fracRadii;        if(rat < 1.1 && rat > 0.9)          return true;      }    }    else      return rect.contains(x,y);        return false;  }  // Transferable  public DataFlavor[] getTransferDataFlavors()  {    return blockFlavors;  }  public boolean isDataFlavorSupported(DataFlavor f)  {    if(f.equals(BLOCK))      return true;    return false;  }  public Object getTransferData(DataFlavor d)      throws UnsupportedFlavorException, IOException  {    if(d.equals(BLOCK))      return this;    else throw new UnsupportedFlavorException(d);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -