ADN Club > Civil 3D API

Добавление диаметров труб

(1/3) > >>

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);        }    }}

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии