Задать каталог трубопроводной сети

Автор Тема: Задать каталог трубопроводной сети  (Прочитано 900 раз)

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

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ***
  • Сообщений: 237
  • Карма: 32
  • Skype: vildar82
Всем привет,
Есть ли какая-то возможность задать эти настройки программно:


Искал тут: civil.Settings.GetSettings<SettingsPipeNetwork>(), но не нашел.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1609
  • Карма: 372
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Насколько мне известно, в API нет такой возможности. Но можно попробовать поискать по реестру и файлам пользовательских профилей - возможно, что эта информация хранится где-то там.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1609
  • Карма: 372
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Вот похожая тема: http://adn-cis.org/forum/index.php?topic=879.0

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ***
  • Сообщений: 237
  • Карма: 32
  • Skype: vildar82
Дмитрий Загорулькин спасибо, действительно в реестре нашлось:

Пока проверил, что записи читаются из реестра при каждом обращении и можно при запущенном автокаде менять значения.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1609
  • Карма: 372
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
и можно при запущенном автокаде менять значения
Наверное можно. Но это не всегда корректно работает даже если использовать встроенные команды задать-обновить каталог. Проблемы возникают тогда, когда в каталог труб и колодцев добавлен пользовательский параметр. Если назначается такой каталог, то эти свойства Civil не подхватывает. Почему-то механизм подгрузки каталога устроен таким образом, что все пользовательские свойства считываются только один раз при загрузке Civil 3D. Однако, в API есть методы для этого (как я понимаю, сам ещё не пробовал их, т.к. считаю "горячую" смену каталога - очень проблемным сценарием работы):
NetworkCatalogDef.DeclareNewParameter
NetworkCatalogDef.DeclarePartProperty
Как я понимаю, надо прочитать соответствующие XML-файлы подгружаемого каталога и задекларировать найденные пользовательские свойства. Только как их отличить от стандартных? Или задекларировать все найденные, но будет ли это корректно работать? Надо всё проверять, тестировать. Но учитывая очень специфическое поведение трубопроводного каталога в Civil, пока что, я сторонник перезапуска Civil 3D при смене каталога...

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ***
  • Сообщений: 237
  • Карма: 32
  • Skype: vildar82
Пока планирую записывать пути каталога из плагина автокада при старте, таким способом:
Код - C# [Выбрать]
  1.             var cp = Application.UserConfigurationManager.OpenCurrentProfile();
  2.             cp = cp.OpenSubsection(@"Preferences\AeccUiNetwork110");
  3.             // Запись
  4.             cp.WriteProperty("16C49365-B844-484b-92CE-9A8ACE681B57", Path.GetLocalSettingsFile(@"Pipes Catalog\Pipes Metric Russia"));
  5.             cp.WriteProperty("DCE203A2-D381-466f-A23E-08A9D9F8FDBD", Path.GetLocalSettingsFile(@"Pipes Catalog\Structures Metric Russia"));
  6.             cp.WriteProperty("F670B5B9-DA12-476d-B461-4FB5C5650A82", Path.GetLocalSettingsFile(@"Pipes Catalog\Pipes Metric Russia"));
  7.             cp.WriteProperty("F1FEBE2D-D589-4f85-BF8E-650ED06A5EA5", Path.GetLocalSettingsFile(@"Pipes Catalog\Structures Metric Russia"));
  8.             cp.WriteProperty("SharedContentPath", Path.GetLocalSettingsFile(@"Pipes Catalog\Aecc Shared Content"));

Вроде нормальный вариант.
Только смущает имя раздела реестра "AeccUiNetwork110". Как бы его точно определять? Я так понимаю от версии акада будет меняться число.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1609
  • Карма: 372
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Конечно, число меняется от версии к версии. Но То что до номера - неизменно. Поэтому, как вариант - поиск в Preferences ключа с названием, начинающимся на "AeccUiNetwork".
Я это делал так:
Код - C# [Выбрать]
  1. string productKeyName
  2.     = HostApplicationServices.Current.UserRegistryProductRootKey;
  3. string profileName
  4.     = Application.GetSystemVariable("CPROFILE").ToString();
  5.  
  6. RegistryKey genKey;
  7. try
  8. {
  9.     genKey = Registry.CurrentUser.OpenSubKey
  10.         (string.Format(@"{0}\Profiles\{1}\Preferences",
  11.         productKeyName, profileName), false);
  12. }
  13. catch (System.Exception ex)
  14. {
  15.     Debug.WriteLine(ex.Message);
  16.     Debug.WriteLine(ex.StackTrace);
  17.     genKey = null;
  18. }
  19.  
  20. RegistryKey netKey;
  21. using (genKey)
  22. {
  23.     try
  24.     {
  25.         string[] subNames = genKey?.GetSubKeyNames();
  26.         string netSubKeyName = subNames?.FirstOrDefault
  27.             (item => item.Contains("AeccUiNetwork"));
  28.         netKey = !string.IsNullOrEmpty(netSubKeyName) ?
  29.             genKey?.OpenSubKey(netSubKeyName, false) : null;
  30.     }
  31.     catch (System.Exception ex)
  32.     {
  33.         Debug.WriteLine(ex.Message);
  34.         Debug.WriteLine(ex.StackTrace);
  35.         netKey = null;
  36.     }
  37. }
  38.  
« Последнее редактирование: 04-07-2018, 17:12:37 от Дмитрий Загорулькин »

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ***
  • Сообщений: 237
  • Карма: 32
  • Skype: vildar82
Да точно.
А гуиды параметров наверно неизменны.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1609
  • Карма: 372
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
А гуиды параметров наверно неизменны.
Вот этого не знаю, надо проверять.

Оффлайн Andant

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 18
Нашел решение для напорных сетей.
Internal класс Autodesk.Civil.DatabaseServices.Styles.PressurePartCatalog  имеет статический метод SetCatalog, который может быть вызван при помощи рефлексии.
Для безнапорных сетей аналога не нашел.

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ***
  • Сообщений: 237
  • Карма: 32
  • Skype: vildar82
Re: Задать каталог трубопроводной сети
« Ответ #10 : 11-07-2018, 17:06:57 »
Andant, а этот класс в какой сборке?

Оффлайн Andant

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 18
Re: Задать каталог трубопроводной сети
« Ответ #11 : 11-07-2018, 17:09:14 »
AeccPressurePipesMgd.dll