Понадобилась мне для охвата большей аудитории поддержка нескольких платформ для моего приложения. Из CAD платформ на данный момент это: AutoCAD, BricsCAD и NanoCAD. Если отличия .NET API Revit и Inventor от API AutoCAD очевидны, то разница в API вышеуказанных CAD платформ практически незаметна и выражается лишь в отстутствии поддержки некоторого функционала, который уже есть у Autodesk.
Но если нет разницы, то зачем писать 3 разных приложения, когда можно написать одно...
Стандартный helloworld AutoCAD + .NET выглядит следующим образом:
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Windows;
public class CADTest
{
[CommandMethod("TEST-ME")]
public void TestME()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
ed.WriteMessage("Where's my coffee, dude?");
}
}
Но что, если мы хотим, чтобы это приложение работало на 3-х платформах? Естественно, при этом мы не хотим писать 3 разных проекта и уж тем более копипастить код между ними. Выход как обычно есть. Используя директивы препроцессора, немного перепишем блок using:
#if NCAD
using Teigha.DatabaseServices;
using Teigha.Runtime;
using Teigha.Geometry;
using HostMgd.ApplicationServices;
using HostMgd.EditorInput;
using HostMgd.Windows;
using Platform = HostMgd;
using PlatformDB = Teigha;
#elif BCAD
using Teigha.DatabaseServices;
using Teigha.Runtime;
using Teigha.Geometry;
using Bricscad.ApplicationServices;
using Bricscad.Runtime;
using Bricscad.EditorInput;
using Platform = Bricscad;
using PlatformDB = Teigha;
#else
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Windows;
using Platform = Autodesk.AutoCAD;
using PlatformDB = Autodesk.AutoCAD;
#endif
Теперь необходимо добавить в файл проекта (csproj) наши константы:... bin\NCAD\ NCAD bin\ACAD\ ACAD ... bin\BCAD\ BCAD
Вот собственно и все. Правда на этом момент студия будет громко матерится, что библиотеки NanoCAD и BricsCAD содержат одни и те же пространства имен. Придется сделать выборочное подключение библиотек:
C:\ObjectARX 2011\inc\AcDbMgd.dll False C:\ObjectARX 2011\inc\AcMgd.dll False $(ProgramFiles)\Nanosoft\nanoCAD 3.65\bin\hostdbmgd.dll $(ProgramFiles)\Nanosoft\nanoCAD 3.65\bin\hostmgd.dll $(ProgramFiles)\Bricsys\Bricscad V12\BrxMgd.dll False ... $(ProgramFiles)\Bricsys\Bricscad V12\TD_Mgd.dll False global
Теперь точно все. Переключаясь между разными конфигурациями, собираем проект под разные платформы без лишних телодвижений.
Комментариев нет:
Отправить комментарий