PC Review


Reply
Thread Tools Rate Thread

Can You Reset a shape's Left & Top position

 
 
Jason Zischke
Guest
Posts: n/a
 
      20th Jul 2009
Hi All

I was wondering if you can reset a shapes top & left position after it is
rotated to reflect its new position?

Thanks in Advance

Jason
 
Reply With Quote
 
 
 
 
Rick Rothstein
Guest
Posts: n/a
 
      20th Jul 2009
What do you mean by "reset"? Exactly what are you attempting to do?

--
Rick (MVP - Excel)


"Jason Zischke" <(E-Mail Removed)> wrote in message
news:5F79BEEA-C161-41CF-995F-(E-Mail Removed)...
> Hi All
>
> I was wondering if you can reset a shapes top & left position after it is
> rotated to reflect its new position?
>
> Thanks in Advance
>
> Jason


 
Reply With Quote
 
Jason Zischke
Guest
Posts: n/a
 
      20th Jul 2009
Hi Rick

What I mean is for example I place a rectangle on a worksheet then rotate it
90 degrees, its left & top position still talks to the position it was before
it rotates. Is there a way to change the property.

Thanks

Jason

"Rick Rothstein" wrote:

> What do you mean by "reset"? Exactly what are you attempting to do?
>
> --
> Rick (MVP - Excel)
>
>
> "Jason Zischke" <(E-Mail Removed)> wrote in message
> news:5F79BEEA-C161-41CF-995F-(E-Mail Removed)...
> > Hi All
> >
> > I was wondering if you can reset a shapes top & left position after it is
> > rotated to reflect its new position?
> >
> > Thanks in Advance
> >
> > Jason

>
>

 
Reply With Quote
 
OssieMac
Guest
Posts: n/a
 
      20th Jul 2009
Hi Jason,

Is the following what you are after.

With ActiveSheet.Shapes("Rectangle 1")
.IncrementLeft 10
.IncrementTop 10
.IncrementRotation 30
End With

Note that negative values are used to move up or left and rotate
counter-clockwise positive values for the other directions.


--
Regards,

OssieMac


"Jason Zischke" wrote:

> Hi Rick
>
> What I mean is for example I place a rectangle on a worksheet then rotate it
> 90 degrees, its left & top position still talks to the position it was before
> it rotates. Is there a way to change the property.
>
> Thanks
>
> Jason
>
> "Rick Rothstein" wrote:
>
> > What do you mean by "reset"? Exactly what are you attempting to do?
> >
> > --
> > Rick (MVP - Excel)
> >
> >
> > "Jason Zischke" <(E-Mail Removed)> wrote in message
> > news:5F79BEEA-C161-41CF-995F-(E-Mail Removed)...
> > > Hi All
> > >
> > > I was wondering if you can reset a shapes top & left position after it is
> > > rotated to reflect its new position?
> > >
> > > Thanks in Advance
> > >
> > > Jason

> >
> >

 
Reply With Quote
 
Jason Zischke
Guest
Posts: n/a
 
      20th Jul 2009
Hi OssieMac

Thanks for your quick responce. Unfortunately that isn't what I'm looking
for. I want to be able to talk to the new left and top position of a shape
after it has been rotated rather then the left and top position before it was
rotated?

Thanks

Jason

"OssieMac" wrote:

> Hi Jason,
>
> Is the following what you are after.
>
> With ActiveSheet.Shapes("Rectangle 1")
> .IncrementLeft 10
> .IncrementTop 10
> .IncrementRotation 30
> End With
>
> Note that negative values are used to move up or left and rotate
> counter-clockwise positive values for the other directions.
>
>
> --
> Regards,
>
> OssieMac
>
>
> "Jason Zischke" wrote:
>
> > Hi Rick
> >
> > What I mean is for example I place a rectangle on a worksheet then rotate it
> > 90 degrees, its left & top position still talks to the position it was before
> > it rotates. Is there a way to change the property.
> >
> > Thanks
> >
> > Jason
> >
> > "Rick Rothstein" wrote:
> >
> > > What do you mean by "reset"? Exactly what are you attempting to do?
> > >
> > > --
> > > Rick (MVP - Excel)
> > >
> > >
> > > "Jason Zischke" <(E-Mail Removed)> wrote in message
> > > news:5F79BEEA-C161-41CF-995F-(E-Mail Removed)...
> > > > Hi All
> > > >
> > > > I was wondering if you can reset a shapes top & left position after it is
> > > > rotated to reflect its new position?
> > > >
> > > > Thanks in Advance
> > > >
> > > > Jason
> > >
> > >

 
Reply With Quote
 
