Hi,
What do you mean by "Custom category"? - property set?
Please see my code below. I created custom property for polyline:
internal static void CreateSteelBeamPropertySetDefinition()
{
string propertySetName = "SteelBeam";
var database = Application.DocumentManager.MdiActiveDocument.Database;
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
var PolylineClassName = RXObject.GetClass(typeof(Polyline)).Name;
//try
//{
var dictionaryPropertyDataFormat = new DictionaryPropertyDataFormat(database);
var propertySetDefinition = new PropertySetDefinition();
using (Transaction transaction1 = database.TransactionManager.StartTransaction())
{
propertySetDefinition.SetToStandard(database);
propertySetDefinition.SubSetDatabaseDefaults(database);
propertySetDefinition.Description = "Property Set Definition for Steel Beam";
propertySetDefinition.AlternateName = propertySetName;
propertySetDefinition.IsLocked = false;
propertySetDefinition.IsVisible = true;
propertySetDefinition.IsWriteable = true;
var filters = new StringCollection();
filters.Add(PolylineClassName);
propertySetDefinition.SetAppliesToFilter(filters, false);
//var automaticPropertyDefinition = new PropertyDefinition();
var propDef = new PropertyDefinition();
propDef.SetToStandard(database);
propDef.SubSetDatabaseDefaults(database);
propDef.Name = "Prefix";
propDef.Description = "Prefix of steel beam";
propDef.IsVisible = true;
propDef.IsReadOnly = false;
propDef.FormatId = dictionaryPropertyDataFormat.GetAt("Standard");
propertySetDefinition.Definitions.Add(propDef);
propertySetDefinition.SetDisplayOrder(propDef, 1);
propDef = new PropertyDefinition();
propDef.SetToStandard(database);
propDef.SubSetDatabaseDefaults(database);
propDef.Name = "Name";
propDef.Description = "Name of steel beam";
propDef.IsVisible = true;
propDef.IsReadOnly = false;
propDef.FormatId = dictionaryPropertyDataFormat.GetAt("Standard");
propertySetDefinition.Definitions.Add(propDef);
propertySetDefinition.SetDisplayOrder(propDef, 2);
propDef = new PropertyDefinition();
propDef.SetToStandard(database);
propDef.SubSetDatabaseDefaults(database);
propDef.Name = "Style";
propDef.Description = "Style of steel beam";
propDef.IsVisible = true;
propDef.IsReadOnly = false;
propDef.FormatId = dictionaryPropertyDataFormat.GetAt("Standard");
propertySetDefinition.Definitions.Add(propDef);
propertySetDefinition.SetDisplayOrder(propDef, 3);
propDef = new PropertyDefinition();
propDef.SetToStandard(database);
propDef.SubSetDatabaseDefaults(database);
propDef.Name = "Length2";
propDef.Description = "Length of steel beam";
propDef.IsVisible = false;
propDef.IsReadOnly = true;
propDef.FormatId = dictionaryPropertyDataFormat.GetAt("Standard");
propDef.SetAutomaticData(PolylineClassName, "Length");
propertySetDefinition.Definitions.Add(propDef);
propertySetDefinition.SetDisplayOrder(propDef, 4);
propDef = new PropertyDefinition();
propDef.SetToStandard(database);
propDef.SubSetDatabaseDefaults(database);
propDef.Name = "WeightPerMetre";
propDef.Description = "Weight per metre";
propDef.IsVisible = true;
propDef.IsReadOnly = false;
propDef.FormatId = dictionaryPropertyDataFormat.GetAt("Standard");
propertySetDefinition.Definitions.Add(propDef);
propertySetDefinition.SetDisplayOrder(propDef, 5);
var dictionaryPropertySetDefinitions = new DictionaryPropertySetDefinitions(database);
if (dictionaryPropertySetDefinitions.Has(propertySetName, transaction1))
{
return;
}
dictionaryPropertySetDefinitions.AddNewRecord(propertySetName, propertySetDefinition);
transaction1.AddNewlyCreatedDBObject(propertySetDefinition, true);
transaction1.Commit();
}
using (Transaction transaction2 = database.TransactionManager.StartTransaction())
{
propertySetDefinition = transaction2.GetObject(propertySetDefinition.ObjectId, OpenMode.ForWrite) as PropertySetDefinition;
var formulaPropertyDefinition = new PropertyDefinitionFormula();
formulaPropertyDefinition.SetToStandard(database);
formulaPropertyDefinition.SubSetDatabaseDefaults(database);
formulaPropertyDefinition.Name = "Length";
formulaPropertyDefinition.Description = "RESULT = [Length2]/1000";
formulaPropertyDefinition.IsVisible = true;
propertySetDefinition.Definitions.Add(formulaPropertyDefinition);
propertySetDefinition.SetDisplayOrder(formulaPropertyDefinition, 6);
formulaPropertyDefinition.SetFormulaString("RESULT = [Length2]/1000");
formulaPropertyDefinition.DataItems[0].FormatId = dictionaryPropertyDataFormat.GetAt("2 Decimal");
formulaPropertyDefinition.FormatId = dictionaryPropertyDataFormat.GetAt("2 Decimal");
transaction2.Commit();
}
}
usage:
DictionaryPropertySetDefinitions dictPropSetDef = new DictionaryPropertySetDefinitions(db);
if (!dictPropSetDef.Has("SteelBeam", acTrans))
{
CreateSteelBeamPropertySetDefinition();
}