Solved

Simple CRectangle question

Posted on 2000-03-03
15
158 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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
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 30

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 30

Expert Comment

by:Zoppo
ID: 2612773
no problem     :)

have a nice day,

ZOPPO
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
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.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

757 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

21 Experts available now in Live!

Get 1:1 Help Now