Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: shss от 11-10-2017, 11:00:13

Название: Обновление значений расчетных параметров
Отправлено: shss от 11-10-2017, 11:00:13
Всем привет!
Столкнулся с такой проблемой: после создания материала со свойстами Thermal и применении данного матерала типу стены в Compound structure, автоматически не расчитываются параметры Heat Transfer Coefficient (U), Thermal Resistance (R) и Absorptance.
Код - C# [Выбрать]
  1. CompoundStructureLayer layer = new CompoundStructureLayer(thickness, function, materialId);
Значения этих параметров остаются пустыми, но после ручного изменения любого параметра в свойстве материала Thermal (даже просто изменение и восставноление старого параметра, чтобы кнопка  Apply стала активна), параметры сразу пересчитываются и появляются верные значения.


Есть ли какой-нибудь вариант автоматического расчета?
Название: Re: Обновление значений расчетных параметров
Отправлено: Виктор Чекалин от 12-10-2017, 07:02:15
shss,  Сергей, дай полный код, как ты создаешь материал, как его добавляешь в структуру стены и как сохраняешь.
Название: Re: Обновление значений расчетных параметров
Отправлено: shss от 12-10-2017, 07:35:13
Создание Thermal свойств:
Код - C# [Выбрать]
  1. using (Transaction tr = new Transaction(doc, "PropertySetElement creation"))
  2. {
  3.     tr.Start();
  4.     var asset = new ThermalAsset("MyThermal", ThermalMaterialType.Solid)
  5.      {
  6.           Compressibility = 0.0,
  7.           Density = 0.0,
  8.           ElectricalResistivity = 0.0,
  9.           Emissivity = 0.0,
  10.           Permeability = 0.0,
  11.           Porosity = 0.0,
  12.           Reflectivity = 0.0,
  13.           SpecificHeat = 0.0,
  14.           SpecificHeatOfVaporization = 0.0,
  15.           ThermalConductivity = 0.0,
  16.           VaporPressure = vaporPressure,
  17.           TransmitsLight = transmitsLight,
  18.           Behavior = StructuralBehavior.Isotropic
  19.       };
  20.      
  21.       if (asset.ThermalMaterialType == ThermalMaterialType.Gas)
  22.           asset.GasViscosity = 0.0;
  23.       if (asset.ThermalMaterialType == ThermalMaterialType.Liquid)
  24.           asset.LiquidViscosity = 0.0;
  25.  
  26.     PropertySetElement pse = PropertySetElement.Create(doc, asset);
  27.     tr.Commit();
  28. }
  29.  

Для материал, я просто делаю дубликат:
Код - C# [Выбрать]
  1. Material materialTypeForDuplicate = new FilteredElementCollector(doc).OfClass(typeof(Material)).FirstOrDefault() as Material;
  2. Material material = materialTypeForDuplicate.Duplicate(String.Concat(materialTypeForDuplicate.Name, "_copy")) as Material;
  3. material.SetMaterialAspectByPropertySet(MaterialAspect.Thermal, pse.Id);
  4.  

Создание нового слоя для типа стены:
Код - C# [Выбрать]
  1. CompoundStructure structure = wallType.GetCompoundStructure();
  2. IList<CompoundStructureLayer> layers = structure.GetLayers();
  3. CompoundStructureLayer layer = new CompoundStructureLayer(thickness, MaterialFunctionAssignment.Structure, material.Id);
  4. layers.Add(layer);
  5. wallType.SetCompoundStructure(structure);
  6.  
Название: Re: Обновление значений расчетных параметров
Отправлено: Александр Пекшев aka Modis от 12-10-2017, 13:21:32
А если вызвать doc.Regenerate()?
Название: Re: Обновление значений расчетных параметров
Отправлено: shss от 12-10-2017, 13:53:14
В итоге получилось, что обновление параметров, происходит не во всех шаблонах, то есть при создании файла с помощью стандартного метрического шаблона, все работает, при использовании пользовательского шаблона - нет, буду искать, какова разница между шаблонами, может, где-то галочка не стоит.
Название: Re: Обновление значений расчетных параметров
Отправлено: Виктор Чекалин от 13-10-2017, 07:58:05
А если вызвать doc.Regenerate()?
Тоже думал, но документация гласит, что при коммите транзакции регенерация модели всегда вызывает автоматом. А метод нужно вызывать, если есть необходимость в рамках транзакции что то перегенерить. Суда исходным данным, Сергей транзакцию коммитил. Хотя попробовать конечно можно.
Название: Re: Обновление значений расчетных параметров
Отправлено: shss от 13-10-2017, 08:02:01
Хотя попробовать конечно можно.
Да, я пробовал регенерировать модель в ходе транзакции до выполнения коммита, но результат не менялся. Сейчас пробую различные шаблоны для проверки и пытаюсь найти отличия, почему где-то пересчитываются значения, а где-то нет.