RC Design Functions 7.03

The latest update to my RC Design Functions spreadsheet has just been uploaded, and is available for free download (including full open-source code) from:

RC Design Functions7.zip

The main new feature in the latest version is a new RCInteract function, which generates an axial load-moment capacity interaction diagram, including corrections for confinement steel type, to AS 3600.

The screen shot below shows sample input and output.  Further details will be given in the next post.

Posted in Concrete, Excel, Newton, UDFs, VBA | Tagged , , , , | 1 Comment

Little Unsaid

From Highgate Cemetery:

 

Posted in Bach | Tagged | Leave a comment

Indexing NumPy arrays with floats …

… now you can’t.

I recently updated to the latest version of NumPy (1.12.1), and today I discovered that some of my spreadsheets using NumPy arrays (via xlwings) were returning errors like:

IndexError: only integers, slices (`:`), ellipsis (`…`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

The problem was that using floats to index NumPy arrays previously generated a warning, but now generates an error:

DeprecationWarning to error
•Indexing with floats raises IndexError, e.g., a[0, 0.0].
•Indexing with non-integer array_like raises IndexError, e.g., a[‘1’, ‘2’]
•Indexing with multiple ellipsis raises IndexError, e.g., a[…, …].
•Non-integers used as index values raise TypeError, e.g., in reshape, take, and specifying reduce axis

You might ask, why use floats to index an array in the first place?  The reason is that if a range is copied from Excel to Python then by default all the values are passed as float64.  The array could be converted to all integers, but if the values are mixed integers and floats (such as an array of node numbers and coordinates) that won’t work.  In previous versions the values to be used as array indices could just be left as floats, but now it is necessary to convert them to integers before using them as index values.

I will be working through my Python code posted here and update as required, but if you come across an IndexError anywhere, please let me know.

Posted in Arrays, Excel, Link to Python, NumPy and SciPy, UDFs, VBA | Tagged , , , , , | 2 Comments

Formatting Text from VBA

In a recent Eng-Tips thread someone wanted a VBA routine to combine a value with different + and – tolerance values, formatted as superscript and subscript.  Eng-Tips (and Tek-Tips) regular, Skip Vought, came up with a macro to do the job, which I have modified to allow it to work on any selected range:

Download VBAFormat.xlsb

Sub AddTolerance()
'SkipVought 2017 3.14
'Ammended to use selected range as input: Doug Jenkins 2017 3.15

'Output to the column to the right of the input range, or to the last column of selected range if NumCols > 4
    Dim sVal As String, sMax As String, sMin As String
    Dim p1 As Long, p2 As Long, NumRows As Long, NumCols As Long, i As Long
    Dim RowVals As Range

    With Selection
        NumRows = .Rows.Count
        NumCols = .Columns.Count
        If NumCols < 4 Then NumCols = 4
        For i = 1 To NumRows
            Set RowVals = .Cells.Offset(i - 1, 0).Resize(1, NumCols)

            sVal = RowVals(1, 1).Value           'The value

            sMax = "+" & RowVals(1, 2).Value     'The max tolerance

            sMin = RowVals(1, 3).Value           'The min tolerance

            With RowVals(1, NumCols)
                .Value = sVal & sMax & sMin

                p1 = InStr(.Value, "+")
                p2 = InStr(.Value, "-")

                With .Characters(Start:=p1, Length:=p2 - p1).Font
                    .Superscript = True
                    .Subscript = False
                End With

                With .Characters(Start:=p2, Length:=Len(.Value) - p2 + 1).Font
                    .Superscript = False
                    .Subscript = True
                End With
            End With
        Next i
    End With
End Sub

Results are shown in the screenshot below:

The data consists of three adjacent columns: values and upper and lower tolerances.  To run the macro either select just the input data range, or extend the range to the right, then press Alt-F8 and select AddTolerance.  The output results will either be written to the column to the right of the input  data, or if a wider range was selected, in the last column of the selected range, as shown above.

As another example, I have written a macro to convert text strings with exponents in “^x” format to superscript format, as shown below:

Sub FormatExp()
' Convert ^x to superscript format
'Output to the column to the right of the input range, or to the last column of selected range if NumCols > 2
    Dim sVal As String, sMax As String, sMin As String
    Dim p1 As Long, p2 As Long, NumRows As Long, NumCols As Long, i As Long, NewString As String
    Dim RowVals As Range, j As Long, k As Long, k2 As Long, m As Long, Sup As Boolean, str As String, NumE As Long, EPosA() As Long, StrLen As Long

    With Selection
        NumRows = .Rows.Count
        NumCols = .Columns.Count
        If NumCols = 1 Then NumCols = 2

        For i = 1 To NumRows
            Set RowVals = .Cells.Offset(i - 1, 0).Resize(1, NumCols)

            sVal = RowVals(1, 1).Value           'The value
            StrLen = Len(sVal)
            ' Count number of ^ characters
            NumE = 0
            For j = 1 To StrLen
                If Mid(sVal, j, 1) = "^" Then NumE = NumE + 1
            Next j
            If NumE = 0 Then
                RowVals(1, NumCols).Value = sVal
            Else
            ' find positions of ^ characters and length of exponent value
                ReDim EPosA(1 To NumE, 1 To 2)
                m = 0
                For j = 1 To StrLen
                    If Mid(sVal, j, 1) = "^" Then
                        m = m + 1
                        EPosA(m, 1) = j
                        k = InStr(j, sVal, " ") - 1
                        k2 = InStr(j, sVal, ")") - 1
                        If k2 > 0 Then
                            If k < 1 Or k2 < k Then k = k2
                        End If
                        If k < 1 Then k = Len(sVal)
                        EPosA(m, 2) = k - j
                    End If
                Next j
            ' Remove ^ characters
                NewString = ""
                For j = 1 To NumE
                    If j = 1 Then m = 1 Else m = EPosA(j - 1, 1) + 1
                    NewString = NewString & Mid(sVal, m, EPosA(j, 1) - m)
                Next j
                NewString = NewString & Right(sVal, EPosA(NumE, 2))
            ' Convert exponents to superscript format
                With RowVals(1, NumCols)
                    .Value = NewString
                    For j = 1 To NumE
                        m = EPosA(j, 1) + 1 - j
                        .Characters(Start:=m, Length:=EPosA(j, 2)).Font.Superscript = True
                    Next j
           End With

            End If
        Next i

      End With
    End Sub
Posted in Excel, VBA | Tagged , , , | Leave a comment

Birdland – Kerinne Jenkins

Click to fly to Birdland

Birdland Films

Birdland Films was created by Kerinne Jenkins in 2017, as a home for her own work across a number of platforms, but more importantly as a starting point. To establish a place where other like minded filmmakers, creatives and artists could come to collaborate and create.

Inspired by the feel, the tone and the emotion in the Patti Smith song ‘Birdland’;

I am helium raven and this movie is mine.

And we are free to create anything we could possibly imagine.

Whether it’s a film, a podcast, a music video, an installation, a play or a poem. Whether it’s for long or short, for big screens or small, there is no one format that we will limit ourselves to. Birdland Films hopes to grow and change with every person who comes into the fold.

But there is one rule of Birdland.

That at the heart of any project is a focus on character and story. It might seem like we’re stating the obvious, but we want to make sure that this comes through in anything we make, whether it’s a traditional narrative, a case study, a commercial or an installation.

Let’s never get too distracted by all the other parts of the process that we forget why we wanted to make these things in the first place.

Posted in Bach, Films | Tagged , | Leave a comment