Error in getting shape's coordinates using vba

Started by Miki, May 20, 2015, 07:23:44 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Miki

Hello,
I have a macro (I found it on a forum by Russell Christopher) that gets XY coordinates of a shape path for all the shape and creates a *.csv file for the output.
It works perfectly when the origin is set at default (lower left corner of the page). But when I change the origin to some other location, it outputs the coordinates such that the origin is still at the default location. Is there a way to change this?

Here is the code:
Sub PlotPoints()
    Dim xPS As Visio.Shape
    Dim xPath As Visio.Path
    Dim dPoints() As Double
       
    'Set the output file to be the same as the source file, but .CSV
    xFileName = Left(ActiveDocument.FullName, Len(ActiveDocument.FullName) - 4) & "csv"
   
    'Set the separator character
    xSep = "|"
   
    'If file already exists, delete it
    If Dir(xFileName) <> "" Then
        Kill xFileName
    End If
   
    'Open the output file and write the header line
    xFile = FreeFile
    Open xFileName For Append As #xFile
    Print #xFile, "ShapeNo" & xSep & "PathNo" & xSep & "PointNo" & xSep & "X" & xSep & "Y"
   
    'Get all the shapes on the page
    ActiveWindow.SelectAll
    Set xShapes = ActiveWindow.Selection


    'Cycle through the shapes
    For Each xPS In xShapes
       
        'Shapes can have multiple paths
        For j = 1 To xPS.Paths.Count
            Set xPath = xPS.Paths(j)
           
            'Enumerate the points in each path with 0.5 sensitivity for curves
            xPath.Points 0.5, dPoints
            i = 0
            Do While i < UBound(dPoints)
                x = Int((dPoints(i)) / 12)
                y = Int((dPoints(i + 1)) / 12)
                i = i + 2
               
                'Write the record for each point
                Print #xFile, xPS.Index; xSep; j; xSep; i; xSep; x; xSep; y
            Loop
        Next j
    Next
   
    'Close the file and exit
    Close #xFile
End Sub


Any help is appreciated.

- Miki

Paul Herber

The ruler origin coordinates are stored in the page shapesheet cells XRulerOrigin/YRulerOrigin.
Electronic and Electrical engineering, business and software stencils for Visio -

https://www.paulherber.co.uk/

Miki

Paul,
Yes, I looked at XRulerOrigin and YRulerOrigin in the page's shapesheet and they show where my origin is. However, when I run the macro, the macro does not recognized those origin coordinates, it outputs the XY coordinates of the shapes based on default origin location at the lower left corner of the page.
I don't understand why it is doing that.
Any comments?

- Miki

Paul Herber

You have to subtract the origin coordinates from the shape coordinates.
Electronic and Electrical engineering, business and software stencils for Visio -

https://www.paulherber.co.uk/

Miki

I think thats the last resort. Thanks Paul!

But why doesn't the code pick up the new coordinates for origin. The X & Y values in Size & Position window are correct, but not when the code gets the coordinates.
I this a bug in Visio?

-Miki

Paul Herber

Quite normal. The origin scales are only there as a visual aid. Imagine the horific consequences of every shape effectively having its location updated whenever the origin was changed. No.
Electronic and Electrical engineering, business and software stencils for Visio -

https://www.paulherber.co.uk/