- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
hello im trying to change Type of level. but my code is not working properly. Maybe someone could look at my code and tell me whats wrong? Im beginner to revit api.
Level levelToCheckBy = document.GetElementByName<Level>("Level 1");
var walls = document.GetElementsByType<Wall>()
.Where(w => !w.IsCurtain())
.Where(w =>
w.get_Parameter(BuiltInParameter.WALL_BASE_CONSTRAINT).AsElementId() == levelToCheckBy.Id &&
w.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET).AsDouble() > 1 &&
w.WallType.get_Parameter(BuiltInParameter.ALL_MODEL_DESCRIPTION).AsString() == "TheOne")
.ToList();
// exercise 2
List<WallType> wallTypes = new List<WallType>();
foreach (var wall in walls)
{
wallTypes.Add(wall.WallType);
}
List<WallType> newWallTypes = new FilteredElementCollector(document)
.OfCategory(BuiltInCategory.OST_Walls)
.WhereElementIsElementType()
.Cast<WallType>()
.ToList();
List<WallType> resultWallTypes = wallTypes.Except(newWallTypes).ToList();
List<Wall> walls2 = new List<Wall>();
List<ElementId> ids = new List<ElementId>();
foreach (WallType resultWallType in resultWallTypes)
{
ids.Add(resultWallType.Id);
walls2 = new FilteredElementCollector(document)
.OfCategory(BuiltInCategory.OST_Walls)
.WhereElementIsNotElementType()
.Cast<Wall>()
.Where(x => x.GetTypeId() == resultWallType.Id)
.ToList();
}
foreach (var wallInstance in walls2)
{
TaskDialog.Show("da", wallInstance.Name.ToString() +
" " + walls2.Count().ToString());
}
string levelTypeName = "CustomLevelType";
LevelType levelType = new FilteredElementCollector(document)
.OfCategory(BuiltInCategory.OST_Levels)
.WhereElementIsElementType()
.Cast<LevelType>()
.FirstOrDefault(x => x.Name == levelTypeName) as LevelType;
TaskDialog.Show("CustomLevelType", levelType.Name.ToString());
ElementId lvlElementId = levelType.Id;
TaskDialog.Show("customleveltypeID", lvlElementId.IntegerValue.ToString());
List<LevelType> existinglevelTypes = new FilteredElementCollector(document)
.OfCategory(BuiltInCategory.OST_Levels)
.WhereElementIsElementType()
.Cast<LevelType>()
.ToList();
foreach (LevelType existinglevelType in existinglevelTypes)
{
TaskDialog.Show("existinglevelType", existinglevelType.Name);
Parameter para = existinglevelType.get_Parameter(BuiltInParameter.ELEM_TYPE_PARAM);
TaskDialog.Show("para", para.StorageType.ToString());
TaskDialog.Show("para", para.Definition.Name);
TaskDialog.Show("para", para.Id.ToString());
using (Transaction trans = new Transaction(document))
{
trans.Start("Set new type for level");
TaskDialog.Show("messgae", "Jestem w transakcji");
para.Set(lvlElementId);
trans.Commit();
}
}
Solved! Go to Solution.