OpenRoads Designer CONNECT Edition SDK Help

Create element template from CSV template

The below code creates the new element templates under categories Point, Linear, Terrain and Corridor reading values from .csv file.

The below image shows the content from .csv file.


//Required References
using System;
using Bentley.CifNET.ContentManagementModel;
using System.IO;
using Bentley.CifNET.GeometryModel.ContentManagement;

  public void CreateElementTemplate()
        {
            //Get object space
            Bentley.CifNET.CadSystem.IObjectSpaceManager objectSpaceManager = Bentley.CifNET.ServiceManager.Instance.GetService<Bentley.CifNET.CadSystem.IObjectSpaceManager>();
            if (objectSpaceManager == null) return;
            Bentley.CifNET.Objects.IObjectSpace objectSpace = objectSpaceManager.ObjectSpace;
            if (objectSpace == null) return;
            //Get civil model
            Bentley.CifNET.Model.CivilModel civilModel = Bentley.CifNET.Model.CivilModel.GetCivilModel(objectSpace, Bentley.CifNET.Model.GetModelOptions.CheckIfExist);
            if (civilModel == null) return;

            //Get or create ContentManagementModel
            Bentley.CifNET.ContentManagementModel.ContentManagementModel cmm = Bentley.CifNET.ContentManagementModel.ContentManagementModel.GetContentManagementModelAndCreateIfDontExist(objectSpace);
            if (cmm == null) return;

            //.CSV file name to read data for creating element templates
            string fileName = "D:\\DrawingProduction\\CreateElementTemplate.csv";

            //Read all lines from csv file into array of strings
            String[] lines = File.ReadAllLines(fileName);

            for (int itr = 1; itr < lines.Length; itr++)
            {
                string[] templateParams = lines[itr].Split(',');

                if (templateParams.Length != 2) continue;
                //Read name and category for element template from .csv file
                string templateName = templateParams[0];
                string type = templateParams[1];

                //Get category name based on type
                string categoryName = "";
                if (type == "Point")
                {
                    PointObjectSettingsProvider provider = ContentManagementProviders.Instance.GetApplicationObjectSettingsProvider(typeof(PointObjectSettings)) as PointObjectSettingsProvider;
                    categoryName = provider.Name;
                }
                else if (type == "Linear")
                {
                    LinearObjectSettingsProvider provider = ContentManagementProviders.Instance.GetApplicationObjectSettingsProvider(typeof(LinearObjectSettings)) as LinearObjectSettingsProvider;
                    categoryName = provider.Name;
                }
                else if (type == "Corridor")
                {
                    CorridorObjectSettingsProvider provider = ContentManagementProviders.Instance.GetApplicationObjectSettingsProvider(typeof(CorridorObjectSettings)) as CorridorObjectSettingsProvider;
                    categoryName = provider.Name;
                }
                else if (type == "Terrain")
                {
                    TerrainObjectSettingsProvider provider = ContentManagementProviders.Instance.GetApplicationObjectSettingsProvider(typeof(TerrainObjectSettings)) as TerrainObjectSettingsProvider;
                    categoryName = provider.Name;
                }

                //Get or Add category  
                Bentley.CifNET.ContentManagementModel.Category category = null;
                category = cmm.CategoryObjectSettingsNameSet.Get(categoryName);
                if (category == null)
                {
                    category = cmm.CategoryObjectSettingsNameSet.Add(categoryName);
                    if (category == null) continue;
                    objectSpace.PersistChanges(category);
                }

                string templatePath = categoryName + "\\" + templateName;

                //Create template
                Bentley.CifNET.Model.ElementTemplate template = civilModel.RootFile.GetOrCreateTemplate(templatePath);
                if (template == null) return;

                //Save changes
                objectSpace.PersistChanges(template);
            }
        }

Output