Revit API - New Wall Type - Как организовать слои? - PullRequest
1 голос
/ 16 апреля 2020

Я работаю над созданием новых типов стен с нуля с помощью Revit API, и я продвинулся далеко (на мой взгляд), однако у меня есть еще одна заключительная проблема, которую нужно решить.

Как мне организовать слои стены так, как я хочу? стена создается со всеми слоями внутри границы ядра, что, очевидно, не идеально. Я пытаюсь получить слои Fini sh 1 и Fini sh 2 снаружи по обе стороны от границы ядра

Любая помощь приветствуется.

Моя стена создается следующим образом:

enter image description here

Вот источники, на которые я смотрел, но не нашел ничего, что показывало бы, как переупорядочить слои.

https://thebuildingcoder.typepad.com/blog/2009/06/core-structural-layer.html

https://thebuildingcoder.typepad.com/blog/2013/08/setting-the-compound-structure-core-and-shell-layers.html

https://thebuildingcoder.typepad.com/blog/2012/03/updating-wall-compound-layer-structure.html <- <strong>вероятно, наиболее информативный , но я не нахожу команду "setlayerIndex"

Вот мой код ниже: Код

using (Transaction tx = new Transaction(doc))
            {
                tx.Start("ButtonName");
                newWallType = firstWallType.Duplicate("New Wall") as WallType;
                ElementId oldLayerMaterialId = firstWallType.GetCompoundStructure().GetLayers()[0].MaterialId;
                MaterialFunctionAssignment oldLayerFunction = firstWallType.GetCompoundStructure().GetLayers()[0].Function;
                MaterialFunctionAssignment newLayerFuncion = MaterialFunctionAssignment.Finish1;
                Debug.Print("newLayerFuncion: " + newLayerFuncion)


                CompoundStructureLayer newLayer = new CompoundStructureLayer(.25, newLayerFuncion, oldLayerMaterialId);
                CompoundStructureLayer newLayer2 = new CompoundStructureLayer(.5, MaterialFunctionAssignment.Finish2, oldLayerMaterialId);

                CompoundStructure structure = newWallType.GetCompoundStructure();

                IList<CompoundStructureLayer> layers = structure.GetLayers();


                layers.Add(newLayer);
                layers.Add(newLayer2);
                structure.SetLayers(layers);

                newWallType.SetCompoundStructure(structure);

                tx.Commit();
            }

            return Result.Succeeded;
        }


Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

После долгих трудов, хорошего ночного отдыха и перечитывания ссылка Джереми

Мне просто нужно было добавить structure.SetNumberOfShellLayers(ShellLayerType.Exterior, 1); в нужном месте, после structure.SetLayers(layers);

1 голос
/ 16 апреля 2020

Пожалуйста, ознакомьтесь со стандартной документацией Revit API на CompoundStructureLayer и его членах . Вероятно, нет необходимости в setlayerIndex или альтернативном способе достижения того, что вам нужно.

...