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