SFML community forums

Help => General => Topic started by: Birdron on January 09, 2020, 08:27:26 pm

Title: Entity Selection box using zoom
Post by: Birdron on January 09, 2020, 08:27:26 pm
Hi,
   Need a little help to draw a rectangle shape after zooming an entity(image).
   I am using view class to zoom an image. I have two view -
   1/ that draws the images, main view
   2/ to draw the rectangle, overlay view
Everything is working fine. But the problem comes when I zoom an image using main.zoom(200%), normal is 100%. The image size increases, My question is, how do I make the overlay rectangle zoom with main view, without changing its pixel size. I have attached an image. This is a selection rectangle that every application uses to show the user that an image is selected.

The right side(100%) and left side(200%) image is what I am getting. What I actually want to make is the third(bottom) image.

I am using SFML and wxWidgets.

Thanks in advance.
Title: Re: Entity Selection box using zoom
Post by: Laurent on January 10, 2020, 07:58:55 am
Quote
how do I make the overlay rectangle zoom with main view
Wouldn't it be simpler to draw it in the same view? Why is it in a different one, if it needs to follow the geometry of entities drawn in the main view?
Title: Re: Entity Selection box using zoom
Post by: Birdron on January 10, 2020, 11:01:27 am
Yes, it works if I draw it in same view, but than the rectangle also get zoomed in.
I have attached an image.
Image 1 is 100%, but when I zoom it, its pixel size increases like image 2. I want to keep the pixel size of the rectangle same pixel like image 3, bottom.

Thanks for reply.
Title: Re: Entity Selection box using zoom
Post by: Laurent on January 10, 2020, 01:26:04 pm
I see.

Then what you must do is to map the position and size (of the selection) from main view to overlay view. Probably with something like:
window.mapPixelToCoords(window.mapCoordsToPixel(position, mainView), overlayView);

Do this both for the top-left corner the bottom-right corner and you get the coordinates of your rectangle in proper overlay coordinates.
Title: Re: Entity Selection box using zoom
Post by: Birdron on January 11, 2020, 09:22:41 am
I am doing like this
setView(mainView)
sprite.draw(*this);
selection.draw(*this);

setView(overlayView);
sf::Vector2f position = selection.getPosition();
sf::Vector2f scale = selection.getScale();
mapPixelToCoords( mapCoordsToPixel( position, mainView), overlayView);
mapPixelToCoords( mapCoordsToPixel( scale, mainView), overlayView);
 
It is not mapping the pixel. I am getting the same result like image 2.

Thanks for reply.
Title: Re: Entity Selection box using zoom
Post by: Laurent on January 12, 2020, 11:20:09 am
You can't map a scale to different coordinate systems like this. You must map positions.

Quote from: Laurent
Do this both for the top-left corner and the bottom-right corner