Changeset 520


Ignore:
Timestamp:
09/30/05 17:08:42 (15 years ago)
Author:
curtis
Message:

Use ImageRendererJ3D when possible, for efficiency.

Location:
trunk/loci/visbio/view
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/visbio/view/ColorHandler.java

    r503 r520  
    256256  /** Recomputes autoscaled color range bounds. */ 
    257257  public void reAutoScale() { 
     258    if (fixed == null) return; 
    258259    DisplayImpl display = getWindow().getDisplay(); 
    259260    ScalarMap[] maps = getMaps(); 
  • trunk/loci/visbio/view/ColorPane.java

    r503 r520  
    223223        selector.addItem("#" + (i + 1)); 
    224224      } 
    225       //preview.addReferences(new ImageRendererJ3D(), ref); 
    226       preview.addReference(ref); 
     225      DataRenderer dr = null; 
     226      if (sm.length == 1) { 
     227        // use ImageRendererJ3D when possible 
     228        try { 
     229          Class c = Class.forName("visad.bom.ImageRendererJ3D"); 
     230          dr = (DataRenderer) c.newInstance(); 
     231        } 
     232        catch (NoClassDefFoundError err) { } 
     233        catch (ClassNotFoundException exc) { exc.printStackTrace(); } 
     234        catch (IllegalAccessException exc) { exc.printStackTrace(); } 
     235        catch (InstantiationException exc) { exc.printStackTrace(); } 
     236      } 
     237      if (dr == null) { 
     238        // ImageRendererJ3D does not support multiple Display.RGBA mappings 
     239        preview.addReference(ref); 
     240      } 
     241      else preview.addReferences(dr, ref); 
    227242 
    228243      // set aspect ratio 
  • trunk/loci/visbio/view/StackHandler.java

    r465 r520  
    101101      DataTransform trans = link.getTransform(); 
    102102      if (!(trans instanceof ImageTransform)) continue; 
    103       RealType zType = ((ImageTransform) trans).getZType(); 
     103      ImageTransform it = (ImageTransform) trans; 
     104      RealType zType = it.getZType(); 
    104105      ScalarMap zMap = new ScalarMap(zType, Display.ZAxis); 
     106      if (link instanceof StackLink) { 
     107        StackLink stackLink = (StackLink) link; 
     108        double step = it.getMicronStep(); 
     109        if (step != step) step = 1; 
     110        zMap.setRange(0, (stackLink.getSliceCount() - 1) * step); 
     111      } 
    105112      display.addMap(zMap); 
    106113    } 
  • trunk/loci/visbio/view/StackLink.java

    r513 r520  
    132132      for (int i=0; i<len; i++) { 
    133133        references.add(new DataReferenceImpl(name + i)); 
    134         renderers.add(dr.makeDefaultRenderer()); 
    135134      } 
    136135    } 
     
    202201  /** Links this stack into the display. */ 
    203202  public void link() { 
     203    int len = references.size(); 
     204    DisplayImpl display = handler.getWindow().getDisplay(); 
     205 
     206    // rebuild renderers if necessary 
     207    int numMaps = colorHandler.getMaps().length; 
     208    String imageRenderer = "visad.bom.ImageRendererJ3D"; 
     209    boolean isImageRend = renderers.size() > 0 && 
     210      renderers.firstElement().getClass().getName().equals(imageRenderer); 
     211    boolean[] vis = new boolean[renderers.size()]; 
     212    for (int i=0; i<vis.length; i++) { 
     213      vis[i] = ((DataRenderer) renderers.elementAt(i)).getEnabled(); 
     214    } 
     215    if (numMaps == 1 && !isImageRend) { 
     216      // use ImageRendererJ3D when possible 
     217      renderers.removeAllElements(); 
     218      try { 
     219        Class c = Class.forName(imageRenderer); 
     220        for (int i=0; i<len; i++) { 
     221          DataRenderer dr = (DataRenderer) c.newInstance(); 
     222          renderers.addElement(dr); 
     223          if (vis.length > i) dr.toggle(vis[i]); 
     224        } 
     225      } 
     226      catch (NoClassDefFoundError err) { } 
     227      catch (ClassNotFoundException exc) { exc.printStackTrace(); } 
     228      catch (IllegalAccessException exc) { exc.printStackTrace(); } 
     229      catch (InstantiationException exc) { exc.printStackTrace(); } 
     230    } 
     231    else if (numMaps > 1 && isImageRend) { 
     232      // ImageRendererJ3D does not allow multiple mappings to Display.RGBA 
     233      renderers.removeAllElements(); 
     234    } 
     235    if (renderers.size() == 0) { 
     236      for (int i=0; i<len; i++) { 
     237        DataRenderer dr = display.getDisplayRenderer().makeDefaultRenderer(); 
     238        renderers.addElement(dr); 
     239        if (vis.length > i) dr.toggle(vis[i]); 
     240      } 
     241    } 
     242    if (rend == null) { 
     243      rend = display.getDisplayRenderer().makeDefaultRenderer(); 
     244      rend.toggle(visible); 
     245    } 
     246 
     247    // link in the transform 
    204248    try { 
    205249      // add image slices 
    206       int len = references.size(); 
    207       DisplayImpl display = handler.getWindow().getDisplay(); 
    208250      if (stackAxis < 0) { 
    209251        display.addReferences((DataRenderer) renderers.elementAt(0), 
     
    369411   */ 
    370412  protected void setData(Data d, DataReference dataRef, 
    371     boolean autoSwitch, double zval) 
     413    DataRenderer dataRend, boolean autoSwitch, double zval) 
    372414  { 
    373415    if (autoSwitch && d instanceof FlatField && 
     
    382424        d = DataUtil.switchType(ff, ftype, imageUnits); 
    383425 
    384         // wrap image in another field, to assign proper Z value 
     426        // assign proper Z value 
    385427        RealType zbox = it.getZType(); 
    386428        Unit zunit = it.getZUnit(stackAxis); 
    387         Set set = new SingletonSet(new RealTupleType(zbox), 
    388           new double[] {zval}, null, new Unit[] {zunit}, null); 
    389         FieldImpl field = new FieldImpl(new FunctionType(zbox, ftype), set); 
    390         field.setSample(0, d, false); 
    391         d = field; 
     429        //Set set = new SingletonSet(new RealTupleType(zbox), 
     430        //  new double[] {zval}, null, new Unit[] {zunit}, null); 
     431        //FieldImpl field = new FieldImpl(new FunctionType(zbox, ftype), set); 
     432        //field.setSample(0, d, false); 
     433        //d = field; 
     434 
     435        //Real zreal = new Real(zbox, zval, zunit, null); 
     436        zval = 2 * zval / (getSliceCount() - 1) - 1; 
     437        ConstantMap zmap = new ConstantMap(zval, Display.ZAxis); 
     438        dataRend.getLinks()[0].setConstantMaps(new ConstantMap[] {zmap}); 
    392439      } 
    393440      catch (VisADException exc) { exc.printStackTrace(); } 
     
    489536      Data thumb = th == null ? null : th.getThumb(pos); 
    490537      DataReferenceImpl sliceRef = (DataReferenceImpl) references.elementAt(s); 
    491       if (thumbs) setData(thumb, sliceRef, true, s); 
     538      DataRenderer sliceRend = (DataRenderer) renderers.elementAt(s); 
     539      if (thumbs) setData(thumb, sliceRef, sliceRend, true, s); 
    492540      else { 
    493541        if (!volume || collapse == null) { 
     
    502550        } 
    503551        if (volume) setData(DUMMY, sliceRef, false); 
    504         else setData(slices[s], sliceRef, true, s); 
     552        else setData(slices[s], sliceRef, sliceRend, true, s); 
    505553      } 
    506554    } 
     
    607655    Data data = sliceRef.getData(); 
    608656 
    609     // unwrap data 
    610     if (data instanceof FieldImpl) { 
    611       try { data = ((FieldImpl) data).getSample(0); } 
    612       catch (VisADException exc) { return; } 
    613       catch (RemoteException exc) { return; } 
    614     } 
     657    // evaluate function at the cursor location 
    615658    if (!(data instanceof FunctionImpl)) return; 
    616659    FunctionImpl func = (FunctionImpl) data; 
    617  
    618     // evaluate function at the cursor location 
    619660    double[] rangeValues = null; 
    620661    try { 
  • trunk/loci/visbio/view/TransformLink.java

    r503 r520  
    131131  /** Links this transform into the display. */ 
    132132  public void link() { 
     133    // rebuild renderer if necessary 
     134    int numMaps = colorHandler.getMaps().length; 
     135    String imageRenderer = "visad.bom.ImageRendererJ3D"; 
     136    boolean isImageRend = rend != null && 
     137      rend.getClass().getName().equals(imageRenderer); 
     138    if (numMaps == 1 && !isImageRend) { 
     139      // use ImageRendererJ3D when possible 
     140      rend = null; 
     141      try { 
     142        Class c = Class.forName(imageRenderer); 
     143        rend = (DataRenderer) c.newInstance(); 
     144        rend.toggle(visible); 
     145      } 
     146      catch (NoClassDefFoundError err) { } 
     147      catch (ClassNotFoundException exc) { exc.printStackTrace(); } 
     148      catch (IllegalAccessException exc) { exc.printStackTrace(); } 
     149      catch (InstantiationException exc) { exc.printStackTrace(); } 
     150    } 
     151    else if (numMaps > 1 && isImageRend) { 
     152      // ImageRendererJ3D does not allow multiple mappings to Display.RGBA 
     153      rend = null; 
     154    } 
     155    if (rend == null) { 
     156      DisplayImpl display = handler.getWindow().getDisplay(); 
     157      rend = display.getDisplayRenderer().makeDefaultRenderer(); 
     158      rend.toggle(visible); 
     159    } 
     160 
     161    // link in the transform 
    133162    try { handler.getWindow().getDisplay().addReferences(rend, ref); } 
    134163    catch (VisADException exc) { exc.printStackTrace(); } 
     
    242271    try { 
    243272      ref = new DataReferenceImpl(trans.getName()); 
    244       rend = display.getDisplayRenderer().makeDefaultRenderer(); 
    245       rend.toggle(visible); 
    246273      display.addDisplayListener(this); 
    247274    } 
     
    565592   */ 
    566593  private void doMessages(boolean swing) { 
     594    if (rend == null) return; 
    567595    Vector oldList = rend.getExceptionVector(); 
    568596    Vector newList = new Vector(); 
Note: See TracChangeset for help on using the changeset viewer.