Обновление значений расчетных параметров

Автор Тема: Обновление значений расчетных параметров  (Прочитано 2572 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Всем привет!
Столкнулся с такой проблемой: после создания материала со свойстами Thermal и применении данного матерала типу стены в Compound structure, автоматически не расчитываются параметры Heat Transfer Coefficient (U), Thermal Resistance (R) и Absorptance.
Код - C# [Выбрать]
  1. CompoundStructureLayer layer = new CompoundStructureLayer(thickness, function, materialId);
Значения этих параметров остаются пустыми, но после ручного изменения любого параметра в свойстве материала Thermal (даже просто изменение и восставноление старого параметра, чтобы кнопка  Apply стала активна), параметры сразу пересчитываются и появляются верные значения.


Есть ли какой-нибудь вариант автоматического расчета?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
shss,  Сергей, дай полный код, как ты создаешь материал, как его добавляешь в структуру стены и как сохраняешь.

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Создание 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.  

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
А если вызвать doc.Regenerate()?

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
В итоге получилось, что обновление параметров, происходит не во всех шаблонах, то есть при создании файла с помощью стандартного метрического шаблона, все работает, при использовании пользовательского шаблона - нет, буду искать, какова разница между шаблонами, может, где-то галочка не стоит.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
А если вызвать doc.Regenerate()?
Тоже думал, но документация гласит, что при коммите транзакции регенерация модели всегда вызывает автоматом. А метод нужно вызывать, если есть необходимость в рамках транзакции что то перегенерить. Суда исходным данным, Сергей транзакцию коммитил. Хотя попробовать конечно можно.

Оффлайн shssАвтор темы

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Хотя попробовать конечно можно.
Да, я пробовал регенерировать модель в ходе транзакции до выполнения коммита, но результат не менялся. Сейчас пробую различные шаблоны для проверки и пытаюсь найти отличия, почему где-то пересчитываются значения, а где-то нет.