Grasshopper-Tekla Live Link FAQ

Tekla Structures
Not version-specific
Tekla Structures
Environment
Not environment-specific

The Grasshopper-Tekla live link setup and documentation can be found here.

Back to top

A: The Grasshopper-Tekla Live Link is a set of components that installs into the Grasshopper UI. When these components are used in a Grasshopper definition they will create and modify objects in Tekla Structures.

Image
Grasshopper Tekla Live Link


Setup and documentation for the link: https://support.tekla.com/help/tekla-structures/not-version-specific/grasshopperteklalink

Back to top

Q: What is the Grasshopper Component?

A: The Grasshopper Component offers an optional way to trigger a Grasshopper definition without having Rhino or Grasshopper visible. It uses the the Rhino.Inside technology which requires Rhino 7 or newer.

The Grasshopper Component is a Tekla Structures plugin that shows up in the Component Catalog in Tekla Structures. It looks and behaves like a traditional Tekla custom component, but can trigger any Grasshopper definition in the background. Grasshopper then creates the objects in Tekla Structures, using the Grasshopper Tekla live link.

Image
Grasshopper Component


Setup and documentation for the GH component: https://support.tekla.com/help/tekla-structures/not-version-specific/ts-grasshopper-component

The rest of this FAQ primarily concerns the GH-Tekla live link.

Back to top

Q: What version of Rhino should I use?

A: The Grasshopper-Tekla live link works with both Rhino 6, Rhino 7 and Rhino 8 (see below).

  • If upgrading your Rhino version, you don’t need to re-install the link.
  • For Rhino 8, you need to make Rhino 8 use the .Net Framework - use the SetDotNetRuntime command in Rhino and set it to NETFramework, then restart Rhino.
  • Rhino download here: https://www.rhino3d.com/download/rhino-for-windows/evaluation

The previously mentioned Grasshopper Component works with Rhino 7 or newer.
 

Back to top

A: Yes, you just need to make Rhino 8 use the .Net Framework.

  • Use the SetDotNetRuntime command in Rhino and set it to NETFramework, then restart Rhino.


The Grasshopper Component requires at least Rhino 8.5 and needs to be updated to version 1.4 to work properly. It will then offer an option to use Rhino 8 within the dialog. Grab the latest version from Tekla Warehouse:

https://warehouse.tekla.com/#/catalog/details/94b0cde2-3aab-4e50-b983-e6273a44e0b1

 

Back to top

A: If using the 1.16 link installation packages or newer, just unpack GrasshopperTeklaLink.gha and GrasshopperTeklaLink.Setup.exe into any location on the disk and run the Setup.exe. Keep Rhino closed during the setup.

 

For older packages, to update the link or switch to target another Tekla version, you need to replace the link .gha file.

  1. In Grasshopper, click File > Special Folders > Components Folder
  2. Close Grasshopper and Rhino, and replace GrasshopperTeklaLink.gha in the Components Folder with the new version .gha file from the installation package. If there's a GrasshopperTeklaLink.ghlink file in the folder, delete it.
  3. Launch Grasshopper again
  4. If the new link version targets another Tekla Structures version, the Grasshopper components (including any already inserted ones) will now interact with the new Tekla version instead.

 

Back to top

Q: Why doesn't the Tekla tab or components show up in Grasshopper?

A: If the Tekla tab doesn’t show up, the link file might be blocked as it’s downloaded from the internet. To unblock the file,

  1. Navigate to the folder containing the .gha file. For Tekla 2024 it's located the Tekla Structures bin folder, for Tekla 2023 or older it's in the Grasshopper Libraries folder (in Grasshopper, click File > Special Folders > Components Folder).
  2. Right-click GrasshopperTeklaLink.gha and click Properties
  3. Under the General tab, click on the Unblock button, and click OK. (If you don’t see an Unblock button, the file is not blocked.)
  4. Restart Rhino/Grasshopper. The Tekla tab should now be visible in Grasshopper.

 

If using Rhino 8, you will need to make Rhino 8 use the .Net Framework if you haven't done so already - use the SetDotNetRuntime command in Rhino and set it to NETFramework, then restart Rhino.

 

