Скидки на VetCAD++
dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Прочее ПО от Autodesk > Revit > Revit 2017. Как удалить лишние уровни с сохранением элементов модели?

Revit 2017. Как удалить лишние уровни с сохранением элементов модели?

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 13.03.2018, 09:26 #1
Revit 2017. Как удалить лишние уровни с сохранением элементов модели?
Nels
 
конструктор, строитель
 
Уфа
Регистрация: 08.10.2006
Сообщений: 441
Отправить сообщение для Nels с помощью ICQ

Nels вне форума Вставить имя

Если уровни просто удалить, то удаляются привязанные к уровню элементы модели (перекрытия, воздуховоды). Надо их как-то перепривязать к другому уровню с сохранением положения в модели. Как это можно сделать?
Просмотров: 1327
 
Непрочитано 14.03.2018, 08:58
#2
Denver-22


 
Регистрация: 07.04.2010
Казань
Сообщений: 10


Если в свойствах элемента назначить ему другой уровень, то элемент сохранится на своем месте, изменится лишь величина Смещения. Массово переназначать элементам уровень не пробовал. тем более разным категориям. Может при помощи скрипта получится. По идее, потом уровень можно удалять, т.к. элементы от него освободятся.
Denver-22 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 14.03.2018, 10:22
#3
Nels

конструктор, строитель
 
Регистрация: 08.10.2006
Уфа
Сообщений: 441
Отправить сообщение для Nels с помощью ICQ


В том то и дело, что элементов обычно не одна-две штуки. К тому же, чтобы в свойствах элемента поменять уровень, надо еще найти все элементы, которые к этому уровню привязаны.
В интернете попадался плагин для выделения всех элементов, привязанных к указанному уровню, но он для 2010 версии ревит и в 2017 не работает. Может кто-то сможет поделиться свежим плагином?
Nels вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.03.2018, 10:43
#4
YarUnderoaker

Негропроект, инженегр-конструктор
 
Регистрация: 16.02.2008
Черкассы
Сообщений: 741


Есть расширение для Ревита IdeateApps от Ideate Software. Там есть команда Smart Delete которая это может (сам я правда не пробовал).
Можно у них на сайте скачать триальную версию для 2017-го.

Также есть на идее станции идея Safe way to delete levels. Голосуем.
YarUnderoaker вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.03.2018, 12:35
1 | #5
extraneous

Не верблюд
 
Регистрация: 07.06.2010
Москва
Сообщений: 1,133


