Tags

, , , , , , ,

This article explains how you can ask the user to select objects from the model using the Tekla Open API. It also provides examples as to how to filter the objects selected by the user.


Step 1:

Add reference to the Tekla.Structures.Model and Tekla.Structures.Drawing library located in the path “C:\Program Files\Tekla Structures\20.0\nt\bin\plugins” and manually open the tekla model. This has been covered in the article below:


Ask User to Select Objects:

The following code asks the user to select objects from the model. It returns a list of all selected objects by the user.

Imports TSM = Tekla.Structures.Model
Imports TSD = Tekla.Structures.drawing

    ''' <summary>
    ''' Ask the user to select objects from the model
    ''' </summary>
    ''' <returns>The list of selected objects by the user</returns>
    ''' <remarks></remarks>
    Private Function SelectObjects() As List(Of Object)
        Dim objUIPICker As TSM.UI.Picker
        Dim objModelObjectEnumerator As TSM.ModelObjectEnumerator
        Dim lstOutput As List(Of Object)

        objUIPICker = New TSM.UI.Picker()
        lstOutput = New List(Of Object)

        Try
            'This line asks the user to select an object from the model
            objModelObjectEnumerator = objUIPICker.PickObjects(Tekla.Structures.Model.UI.Picker.PickObjectsEnum.PICK_N_OBJECTS, "Select Objects")
            'loops through all the objects selected by the user
            While objModelObjectEnumerator.MoveNext
                'adds the object to the output list
                lstOutput.Add(objModelObjectEnumerator.Current)
            End While
        Catch
        End Try
        Return lstOutput
    End Function

The code in line 19 asks the user to select objects. The first parameter is the type of object the user will be selecting. In this example we have used the generic “Object” type. The second parameter is the text that is displayed at the bottom of the screen when prompting the user to select objects.
Blog_Tekla_AskUser2SelectObjects_1

Lines 21~24 loop through the list of objects selected by the user.


Ask User to Select Specific Object Types (Parts, Rebars, Welds, ….):

In the previous example the user was asked to select objects of any kinds. In this example the user will be asked to only select a specific type of object. For example parts:

Imports TSM = Tekla.Structures.Model
Imports TSD = Tekla.Structures.drawing

    ''' <summary>
    ''' Ask the user to select parts from the model
    ''' </summary>
    ''' <returns>The list of selected parts by the user</returns>
    ''' <remarks></remarks>
    Private Function SelectParts() As List(Of TSM.Part)
        Dim objUIPICker As TSM.UI.Picker
        Dim objModelObjectEnumerator As TSM.ModelObjectEnumerator
        Dim lstOutput As List(Of TSM.Part)

        objUIPICker = New TSM.UI.Picker()
        lstOutput = New List(Of TSM.Part)

        Try
            'This line asks the user to select an object from the model
            objModelObjectEnumerator = objUIPICker.PickObjects(Tekla.Structures.Model.UI.Picker.PickObjectsEnum.PICK_N_PARTS, "Select Objects")
            'loops through all the objects selected by the user
            While objModelObjectEnumerator.MoveNext
                'adds the object to the output list
                lstOutput.Add(objModelObjectEnumerator.Current)
            End While
        Catch
        End Try
        Return lstOutput
    End Function

When the function is called the user will only be able to select parts from the model.

Other options include:

  • PICK_N_OBJECTS
  • PICK_N_PARTS
  • PICK_N_REINFORCEMENTS
  • PICK_N_WELDS
  • PICK_N_BOLTGROUPS

Filter Selected Objects:

Assume we set the first parameter to PICK_N_REINFORCEMENTS. The user will only be able to select reinforcements  But lets we are only interested in “Single Rebars”. Using the previous function the user will be able to end up selecting not only Single Rebars but also all other reinforcements as well:

  • Single Rebars
  • Group Reinforcements
  • Meshes

In order to overcome this problem the function below can be used:

Imports TSM = Tekla.Structures.Model
Imports TSD = Tekla.Structures.drawing

   ''' <summary>
    ''' Ask the user to select SingleRebars from the model
    ''' </summary>
    ''' <returns>The list of selected Single Rebars by the user</returns>
    ''' <remarks></remarks>
    Private Function SelectSingleRebars() As List(Of TSM.SingleRebar)
        Dim objUIPICker As TSM.UI.Picker
        Dim objModelObjectEnumerator As TSM.ModelObjectEnumerator
        Dim lstOutput As List(Of TSM.SingleRebar)
        Dim objSingleRebars As TSM.SingleRebar

        objUIPICker = New TSM.UI.Picker()
        lstOutput = New List(Of TSM.SingleRebar)

        Try
            'This line asks the user to select an object from the model
            objModelObjectEnumerator = objUIPICker.PickObjects(Tekla.Structures.Model.UI.Picker.PickObjectsEnum.PICK_N_REINFORCEMENTS, "Select Singel Rebars")
            'loops through all the objects selected by the user
            While objModelObjectEnumerator.MoveNext
                objSingleRebars = TryCast(objModelObjectEnumerator.Current, TSM.SingleRebar)
                If IsNothing(objSingleRebars) = False Then
                    'adds the object to the output list
                    lstOutput.Add(objSingleRebars)
                End If

            End While
        Catch
        End Try
        Return lstOutput
    End Function

Line 23 tries to convert the select object to a single rebar. If it fails the the variable objsinglerebar will be empty. Line 24 checks if the conversion has been successful. If true then single rebar object is added to the output list.

Another scenario would be, only looking for objects of a certain class, name, material, … . This could also be accomplished using the function below. Similar to the example above, the program asks the user to select reinforcements. Among the selected reinforcements only the single rebars are accepted. Another IF statement is used to filter the single rebars whose class is not equal to 5:

Imports TSM = Tekla.Structures.Model
Imports TSD = Tekla.Structures.drawing

 ''' <summary>
    ''' Ask the user to select SingleRebars from the model. Only return rebars with a class of 5
    ''' </summary>
    ''' <returns>The list of selected Single Rebars by the user</returns>
    ''' <remarks></remarks>
    Private Function SelectSingleRebars() As List(Of TSM.SingleRebar)
        Dim objUIPICker As TSM.UI.Picker
        Dim objModelObjectEnumerator As TSM.ModelObjectEnumerator
        Dim lstOutput As List(Of TSM.SingleRebar)
        Dim objSingleRebars As TSM.SingleRebar

        objUIPICker = New TSM.UI.Picker()
        lstOutput = New List(Of TSM.SingleRebar)

        Try
            'This line asks the user to select an object from the model
            objModelObjectEnumerator = objUIPICker.PickObjects(Tekla.Structures.Model.UI.Picker.PickObjectsEnum.PICK_N_REINFORCEMENTS, "Select Singel Rebars")
            'loops through all the objects selected by the user
            While objModelObjectEnumerator.MoveNext
                objSingleRebars = TryCast(objModelObjectEnumerator.Current, TSM.SingleRebar)
                If IsNothing(objSingleRebars) = False Then
                    If objSingleRebars.Class = 5 Then
                        'adds the object to the output list
                        lstOutput.Add(objSingleRebars)
                    End If
                End If

            End While
        Catch
        End Try
        Return lstOutput
    End Function

Line 25 checks the class of the rebar. If it is equal to 5, it will be added to the output list.

You can download the sample files and codes used in this article from the link below:

If you need assistance with your Tekla model, or you are looking for a Tekla Open API programmer to hire feel free to contact me. Also please visit my home page  www.software-solutions-online.com