@Anonymous try this in civil 2021:
public static StyleCollectionBase GetPressurePartsListsExt(StylesRoot styles)
{
var myType = typeof(StylesRootPressurePipesExtension);
var myArrayMethodInfo = myType.GetMethods(BindingFlags.Static | BindingFlags.NonPublic);
StyleCollectionBase pressPartLists;
var myGetPressPartLists = myArrayMethodInfo[0]; // the number 0 here depends on the composition of AeccPressurePipesMgd.dll library
var arParam = new object[1];
arParam[0] = styles;
pressPartLists = myGetPressPartLists.Invoke(null, arParam) as StyleCollectionBase;
return pressPartLists;
}
public static void GetCatalog()
{
var doc = CivilApplication.ActiveDocument;
using (Transaction tr = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
{
using (Autodesk.AutoCAD.ApplicationServices.DocumentLock docLock = Application.DocumentManager.MdiActiveDocument.LockDocument())
{
StyleCollectionBase partslists = GetPressurePartsListsExt(doc.Styles);
foreach (var plObj in partslists)
{
//try civil 2021
PressurePartList partList = (PressurePartList)tr.GetObject(plObj, OpenMode.ForRead);
List<PressurePartSize> parts = partslist.GetParts(PressurePartDomainType.Pipe);
List<PressurePartSize> appurtenance = partslist.GetParts(PressurePartDomainType.Appurtenance);
List<PressurePartSize> fitting = partslist.GetParts(PressurePartDomainType.Fitting);
}
}
tr.Dispose();
}
}
in civil 2018, 2019, 2020 you are use the reflexion, something identical to what is in the function GetPressurePartsListsExt, type this
System.Type objTypePressurePart = System.Type.GetType("Autodesk.Civil.DatabaseServices.Styles.PressurePartSize, AeccPressurePipesMgd", false, true);
var myArrayMethodInfo = objTypePressurePartList.GetMethods();
var myGetPressPartLists = myArrayMethodInfo[43]; //key the method to use
myGetPressPartLists.Invoke(partlist, arParam)