Joel
Guest
Posts: n/a
 
      20th Jul 2009
Excel rotates a shape around the center of the shape. It is simple to put
the upper left corner of the shape back to its original position by saving
the old top and left properties before you rotate and then putting the upper
left corner back to its original position

With ActiveSheet.Shapes("Rectangle 1")
oldleft = .Left
oldtop = .Top
.Rotation = 25
.Left = oldleft
.Top = oldtop

End With


"Jason Zischke" wrote:

> Hi OssieMac
>
> Thanks for your quick responce. Unfortunately that isn't what I'm looking
> for. I want to be able to talk to the new left and top position of a shape
> after it has been rotated rather then the left and top position before it was
> rotated?
>
> Thanks
>
> Jason
>
> "OssieMac" wrote:
>
> > Hi Jason,
> >
> > Is the following what you are after.
> >
> > With ActiveSheet.Shapes("Rectangle 1")
> > .IncrementLeft 10
> > .IncrementTop 10
> > .IncrementRotation 30
> > End With
> >
> > Note that negative values are used to move up or left and rotate
> > counter-clockwise positive values for the other directions.
> >
> >
> > --
> > Regards,
> >
> > OssieMac
> >
> >
> > "Jason Zischke" wrote:
> >
> > > Hi Rick
> > >
> > > What I mean is for example I place a rectangle on a worksheet then rotate it
> > > 90 degrees, its left & top position still talks to the position it was before
> > > it rotates. Is there a way to change the property.
> > >
> > > Thanks
> > >
> > > Jason
> > >
> > > "Rick Rothstein" wrote:
> > >
> > > > What do you mean by "reset"? Exactly what are you attempting to do?
> > > >
> > > > --
> > > > Rick (MVP - Excel)
> > > >
> > > >
> > > > "Jason Zischke" <(E-Mail Removed)> wrote in message
> > > > news:5F79BEEA-C161-41CF-995F-(E-Mail Removed)...
> > > > > Hi All
> > > > >
> > > > > I was wondering if you can reset a shapes top & left position after it is
> > > > > rotated to reflect its new position?
> > > > >
> > > > > Thanks in Advance
> > > > >
> > > > > Jason
> > > >
> > > >

 
Reply With Quote
 
OssieMac
Guest
Posts: n/a
 
      20th Jul 2009
Hi again Jason,

After some testing I now see what you mean. Joel's comment that the shape
rotates on its axis is correct and while the shape appears to have altered
its left and top positon, reading the values shows them as unchanged and
therefore resetting them to the old values does nothing. The following code
uses maths to relocate a rectangle shape. Firstly makes it a square then
rotates and then returns it to a rectangle and resets the left position.

I haven't gone into it to the nth degree and so it only works with rotation
from zero to 90 degrees. however, it might point you in the right direction
to achieve what you want.

To test the code, create a rectangle shape from the drawing toolbar on the
active sheet. (Ensure that it is Rectangle 1).

Sub RotateRectangleShape()
'NOTE: Not all variables required in test
'Left for future reference only

'Code only works for rotation from zero to 90 degrees
'Will require Case statement and test for current
'rotation position and adjust maths to cope
'with rotation from/to other positions.

Dim dblLeft As Double
Dim dblTop As Double
Dim dblWidth As Double
Dim dblHt As Double
Dim dblRot As Double
Dim shp As Shape

Set shp = ActiveSheet.Shapes("Rectangle 1")

With shp
dblLeft = .Left
dblTop = .Top
dblWidth = .Width
dblHt = .Height
dblRot = .Rotation

'Make rectangle into square
.Height = dblWidth

'Rotate
.IncrementRotation 90

'Return to rectangle
.Height = dblHt

'Reset left coordinate
.Left = dblLeft - (dblWidth - dblHt) / 2

End With

End Sub



Just for interest I used the following code to test what occurs when a
rectangle shape is rotated. As for the previous code create a Rectangle shape
on the active sheet.

Sub ShapeRotationTest()

Dim dblLeft As Double
Dim dblTop As Double
Dim dblWidth As Double
Dim dblHt As Double
Dim dblRot As Double
Dim shp As Shape

Set shp = ActiveSheet.Shapes("Rectangle 1")

With shp
dblLeft = .Left
dblTop = .Top
dblWidth = .Width
dblHt = .Height
dblRot = .Rotation

MsgBox "Left = " & dblLeft & vbCrLf & _
"Top = " & dblTop & vbCrLf & _
"Width = " & dblWidth & vbCrLf & _
"Height = " & dblHt & vbCrLf & _
"Rotation = " & dblRot

