[Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class cmd : IExternalCommand { public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements) { UIDocument uiDoc = cmdData.Application.ActiveUIDocument; Document doc = uiDoc.Document; Selection selection = uiDoc.Selection; Transaction ts = new Transaction(doc, this.ToString()); ts.Start(); // Reference refWall = selection.PickObject(ObjectType.Element, " 选择墙: "); Wall wall = doc.GetElement(refWall) as Wall; WallType wallType = wall.WallType; CompoundStructure cs = wallType.GetCompoundStructure(); bool bHas = false; // 是否拥有保温层 int iWidth = 100; // 要设置的保温层厚度 IList<CompoundStructureLayer> layers = cs.GetLayers(); // 找到所有层 foreach (CompoundStructureLayer layer in layers) { if (layer.Function == MaterialFunctionAssignment.Insulation) // 判断保温层 { bHas = true; layer.Width = iWidth / 304.8; } } if (!bHas) // 没有保温层则创建 { CompoundStructureLayer newLayer = new CompoundStructureLayer(); newLayer.Function = MaterialFunctionAssignment.Insulation; newLayer.Width = iWidth / 304.8; // layers.Add(newLayer); layers.Insert( 0, newLayer); } cs.SetLayers(layers); wallType.SetCompoundStructure(cs); // ts.Commit(); return Result.Succeeded; } }