This article explains how you can rotate existing parts in a Tekla Structure model using the Tekla Open API in VB.Net.
Add reference to the Tekla.Structures.Model and Tekla.Structures 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:
You will need to get reference to the part you wish to rotate. Below are some of the options for achieving this:
1 – Create a new part and keep a reference to the part: Insert Concrete Beam Using VB.Net (Tekla Open API)
2 – Get reference to an existing part in the tekla model: VB.Net Get Reference to Object, Tekla Open API
3- Ask the user to select parts from the model: Tekla Open API: Ask User to Select Objects.
Rotation About Main Axis:
In order to rotate the part about its main axis, pass the reference to the part object to the function below:
Imports TSM = Tekla.Structures.Model Imports TSG = Tekla.Structures.Geometry3d ''' <summary> ''' Rotates the part 90 deg about its main axis ''' </summary> ''' <param name="objBeam"></param> ''' <remarks></remarks> Private Sub Rotate(ByRef objBeam As TSM.Beam) Dim appTekla As New TSM.Model objBeam.Position.RotationOffset = 90 objBeam.Modify() appTekla.CommitChanges() appTekla = nothing End Sub
If you are trying to rotate the part about its centerline axis there are a couple solutions. One workaround would be to move the part after the rotation.
A better solution would be to offset the start and end points so that they are located at the center of the part.
Rotation About the Other 2 Axis:
Rotation about the other 2 axis can be done by moving the start and end points. In the example below the part is rotated 90 deg about the Y axis.
Imports TSM = Tekla.Structures.Model Imports TSG = Tekla.Structures.Geometry3d ''' <summary> ''' Rotates the part 90 deg about Y axis ''' </summary> ''' <param name="objBeam"></param> ''' <remarks></remarks> Private Sub RotateAboutY(ByRef objBeam As TSM.Beam) Dim appTekla As New TSM.Model Dim dblLen As Double Dim dblXCen As Double Dim dblYCen As Double Dim dblZCen As Double Dim objPoint1 As TSG.Point Dim objPoint2 As TSG.Point Dim objPoint1New As TSG.Point Dim objPoint2New As TSG.Point objPoint1 = objBeam.StartPoint objPoint2 = objBeam.EndPoint dblXCen = objPoint1.X dblYCen = objPoint1.Y dblZCen = (objPoint1.Z + objPoint2.Z) / 2 dblLen = ((objPoint1.X - objPoint2.X) ^ 2 + (objPoint1.Y - objPoint2.Y) ^ 2 + (objPoint1.Z - objPoint2.Z) ^ 2) ^ 0.5 objPoint1New = New TSG.Point objPoint2New = New TSG.Point objPoint1New.X = dblXCen objPoint2New.X = dblXCen objPoint1New.Y = dblYCen - dblLen / 2 objPoint2New.Y = dblYCen + dblLen / 2 objPoint1New.Z = objPoint1.Z + dblLen / 2 objPoint2New.Z = objPoint2.Z - dblLen / 2 objBeam.StartPoint = objPoint1New objBeam.EndPoint = objPoint2New objBeam.Modify() appTekla.CommitChanges() appTekla = Nothing End Sub
Similar to what was mentioned in the previous section, the main axis extends between the start and end points. Therefore this may not give correct results and may require an additional move command, or start and end points offsets.
You can download the sample files and code used in this article from the link below: