Обновление структуры слоев стены
Вопрос: Я пытаюсь обновить слои стены с помощью API. Но столкнулся с проблемой при изменении толщины слоя стены. Что же я делаю не так?
Ответ: В разъяснении технической поддержки ADN на проблему Изменения в структуре слоев стены не применяются к типоразмеру стены, которое доступно только членам ADN, говорится, что метод GetCompoundStructure возвращает копию структуры слоев. Соответственно изменения, сделанные на структуре стены, которые получены с помощью этого метода, не отражаются на оригинальном типоразмере стены. Для того чтобы применить изменения к типоразмеру, необходимо вызвать метод SetCompoundStructure.
Ниже представлен пример рабочего кода, в котором используется метод CompoundStructure. SetLayerWidth:
- UIApplication uiApp = commandData.Application;
- UIDocument uiDoc = uiApp.ActiveUIDocument;
- Document doc = uiDoc.Document;
- Transaction trans = new Transaction( doc );
- trans.Start( "changeLayerWidth" );
- Reference ref1 = uiDoc.Selection.PickObject(
- ObjectType.Element, "Pick a wall" );
- ElementId id = ref1.ElementId;
- Element elem = doc.get_Element( id );
- Wall wall = elem as Wall;
- if( wall == null )
- return Result.Failed;
- CompoundStructure cs
- = wall.WallType.GetCompoundStructure();
- double layerWidth = 0.2;
- int layerIndex = cs.GetFirstCoreLayerIndex();
- IList<CompoundStructureLayer> cslayers
- = cs.GetLayers();
- foreach( CompoundStructureLayer csl in cslayers )
- {
- cs.SetLayerWidth( layerIndex, layerWidth );
- layerIndex++;
- }
- wall.WallType.SetCompoundStructure( cs );
- trans.Commit();
Я проверил работоспособность кода на предмет изменения толщины слоя стены. Все работает замечательно.
Источник: http://thebuildingcoder.typepad.com/blog/2012/03/updating-wall-compound-layer-structure.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=306
Опубликовано 05.11.2013Отредактировано 05.11.2013 в 02:16:55