ADN Club > Civil 3D API
Добавление диаметров труб
Doublefish:
1. Подскажите пожалуйста, как программно добавить диаметры труб в существующий список элементов?
2. Если нет нужных диаметров труб в семействе, то как программно добавить диаметры в семейство?
Александр Ривилис:
Могу ошибаться, так как не специалист в Civil 3D, но думаю что ни то, ни другое невозможно с использованием Civil 3D API
Дмитрий Загорулькин:
Попробуйте посмотреть метод PartFamily.AddPartSize.
Как добраться:
- получаем объект Network, например, через документ: CivilDocument.GetPipeNetworkIds и извлекаем из этой коллекции нужную.
- у объекта Network через свойство PartsListId добираемся до ее списка элементов.
- у списка элементов - объекта типа PartsList есть метод GetPartFamilyIdsByDomain. Через него добираемся до семейств нужного типа. Также этот объект имеет методы AddPartFamilyByGuid и AddPartFamilyByDescription для добавления семейств элементов в список.
- у каждого семейства из полученной коллекции есть метод AddPartSize.
Как он работает - ни разу не пробовал. Так что, изучайте. Если получится - отпишитесь, пожалуйста ;)
Doublefish:
В существующий список элементов названия семейств добавляются нормально.
Проблема с добавление диаметров.
Autodesk.Civil.DatabaseServices.Styles.SizeFilterRecord oSizeFilterRecord = oPartFamily.PartSizeFilter;
oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.PipeInnerDiameter, 0);
oPartFamily.AddPartSize(oSizeFilterRecord);
добавляется первый диаметр в список.
1. Как добавить второй диаметр в список ?
2. Пишет что метод PartSizeFilter является устаревшим - как правильно добавить в список ?
Дмитрий Загорулькин:
1. Дык, наверное так: oSizeFilterRecord.GetParamByContextAndIndex(PartContextType.PipeInnerDiameter, 1); Был неправ.
2. Autodesk.Civil.DatabaseServices.Styles.SizeFilterRecord oSizeFilterRecord = new PartSizeFilter(oPartFamily);
Upd: По поводу первого пункта см. код (строчки 45 и 47), из него все понятно должно быть (проверок там по минимуму, для реального использования нужно дорабатывать):
--- Код - C# [Выбрать] ---using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.EditorInput;using Autodesk.AutoCAD.Runtime; using Autodesk.Civil.ApplicationServices;using Autodesk.Civil.DatabaseServices;using Autodesk.Civil.DatabaseServices.Styles; namespace CivilTest{ public class PartListEditTest { [CommandMethod("AddPartSizeToPartList")] public void AddPartSizeToPartList() { Document adoc = Application.DocumentManager.MdiActiveDocument; Database db = adoc.Database; Editor ed = adoc.Editor; CivilDocument cdoc = CivilDocument.GetCivilDocument(db); ObjectIdCollection netIds = cdoc.GetPipeNetworkIds(); object sizeVal = null; if (netIds.Count > 0) { ObjectId netId = netIds[0]; using (Transaction tr = db.TransactionManager.StartTransaction()) { Network net = tr.GetObject(netId, OpenMode.ForRead) as Network; PartsList partsList = tr.GetObject(net.PartsListId, OpenMode.ForRead) as PartsList; ObjectIdCollection pipeFamIds = partsList.GetPartFamilyIdsByDomain(DomainType.Pipe); if (pipeFamIds.Count > 0) { PartFamily family = tr.GetObject(pipeFamIds[0], OpenMode.ForWrite) as PartFamily; SizeFilterRecord sizeFlRec = new SizeFilterRecord(family); SizeFilterField sizeFlField = sizeFlRec.GetParamByContextAndIndex(PartContextType.PipeInnerDiameter, 0); sizeFlField.Value = sizeFlField.ValueList[1]; sizeVal = sizeFlField.Value; family.AddPartSize(sizeFlRec); } tr.Commit(); } } if (sizeVal != null) ed.WriteMessage("\nДобавлен размер: {0}", sizeVal); } }}
Навигация
Перейти к полной версии