Changeset 2561


Ignore:
Timestamp:
04/05/07 15:52:39 (13 years ago)
Author:
sorber
Message:

Tweaked OverlayLine selection layer to extend beyond end of line. Fixed indentation problem in OverlayIO.

Location:
trunk/loci/visbio/overlays
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/visbio/overlays/OverlayIO.java

    r2559 r2561  
    432432      } 
    433433    } 
    434     out.println (); 
    435434 
    436435    // print stats by object type 
     
    440439      "Arrow", "Polyline"}; 
    441440    for (int v=0; v<vectors.length; v++) { 
    442                         if (vectors[v].size() > 0)  
    443                         { 
    444                                 out.println("# " + titles[v] + " Statistics"); 
    445                                 for (int i=0; i<vectors[v].size(); i++)  
    446                                 { 
    447                                         OverlayObject obj = (OverlayObject) vectors[v].get(i); 
    448                                         int index = i + 1; 
    449                                         out.println("# " + titles[v] + " " + index); 
    450                                         OverlayStat[] stats = obj.getStatisticsArray(); 
    451                                         for (int j=0; j<stats.length; j++)  
    452                                         { 
    453                                                 out.println("#\t" + stats[j].getName() + "\t" + stats[j].getValue()); 
    454                                         } 
    455                                 } 
    456                                 out.println(); 
    457                         } 
     441      if (vectors[v].size() > 0)  
     442      { 
     443        out.println(); // Throw in a blank 
     444        out.println("# " + titles[v] + " Statistics"); 
     445        for (int i=0; i<vectors[v].size(); i++)  
     446        { 
     447          OverlayObject obj = (OverlayObject) vectors[v].get(i); 
     448          int index = i + 1; 
     449          out.println("# " + titles[v] + " " + index); 
     450          OverlayStat[] stats = obj.getStatisticsArray(); 
     451          for (int j=0; j<stats.length; j++)  
     452          { 
     453                  out.println("#\t" + stats[j].getName() + "\t" + stats[j].getValue()); 
     454          } 
     455        } 
     456      } 
    458457    } 
    459458    
     
    586585 
    587586        // a 'rider' to this loop: keep track of noded objects 
    588                                 if (obj instanceof OverlayLine) lines.add(obj); 
    589                                 if (obj instanceof OverlayFreeform) freeforms.add(obj); 
    590                                 if (obj instanceof OverlayMarker) markers.add(obj); 
    591                                 if (obj instanceof OverlayText) texts.add(obj); 
    592                                 if (obj instanceof OverlayOval) ovals.add(obj); 
    593                                 if (obj instanceof OverlayBox) boxes.add(obj); 
    594                                 if (obj instanceof OverlayArrow) arrows.add(obj); 
    595                                 if (obj instanceof OverlayPolyline) polylines.add(obj); 
     587        if (obj instanceof OverlayLine) lines.add(obj); 
     588        if (obj instanceof OverlayFreeform) freeforms.add(obj); 
     589        if (obj instanceof OverlayMarker) markers.add(obj); 
     590        if (obj instanceof OverlayText) texts.add(obj); 
     591        if (obj instanceof OverlayOval) ovals.add(obj); 
     592        if (obj instanceof OverlayBox) boxes.add(obj); 
     593        if (obj instanceof OverlayArrow) arrows.add(obj); 
     594        if (obj instanceof OverlayPolyline) polylines.add(obj); 
    596595 
    597596        // overlay object type 
     
    683682    // write overlay statistics 
    684683    Vector[] vectors = {lines, freeforms, markers, texts, ovals, boxes,  
    685                                 arrows, polylines}; 
    686                 String[] titles =  
    687                         {       "Line", "Freeform", "Marker", "Text", "Oval", "Box", 
    688                                 "Arrow", "Polyline"}; 
    689                                  
    690                 for (int v=0; v<vectors.length; v++)  
    691                 { 
    692                         if (vectors[v].size() > 0)  
    693                         { 
    694                                 rownum += 2; 
    695                                 r = s.createRow(rownum); 
    696                                 cellnum = 0; 
    697                           c = r.createCell(cellnum++); 
    698                           c.setCellStyle(text); 
    699                           c.setCellValue(new HSSFRichTextString(titles[v] + " Statistics")); 
    700                                                  
    701                                 for (int i=0; i<vectors[v].size(); i++)  
    702                                 { 
    703                                         OverlayObject obj = (OverlayObject) vectors[v].get(i); 
    704                                         int index = i + 1; 
    705                                          
    706                                         cellnum = 0; 
    707                                         r = s.createRow(++rownum); 
    708                                         c = r.createCell(cellnum++); 
    709                                         c.setCellStyle(text); 
    710                                         c.setCellValue(new HSSFRichTextString(titles[v] + " " + index)); 
    711                                          
    712                                         OverlayStat[] stats = obj.getStatisticsArray(); 
    713                                         for (int j=0; j<stats.length; j++)  
    714                                         { 
    715                                           r = s.createRow(++rownum); 
    716                                           cellnum = 1; // indent one column 
    717                                                 c = r.createCell(cellnum++); 
    718                                                 c.setCellStyle(text); 
    719                                                 c.setCellValue(new HSSFRichTextString(stats[j].getName())); 
    720                                                  
    721                                                 c = r.createCell(cellnum++); 
    722                                                 c.setCellStyle(text); 
    723                                                 c.setCellValue(new HSSFRichTextString(stats[j].getValue())); 
    724                                         }  
    725                                 } 
    726                         }  
    727                 }  
     684      arrows, polylines}; 
     685    String[] titles =  
     686      { "Line", "Freeform", "Marker", "Text", "Oval", "Box", 
     687        "Arrow", "Polyline"}; 
     688    for (int v=0; v<vectors.length; v++)  
     689    { 
     690      if (vectors[v].size() > 0)  
     691      { 
     692        rownum += 2; 
     693        r = s.createRow(rownum); 
     694        cellnum = 0; 
     695        c = r.createCell(cellnum++); 
     696        c.setCellStyle(text); 
     697        c.setCellValue(new HSSFRichTextString(titles[v] + " Statistics")); 
     698                               
     699        for (int i=0; i<vectors[v].size(); i++)  
     700        { 
     701          OverlayObject obj = (OverlayObject) vectors[v].get(i); 
     702          int index = i + 1; 
     703           
     704          cellnum = 0; 
     705          r = s.createRow(++rownum); 
     706          c = r.createCell(cellnum++); 
     707          c.setCellStyle(text); 
     708          c.setCellValue(new HSSFRichTextString(titles[v] + " " + index)); 
     709           
     710          OverlayStat[] stats = obj.getStatisticsArray(); 
     711          for (int j=0; j<stats.length; j++)  
     712          { 
     713            r = s.createRow(++rownum); 
     714            cellnum = 1; // indent one column 
     715            c = r.createCell(cellnum++); 
     716            c.setCellStyle(text); 
     717            c.setCellValue(new HSSFRichTextString(stats[j].getName())); 
     718             
     719            c = r.createCell(cellnum++); 
     720            c.setCellStyle(text); 
     721            c.setCellValue(new HSSFRichTextString(stats[j].getValue())); 
     722          }  
     723        } 
     724      }  
     725    }  
    728726 
    729727    // write nodes of noded objects 
  • trunk/loci/visbio/overlays/OverlayLine.java

    r2534 r2561  
    175175    float delta = GLOW_WIDTH; 
    176176 
    177     float[] v = new float[]{x2 - x1, y2 - y1}; 
    178  
    179     // angle of vector perpendicular to line 
    180     double theta =  Math.PI / 2 + Math.atan2(v[1], v[0]);  
    181  
    182     float dx = (float) (delta * Math.cos(theta)); 
    183     float dy = (float) (delta * Math.sin(theta)); 
    184  
    185     float[] p1 = {x1 + dx, y1 + dy}; 
    186     float[] p2 = {x2 + dx, y2 + dy}; 
    187     float[] p3 = {x1 - dx, y1 - dy}; 
    188     float[] p4 = {x2 - dx, y2 - dy}; 
     177    // compute locations of grid points 
     178    // (uses similar triangles instead of raw trig fcns) 
     179    float x = x2 - x1; 
     180    float y = y2 - y1; 
     181    float hyp = (float) Math.sqrt(x * x + y * y); 
     182    float ratio = delta / hyp; 
     183    // offsets from endpoints of line segments  
     184    float dx1 = ratio * y;  
     185    float dy1 = ratio * x; 
     186    float dx2 = ratio * x; 
     187    float dy2 = ratio * y; 
     188 
     189    float[] p1 = {x1 - dx1 - dx2, y1 + dy1 - dy2}; 
     190    float[] p2 = {x2 - dx1 + dx2, y2 + dy1 + dy2}; 
     191    float[] p3 = {x1 + dx1 - dx2, y1 - dy1 - dy2}; 
     192    float[] p4 = {x2 + dx1 + dx2, y2 - dy1 + dy2}; 
    189193 
    190194    float[][] setSamples = {{p1[0], p2[0], p3[0], p4[0]}, 
Note: See TracChangeset for help on using the changeset viewer.