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

📄 nestingstacks.java

📁 fortran并行计算包
💻 JAVA
字号:
/* *  (C) 2001 by Argonne National Laboratory *      See COPYRIGHT in top-level directory. *//* *  @author  Anthony Chan */package base.drawable;import java.util.Stack;import javax.swing.JTree;public class NestingStacks{    //  0.0 < Nesting_Height_Reduction < 1.0    private static  float  Nesting_Height_Reduction      = 0.8f;    private static  float  Initial_Nesting_Height        = 0.8f;    private static  float  Half_Initial_Nesting_Height   = 0.4f;    private static  float  Shadow_Nesting_Height         = 0.4f;    private JTree          tree_view;    private Stack[]        nesting_stacks;    private boolean        hasNestingStacksBeenUsed;    private boolean        isTimeBoxScrolling;    private int            num_rows;    public NestingStacks( final JTree  in_tree_view )    {        tree_view       = in_tree_view;        nesting_stacks  = null;    }    public static void  setNestingHeightReduction( float new_reduction )    {        if ( new_reduction > 0.0f && new_reduction < 1.0f )            Nesting_Height_Reduction = new_reduction;    }    public static void  setInitialNestingHeight( float new_init_height )    {        if ( new_init_height > 0.0f && new_init_height < 1.0f ) {            Initial_Nesting_Height      = new_init_height;               Half_Initial_Nesting_Height = Initial_Nesting_Height / 2.0f;            Shadow_Nesting_Height       = Initial_Nesting_Height;        }    }    public static float getHalfInitialNestingHeight()    {        return Half_Initial_Nesting_Height;    }    public void initialize( boolean isScrolling )    {        //  Need to check to see if tree_view has been updated,        //  If not, no need to construct all these Stack[].        isTimeBoxScrolling = isScrolling;        num_rows           = tree_view.getRowCount();        nesting_stacks     = new Stack[ num_rows ];        for ( int irow = 0 ; irow < num_rows ; irow++ ) {            //  Select only non-expanded row            if ( ! tree_view.isExpanded( irow ) )                nesting_stacks[ irow ] = new Stack();            else                nesting_stacks[ irow ] = null;        }        hasNestingStacksBeenUsed = false;    }    public void reset()    {        if ( hasNestingStacksBeenUsed ) {            for ( int irow = 0 ; irow < num_rows ; irow++ ) {                //  Select only non-expanded row                if ( nesting_stacks[ irow ] != null )                    nesting_stacks[ irow ].clear();            }        }        else            hasNestingStacksBeenUsed = true;    }    // Cannot use finalize() as function name,    // finalize() overrides Object.finalize().    public void finish()    {        for ( int irow = 0 ; irow < num_rows ; irow++ ) {            //  Select only non-expanded row            if ( nesting_stacks[ irow ] != null )                nesting_stacks[ irow ] = null;        }    }    public boolean isReadyToGetNestingFactorFor( Drawable cur_dobj )    {        if ( this.isTimeBoxScrolling )            return cur_dobj.isNestingFactorUninitialized();        else            return true;    }    /*       Given the NestingStack of the timeline that the Drawable is on,       Compute the NestingFactor, nesting_ftr.       It seems NestingFactor cannot be cached, as Zoom-In operations       bring in the real Drawables that are represented by the Shadows.       These Drawables needs all the other real Drawables to be presented       on the NestingStack to have their NestingFactor computed correctly.       Assume all drawables are arranged in increasing starttime order       In order to guarantee that both real drawables and shadows which       may overlap on another but not totally enclosed one another, a       scheme is needed to make sure they can be drawn and displayed       continuously/seamlessly across different images in ScrollableObject.       Object in the nesting stack will be popped until a totally       covering drawable is found, i.e dobj.covers( cur_dobj ).       The previous criterion,             cur_dobj.getEarliestTime() < dobj.getLatestTime()       is not enough to guarantee a continuous and seamless drawables       across images.  Overlapped drawables cannot be drawn nested, because       when overlapped drawables spread between 2 neighoring images, they        may not be both within in 2 neigboring images.  The nesting_stack        algorithm seems to work faultlessly for perfectly nested states        across different images.  Therefore, extending criteria of popping       nesting stack to search of perfect nested states seem doing the trick.      */    public float getNestingFactorFor( final Drawable cur_dobj )    {        // boolean   isRealDrawable  = ! ( cur_dobj instanceof Shadow );        int       rowID           = cur_dobj.getRowID();        Stack     nesting_stack   = nesting_stacks[ rowID ];        float     nesting_ftr     = Drawable.NON_NESTABLE;        Drawable  dobj;        while ( ! nesting_stack.empty() ) {            dobj = (Drawable) nesting_stack.peek();            // cur_dobj is nested inside. pop Overlaped for image continuity            if ( dobj.covers( cur_dobj ) ) {                nesting_ftr = dobj.getNestingFactor()                            * Nesting_Height_Reduction;                nesting_stack.push( cur_dobj );                return nesting_ftr;            }            else                nesting_stack.pop();        }        // i.e.  nesting_stack.empty() == true        nesting_ftr = Initial_Nesting_Height;        nesting_stack.push( cur_dobj );        return nesting_ftr;    }   //  Endof public float getNestingFactorFor()}

⌨️ 快捷键说明

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