📄 composite.java
字号:
/* getStartVertex()/getFinalVertex() defines the DrawOrderComparator. */ public Coord getStartVertex() { return primes[ 0 ].getStartVertex(); } public Coord getFinalVertex() { return primes[ last_prime_idx ].getFinalVertex(); } public String toString() { StringBuffer rep; int idx; rep = new StringBuffer( "Composite[ " + super.toString() + " " ); for ( idx = 0; idx < primes.length; idx++ ) rep.append( primes[ idx ].toString() + " " ); rep.append( "]" ); return rep.toString(); } private class ItrOfPrimes implements Iterator { private TimeBoundingBox timeframe; private Primitive next_primitive; private int next_prime_idx; public ItrOfPrimes( final TimeBoundingBox tframe ) { timeframe = tframe; next_prime_idx = 0; if ( primes != null ) next_primitive = this.getNextInQueue(); else next_primitive = null; } private Primitive getNextInQueue() { Primitive next_prime; while ( next_prime_idx < primes.length ) { if ( primes[ next_prime_idx ].overlaps( timeframe ) ) { next_prime = primes[ next_prime_idx ]; next_prime_idx++; return next_prime; } } return null; } public boolean hasNext() { return next_primitive != null; } public Object next() { Primitive returning_prime; returning_prime = next_primitive; next_primitive = this.getNextInQueue(); return returning_prime; } public void remove() {} } // private class ItrOfPrimes public boolean isTimeOrdered() { Primitive prime; int primes_length, idx; if ( ! super.isTimeOrdered() ) { System.err.println( "**** Violation of Causality ****\n" + "Offending Composite -> " + this ); return false; } primes_length = (short) primes.length; for ( idx = 0; idx < primes_length; idx++ ) { prime = primes[ idx ]; if ( ! prime.isTimeOrdered() ) { System.err.println( "**** Internal Primitive Error ****\n" + "It is number " + idx + " primitive " + "in the composite." ); return false; } if ( ! super.covers( prime ) ) { System.err.println( "**** Out of Composite Time Range ****\n" + "Offending Primitive -> " + this + "\n" + "\t time coordinate " + idx + " is out of range." ); return false; } } return true; }/* public void addPrimitivesToSet( Set prime_set ) { int primes_length, idx; primes_length = (short) primes.length; // primes[] is iterated in increaing starttime order for ( idx = 0; idx < primes_length; idx++ ) prime_set.add( primes[ idx ] ); }*/ public void addPrimitivesToSet( Set prime_set, TimeBoundingBox timeframe ) { Primitive prime; int primes_length, idx; primes_length = (short) primes.length; // primes[] is iterated in increaing starttime order for ( idx = 0; idx < primes_length; idx++ ) { prime = primes[ idx ]; if ( prime.overlaps( timeframe ) ) prime_set.add( prime ); } } // Implementation of abstract methods. /* 0.0f < nesting_ftr <= 1.0f */ public int drawState( Graphics2D g, CoordPixelXform coord_xform, Map map_line2row, DrawnBoxSet drawn_boxes, ColorAlpha color ) { Coord start_vtx, final_vtx; start_vtx = this.getStartVertex(); final_vtx = this.getFinalVertex(); double tStart, tFinal; tStart = start_vtx.time; /* different from Shadow */ tFinal = final_vtx.time; /* different form Shadow */ int rowID; float nesting_ftr; /* assume RowID and NestingFactor have been calculated */ rowID = super.getRowID(); nesting_ftr = super.getNestingFactor(); // System.out.println( "\t" + this + " nestftr=" + nesting_ftr ); float rStart, rFinal; rStart = (float) rowID - nesting_ftr / 2.0f; rFinal = rStart + nesting_ftr; return State.draw( g, color, null, coord_xform, drawn_boxes.getLastStatePos( rowID ), tStart, rStart, tFinal, rFinal ); } // assume this Primitive overlaps with coord_xform.TimeBoundingBox public int drawArrow( Graphics2D g, CoordPixelXform coord_xform, Map map_line2row, DrawnBoxSet drawn_boxes, ColorAlpha color ) { Coord start_vtx, final_vtx; start_vtx = this.getStartVertex(); final_vtx = this.getFinalVertex(); double tStart, tFinal; tStart = start_vtx.time; tFinal = final_vtx.time; int iStart, iFinal; iStart = ( (Integer) map_line2row.get( new Integer(start_vtx.lineID) ) ).intValue(); iFinal = ( (Integer) map_line2row.get( new Integer(final_vtx.lineID) ) ).intValue(); return Arrow.draw( g, color, null, coord_xform, drawn_boxes.getLastArrowPos( iStart, iFinal ), tStart, (float) iStart, tFinal, (float) iFinal ); } public int drawEvent( Graphics2D g, CoordPixelXform coord_xform, Map map_line2row, DrawnBoxSet drawn_boxes, ColorAlpha color ) { Coord vtx; vtx = this.getStartVertex(); double tPoint; tPoint = vtx.time; /* different from Shadow */ int rowID; float rPeak, rStart, rFinal; rowID = ( (Integer) map_line2row.get( new Integer(vtx.lineID) ) ).intValue(); // rPeak = (float) rowID + NestingStacks.getHalfInitialNestingHeight(); rPeak = (float) rowID - 0.25f; rStart = (float) rowID - 0.5f; rFinal = rStart + 1.0f; return Event.draw( g, color, null, coord_xform, drawn_boxes.getLastEventPos( rowID ), tPoint, rPeak, rStart, rFinal ); } /* 0.0f < nesting_ftr <= 1.0f */ public boolean isPixelInState( CoordPixelXform coord_xform, Map map_line2row, Point pix_pt ) { Coord start_vtx, final_vtx; start_vtx = this.getStartVertex(); final_vtx = this.getFinalVertex(); double tStart, tFinal; tStart = start_vtx.time; /* different from Shadow */ tFinal = final_vtx.time; /* different form Shadow */ int rowID; float nesting_ftr; /* rowID = ( (Integer) map_line2row.get( new Integer(start_vtx.lineID) ) ).intValue(); */ /* assume RowID and NestingFactor have been calculated */ rowID = super.getRowID(); nesting_ftr = super.getNestingFactor(); // System.out.println( "\t" + this + " nestftr=" + nesting_ftr ); float rStart, rFinal; rStart = (float) rowID - nesting_ftr / 2.0f; rFinal = rStart + nesting_ftr; return State.containsPixel( coord_xform, pix_pt, tStart, rStart, tFinal, rFinal ); } // assume this Primitive overlaps with coord_xform.TimeBoundingBox public boolean isPixelOnArrow( CoordPixelXform coord_xform, Map map_line2row, Point pix_pt ) { Coord start_vtx, final_vtx; start_vtx = this.getStartVertex(); final_vtx = this.getFinalVertex(); double tStart, tFinal; tStart = start_vtx.time; tFinal = final_vtx.time; float rStart, rFinal; rStart = ( (Integer) map_line2row.get( new Integer(start_vtx.lineID) ) ).floatValue(); rFinal = ( (Integer) map_line2row.get( new Integer(final_vtx.lineID) ) ).floatValue(); return Line.containsPixel( coord_xform, pix_pt, tStart, rStart, tFinal, rFinal ); } public boolean isPixelAtEvent( CoordPixelXform coord_xform, Map map_line2row, Point pix_pt ) { Coord vtx; vtx = this.getStartVertex(); double tPoint; tPoint = vtx.time; /* different from Shadow */ int rowID; float rStart, rFinal; rowID = ( (Integer) map_line2row.get( new Integer(vtx.lineID) ) ).intValue(); rStart = (float) rowID - 0.5f; rFinal = rStart + 1.0f; return Event.containsPixel( coord_xform, pix_pt, tPoint, rStart, rFinal ); } public boolean containSearchable() { return super.getCategory().isVisiblySearchable(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -