def Page_GetFormulas( doc ):

        pages = doc.Pages
        page = pages.Add()
        page.NameU = "PGF"
        
        shape = page.DrawRectangle(1, 1, 4, 3)
        shape.CellsU["Width"].Formula = "=(1.0+2.5)"
        shape.CellsU["Height"].Formula = "=(0.0+1.5)"

        # BUILD UP THE REQUEST
        items = [

                Page_GetFormulas_Record( shape.ID, IVisio.VisSectionIndices.visSectionObject, IVisio.VisRowIndices.visRowXFormOut, IVisio.VisCellIndices.visXFormWidth),
                Page_GetFormulas_Record( shape.ID, IVisio.VisSectionIndices.visSectionObject, IVisio.VisRowIndices.visRowXFormOut, IVisio.VisCellIndices.visXFormHeight)
        ]

        # MAP THE REQUEST TO THE STRUCTURES VISIO EXPECTS
        SRCStream = Util.get_new_system_array(System.Int16, len(items)*4)
        for i in xrange(len(items)) :
                SRCStream[i * 4 + 0] = items[i].ShapeID
                SRCStream[i * 4 + 1] = items[i].SectionIndex
                SRCStream[i * 4 + 2] = items[i].RowIndex
                SRCStream[i * 4 + 3] = items[i].CellIndex

        # EXECUTE THE REQUEST
        formulas_sa = Util.get_outref_to_system_array(System.Object) 
        SRCStream_sa = Util.get_ref_to_system_array(System.Int16,SRCStream)  
        page.GetFormulasU(SRCStream_sa, formulas_sa)

        # OUTPUT BACK TO SOMETHING USEFUL 
        formulas = Util.get_new_system_array(System.String,formulas_sa.Length)
        formulas_sa.CopyTo(formulas, 0);

        shape.Text = System.String.Format("Formulas={0},{1}", formulas[0], formulas[1])
def Shape_SetFormulas( doc ):

        pages = doc.Pages
        page = pages.Add()
        page.NameU = "SSF"
        
        shape = page.DrawRectangle(1, 1, 4, 3)
        shape.CellsU["Width"].Formula = "=(1.0+2.5)"
        shape.CellsU["Height"].Formula = "=(0.0+1.5)"

        # BUILD UP THE REQUEST
        flags = System.Int16(IVisio.VisGetSetArgs.visSetBlastGuards | IVisio.VisGetSetArgs.visSetUniversalSyntax)        
        items = [

                Shape_SetFormulas_Record(IVisio.VisSectionIndices.visSectionObject, IVisio.VisRowIndices.visRowXFormOut, IVisio.VisCellIndices.visXFormWidth, "1.3"),
                Shape_SetFormulas_Record(IVisio.VisSectionIndices.visSectionObject, IVisio.VisRowIndices.visRowXFormOut, IVisio.VisCellIndices.visXFormHeight, "7.71")
        ]

        # MAP THE REQUEST TO THE STRUCTURES VISIO EXPECTS
        SRCStream = Util.get_new_system_array(System.Int16, len(items)*3)
        formulas = Util.get_new_system_array(System.Object, len(items))
        for i in xrange(len(items)) :
                SRCStream[i * 3 + 0] = items[i].SectionIndex
                SRCStream[i * 3 + 1] = items[i].RowIndex
                SRCStream[i * 3 + 2] = items[i].CellIndex
                formulas[i] = items[i].Formula

        # EXECUTE THE REQUEST
        formulas_sa = Util.get_ref_to_system_array(System.Object,formulas) 
        SRCStream_sa = Util.get_ref_to_system_array(System.Int16,SRCStream)  
        count = shape.SetFormulas(SRCStream_sa, formulas_sa, flags)

        shape.Text = System.String.Format("SetFormulas")
