Solved

Simple CRectangle question

Posted on 2000-03-03
15
161 Views
Last Modified: 2013-11-20
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
Comment
Question by:elito
  • 8
  • 3
  • 2
  • +1
15 Comments
 
LVL 5

Expert Comment

by:Wyn
ID: 2580886
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
 
LVL 5

Expert Comment

by:Wyn
ID: 2580914
If you already have the second.You can simply CopyRect to it...
0
 
LVL 3

Expert Comment

by:qocarlos
ID: 2580915
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
 
LVL 5

Expert Comment

by:Wyn
ID: 2580937
->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
 

Author Comment

by:elito
ID: 2580948
sorry, I was using NT account of qocarlos.

Elito
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2580953
->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
 
LVL 5

Expert Comment

by:Wyn
ID: 2581030



 
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 5

Expert Comment

by:Wyn
ID: 2581037
Opps, I misundertand a little.It's not similar rect and dont have the same certerpoint.
0
 
LVL 3

Expert Comment

by:qocarlos
ID: 2581111
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
 

Author Comment

by:elito
ID: 2581176
sorry I used again qocarlos account...
Im gonna have problems with him :-)

Elito
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2582508
http://qomestre.usc.es/test.htm
need some qualifications..
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2582545
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
 
LVL 31

Accepted Solution

by:
Zoppo earned 50 total points
ID: 2582946
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
 

Author Comment

by:elito
ID: 2612760
Hi!
Sorry about the delay in getting back to you.
That was exactly what I needed! thanks

elito
0
 
LVL 31

Expert Comment

by:Zoppo
ID: 2612773
no problem     :)

have a nice day,

ZOPPO
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This is to be the first in a series of articles demonstrating the development of a complete windows based application using the MFC classes.  I’ll try to keep each article focused on one (or a couple) of the tasks that one may meet.   Introductio…
Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now