Another (rarer) reason might be that memory loading using COFF is turned off.

  1. Type GrasshopperDeveloperSettings into the Rhino command prompt.
  2. Check the memory load checkbox and hit OK.
    Image
    GH Memory load
  3. Restart Rhino/Grasshopper. The Tekla tab should now be visible in Grasshopper.

In even rarer cases you might need to uncheck this option instead.

 

Back to top

A: If the components fail to create anything in the Tekla Structures view, here are some things to check:

  • First check if there are any generated objects listed at the output of the Tekla components in Grasshopper.
    • If there are objects listed in Grasshopper, right-click the component and click Zoom to objects in Tekla to move the Tekla view to the objects.
    • If you can't see the objects in Tekla, make sure to set the work area in Tekla Structures to the entire model (right-click the Tekla view -> Set work area to entire model) and adjust the view depth so it's large enough to include any generated geometry (right-click the view -> Properties... -> Increase the view depth both up and down by adding a few 0:s).
    • If still nothing shows up, check that the profiles and grades you're using for the Tekla components exist in your environment and change them if not. If you haven't set the profile etc yourself the default values apply, but these might also be missing from your environment (in that case you might want to change them from the Grasshopper menu: Tekla > Default Attributes...).
  • If there aren't any objects at the output of the Tekla components, and/or the components are red:
    • Make sure you launch Tekla Structures and open a model first, and then launch Rhino and Grasshopper. Otherwise the API link can't be established.
    • Make sure you have installed a version of the link that matches the Tekla Structures version you are using. If needed you can re-install the link as per the instructions on the help page.
    • Make sure you're not using the Viewer or Planner configuration of Tekla Structures, or the Carbon license, as you can't create objects with these.
    • If using Rhino 8, make sure you have performed the SetDotNetRuntime command in Rhino and set it to NETFramework, then restarted Rhino.

 

Back to top

Q: Why do I get the message "System.MethodAccessException: Current Tekla Structures module configuration does not allow this operation" when inserting a Tekla GH-component?

Image
ConfigurationException.png


A: This happens if you use the Viewer or Planner configuration of Tekla Structures, or the Carbon license. The link requires a modelling license. Also make sure you pick a modelling configuration on startup.
 

Back to top

Q: Can I shut down Rhino/Grasshopper and Tekla and later continue where I left off?

A: Yes, the inserted Grasshopper components will reconnect with the objects in the Tekla model the next time you open Grasshopper.

  • Remember to save both the the model and the Grasshopper definition before closing, to avoid getting duplicated objects in the model.

  • When starting work again, make sure you open the model first and then launch Grasshopper.

  • The object mapping information is stored in the 'Grasshopper' subfolder of the Tekla model folder.

 

Back to top

Q: Can I view the model without Grasshopper?