def Page_SetResults(doc):

    pages = doc.Pages
    page = pages.Add()
    page.NameU = "PSR"

    shape = page.DrawRectangle(1, 1, 4, 3)
    shape.CellsU["Width"].Formula = "=(1.0+2.5)"
    shape.CellsU["Height"].Formula = "=(0.0+1.5)"

    # BUILD UP THE REQUEST
    flags = System.Int16(0)
    items = [
        Page_SetResults_Record(
            shape.ID,
            IVisio.VisSectionIndices.visSectionObject,
            IVisio.VisRowIndices.visRowXFormOut,
            IVisio.VisCellIndices.visXFormWidth,
            8.0,
            IVisio.VisUnitCodes.visNoCast,
        ),
        Page_SetResults_Record(
            shape.ID,
            IVisio.VisSectionIndices.visSectionObject,
            IVisio.VisRowIndices.visRowXFormOut,
            IVisio.VisCellIndices.visXFormHeight,
            1.0,
            IVisio.VisUnitCodes.visNoCast,
        ),
    ]

    # MAP THE REQUEST TO THE STRUCTURES VISIO EXPECTS
    SRCStream = Util.get_new_system_array(System.Int16, len(items) * 4)
    results = Util.get_new_system_array(System.Object, len(items))
    unitcodes = Util.get_new_system_array(System.Object, len(items))
    for i in xrange(len(items)):
        SRCStream[i * 4 + 0] = items[i].ShapeID
        SRCStream[i * 4 + 1] = items[i].SectionIndex
        SRCStream[i * 4 + 2] = items[i].RowIndex
        SRCStream[i * 4 + 3] = items[i].CellIndex
        results[i] = items[i].Result
        unitcodes[i] = items[i].UnitCode

    # EXECUTE THE REQUEST
    results_sa = Util.get_ref_to_system_array(System.Object, results)
    unitcodes_sa = Util.get_ref_to_system_array(System.Object, unitcodes)
    SRCStream_sa = Util.get_ref_to_system_array(System.Int16, SRCStream)
    count = page.SetResults(SRCStream_sa, unitcodes_sa, results_sa, flags)

    shape.Text = System.String.Format("SetResults")
def Page_GetResults( doc ):

        pages = doc.Pages
        page = pages.Add()
        page.NameU = "PGR"

        shape = page.DrawRectangle(1, 1, 4, 3)
        shape.CellsU["Width"].Formula = "=(1.0+2.5)"
        shape.CellsU["Height"].Formula = "=(0.0+1.5)"

        # BUILD UP THE REQUEST
        flags = System.Int16(IVisio.VisGetSetArgs.visGetFloats)
        items = [

                Page_GetResults_Record( shape.ID, IVisio.VisSectionIndices.visSectionObject, IVisio.VisRowIndices.visRowXFormOut, IVisio.VisCellIndices.visXFormWidth, IVisio.VisUnitCodes.visNoCast),
                Page_GetResults_Record( shape.ID, IVisio.VisSectionIndices.visSectionObject, IVisio.VisRowIndices.visRowXFormOut, IVisio.VisCellIndices.visXFormHeight, IVisio.VisUnitCodes.visNoCast),
        ]

        # MAP THE REQUEST TO THE STRUCTURES VISIO EXPECTS
        SRCStream = Util.get_new_system_array(System.Int16, len(items)*4)
        unitcodes = Util.get_new_system_array(System.Object, len(items))
        for i in xrange(len(items)) :
                SRCStream[i * 4 + 0] = items[i].ShapeID
                SRCStream[i * 4 + 1] = items[i].SectionIndex
                SRCStream[i * 4 + 2] = items[i].RowIndex
                SRCStream[i * 4 + 3] = items[i].CellIndex
                unitcodes[i] = items[i].UnitCode

        # EXECUTE THE REQUEST
        results_sa = Util.get_outref_to_system_array(System.Object) 
        SRCStream_sa = Util.get_ref_to_system_array(System.Int16,SRCStream) 
        unitcodes_sa = Util.get_ref_to_system_array(System.Object,unitcodes) 
        page.GetResults(SRCStream_sa, flags, unitcodes_sa, results_sa)

        # OUTPUT BACK TO SOMETHING USEFUL 
        results = Util.get_new_system_array(System.Double,results_sa.Length)
        results_sa.CopyTo(results, 0);

        shape.Text = System.String.Format("Results={0},{1}", results[0], results[1])