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

ADN Club => Revit API => Тема начата: Bazinga от 26-12-2017, 12:47:46

Название: Считывание данных из семейства
Отправлено: Bazinga от 26-12-2017, 12:47:46
При считывании значений параметров семейства не забираются строковые данные.
Мой метод в лоб:
Код - C# [Выбрать]
  1.  foreach (FamilyType _type in fmg.Types)
  2.             {
  3.  
  4.                 if (_type.Name != " ")
  5.                 {
  6.                     listView1.Items.Add("\n"+_type.Name);
  7.                     //get type's parameters
  8.                     foreach (FamilyParameter fam in fmg.Parameters)
  9.                     {
  10.                         //_type.AsValueString(fam);
  11.                         listView1.Items.Add(fam.Definition.Name + "= " + _type.AsValueString(fam));// read parameters
  12.                        
  13.                     }
  14.                 }}
И что странно, но реализация Джеремми также не считывает строковые данные
Код - C# [Выбрать]
  1.  Dictionary<string, FamilyParameter> dicParam = new Dictionary<string, FamilyParameter>(fmg.Parameters.Size);
  2.             foreach (FamilyParameter fp in fmg.Parameters)
  3.             {
  4.                 string defs = fp.Definition.Name;
  5.                 dicParam.Add(defs, fp);
  6.             }
  7.             List<string> keys = new List<string>(dicParam.Keys);
  8.             keys.Sort();
  9.  
  10.             string ty = " ";
  11.             string ppr = "";
  12.  
  13.             foreach (FamilyType _type in fmg.Types)
  14.             {
  15.                 ppr = "";
  16.                 ty = "";
  17.                 if (_type.Name != " ")
  18.                 {
  19.                     ty = _type.Name + "\n";
  20.                     foreach (string _key in keys)
  21.                     {
  22.                         FamilyParameter fp = dicParam[_key];
  23.                         if (_type.HasValue(fp))
  24.                         {
  25.                             ppr += _key + "= " + FamParameterValue(_type, fp, doc) + "\n";
  26.                         }
  27.                     }
  28.                     ppr += "\n";
  29.                     wf.MessageBox.Show(ty + ppr);
  30.                 }
  31.             }
Код - C# [Выбрать]
  1.         static string FamParameterValue(FamilyType _type, FamilyParameter fp, Document doc)
  2.         {
  3.             string value = _type.AsValueString(fp);
  4.             return value;
  5.         }
В чем может быть проблема?
Название: Re: Считывание данных из семейства
Отправлено: Александр Пекшев aka Modis от 26-12-2017, 13:04:12
Ну во-первых - не делайте так:
Код - C# [Выбрать]
  1. if (_type.Name != " ")
а делайте так:
Код - C# [Выбрать]
  1. if(!string.IsNullOrEmpty(_type.Name))
Во-вторых - проверяйте какой тип данных у параметра. Это свойство StorageType. Потому-что, если у вас StorageType, допустим Integer и значение равно нулю, то метод AsValueString() ничего не вернет. Так что проверяйте тип данных и в зависимости от него используйте нужный метод
Название: Re: Считывание данных из семейства
Отправлено: Bazinga от 26-12-2017, 13:10:02
Александр Пекшев aka Modis, так в том то и дело, если StorageType (Double/Integer) все считывает, а string нет.
Строку пустой видит и все
Название: Re: Считывание данных из семейства
Отправлено: Александр Пекшев aka Modis от 26-12-2017, 13:11:53
Александр Пекшев aka Modis, так в том то и дело, если StorageType (Double/Integer) все считывает, а string нет.
Строку пустой видит и все
Если StorageType == String, тогда используйте метод AsString() вместо AsValueString()
Название: Re: Считывание данных из семейства
Отправлено: Bazinga от 27-12-2017, 08:50:50
Александр Пекшев aka Modis, получилось! Спасибо за совет ;)
Название: Re: Считывание данных из семейства
Отправлено: Алексей Кузин от 23-01-2018, 15:15:06
Вдогонку - может пригодится так же проверка на HasValue. Например поля типо Integer не имеющие значения вернут 0. а это как никак но уже значение.
Название: Re: Считывание данных из семейства
Отправлено: Алексей Кузин от 23-01-2018, 15:36:17
Извиняюсь. в коде это уже это было.