View Single Post
  #7   Report Post  
Posted to microsoft.public.excel.programming
David Cuthill[_3_] David Cuthill[_3_] is offline
external usenet poster
 
Posts: 11
Default Determine the end coordinates of an Arc and then add textbox

On Thursday, 24 September 2020 at 14:37:13 UTC-6, Peter T wrote:
"David Cuthill" wrote in message
On Thursday, 24 September 2020 at 13:20:17 UTC-6, Peter T wrote:
"David Cuthill" wrote in message
...
On Thursday, 24 September 2020 at 04:58:19 UTC-6, Peter T wrote:
"David Cuthill" wrote in message
I am having trouble determining what the end position of an arc is. I
would
like to determine the coordinates of the end point or start point and
then
place a textbox or other shape at those same coordinates. Of the
attributes
of an arc - which describes the top and left of the end point? The top
and
left that I can obtain seem to provide the position of the top left
corner
of the bounding box/border of the shape - which may be far from the
end
point of the actual arc.

Thanks for any assistance with this question.
======================

The Arc is described by its Nodes collection, air code -

Dim nds As ShapeNodes
Dim ndStart as ShapeNode, ndEnd as ShapeNode

Set nds = myArcShape.Nodes
Set ndStart = nds(1)
Set ndEnd = nds(nds.count)

x1 = ndStart.Points(1,1) : y1 = ndStart.Points(1,2)
x2 = ndStart.Points(1,1) : y2 = ndEnd.Points(1,2)

Peter T
Thanks Peter

I understand in theory what you are showing but I am having trouble
getting it to work in practice

I have but together this but get an error at x1=ndstart.points(1,1)
....
<Error 424 Object required

Dim nds As ShapeNodes
Dim ndStart As ShapeNode, ndEnd As ShapeNode

Set myArcShape = Worksheets("test").Shapes(1)

Set nds = myArcShape.Nodes
Set ndStart = nds(1)
Set ndEnd = nds(nds.Count)

x1 = ndStart.Points(1, 1): y1 = ndStart.Points(1, 2)
x2 = ndStart.Points(1, 1): y2 = ndEnd.Points(1, 2)


Thoughts?? What is missing
Ah, I forgot, if the Arc (or any shape with freeform type nodes) hasn't
had
its points manually edited need to trick it into thinking they have been.

A bit odd but try including this line which reapplies the first node's
exisiting editingtype property, then try returning the point coordinates:

nds.SetEditingType 1, ndStart.EditingType

However if you have manually edited the arc's points this probably won't
help!

Peter T


Thanks again Peter but the change still results in the same error. I place
the suggested line immediately below Set nds = myArcShape.Nodes

If literally(?) "Immediately below" the 'Set nds =' line I'd expect you now
to get the error on the new 'SetEditingType' line because ndStart doesn't
refer to anythihng, so move it below the 'Set ndStart =' line or, as I
should have better clarified, just above lines that attempt to return the
points coordinates.

BTW - had the points ever been manually edited?

Peter T

Thanks - the placement of the line made the difference and it is working. I did manipulate manually the "angle" of the arc before running the code and it still works. It looks like the set editing type removes the ability to manipulate the angle of the endpoints of the arc and attempting to edit the points afterward then the shape is no longer considered an arc - which is okay as it just needed to be static after this manipulation.