.IncrementRotation 90

'.Left = dblLeft 'does nothing
'.Top = dblTop 'does nothing

MsgBox "Left = " & .Left & vbCrLf & _
"Top = " & .Top & vbCrLf & _
"Width = " & .Width & vbCrLf & _
"Height = " & .Height & vbCrLf & _
"Rotation = " & .Rotation

End With

End Sub


--
Regards,

OssieMac


 
Reply With Quote
 
Joel
Guest
Posts: n/a
 
      20th Jul 2009
OssieMac:

I think yoiur solution only works because you are rotating by 90 degrees.

Here is the general solution

Let x = original left position
Let y = original top position
Let h = height of figure
let w = width of figure
let R = radius of figure sqrt[(1/2h**2)+(1/2w**2)
let p = original angle of figure arctan(-1 * h/w)
The minus 1 is required because the
left position is negative to the center and the y is positive from the
center.
h and w are absolute numbers

The center of the figure is then
Let cx = x + 1/2w
Let cy = y + 1/2h, note negative y direction is positive on the screen
because positive pixels (x,y) is in the negative y direction.

The formula for the origianal top left corner of the figure with respect to
the center is

Left = cx + Rcos(p)
Top = cy + Rsin(p)

Now if you add a rotation d to the above formulas

Left = cx + Rcos(p + d)
Top = cy + Rsin(p + d)

The distance the left and top will move is the diference between the orignal
and new postions

delta left = Rcos(p + d) - Rcos(p)
delta top = Rsin(p + d) - Rsin(p)


The new Left and Top are the following
x2 = x + Rcos(p + d) - Rcos(p)
y2 = y + Rsin(p + d) - Rsin(p)

Note the above formulas don't reduce since
sin(p + d) = sin p cos d + cos p sin d
cos(p + d) = cos p cos d - sin p sin d

Note : When you rotate 90 degrees Sin A = cos B
sin(p + 90) = sin p cos 90 + cos p sin 90
sin(p + 90) = cos p

cos(p + 90) = cos p cos 90 - sin p sin 90
cos(p + 90) = sin p



"OssieMac" wrote:

> Hi again Jason,
>
> After some testing I now see what you mean. Joel's comment that the shape
> rotates on its axis is correct and while the shape appears to have altered
> its left and top positon, reading the values shows them as unchanged and
> therefore resetting them to the old values does nothing. The following code
> uses maths to relocate a rectangle shape. Firstly makes it a square then
> rotates and then returns it to a rectangle and resets the left position.
>
> I haven't gone into it to the nth degree and so it only works with rotation
> from zero to 90 degrees. however, it might point you in the right direction
> to achieve what you want.
>
> To test the code, create a rectangle shape from the drawing toolbar on the
> active sheet. (Ensure that it is Rectangle 1).
>
> Sub RotateRectangleShape()
> 'NOTE: Not all variables required in test
> 'Left for future reference only
>
> 'Code only works for rotation from zero to 90 degrees
> 'Will require Case statement and test for current
> 'rotation position and adjust maths to cope
> 'with rotation from/to other positions.
>
> Dim dblLeft As Double
> Dim dblTop As Double
> Dim dblWidth As Double
> Dim dblHt As Double
> Dim dblRot As Double
> Dim shp As Shape
>
> Set shp = ActiveSheet.Shapes("Rectangle 1")
>
> With shp
> dblLeft = .Left
> dblTop = .Top
> dblWidth = .Width
> dblHt = .Height
> dblRot = .Rotation
>
> 'Make rectangle into square
> .Height = dblWidth
>
> 'Rotate
> .IncrementRotation 90
>
> 'Return to rectangle
> .Height = dblHt
>
> 'Reset left coordinate
> .Left = dblLeft - (dblWidth - dblHt) / 2
>
> End With
>
> End Sub
>
>
>
> Just for interest I used the following code to test what occurs when a
> rectangle shape is rotated. As for the previous code create a Rectangle shape
> on the active sheet.
>
> Sub ShapeRotationTest()
>
> Dim dblLeft As Double
> Dim dblTop As Double
> Dim dblWidth As Double
> Dim dblHt As Double
> Dim dblRot As Double
> Dim shp As Shape
>
> Set shp = ActiveSheet.Shapes("Rectangle 1")
>
> With shp
> dblLeft = .Left
> dblTop = .Top
> dblWidth = .Width
> dblHt = .Height
> dblRot = .Rotation
>
> MsgBox "Left = " & dblLeft & vbCrLf & _
> "Top = " & dblTop & vbCrLf & _
> "Width = " & dblWidth & vbCrLf & _
> "Height = " & dblHt & vbCrLf & _
> "Rotation = " & dblRot
>
> .IncrementRotation 90
>
> '.Left = dblLeft 'does nothing
> '.Top = dblTop 'does nothing
>
> MsgBox "Left = " & .Left & vbCrLf & _
> "Top = " & .Top & vbCrLf & _
> "Width = " & .Width & vbCrLf & _
> "Height = " & .Height & vbCrLf & _
> "Rotation = " & .Rotation
>
> End With
>
> End Sub
>
>
> --
> Regards,
>
> OssieMac
>
>

 
Reply With Quote
 
OssieMac
Guest
Posts: n/a
 
      21st Jul 2009
Hi again Jason and Joel,

To Jason: As you can see the maths part of this can be complex or it might
be quite easy depending on exactly what is required.

Therefore perhaps you would like to share a little more information
otherwise we are really flying in the dark.

What sort of shapes are you working with?
How much do you want to rotate them? Is it in multiples of 90 degrees or are
you using intermediate rotations?
Have you considered resetting dimensions in lieu of rotation?

To Joel: I can see you put some real effort into the maths. I tried to
implement it in test VBA code but failed. Not sure if it is me or if there is
an error in the maths logic. Perhaps you would like to create some test code
similar to the example that I posted.

--
Regards,

OssieMac


 
Reply With Quote
 
Joel
Guest
Posts: n/a
 
      21st Jul 2009
The proof I posted is simple geometery that any high schooler should know.
Can you post the test code you wrote. The error is porbably a sign error on
my part.

To understnd what I did addume the center of the figure is in the center of
a coordinate axis (x,y). I used zero degreees to be on the positive x-axis
and positive rotation in the counter-clockwise direction. The original upper
left corner of the figure would then be (-1 * width/2, height/2).

the screen coordinates are in pixels since left, top, width, and height are
al in pixels. The (0,0) screen locztion is in the upper left corner of the
screen. Positive x direction is left to right. Positive y direction is from
top to bottom which is opposite from standard conventions. I used standard
conventions so I didn't get confused.

The differences in convention is only important to keep the direction
straight. There is a trick I learned in geometry where we refered to the
quandrants of the coordinate axis by "CAST". This stood for Cosine, All,
Sine, Tan. The quandrants are as follows

1st - x positive, y positive
2nd - x negative, y positive
3rd - x negative, y negative
4th - x positive, y negative

CAST was the order for 4, 1, 2, and 3 quadrants indicating which trig
functions were positive.

C: 4th quandrant cosine is positive
A: 1st quadrant all trig functions are positive
S: 2nd quadrant sine is positive
T: 3rd quadrant Tan is positive

Therefore in the other quadrants the functions were negative. The trig
functions in VBA will follow these conventions as long as you use standad
conventions where 0 degrees is on the positive x axis and the positive
rotation is in the counter-clockwise directions. You then hae to remember to
multiply by -1 to compensate for the Y Pixels being in the oppositive
direction from the Y coordinate axis.


"OssieMac" wrote:

> Hi again Jason and Joel,
>
> To Jason: As you can see the maths part of this can be complex or it might
> be quite easy depending on exactly what is required.
>
> Therefore perhaps you would like to share a little more information
> otherwise we are really flying in the dark.
>
> What sort of shapes are you working with?
> How much do you want to rotate them? Is it in multiples of 90 degrees or are
> you using intermediate rotations?
> Have you considered resetting dimensions in lieu of rotation?
>
> To Joel: I can see you put some real effort into the maths. I tried to
> implement it in test VBA code but failed. Not sure if it is me or if there is
> an error in the maths logic. Perhaps you would like to create some test code
> similar to the example that I posted.
>
> --
> Regards,
>
> OssieMac
>
>

 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Position of a Shape Gary''s Student Microsoft Excel Programming 8 2nd Dec 2009 08:32 PM
Re : Excel Code to Reset a Shape tkt_tang@hotmail.com Microsoft Excel Programming 0 29th Jul 2008 07:43 AM
Shape top position in Excel 2007 Chris Bruce Microsoft Excel Programming 4 2nd Apr 2008 08:48 PM
Re: Position the shape JE McGimpsey Microsoft Excel Programming 2 18th Jan 2007 09:44 AM
How do I get Windows Explorer to remember startup shape & position? Darrell Windows XP Customization 1 25th Aug 2003 01:33 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 10:02 PM.