28/08/2015
Это экземпляр приложения Civil 3D?
Это .NET версия кода, размещенная моим коллегой (оригинал тут), переработанная под Civil 3D.Когда мы получаем экземпляр запущенного приложения AutoCAD, мы не знаем, что это за вертикальный продукт, так как все они базируются на одной платформе. Чтобы определить, с чем мы имеем дело, мы должны как-то это проверить. И это как раз то, что делает этот код:
Код - VB.NET: [Выделить]
- ' получение запущенного экземпляра AutoCAD (или вертикального решения)
- Dim acadApp As Object = GetObject(, "Autocad.Application")
- ' это Civil 3D? Попробуем!
- Dim civilLandApp As Object
- Try
- ' 10.4 обозначает 2015 версию
- civilLandApp = acadApp.GetInterfaceObject
- ("AeccXUiLand.AeccApplication.10.4")
- Catch ex As Exception
- Return ' не Civil 3D
- End Try
- ' теперь мы знаем – это Civil 3D
- ' что-то делаем
И в C# будет в основном то же самое, за исключением того, что необходимо определиться: когда использовать var, а когда dynamic. Приведенный выше код использует Object который позволяет позднее связывание. Если это ваш вариант, тогда используйте C#-эквивалент: dynamic.
От переводчика (и в результате обсуждения на форуме), версия для C#:
Код - C#: [Выделить]
- dynamic acadApp;
- try
- {
- // /Получение запущенного экземпляра AutoCAD (или вертикального решения)
- acadApp = Marshal.GetActiveObject("AutoCAD.Application");
- }
- catch
- {
- // Нет запущенного AutoCAD
- return;
- }
- // Получение номера версии AutoCAD
- string acVer = acadApp.Version.Substring(0, 4);
- // Получение номера версии Aecc библиотек
- string aeccVer;
- if (acVer == "19.0")
- aeccVer = "10.0";
- else if (acVer == "19.1")
- aeccVer = "10.3";
- else if (acVer == "20.0")
- aeccVer = "10.4";
- else if (acVer == "20.1")
- aeccVer = "10.5";
- else aeccVer = null;
- if (string.IsNullOrEmpty(aeccVer))
- {
- // Неизвестная версия AutoCAD
- return;
- }
- // это Civil 3D? Попробуем!
- dynamic civilLandApp;
- try
- {
- civilLandApp = acadApp.GetInterfaceObject
- ("AeccXUiLand.AeccApplication." + aeccVer);
- }
- catch
- {
- // не Civil 3D
- return;
- }
- // теперь мы знаем – это Civil 3D
- // что-то делаем, например, выведем сообщение:
- System.Windows.Forms.MessageBox.Show
- (string.Format("Это {0}!", civilLandApp.Name));
Источник: http://adndevblog.typepad.com/infrastructure/2015/03/is-a-civil-3d-instance.html
Автор: Дмитрий Загорулькин
Автор перевода: Дмитрий Загорулькин
Автор перевода: Дмитрий Загорулькин
Обсуждение: http://adn-cis.org/forum/index.php?topic=2953
Опубликовано 28.08.2015