-
Notifications
You must be signed in to change notification settings - Fork 187
/
RevitPathResolver.cs
91 lines (77 loc) · 3.15 KB
/
RevitPathResolver.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Dynamo.Interfaces;
namespace Dynamo.Applications
{
class RevitPathResolver : IPathResolver
{
private readonly List<string> preloadLibraryPaths;
private readonly List<string> additionalNodeDirectories;
private readonly List<string> additionalResolutionPaths;
private readonly string userDataRootFolder;
private readonly string commonDataRootFolder;
internal RevitPathResolver(string userDataFolder, string commonDataFolder)
{
// The executing assembly will be in Revit_20xx folder,
// so we have to walk up one level.
var currentAssemblyPath = Assembly.GetExecutingAssembly().Location;
var currentAssemblyDir = Path.GetDirectoryName(currentAssemblyPath);
var nodesDirectory = Path.Combine(currentAssemblyDir, "nodes");
var revitNodesDll = Path.Combine(currentAssemblyDir, "RevitNodes.dll");
var simpleRaaSDll = Path.Combine(currentAssemblyDir, "SimpleRaaS.dll");
// Just making sure we are looking at the right level of nesting.
if (!Directory.Exists(nodesDirectory))
throw new DirectoryNotFoundException(nodesDirectory);
if (!File.Exists(revitNodesDll))
throw new FileNotFoundException(revitNodesDll);
if (!File.Exists(simpleRaaSDll))
throw new FileNotFoundException(simpleRaaSDll);
// Add Revit-specific library paths for preloading.
preloadLibraryPaths = new List<string>
{
"VMDataBridge.dll",
"ProtoGeometry.dll",
"DesignScriptBuiltin.dll",
"DSCoreNodes.dll",
"DSOffice.dll",
"DSIronPython.dll",
"FunctionObject.ds",
"BuiltIn.ds",
"DynamoConversions.dll",
"DynamoUnits.dll",
"Tessellation.dll",
"Analysis.dll",
"GeometryColor.dll",
revitNodesDll,
simpleRaaSDll
};
// Add an additional node processing folder
additionalNodeDirectories = new List<string> { nodesDirectory };
// Add the Revit_20xx folder for assembly resolution
additionalResolutionPaths = new List<string> { currentAssemblyDir };
this.userDataRootFolder = userDataFolder;
this.commonDataRootFolder = commonDataFolder;
}
public IEnumerable<string> AdditionalNodeDirectories
{
get { return additionalNodeDirectories; }
}
public IEnumerable<string> AdditionalResolutionPaths
{
get { return additionalResolutionPaths; }
}
public IEnumerable<string> PreloadedLibraryPaths
{
get { return preloadLibraryPaths; }
}
public string UserDataRootFolder
{
get { return userDataRootFolder; }
}
public string CommonDataRootFolder
{
get { return commonDataRootFolder; }
}
}
}