Nels, попробуй макрос:
Код:
[Выделить все]
		public void CleanupLevels()
		{
			Document doc = this.ActiveUIDocument.Document;
			List<Level> levels = new FilteredElementCollector(doc)
				.OfClass(typeof(Level))
				.WhereElementIsNotElementType()
				.Cast<Level>()
				.ToList();
			
			List<ElementId> levelsToDelete = new List<ElementId>();
			
			using(Transaction t = new Transaction(doc))
			{
				t.Start("Levels");
				foreach(Level lev in levels)
				{
					foreach(Level lev2 in levels)
					{
						if (lev.Id.IntegerValue >= lev2.Id.IntegerValue) continue;
						bool checkEquals = this.Equals(lev.Elevation, lev2.Elevation);
						if(checkEquals)
						{
							levelsToDelete.Add(lev2.Id);
							this.MoveElementsFromLevels(doc, lev, lev2);
						}
					}
				}
				
				//doc.Delete(levelsToDelete);
				t.Commit();
			}
			
			
			
		}
		
		
		private bool Equals(double d1, double d2)
		{
			double eq1 = Math.Round(d1, 6);
			double eq2 = Math.Round(d2, 6);
			return eq1 == eq2;
		}

		
		private void MoveElementsFromLevels(Document doc, Level mainLevel, Level secondLevel)
		{
			int mainLevelid = mainLevel.Id.IntegerValue;
			int secondLevelid = secondLevel.Id.IntegerValue;
			
			//walls
			List<Wall> walls = new FilteredElementCollector(doc)
				.WhereElementIsNotElementType()
				.OfClass(typeof(Wall))
				.Cast<Wall>()
				.ToList();
			
			foreach(Wall w in walls)
			{
				try
				{
					int baseLevelId = w.get_Parameter(BuiltInParameter.WALL_BASE_CONSTRAINT).AsElementId().IntegerValue;
					int topLevelId = w.get_Parameter(BuiltInParameter.WALL_HEIGHT_TYPE).AsElementId().IntegerValue;
					
					if(baseLevelId == secondLevelid)
					{
						w.get_Parameter(BuiltInParameter.WALL_BASE_CONSTRAINT).Set(mainLevel.Id);
					}
					if(topLevelId == secondLevelid)
					{
						w.get_Parameter(BuiltInParameter.WALL_HEIGHT_TYPE).Set(mainLevel.Id);
					}
				}
				catch{}
			}
			
			//columns
			List<FamilyInstance> cols = new FilteredElementCollector(doc)
				.WhereElementIsNotElementType()
				.OfClass(typeof(FamilyInstance))
				.OfCategoryId(new ElementId(BuiltInCategory.OST_StructuralColumns))
				.Cast<FamilyInstance>()
				.ToList();
			
			foreach(FamilyInstance col in cols)
			{
				try
				{
					int baseLevelId = col.get_Parameter(BuiltInParameter.FAMILY_BASE_LEVEL_PARAM).AsElementId().IntegerValue;
					int topLevelId = col.get_Parameter(BuiltInParameter.FAMILY_TOP_LEVEL_PARAM).AsElementId().IntegerValue;
					
					if(baseLevelId == secondLevelid)
					{
						col.get_Parameter(BuiltInParameter.FAMILY_BASE_LEVEL_PARAM).Set(mainLevel.Id);
					}
					if(topLevelId == secondLevelid)
					{
						col.get_Parameter(BuiltInParameter.FAMILY_TOP_LEVEL_PARAM).Set(mainLevel.Id);
					}
				}
				catch{}
			}
			
			
			//floors
			List<Floor> floors = new FilteredElementCollector(doc)
				.WhereElementIsNotElementType()
				.OfClass(typeof(Floor))
				.Cast<Floor>()
				.ToList();
			
			foreach(Floor f in floors)
			{
				try
				{
					int levelid = f.get_Parameter(BuiltInParameter.LEVEL_PARAM).AsElementId().IntegerValue;
					if(levelid == secondLevelid)
					{
						f.get_Parameter(BuiltInParameter.LEVEL_PARAM).Set(mainLevel.Id);
					}
				}
				catch{}
			}
			
			//beams
			List<FamilyInstance> beams = new FilteredElementCollector(doc)
				.WhereElementIsNotElementType()
				.OfClass(typeof(FamilyInstance))
				.OfCategoryId(new ElementId(BuiltInCategory.OST_StructuralFraming))
				.Cast<FamilyInstance>()
				.ToList();
			
			foreach(FamilyInstance beam in beams)
			{
				try
				{
					int levelid = beam.get_Parameter(BuiltInParameter.INSTANCE_REFERENCE_LEVEL_PARAM).AsElementId().IntegerValue;
					if(levelid == secondLevelid)
					{
						double elevOldSta = beam.get_Parameter(
							BuiltInParameter.STRUCTURAL_BEAM_END0_ELEVATION )
							.AsDouble();
						beam.get_Parameter(BuiltInParameter.STRUCTURAL_BEAM_END0_ELEVATION )
							.Set(elevOldSta + 0.1);
						beam.get_Parameter(BuiltInParameter.STRUCTURAL_BEAM_END0_ELEVATION )
							.Set(elevOldSta);
						
						beam.get_Parameter(BuiltInParameter.INSTANCE_REFERENCE_LEVEL_PARAM).Set(mainLevel.Id);
					}
				}
				catch{}
			}
			
			//components
			List<FamilyInstance> comps = new FilteredElementCollector(doc)
				.WhereElementIsNotElementType()
				.OfClass(typeof(FamilyInstance))
				.Cast<FamilyInstance>()
				.ToList();
			foreach(FamilyInstance comp in comps)
			{
				try
				{
					int levelid = comp.LevelId.IntegerValue;
					if(levelid == secondLevelid)
					{
						comp.get_Parameter(BuiltInParameter.FAMILY_LEVEL_PARAM).Set(mainLevel.Id);
					}
				}
				catch{}
			}

		}
Макрос находит уровни, наложенные один на другой, затем привязанные к ним элементы, и перепривязывает элементы к уровню, который был создан первым.
Работает только для стен, перекрытий, колонн, балок и "Компонентов".
__________________
Шаблон Revit для разделов КМ/КЖ
extraneous вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 19.03.2018, 22:12
#6
Egorex


 
Регистрация: 25.09.2009
Сообщений: 169


Цитата:
Сообщение от Nels Посмотреть сообщение
Надо их как-то перепривязать к другому уровню с сохранением положения в модели. Как это можно сделать?
Dynamo

А можно пояснить, зачем удалять уровни?
Egorex вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 20.03.2018, 12:01
#7
Nels

конструктор, строитель
 
Регистрация: 08.10.2006
Уфа
Сообщений: 441
Отправить сообщение для Nels с помощью ICQ


Цитата:
Сообщение от Egorex Посмотреть сообщение
А можно пояснить, зачем удалять уровни?
Да по невнимательности были созданы дублирующие уровни и по ним созданы элементы (первые уровни были не видны на имевшихся разрезах, надо было контролировать через спецификацию). Надо одни из них удалить, но элементы оставить.
Nels вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 20.03.2018, 14:27
#8
Egorex


 
Регистрация: 25.09.2009
Сообщений: 169


Если был бы конкретный файл, я бы попробовал сделать конкретный скрипт Dynamo
Egorex вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Прочее ПО от Autodesk > Revit > Revit 2017. Как удалить лишние уровни с сохранением элементов модели?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти оффлайн-хелп для REVIT 2017 RUS Alex-x-x-x Поиск литературы, чертежей, моделей и прочих материалов 2 03.09.2017 11:44
Ошибка Advance Steel extention / Revit 2017/ Помогите разобраться. melkiadez Revit 0 20.03.2017 12:48
REVIT 2017. Revit Extensions Не армирует колонны любого сечения, и также вручную, в чем может быть проблема? erikbond Revit 4 16.12.2016 10:21
Нагрузки в SCAD приложены к ферме 2 раза. Как быстро удалить лишнюю нагрузку с элементов схемы? Sokrat SCAD 2 02.10.2015 13:12
"Как удалить часть модели, если все листы сформированы mig84 AutoCAD 21 11.08.2011 16:56

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||