A: Yes, you can open the Tekla model without launching Grasshopper or even having it installed and the geometry is still there. If you can't see anything, try fitting the view area to the whole model and adjust the view depth both up and down from the view properties.

  • Note that any modifications you make to the generated objects might be reset the next time you run the Grasshopper definition (to avoid this, you can Bake the objects to Tekla from the Grasshopper components' right-click menu).

 

Back to top

Q: Can I work in Imperial units?

A: Yes. For geometry, the Tekla components will use the units of the currently open Rhino document, and translate that to the units of the currently open Tekla model.

  • The scale is read whenever a Rhino document is created or opened (so you'd need to re-open the document if changing the scale from the document settings).
  • Certain attribute inputs like parametric profile sections might need to be in mm even if the Tekla and Rhino models are using something else like feet and inches. Scale accordingly.
  • If the Rhino document is changed, points picked in Tekla will use the new scale. However referenced or internalized Rhino/Grasshopper point and geometry values won't adapt. Keep this in mind if reusing a script from a different system.
    • E.g the example definitions are created using metric (mm) units, so this means the slider values etc might need to be adjusted if viewed with imperial units.

 

Back to top

Q: How can I make a copy of the Grasshopper file so that the copy creates new objects instead of updating the existing ones?

A: To duplicate a GH definition so that new objects are generated, you'd need to copy the GH components into a new GH definition (rather than copying the file itself). This gives the GH components new GUIDs and they will create new objects in Tekla. It's quickly done using keyboard shortcuts:

  1. Ctrl+A select all
  2. Ctrl+C copy all
  3. Ctrl+N new GH file
  4. Ctrl+V paste all
  5. Ctrl+S save the new file

The new file will now generate and refer to new Tekla objects.

     

    Back to top

    Q: Why do I suddenly get duplicated objects in my Tekla model? 

    A: Here is a list of things that might cause the mapping to break between GH and Tekla, resulting in changing guids or duplicated objects:

    • Undoing in Tekla rather than Grasshopper (e.g. pressing Ctrl+Z with the Tekla window active, this could easily happen subconsciously)
      • Objects that have been removed by GH might be brought back by Tekla and have no connection to the GH script any more.
    • Copying a Tekla component within Grasshopper
      • This creates new objects in Tekla in the same location as the old ones (as it should). The new objects will be left behind if you delete the new component in GH (whether you delete the component manually or by undoing the copying).
    • Cutting and pasting a Tekla component within Grasshopper
      • Will create duplicated objects, since when you paste the component GH actually inserts a new component with a new instance GUID (so no connection to the old component can be derived).
    • Not saving the GH script before closing
      • Objects that were created by new GH components that weren't saved with the script will remain in the Tekla model.
    • Not saving the Tekla model before closing
      • Tekla objects that have been removed by GH will be re-loaded into the Tekla model when reopening, and don't belong to a GH component any more.
    • Losing the API connection - can happen e.g. if Tekla or Rhino/GH is being unresponsive for too long during a solution (or more rarely under a number of unpredictable circumstances).
      • This usually means the mapping can't be updated between GH and Tekla, so continuing to work with the GH script might break the mapping.
      • There should appear warnings on the GH components if this seems to happen, in which case you'd need to restart Rhino before continuing.
      • This is tricky to replicate, so the warnings might not always be triggered. Let us know if you find a way to replicate situations where the mapping breaks!

    Of course, having daily backups of both the script and the Tekla model (including the Grasshopper subfolder) helps if things go really south.
     

    Back to top

    Q: Can I put my Tekla components inside a cluster?

    A: Generally no. Keep any components that create objects in the Tekla model outside of clusters. Otherwise the model might stop updating or the wrong objects get updated. Other Tekla components like Attributes are usually fine to put in clusters though.

    • Clusters are kind of special, Grasshopper treats them as separate definitions from the main definition. So anything coded for the main definition won't reach into clusters (like baking). There are other hiccups to be expected as well, e.g. if you make a copy of the cluster, both clusters will refer to the same Tekla objects. This is true even if you untangle the clusters (which is just like making a copy of a normal GH definition). For these reasons you shouldn’t have object-generating Tekla components inside of clusters.

     

    Back to top

    Q: Why do the Tekla components handle matching of tree inputs differently from how standard Grasshopper components do the matching?

    A: Most Tekla components read in every input at once as trees or lists to be able to perform batch operations when reading/writing guids to file, updating the Tekla model etc. Otherwise execution would be much slower. As a side effect the components can't take advantage of Grasshopper's default mapping behavior and instead often resort to flattening every input (and then rebuild the tree structure for the output).
     
    The workaround when the behaviour seem inconsistent is to craft the input lists/trees to have an equal number of entries, so that they can all be paired off correctly. You can match the length of your inputs (number of input elements in each tree) by duplicating the inputs you need in the smaller trees using the Duplicate Data component, measuring the reference list lengths with the List Length component. The Trim Tree component might in some cases be used on the longer tree depending on what level you'd like to match, and sometimes you need to be a bit clever with graftings and flattenings.

    For cetain components like Rebar Group and Component the input matching can be particularly tricky, since these components need to support one-to-one, many-to-one and many-to-many relationships, and each group or component can have multiple input shapes or secondaries. See the question about inserting multiple connections later in this FAQ.
     

    Back to top

    Q: Why doesn't the output structure of my Tekla component seem to match the input tree structure?

    A: If there are empty branches or null objects in the input, some branches may be missing from the output structure.

    • If the output structure seems wrong or flattened for some other reason, you can use the Unflatten Tree component on the output with the input tree as the guide.

     

    Back to top

    Q: How can I read properties or UDA:s from an existing Tekla part?

    A: To extract information from existing Tekla objects, reference them into the Grasshopper definition. Then:

    • For report properties, use the Get Property component.
    • For UDA:s, use the Get UDA value or Get All UDAs component.
    • For other attributes like profile, class, position, numbering etc as well as the geometry use the Deconstruct and Expand components.
    • For extracting solid geometry use the components Convert to Brep or Convert to Mesh (faster).

     

    Back to top

    Q: Why can't I set UDA:s for my parts with the Attributes or Set UDAs component? The component goes red or the value simply doesn't show up in Tekla where I expect.

    A: Some things to look out for:

    • Make sure you're using the right syntax to set the attributes, if you aren't using the Construct UDA component. There's further info in the help and in the UDA input tooltip. If the component is red there might be some useful error information in the balloon tooltip.

      • Syntax example:
        MyStringUDA "my user text"
        MyIntegerUDA 3
        MyFloatUDA 12.5
      • To set multiple UDAs to a single object, they need to be input as multiline data and not as a list. UDAs in a list will be sequentially assigned to different objects.
    • Make sure you're using the right type for the UDA.
      • Make sure that the UDA value you're setting has the type (string/double/int) that Tekla expects.
      • In general, any UDA can be set as either a string, a double or an int and Tekla won't complain. However the dialogs and reports in Tekla that use the UDA will expect it to be one specific type, so you need to use the correct one.
      • Use the Construct UDA component to easily create an UDA with any type, or see the syntax in the help or in the UDA input tooltip on how the UDA type can be specified as a text input.
    • Make sure you're using the right name for the UDA.
      • You can set an UDA with any name from Grasshopper and it will be written to the db, but if you want a new UDA to show up in the User-defined attributes dialog in Tekla the UDA needs to be specified in objects.inp: https://support.tekla.com/doc/tekla-structures/2023/sys_customizing_uda
      • The UDA names are case-sensitive, so there's a difference between "Comment" and "comment".
      • If setting existing UDA fields, note that the name is generally _not_ the label that you see in the User-defined attributes dialog. Instead, you need to find out the actual name of the UDA that's backing the field.
        • To get the name of an existing UDA field, use the Get All UDAs component
          1. Insert an object manually into Tekla Structures
          2. In the User-defined attributes dialog, set a value in the field you're interested in
          3. Reference the object into Grasshopper and use the Get All UDAs component to read the UDA name
        • Alternatively, save a preset and check the UDA names from there.
          1. In the User-defined attributes dialog, set a value in the field you're interested in 
          2. Save the part attributes as a preset
          3. Open the preset file (located in [modelfolder]/attributes, the one that has the extension .more contains the UDA:s) in a text editor
          4. Locate your value
            -> The name before the value is your UDA name
             
          Image
          Get-UDA-Name.png

       

      Back to top

      Q: The edges of my plate or slab look all weird and jagged.

      A: If the boundary you feed to the Plate or Slab component is doing a lot of twists and turns, the default maximum of control points that gets added in Tekla (99) might not be enough.

      • In that case, right-click the component in Grasshopper and increase the point limit from the context menu. Keep in mind that more than 99 points quickly drains performance without producing a much better output if the boundaries are smooth and simple.

       

      Back to top

      Q: Why do I get the message "Solution exception:Cannot construct an arc with three points in a line" when trying to create a lofted plate between two arcs?

      Image
      image.png


      A: This is a tolerance or rounding issue on the Tekla side, where Tekla (incorrectly) assumes the three points are co-linear when in reality they are part of an arc with really big radius. It’s been reported and awaits a fix.

      • Meanwhile one solution is to move the middle point of the arc one or a couple of millimeters, so that Tekla is able to create the arc and the lofted plate.
      • If your lofted plates are large, the required movement can be quite substantial. In this case an alternative solution could be to convert the arc to a polyline (Curve To Polyline) prior to feeding it into the Lofted Plate component.

       

      Back to top

      Q: How can I control the orientation of my rebar hooks?

      A: If your rebars are straight, Tekla doesn't always know which way the hooks are supposed to point. In that case you can add a middle point onto your rebar centerlines or shapes in Grasshopper and move it sideways a mm or so. This results in a triangle (start point - middle - end point) that fixes the plane of the rebar and thus the orientation of the hooks. As long as the deviation in the middle is small and within the tolerance, Tekla will still consider these bars as straight.
       

      Back to top

      Q: How can I create a steel assembly that’s “flat”, i.e. the parts are added directly rather than as sub-assemblies?

      A: Use the Cast Unit component instead of the Assembly component, with the steel parts as input.
       

      Back to top

      Q: Why do I get the message "Solution exception:Could not load type 'Tekla.Structures.Geometry3d.FacetedBrepWithNormals [...]" when trying to create an Item?

      A: The message means that you don't have the correct Service Packs for Tekla Structures installed and therefore can't create Items with the link. The link for Tekla Structures 2017 requires 2017 SP5 or newer, the link for Tekla Structures 2017i requires 2017i SP1 or newer. You need to upgrade Tekla Structures with a supported Service Pack, then it will work correctly. In later Tekla versions no specific Service Pack is required.
       

      Back to top

      Q: Why can't I create (solid) items from my Grasshopper/Rhino breps? The items are showing up as either non-solid or not at all.

      A: To create solid items, the Rhino/Grasshopper breps need to be convertible to valid/good closed meshes. 

      When transferring a brep to Tekla, the brep is automatically meshed by the Rhino API using standard coarse settings. Note that the structure of the mesh will depend on how the brep has been created. Even if the brep looks good in Rhino/Grasshopper, the resulting mesh can be invalid (e.g. it can contain non-manifold geometry, missing faces or duplicated points). This will prevent Tekla form using the mesh to create a valid and/or closed item. To identify issues you can try to mesh the brep yourself as in point 3 below.

      Suggestions:

      1. If creating the breps by lofting or sweeping
        • Make sure your section/rail curves don't contain double points (the Simplify Curve component can be used to resolve this).
        • Note that the section curves usually need to be completely planar if you want to cap the brep (check with the IsPlanar component).
      2. Make sure the brep or resulting mesh isn't self-intersecting.
        • E.g. tight bends can cause this.
      3. Do the conversion to a mesh yourself in Rhino (Mesh command) or Grasshopper (Mesh Brep component) and use that as the geometry input for the Item component.
        • Try different settings for e.g. Minimum edge length (as edges shorter than 1-2 mm are difficult for Tekla to handle).
        • Check the resulting mesh with the Check command in Rhino to find any anomalies.
          • The MeshRepair command can solve some of the found issues.
          • The ShowEdges command can help you find and visualize naked edges (indicating problem areas).
          • The AlignMeshVertices command can help you get rid of small and problematic faces.
          • In general you should keep working on the mesh until the Check command shows that this is a good mesh.
        • ​In some cases the check can return "This is a good mesh" but the mesh still can't be used to create an item in Tekla.
          • If there are additional warnings/"Important things to consider" like intersecting faces that prevents solid creation, try to get rid of those. You might need to recreate the Mesh with different settings.
          • Another reason for failure can be very small/thin triangles. Try using the AlignMeshVertices command with different DistanceToAdjust parameters before transferring the mesh. After this you might need to run the MeshRepair command again.

       

      Back to top

      Q: Why do my generated items seem triangulated in the model and in drawings (and not smooth as in Rhino)?

      A: Tekla doesn't handle breps as NURBs, and so breps are automatically converted to triangulated polymeshes before being imported to Tekla as items. Any internal lines are hidden in Tekla by default, but the imported surfaces still consist of triangles and polygons that may show up.

      • To get a finer meshing, you can right-click the Item component and select the "Smooth" meshing option.
      • For full control, you can mesh the breps yourself in Rhnio (Mesh command) or Grasshopper (Mesh Brep component) and feed the resulting mesh to the Item component for transfer to Tekla. This way you can get the item as smooth or coarse as you desire.

       

      Back to top

      Q: How can I assign custom shape names to the items I create through Grasshopper?

      A: The GH-Tekla link assigns a random shape name (based on a unique GUID) to any shape it creates when inserting an item using the Item component. The shape name needs to be unique to avoid conflicts, therefore as a safeguard there's no way to override the automatic naming directly using only the Item component.

      However, setting a custom shape name can be done using the Create Shape component like this:
       

      Image
      image.png


      Side note: This is also a much more efficient way of inserting items in case they all have the same shape

       

      • Only one shape gets created and added to the Tekla Structures database
      • Item copies are then created by feeding a list of points/lines to the Line input of the Item component).

       

      Back to top

      Q: Why can't I insert my connection/detail/plugin with the Component component?

      A: Some possibilities:

      • Most likely you're not having the correct input sequence. Especially plugins can require non-intuitive inputs using the Component Input component. In these cases the input sequence might be tricky to find out since the required input order in Grasshopper/Tekla API might be different from the input order you would use when inserting the component manually in Tekla. There can be a subtle differences as well, for example an input of two points might need to be given as either a list of two points or as two single points in separate inputs. See the question below on how to find out the correct input sequence.
        • Note that custom parts always require two input points in the API (see below)
        • If trying to insert a plugin that can accept a group of several input objects, and only one input object is provided in Grasshopper, you might need to duplicate that object to create a list. See an example in How to find the correct input sequence below.
      • There might already exist a (valid or invalid) connection at that location, either created by the current component or by another component.
        1. Select the Component component and check if anything is selected in the Tekla model. If so, delete it. Then re-trigger the Component component by double-clicking it.
        2. Filter out and delete any already inserted connections directly in the Tekla model. Then re-trigger the Component component by double-clicking it.

       

      Back to top

      Q: Why can't I insert my custom part with the Component component?

      A: A custom part requires you to provide two input points for the Component component in Grasshopper, even if the part is inserted using just one click in the Tekla UI. For these single-point custom parts the second point can usually be a point straight above the first point.
       

      Back to top

      Q: How can I find out the correct input sequence for my connection/detail/plugin?

      A: Insert the connection/detail/plugin manually into Tekla Structures, then reference it into Grasshopper and use the Deconstruct Component component. The input can be determined by examining the outputs named Input types and Inputs.

      Here's an example using the Floor Layout component:

       

      Image
      FloorLayoutInput.png


      From this we can see that we should use 5 inputs for the Plugin Input component (turns out these inputs correspond to the origin, x-axis, y-axis, outline and optionally z-axis) when inserting this plugin from Grasshopper. Note that this input sequence is different from what we would pick when inserting the plugin manually through the Tekla UI. This is common for how certain plugins behave when inserting them through the API.

      Note that if a plugin input type is N Objects, it means that a list of objects is expected when inserting the plugin through Grasshopper. Therefore, in case we have only one input object we need to create a list by duplicating the object. Here's an example using the Radial array tool:

      Image
      Grasshopper Radial Array Tool

       

      Back to top

      Q: How can I insert multiple connections/details/plugins? No matter what I try, I get too many or too few connections or they show up in the wrong places.

      A: If you're trying to add many connections to many members simultaneously it can sometimes be tricky to set the input and attributes for the Component component in the right way. Because of the different ways you can connect members (one-to-one, many-to-one, many-to-many, and each case with one or multiple secondaries) it's not always even possible for the component alone to match up the inputs in the desired way, no matter how you try to flatten or graft the inputs.

      The workaround is to craft the geometry inputs like main part and secondaries (and the attributes input if needed) to have an equal number of items or branches, so that they can be paired off correctly with each other. This means that each element in e.g. the Main part input list should have a corresponding element at the same position in all the other input lists (if the connection uses multiple secondaries or multiple points, the corresponding element would be a branch/group of objects).

      You can match the length of your inputs (number of input elements) by duplicating the data in the input with the smaller set of data using the Duplicate Data component, measuring the longer list lengths with the List Length component. The Trim Tree component might in some cases be used on the larger input depending on what level you'd like to match, and sometimes you need to be a bit clever with graftings and flattenings. Finally the Cross Reference component can be used to create pairs from two lists of input that should all be connected together (i.e. for something similar to a mesh of beams).

      Here's an example with some different connection scenarios and how you might set up the input for them:
      https://drive.google.com/file/d/15KBYP-mzcyxCZGjp7RWvXhPu6iMlDx-Z/view?usp=sharing

      Note that this example was made with the Default environment. If you open it with something else the profiles and connections might not exist in the environment, in which case you need to swap them out for something else that's appropriate.

       

      Image
      InsertConnections_Example.png

       

      Back to top

      Q: How can I find the correct attribute names to use with a Tekla connection/detail/plugin?

      A: Similar to UDA:s, note that the attribute name is generally _not_ the label that you see in the connection/detail/plugin dialog. Instead, you need to find out the actual name of the attribute that's backing the field.

      The easiest way to find out the attribute name is use the Deconstruct Component component in Grasshopper.

      1. Insert the plugin/connection/detail manually into Tekla Structures
      2. In the plugin dialog, fill in a value in the field you're interested in and modify the component
      3. Reference the plugin into Grasshopper
      4. Use the Deconstruct Component component to view the attribute names
      5. Locate your value
        -> The name before the value is your attribute name
        Image
        Get-Attribute-Name-0.png


      Or save a preset for the Tekla plugin/connection/detail and check the atribute names from there

      1. Insert the plugin/connection/detail manually into Tekla Structures
      2. In the plugin dialog, fill in a value in the field you're interested in 
      3. Save the plugin attributes as a preset
      4. Open the preset file (located in [modelfolder]/attributes) in a text editor
      5. Locate your value
        -> The name before the value is your attribute name.
        Image
        Get-Attribute-Name-1.png

      A third alternative is to use the extension Component Variable Importer in Tekla Structures to find your field value and the associated attribute:

      1. Insert the plugin/connection/detail manually into the Tekla Structures model
      2. In the plugin dialog, fill in a value in the field you're interested in and modify the component
      3. Launch the Component Variable Importer extension 
      4. Select the component/plugin in the model
      5. Find your value i the table
        -> Next to the value is the associated attribute name. Note the attribute type as well so you can use the correct syntax.
        Image
        Get-Attribute-Name-2(CVI).png

       

      Back to top

      Q: How can I control the up-direction of a detail or connection?

      A: In link version 1.16, there's a new input Up Direction for the Component component if you connect a detail or connection.

      Image
      up

      If you use a preset attribute file for the component, the Up direction (on the 'general' tab in the component dialog in Tekla) must be saved as "auto" in order for this input to take effect.

       

      In older versions, to set the up-direction, use the attribute zsuunta (values 0-6) and feed it into the Attributes input of the Component component (using the appropriate syntax). This attribute is backing the Up-direction field on the General tab in the detail or connection dialog.

       

      Image
      zsuunta.png
      • This is sometimes needed since default "auto" up direction and detail type don't always work as intended when inserting components through the API.
      • The attributes zang1 and zang2 set the angles in case you need them.

       

      Back to top

      Q: How can I set the type of a detail?

      A: To set the detail type, use the attributes detail_type (values 0-2 for end/intermediate/reversed) and feed it into the Attributes input of the Component component (using the appropriate syntax). This attribute is backing the Detail type field on the General tab in the detail dialog.

       

      Back to top

      A: Rebar sets are currently not supported.

       

      Back to top

      A: There are no dedicated components for bolts or welds. As a workaround it´s possible to insert any component or plugin that generates these object types.

       

      Back to top

      Q: How can I create and modify drawings?

      A: For drawings, check out this open source project by Grzegorz Olszewski:

      For installation you'll find downloadable Releases on the right hand side.

      Some example videos here:

      It's an open source project, so feel free to contribute or reach out to Greg on LinkedIn or GitHub with suggestions!

       

      Back to top

      Q: How can I create my own C# scripting components?

      A: Using C# Script components in Grasshopper can make many calculations and operations more straightforward. Referencing the Tekla Open API into the scripting components allows you to create things in Tekla Structures and manipulate the model in ways that perhaps aren’t supported by the current GH-Tekla link. Some examples below. Here are the initial steps:

      1. Add a C# Script component
      2. Add references to the Tekla Open API 
        • Right-click the component icon/text -> Manage Assemblies...,
        • Add Tekla.Structures.dll and Tekla.Structures.Model.dll from the \bin\ folder (or \nt\bin\plugins\ in older versions) in your Tekla Structures install folder.
      3. Add, rename or remove inputs for the component
        • To change if the input is handled as a single object or as a lists, right click the input and choose the corresponding Access type.
        • To change the expected input object type, right-click the input and set the Type hint.
      4. Double-click the C# Script component icon/text to start coding.


      If you’re really into it, scripts like these can be made into proper GH components using Visual Studio. In that case it’s convenient to start with these Grasshopper template files: https://marketplace.visualstudio.com/items?itemName=McNeel.GrasshopperAssemblyforv6

      For newer Rhino releases, update the references accordingly.

      The Tekla Open API is well documented with code examples here: https://developer.tekla.com/tekla-structures/documentation/

      And check out the very active Tekla API forum, both for looking up old questions and asking new ones: https://forum.tekla.com/index.php?/forum/269-api-general-discussions/

      Back to top

      C# Example 1: Create beams in Tekla

      Here’s an example that creates and updates beams in Tekla Structures using a C# Script component in Grasshopper. This is similar to how the existing Beam components work.

      Creating new Tekla objects through the Tekla API is rather straight-forward. The biggest challenge initially is setting up the GUID tracking so that you can update already inserted objects, rather than keep inserting new objects into the model every time the solution runs. This example point to a way of handling that as well.

      https://drive.google.com/file/d/1ntkVvQKQJmbBpdGxN7jvFjc7yMLGwBw7/view?usp=sharing

       

      Image
      CreateTeklaBeams_ScriptingExample.png

       

      Back to top

      C# Example 2: Add gridlines to a grid

      The Grid component only creates orthogonal grids. To do something else you'd need the Open API. Here's an example that inserts gridlines to an existing grid:

      https://drive.google.com/file/d/1BzxLum6o9AIKJ61tk0i0YkH8ZhDULTNv/view?usp=sharing

       

      Image
      CreateGridLines_ScriptingExample.png

       

      Back to top

      C# Example 3: Proper chamfers for Tekla plates

      This is a C# Script component that turns arcs in plates or slab boundaries into rounded or arc-point chamfers in Tekla (rather than faceted edges as is the default).

      It works with general curves/boundaries as well (not just with arcs) by approximating the boundary with arcs, but that's a bit unstable.

      This scripting component can be used to create rounded voids in a similar fashion, if you use it on the cutting plate/slab (like in the last example in the definition).

      https://drive.google.com/file/d/1nDZ3uuGHXg41dwfZLtgzYJKznflQCYgP/view?usp=sharing

       

      Image
      PlateChamfer_ScriptingExample.png

       

      Back to top

      C# Example 4: Human UI

      Human UI is a way to provide a traditional windows user interface for a Grasshopper definition, which means the end user doesn’t need to fiddle around with the script components to set the parameters.
      Human UI requires the Human UI plugin to work.

      Below is an example of using Human UI with a GH-Tekla definition.

      The example also shows how you can add a button in Human UI that asks the user to pick objects in Tekla Structures or open the profile catalog. This behavior isn’t supported out of the box, but can be achieved with the provided C# Script component which can trigger any command from the context menu of any component or param (i.e. not just Tekla components). Just give the command name as input (It's sufficient to just use the beginning of the command name if it's unique).

      https://drive.google.com/file/d/1_aIrUNoJzynPTGRhrbgtELWGyHU1HHKG/view?usp=sharing

       

      Image
      image.png

       

      Back to top

      Q: I didn't find an answer in this FAQ - what's next?

      A: There's a dedicated section for Grasshopper-Tekla interoperability in the McNeel Discourse forum:

      https://discourse.mcneel.com/c/grasshopper/tekla/

      The McNeel forums are a good place for any pure Rhino- and Grasshopper-related questions as well - lots of questions already have answers, and users are very good at helping each other out. Try a web search first for your question. The McNeel helpdesk and your local Rhino reseller are also happy to answer questions - they are the experts.

      For Tekla-related questions head over to the Tekla discussion forum or the Extensions sub-forum and post your question there, or contact your local Tekla helpdesk. The Grasshopper-Tekla link documentation can also be useful.

       

      Back to top
      Was this helpful?