Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 181
  • Last Modified:

Simple CRectangle question

Hi,
I have two CRectangle objects. When I draw those rectangles, one is inside the other. What I need to do is that after one rectangle is changed (either its dimensions or its position) the other one must change proportionally.
For instance, in every drawing program, if you draw two rectangles, one embedded in the other, and then you select both and group them, when you resize the group, both rectangles are resized in the same manner.

Any help?
0
elito
Asked:
elito
  • 8
  • 3
  • 2
  • +1
1 Solution
 
WynCommented:
Pre-requisite:
We know the ratio in between.

First:
Get the size of the first CRect.
Second:
Get the Center Point of the first CRect.
Third:
Using the ratio in between to get the size of the second CRect correspondingly and cut x,y of the second size in half and substract Center Point by it respectively will give you the top-left point of the second.
Fourth:
Using the CRect( POINT point, SIZE size )to construct the second CRect.

Regards
W.Yinan
0
 
WynCommented:
If you already have the second.You can simply CopyRect to it...
0
 
qocarlosCommented:
Hi W.Yinan,
Thanks for your help but, could you please give me source code?

Consider that I know all the parameters of Rect1 and Rect2 and that Rect1 is resized:

***********************Rect 1
*                     *
*                     *
*   ******* Rect2     *
*   *     *           *
*   *     *           *
*   *******           *
*                     *
*                     *
***********************

Thanks.
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
WynCommented:
->Third:
Using the ratio in between to get the size of the second CRect correspondingly and
===============

ratio here means length-to-length(both  Y and X axis)ratio you want ,like 0.7(second/first) or so.You simple multiply it to the size of first...
(sorry for poor english)

Hope helpful.
Regards
W.Yinan

 
0
 
elitoAuthor Commented:
sorry, I was using NT account of qocarlos.

Elito
0
 
WynCommented:
->Thanks for your help but, could you please give me source code?
===============
Here is 3:00am , I will try to now.
But not 100% tonight...
0
 
WynCommented:



 
0
 
WynCommented:
Opps, I misundertand a little.It's not similar rect and dont have the same certerpoint.
0
 
qocarlosCommented:
Hi,


I have put in the following link an example of what I'm trying to do:

http://qomestre.usc.es/test.htm

cheers
0
 
elitoAuthor Commented:
sorry I used again qocarlos account...
Im gonna have problems with him :-)

Elito
0
 
WynCommented:
http://qomestre.usc.es/test.htm
need some qualifications..
0
 
WynCommented:
btw:I think it's complex for free change and you should delete this question and ask again for more points to attract experts to help you.

Sincerely
W.Yinan
0
 
ZoppoCommented:
I'm not sure if this is what you need (because I don't know how to login to the given URL), but here's a function which I think calculates what you need:

// pass the Rect1 before it was moved/resized as orgRect
// pass the Rect2 as refRect
// pass the Rect1 after it was moved/resized as newRect
// returns new Rect2
// (I'm using some float math here because I was too lazy to think about a more performant way without using floats)

CRect CalcRect( CRect orgRect, CRect refRect, CRect newRect )
{
 CRect newChildRect;

 float xAsp = newRect.Width() / (float)orgRect.Width();
 float yAsp = newRect.Height() / (float)orgRect.Height();
 CPoint offset( refRect.left - orgRect.left, refRect.top - orgRect.top );

 newChildRect.left = newRect.left + (int)( offset.x * xAsp );
 newChildRect.top = newRect.top + (int)( offset.y * yAsp );
 newChildRect.right = newChildRect.left + (int)( refRect.Width() * xAsp );
 newChildRect.bottom = newChildRect.top + (int)( refRect.Height() * yAsp );

 return newChildRect;
}

hope this helps,

ZOPPO
0
 
elitoAuthor Commented:
Hi!
Sorry about the delay in getting back to you.
That was exactly what I needed! thanks

elito
0
 
ZoppoCommented:
no problem     :)

have a nice day,

ZOPPO
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 8
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now