Skip to content
  • Categories
Collapse
Solibri Society Forum
  1. Home
  2. Comments & Feedback
  3. Tech Talks
  4. COBie Type Description

COBie Type Description

Scheduled Pinned Locked Moved Tech Talks
5 Posts 3 Posters 812 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    Dan.Natu
    wrote on last edited by
    #1

    Hi all,

    I would like some help understanding how to get Type Description filled in information take off. In the end to get it exported to COBie.
    From what I understand and see in Solibri I have the following Information for a Light.
    *I filled in the description in the IFC “Component Description” if it’s related to its instance and “Type Description” if its related to Type for an easier understanding of the exercise.
    6169779c-bce2-4704-90a7-971678820509-image.png

    For Type Description I have to go relations / Define by type and there I have the following:
    4f8914ec-81a4-4b1f-8a80-9f70c6e57dfb-image.png

    When I do information take-off, I schedule all components from the model. I want to schedule by type basically, to get my COBie Type Information. So I schedule Type Name (this info can be found as well at the component tab) and I need to schedule a description. The description is the one from Component so the schedule is wrong. Check the picture below:
    6c80e3b1-be48-44a4-92e2-d53df5a715d5-image.png

    To get the Type description I need to pull the information from Relations, which I did. Check the picture below:
    5aa7168f-c887-4ede-9f45-11c580e364dd-image.png

    My question is, how do I get it reported in one row, rather than having the Type name in one row and the Type description in the 2nd row ? When I export to COBie it creates different rows.
    I might be doing the take-off wrong?
    Any help will be much appreciated.

    Thank you 🙂

    1 Reply Last reply
    0
    • R Offline
      R Offline
      Rooschuz
      wrote on last edited by
      #2

      Hey Dan,
      If I understand the question correctly, I think you should be able to find the ‘Type Description’ data somewhere in the Pset tabs in Solibri… depending on what settings you use to export your IFC? For example, I have just used the out the box Arch sample project in Revit 2021 and exported an IFC with the basic ‘Export Revit Property Sets’ – just as a test.

      See light fixture below and highlighted Type Description in Revit.

      f12248c2-638d-4adc-9555-fdf4ecb54527-image.png

      The data comes through in the Identity Data tab in Solibri and can be mapped straight into the ITO – see two snips below.

      fe3564a7-7a8d-4a02-8e93-e5ce1de7c9d8-image.png

      7d1f47d0-717c-448b-a311-866e6ce41fda-image.png

      Would you like to share your export settings and we can see if this approach will work on your example? Alternatively, could you share what data comes through in your tabs in your first image?

      Hope this helps!

      1 Reply Last reply
      0
      • D Offline
        D Offline
        Dan.Natu
        wrote on last edited by
        #3

        Hi.
        Thank you for the reply.
        You are right, this information gets exported if I use Revit Property Sets, but in reality, in IFC, that is not the Type description. If you go to relations by type in Solibri, the Type description doesn’t match with the Type description from Identity Data.
        Hence Revit description from Type is not Type Description in IFC. I might be mistaken on this.

        I am trying to avoid Revit Property sets as it gets a lot of unnecessary information to IFC and makes the file big. I am trying to keep it clean.

        john.lippJ 1 Reply Last reply
        0
        • R Offline
          R Offline
          Rooschuz
          wrote on last edited by
          #4

          Hmmm, I agree that Revit Property Sets are not ideal. My test did seem to bring through the correct information ie. Type description in Revit into the Solibri ITO. I had also run a test using the Defines by Type & Description as you had done and was getting similar results i.e. data on two lines.

          Would you be willing to share your IFC test file so that I can have a closer look using your settings?

          1 Reply Last reply
          0
          • john.lippJ Offline
            john.lippJ Offline
            john.lipp
            replied to Dan.Natu on last edited by
            #5

            @dan-natu

            Out of the box without using the API, you aren’t able to create a single row in ITO to extract the description of the type. You’ll need to use either a Javascript ITO or an Information API jar.

            If you look at the Type 1.4 or Type 2015 ITOs that are part of the COBie UK Resources of the COBie extension, it uses a Javascript ITO Column to extract the description Identification property from the the component.

            There is a video on this extension here:
            https://www.youtube.com/watch?v=uH_KTavsEZU

            More information on the Javascript ITO can be found here:
            https://society.solibri.com/category/23/javascript-api

            You can also use the Info API to create a .jar file to place in the lib folders that creates a Custom Info properties in the information of the component. More information on the information API can be found here: https://society.solibri.com/topic/563/information-api

            I attached such in a zip that contains the information API project along with the “smc-api-info-TypeDescription-1.0.0.jar” you can place in the lib folder of the Solibri program files. There is also a “Type Desc.ito” that has a javascript ITO that extracts the description of the type of a component if it exists.

            smc-api-info-TypeDescription.zip

            08c89199-0778-4f31-b538-d70925d17aec-image.png

            The code for the information API is below:

            package com.solibri.info;
            
            import java.util.Optional;
            import java.util.Collection;
            import com.solibri.smc.api.info.Information;
            import com.solibri.smc.api.model.Component;
            import com.solibri.smc.api.model.PropertyType;
            import com.solibri.smc.api.model.Relation;
            
            /**
             * This example custom information returns the description of a components type
             * if it exists.
             * 
             */
            public class TypeDescription implements Information<String> {
            
            	@Override
            	public String getUniqueId() {
            		return "TypeDescription";
            	}
            
            	@Override
            	public Optional<String> getInformation(Component component) {
            		Optional<String> oInfo = null;
            		Component typeComponent = getTypeComponent(component);
            
            		if (typeComponent != null) {
            			if (typeComponent.getDescriptionText().isPresent()) {
            				oInfo = typeComponent.getDescriptionText();
            			}
            		}
            		return oInfo;
            	}
            
            	@Override
            	public PropertyType getType() {
            		return PropertyType.STRING;
            	}
            
            	private Component getTypeComponent(Component component) {
            		Collection<Component> col = component
            				.getRelated(Relation.of(Relation.Type.DEFINES_BY_TYPE, Relation.Direction.BACKWARD));
            		if (!col.isEmpty()) {
            			return (Component) col.iterator().next();
            		} else {
            			return null;
            		}
            	}
            }
            

            The code for the JavaScript ITO is below:

            importClass(com.solibri.smc.api.model.Relation)
            importClass(com.solibri.smc.api.model.ComponentType)
            importClass(java.util.HashSet)
            
            function getValue(row, components) {
              var typeDescSet = new HashSet();
            
              for (var iterator = components.iterator(); iterator.hasNext();) {
                var component = iterator.next();
                var typeComponent = getTypeComponent(component);
                if (typeComponent != null) {
                  if (typeComponent.getDescriptionText().isPresent()) {
                    typeDescSet.add(typeComponent.getDescriptionText().get());
                  }
                }
              }
              return getSetAsString(typeDescSet);
            }
            
            function getTypeComponent(component) {
              var col = component.getRelated(Relation.of(Relation.Type.DEFINES_BY_TYPE, Relation.Direction.BACKWARD));
              if (!col.isEmpty()) {
                return col.iterator().next();
              } else {
                return null;
              }
            }
            
            function getSetAsString(set) {
              var returnString = "";
              var setIterator = set.iterator();
              if (setIterator.hasNext()) {
                returnString = setIterator.next();
              }
              while (setIterator.hasNext()) {
                returnString += ", " + setIterator.next();
              }
              return returnString;
            }
            
            1 Reply Last reply
            0

            Copyright © 2025 Solibri Inc. | Powered by NodeBB

            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • Categories