Question about Figure.translateToAbsolute/translateToRelative [message #51722] |
Mon, 30 December 2002 17:00  |
Eclipse User |
|
|
|
Originally posted by: mhanner.rational.com
I'm trying to determine if a figure is visible withing scrollpane viewport.
The following picture hopefully clarifies what I am trying to do.
+------------------------+ A
| |
| +------------------+ B
| | |
| | |
| | F |
| | |
| +------------------+
| |
+------------------------+
A, B are both Scrollpanes with FreeFormViewports. F is a child of B and B
is a child of A.
My logic is:
1. translate everything to absolute coordinates
2. calculate the scrollpane 'visible' area
3. test if F is within #2
// f is the figure
// sp can be either A or B
boolean isVisible( Figure f, Scrollpane sp )
{
// translate to absolute coordinates
Rectangle spAbs = sp.getClientArea().getBounds().getCopy();
sp.translateToAbsolute( spAbs );
Rectangle fAbs = f.getBounds().getCopy();
f.translateToAbsolute( fAbs );
// calculate visible area
point p = sp.getViewport().getViewLocation();
p = p.getTranslated( spAbs.getLocation() ); //convert to absolute
coords
int w = sp.getViewport().getHorizontalRangeModel().getExtent();
int h = sp.getViewport().getVerticalRangeModel().getExtent();
Rectangle visible = new Rectangle( p.x, p.y, w, h );
return (visible.contains( f.getTopLeft() ) || visible.contains(
f.getBottomRight() ) );
}
I've also tried converting f's bounds relative to 'sp' without success;
i.e.,
fAbs = spAbs.getCopy();
f.translateToRelative( fAbs );
My questions are:
1. How do the translateToXXX methods works (draw2d coordiate system)?
2. is my logic correct?
Thanks in advance,
Michael.
|
|
|
Re: Question about Figure.translateToAbsolute/translateToRelative [message #51829 is a reply to message #51722] |
Thu, 02 January 2003 11:28  |
Eclipse User |
|
|
|
Originally posted by: hudsonr.us.eye-bee-em.com
What you are describing is the same thing that happens when a figure
requests to be repainted. DeferredUpdateManager records the requesting
figure and the rectangle that is damaged in a collection. Then, when the
paint occurs, the update manager walks up the parent chain, performing first
a translateToParent(rect), and then an intersection with the parent's bounds
(client area is really more correct, but is slightly slower).
Look at repairDamage in that class.
I assume you are trying to determine whether F is visible to the user? If
not, what do you intend to do? Hide connections?
"Michael Hanner" <mhanner@rational.com> wrote in message
news:auqf0l$6u0$1@rogue.oti.com...
> I'm trying to determine if a figure is visible withing scrollpane
viewport.
> The following picture hopefully clarifies what I am trying to do.
> +------------------------+ A
> | |
> | +------------------+ B
> | | |
> | | |
> | | F |
> | | |
> | +------------------+
> | |
> +------------------------+
>
> A, B are both Scrollpanes with FreeFormViewports. F is a child of B and B
> is a child of A.
> My logic is:
> 1. translate everything to absolute coordinates
> 2. calculate the scrollpane 'visible' area
> 3. test if F is within #2
>
> // f is the figure
> // sp can be either A or B
> boolean isVisible( Figure f, Scrollpane sp )
> {
> // translate to absolute coordinates
> Rectangle spAbs = sp.getClientArea().getBounds().getCopy();
> sp.translateToAbsolute( spAbs );
> Rectangle fAbs = f.getBounds().getCopy();
> f.translateToAbsolute( fAbs );
>
> // calculate visible area
> point p = sp.getViewport().getViewLocation();
> p = p.getTranslated( spAbs.getLocation() ); //convert to absolute
> coords
> int w = sp.getViewport().getHorizontalRangeModel().getExtent();
> int h = sp.getViewport().getVerticalRangeModel().getExtent();
> Rectangle visible = new Rectangle( p.x, p.y, w, h );
>
> return (visible.contains( f.getTopLeft() ) || visible.contains(
> f.getBottomRight() ) );
> }
>
> I've also tried converting f's bounds relative to 'sp' without success;
> i.e.,
> fAbs = spAbs.getCopy();
> f.translateToRelative( fAbs );
>
> My questions are:
> 1. How do the translateToXXX methods works (draw2d coordiate system)?
> 2. is my logic correct?
>
> Thanks in advance,
>
> Michael.
>
>
>
>
>
|
|
|
Powered by
FUDForum. Page generated in 0.03519 seconds