Remap Revit element levels so levels can be deleted without deleting geometry
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
public partial class ThisApplication
{
private void Module_Startup(object sender, EventArgs e)
{
}
private void Module_Shutdown(object sender, EventArgs e)
{
}
#region Revit Macros generated code
private void InternalStartup()
{
this.Startup += new System.EventHandler(Module_Startup);
this.Shutdown += new System.EventHandler(Module_Shutdown);
}
#endregion
public void LevelRemap()
{
Document doc = this.ActiveUIDocument.Document;
UIDocument uidoc = this.ActiveUIDocument;
Level level = doc.GetElement(uidoc.Selection.PickObject(ObjectType.Element, "Select level")) as Level;
Level levelBelow = new FilteredElementCollector(doc)
.ofClass(typeof(Level))
.Cast<Level>()
.OrderBy(q => q.Elevation)
.Where(q => q.Elevation <= level.Elevation)
.FirstOrDefault();
if (levelBelow == null)
{
TaskDialog.Show("Error", "No level below " + level.Elevation);
return;
}
List<string> paramsToAdjust = new List<string> { "Base offset", "Sill Height", "Top offset"};
List<Element> elements = new FilteredElementCollector(doc).WherePasses(new ElementLevelFilter(level.Id)).ToList();
using (Transaction t = new Transaction(doc, "Level Remap"))
{
t.Start();
foreach (Element e in elements)
{
foreach (Parameter p in e.Parameters)
{
if (p.StorageType != StorageType.ElementId || p.IsReadOnly)
continue;
if (p.AsElementId() != level.Id)
continue;
double elevationDiff = level.Elevation - levelBelow.Elevation;
p.Set(levelBelow.Id);
foreach (string paramName in paramsToAdjust)
{
Parameter pToAdjust = e.LookupParameter(paramName);
if (pToAdjust != null && !pToAdjust.IsReadOnly)
pToAdjust.Set(pToAdjust.AsDouble() + elevationDiff);
}
}
}
t.commit();
}
}
Error:'Autodesk.Revit.DB.FilteredElementCollector' does not contain a definition for 'ofClass' and no extension method 'ofClass' accepting a first argument of type 'Autodesk.Revit.DB.FilteredElementCollector' could be found (are you missing a using directive or an assembly reference?) (CS1061) - C:\ProgramData\Autodesk\Revit\Macros\2018\Revit\AppHookup\levelRemap\Source\levelRemap\ThisApplication.cs:47,6
Kindly give a solution to clear the error