diff --git a/bin/engines/273/pyRevitLoader.dll b/bin/engines/273/pyRevitLoader.dll index db0680be7..c284a9d4b 100644 Binary files a/bin/engines/273/pyRevitLoader.dll and b/bin/engines/273/pyRevitLoader.dll differ diff --git a/bin/engines/273/pyRevitLoader.pdb b/bin/engines/273/pyRevitLoader.pdb index ad476cec2..8c9d08f9e 100644 Binary files a/bin/engines/273/pyRevitLoader.pdb and b/bin/engines/273/pyRevitLoader.pdb differ diff --git a/bin/engines/273/pyRevitRunner.dll b/bin/engines/273/pyRevitRunner.dll new file mode 100644 index 000000000..f7a792be2 Binary files /dev/null and b/bin/engines/273/pyRevitRunner.dll differ diff --git a/bin/engines/273/pyRevitRunner.pdb b/bin/engines/273/pyRevitRunner.pdb new file mode 100644 index 000000000..5617bfc10 Binary files /dev/null and b/bin/engines/273/pyRevitRunner.pdb differ diff --git a/bin/engines/277/pyRevitLoader.dll b/bin/engines/277/pyRevitLoader.dll index 64c695e39..05a480d64 100644 Binary files a/bin/engines/277/pyRevitLoader.dll and b/bin/engines/277/pyRevitLoader.dll differ diff --git a/bin/engines/277/pyRevitLoader.pdb b/bin/engines/277/pyRevitLoader.pdb index ad476cec2..8c9d08f9e 100644 Binary files a/bin/engines/277/pyRevitLoader.pdb and b/bin/engines/277/pyRevitLoader.pdb differ diff --git a/bin/engines/277/pyRevitRunner.dll b/bin/engines/277/pyRevitRunner.dll new file mode 100644 index 000000000..1fa8153a5 Binary files /dev/null and b/bin/engines/277/pyRevitRunner.dll differ diff --git a/bin/engines/277/pyRevitRunner.pdb b/bin/engines/277/pyRevitRunner.pdb new file mode 100644 index 000000000..5617bfc10 Binary files /dev/null and b/bin/engines/277/pyRevitRunner.pdb differ diff --git a/bin/engines/278/pyRevitLoader.dll b/bin/engines/278/pyRevitLoader.dll index 5138f81e4..d0d184e11 100644 Binary files a/bin/engines/278/pyRevitLoader.dll and b/bin/engines/278/pyRevitLoader.dll differ diff --git a/bin/engines/278/pyRevitLoader.pdb b/bin/engines/278/pyRevitLoader.pdb index ad476cec2..8c9d08f9e 100644 Binary files a/bin/engines/278/pyRevitLoader.pdb and b/bin/engines/278/pyRevitLoader.pdb differ diff --git a/bin/engines/278/pyRevitRunner.dll b/bin/engines/278/pyRevitRunner.dll new file mode 100644 index 000000000..66ea58737 Binary files /dev/null and b/bin/engines/278/pyRevitRunner.dll differ diff --git a/bin/engines/278/pyRevitRunner.pdb b/bin/engines/278/pyRevitRunner.pdb new file mode 100644 index 000000000..5617bfc10 Binary files /dev/null and b/bin/engines/278/pyRevitRunner.pdb differ diff --git a/bin/engines/279/pyRevitLoader.dll b/bin/engines/279/pyRevitLoader.dll index 71d269ff3..2cd398b32 100644 Binary files a/bin/engines/279/pyRevitLoader.dll and b/bin/engines/279/pyRevitLoader.dll differ diff --git a/bin/engines/279/pyRevitLoader.pdb b/bin/engines/279/pyRevitLoader.pdb index a71a3cf03..8c9d08f9e 100644 Binary files a/bin/engines/279/pyRevitLoader.pdb and b/bin/engines/279/pyRevitLoader.pdb differ diff --git a/bin/engines/279/pyRevitRunner.dll b/bin/engines/279/pyRevitRunner.dll new file mode 100644 index 000000000..1c2644657 Binary files /dev/null and b/bin/engines/279/pyRevitRunner.dll differ diff --git a/bin/engines/279/pyRevitRunner.pdb b/bin/engines/279/pyRevitRunner.pdb new file mode 100644 index 000000000..5617bfc10 Binary files /dev/null and b/bin/engines/279/pyRevitRunner.pdb differ diff --git a/bin/engines/pyRevitLoader.py b/bin/engines/pyRevitLoader.py index 265e0ae85..5b45c4a67 100644 --- a/bin/engines/pyRevitLoader.py +++ b/bin/engines/pyRevitLoader.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +#pylint: disable=C0103,W1401,E0401,E0602 """ ██▓███▓██ ██▓ ██▀███ ▓█████ ██▒ █▓ ██▓▄▄▄█████▓ ▓██░ ██▒██ ██▒▓██ ▒ ██▒▓█ ▀▓██░ █▒▓██▒▓ ██▒ ▓▒ diff --git a/bin/pyRevitLabs.Common.dll b/bin/pyRevitLabs.Common.dll index a9ea8cfef..2afca7362 100644 Binary files a/bin/pyRevitLabs.Common.dll and b/bin/pyRevitLabs.Common.dll differ diff --git a/bin/pyRevitLabs.Common.pdb b/bin/pyRevitLabs.Common.pdb index ed43797d5..32ccbba71 100644 Binary files a/bin/pyRevitLabs.Common.pdb and b/bin/pyRevitLabs.Common.pdb differ diff --git a/bin/pyRevitLabs.CommonCLI.dll b/bin/pyRevitLabs.CommonCLI.dll index eb8a9e5ec..6a08f78e8 100644 Binary files a/bin/pyRevitLabs.CommonCLI.dll and b/bin/pyRevitLabs.CommonCLI.dll differ diff --git a/bin/pyRevitLabs.CommonCLI.pdb b/bin/pyRevitLabs.CommonCLI.pdb index afd4f63d7..5eed91dff 100644 Binary files a/bin/pyRevitLabs.CommonCLI.pdb and b/bin/pyRevitLabs.CommonCLI.pdb differ diff --git a/bin/pyRevitLabs.DeffrelDB.dll b/bin/pyRevitLabs.DeffrelDB.dll index 9a604b1e4..69b6f30be 100644 Binary files a/bin/pyRevitLabs.DeffrelDB.dll and b/bin/pyRevitLabs.DeffrelDB.dll differ diff --git a/bin/pyRevitLabs.Language.dll b/bin/pyRevitLabs.Language.dll index 0edbb2ad8..5a83b9e14 100644 Binary files a/bin/pyRevitLabs.Language.dll and b/bin/pyRevitLabs.Language.dll differ diff --git a/bin/pyRevitLabs.Language.pdb b/bin/pyRevitLabs.Language.pdb index bfb292bfa..12ea2faeb 100644 Binary files a/bin/pyRevitLabs.Language.pdb and b/bin/pyRevitLabs.Language.pdb differ diff --git a/bin/pyRevitLabs.TargetApps.Revit.dll b/bin/pyRevitLabs.TargetApps.Revit.dll index 2b7ac8c47..e693a87a2 100644 Binary files a/bin/pyRevitLabs.TargetApps.Revit.dll and b/bin/pyRevitLabs.TargetApps.Revit.dll differ diff --git a/bin/pyRevitUpdater.exe b/bin/pyRevitUpdater.exe index 1e482584d..3126e7d8b 100644 Binary files a/bin/pyRevitUpdater.exe and b/bin/pyRevitUpdater.exe differ diff --git a/bin/pyrevit.exe b/bin/pyrevit.exe index 2d60f085d..5f9cffa78 100644 Binary files a/bin/pyrevit.exe and b/bin/pyrevit.exe differ diff --git a/bin/pyrevit.pdb b/bin/pyrevit.pdb index 0b9e5594b..c3d3529e5 100644 Binary files a/bin/pyrevit.pdb and b/bin/pyrevit.pdb differ diff --git a/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs b/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs index 688e16901..d3c44a8aa 100644 --- a/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs +++ b/dev/pyRevitLoader/Source/PyRevitLoaderApplication.cs @@ -4,67 +4,49 @@ using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; -namespace PyRevitLoader -{ +namespace PyRevitLoader { [Regeneration(RegenerationOption.Manual)] [Transaction(TransactionMode.Manual)] - class PyRevitLoaderApplication : IExternalApplication - { - private static string versionNumber; - + class PyRevitLoaderApplication : IExternalApplication { // Hook into Revit to allow starting a command. - Result IExternalApplication.OnStartup(UIControlledApplication application) - { - - try - { - versionNumber = application.ControlledApplication.VersionNumber; - if (application.ControlledApplication.VersionName.ToLower().Contains("vasari")) - { - versionNumber = "_Vasari"; - } - - ExecuteStartupScript(application); - - return Result.Succeeded; + Result IExternalApplication.OnStartup(UIControlledApplication application) { + try { + return ExecuteStartupScript(application); } - catch (Exception ex) - { - TaskDialog.Show("Error setting up PyRevitLoader", ex.ToString()); + catch (Exception ex) { + TaskDialog.Show("Error Loading Startup Script", ex.ToString()); return Result.Failed; } } - private static void ExecuteStartupScript(UIControlledApplication uiControlledApplication) - { + private static Result ExecuteStartupScript(UIControlledApplication uiControlledApplication) { // we need a UIApplication object to assign as `__revit__` in python... var versionNumber = uiControlledApplication.ControlledApplication.VersionNumber; - var fieldName = int.Parse(versionNumber) >= 2017 ? "m_uiapplication": "m_application"; + var fieldName = int.Parse(versionNumber) >= 2017 ? "m_uiapplication" : "m_application"; var fi = uiControlledApplication.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); var uiApplication = (UIApplication)fi.GetValue(uiControlledApplication); // execute StartupScript + Result result = Result.Succeeded; var startupScript = GetStartupScriptPath(); - if (startupScript != null) - { + if (startupScript != null) { var executor = new ScriptExecutor(uiApplication); // uiControlledApplication); - var result = executor.ExecuteScript(startupScript); - if (result == (int)Result.Failed) - { - TaskDialog.Show("PyRevitLoader", executor.Message); + result = executor.ExecuteScript(startupScript); + if (result == Result.Failed) { + TaskDialog.Show("Error Loading pyRevit", executor.Message); } } + + return result; } - private static string GetStartupScriptPath() - { + private static string GetStartupScriptPath() { var loaderDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var dllDir = Path.GetDirectoryName(loaderDir); - return Path.Combine(dllDir, String.Format("{0}.py", Assembly.GetExecutingAssembly().GetName().Name)); + return Path.Combine(dllDir, string.Format("{0}.py", Assembly.GetExecutingAssembly().GetName().Name)); } - Result IExternalApplication.OnShutdown(UIControlledApplication application) - { + Result IExternalApplication.OnShutdown(UIControlledApplication application) { // FIXME: deallocate the python shell... return Result.Succeeded; } diff --git a/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs b/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs new file mode 100644 index 000000000..7e47c1c47 --- /dev/null +++ b/dev/pyRevitLoader/Source/PyRevitRunnerApplication.cs @@ -0,0 +1,43 @@ +using System; +using Autodesk.Revit.Attributes; +using Autodesk.Revit.UI; + +namespace PyRevitRunner { + [Regeneration(RegenerationOption.Manual)] + [Transaction(TransactionMode.Manual)] + class PyRevitRunnerApplication : IExternalApplication { + // Hook into Revit to allow starting a command. + Result IExternalApplication.OnStartup(UIControlledApplication application) { + try { + return RegisterExternalCommand(application); + } + catch (Exception ex) { + TaskDialog.Show("Error Loading Script Runner Application", ex.ToString()); + return Result.Failed; + } + } + + private static Result RegisterExternalCommand(UIControlledApplication application) { + var assembly = typeof(PyRevitRunnerApplication).Assembly; + + RibbonPanel ribbonPanel = application.CreateRibbonPanel("pyRevitRunner"); + + // Run service button + var pbData = new PushButtonData( + "PyRevitRunnerCommand", + "PyRevitRunnerCommand", + assembly.Location, + "PyRevitRunner.PyRevitRunnerCommand"); + pbData.AvailabilityClassName = "PyRevitRunner.PyRevitRunnerCommandAvail"; + + ribbonPanel.AddItem(pbData); + + return Result.Succeeded; + } + + Result IExternalApplication.OnShutdown(UIControlledApplication application) { + // FIXME: deallocate the python shell... + return Result.Succeeded; + } + } +} diff --git a/dev/pyRevitLoader/Source/PyRevitRunnerCommand.cs b/dev/pyRevitLoader/Source/PyRevitRunnerCommand.cs new file mode 100644 index 000000000..d5ade86fb --- /dev/null +++ b/dev/pyRevitLoader/Source/PyRevitRunnerCommand.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; + +using Autodesk.Revit.Attributes; +using Autodesk.Revit.UI; +using Autodesk.Revit.DB; + +using PyRevitLoader; +using System.Reflection; +using System.IO; + +namespace PyRevitRunner { + [Regeneration(RegenerationOption.Manual)] + [Transaction(TransactionMode.Manual)] + public class PyRevitRunnerCommand : IExternalCommand { + + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { + // grab application and command data, skip elements since this is a batch runner and user doesn't + // see the gui to make selections + Application = commandData.Application; + CommandData = commandData; + + try { + // 1 + // Processing Journal Data and getting the script path to be executed in IronPython engine + IDictionary dataMap = commandData.JournalData; + ScriptSourceFile = dataMap["ScriptSource"]; + ModuleSearchPaths = new List(dataMap["SearchPaths"].Split(';')); + ModelPaths = new List(); + var modelPaths = dataMap["Models"]; + if (modelPaths != null && modelPaths != string.Empty) + ModelPaths.AddRange(modelPaths.Split(';')); + LogFile = dataMap["LogFile"]; + + // add pyrevit library path and script directory path to search paths + ModuleSearchPaths.Add(GetPyRevitLibsPath()); + ModuleSearchPaths.Add(GetSitePkgsPath()); + ModuleSearchPaths.Add(Path.GetDirectoryName(ScriptSourceFile)); + + // 2 + // Executing the script + var executor = new ScriptExecutor(Application, fullFrame: true); // uiControlledApplication); + var resultCode = executor.ExecuteScript( + ScriptSourceFile, + sysPaths: ModuleSearchPaths.ToArray(), + logFilePath: LogFile, + variables: new Dictionary() { + {"__batchexec__", true }, + {"__logfile__", LogFile }, + {"__models__", ModelPaths }, + }); + + // 3 + // Log results + if (resultCode == 0) + return Result.Succeeded; + else + return Result.Cancelled; + } + catch (Exception ex) { + commandData.JournalData.Add("pyRevitRunner Execution Failure", ex.Message); + return Result.Cancelled; + } + } + + public UIApplication Application { get; private set; } + public ExternalCommandData CommandData { get; private set; } + + public string ScriptSourceFile { get; private set; } + public List ModuleSearchPaths { get; private set; } + public List ModelPaths { get; private set; } + public string LogFile { get; private set; } + public bool DebugMode { get; private set; } + + private static string GetDeployPath() { + var loaderDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + var engineDir = Path.GetDirectoryName(loaderDir); + var binDir = Path.GetDirectoryName(engineDir); + return Path.GetDirectoryName(binDir); + } + + private static string GetPyRevitLibsPath() => Path.Combine(GetDeployPath(), "pyrevitlib"); + private static string GetSitePkgsPath() => Path.Combine(GetDeployPath(), "site-packages"); + } + + + public class PyRevitRunnerCommandAvail : IExternalCommandAvailability { + public PyRevitRunnerCommandAvail() { + } + + public bool IsCommandAvailable(UIApplication uiApp, CategorySet selectedCategories) { + return true; + } + } + +} diff --git a/dev/pyRevitLoader/Source/ScriptExecutor.cs b/dev/pyRevitLoader/Source/ScriptExecutor.cs index 8ccc76cec..b8a7b0027 100644 --- a/dev/pyRevitLoader/Source/ScriptExecutor.cs +++ b/dev/pyRevitLoader/Source/ScriptExecutor.cs @@ -1,6 +1,7 @@ -using System; +using System; using System.Linq; using System.Text; +using System.IO; using IronPython.Runtime.Exceptions; using IronPython.Compiler; using Microsoft.Scripting; @@ -9,47 +10,54 @@ using System.Collections.Generic; using System.Reflection; -namespace PyRevitLoader -{ +namespace PyRevitLoader { // Executes a script - public class ScriptExecutor - { - private string _message = null; + public class ScriptExecutor { + private bool _fullframe = false; private readonly UIApplication _revit = null; - public ScriptExecutor() - { + public ScriptExecutor() { } - public ScriptExecutor(UIApplication uiApplication) - { + public ScriptExecutor(UIApplication uiApplication, bool fullFrame = false) { _revit = uiApplication; + _fullframe = fullFrame; } - public string Message - { - get - { - return _message; - } - } + public string Message { get; private set; } = null; public static string EngineVersion { get { - var assmVersion = Assembly.GetAssembly(typeof(PyRevitLoader.ScriptExecutor)).GetName().Version; + var assmVersion = Assembly.GetAssembly(typeof(ScriptExecutor)).GetName().Version; return string.Format("{0}{1}{2}", assmVersion.Minor, assmVersion.Build, assmVersion.Revision); } } - public int ExecuteScript(string sourcePath) - { - try - { + public Result ExecuteScript(string sourcePath, + IEnumerable sysPaths = null, + string logFilePath = null, + IDictionary variables = null) { + try { var engine = CreateEngine(); var scope = SetupEnvironment(engine); + // Add script directory address to sys search paths + if (sysPaths != null) { + var path = engine.GetSearchPaths(); + foreach (var sysPath in sysPaths) + path.Add(sysPath); + + engine.SetSearchPaths(path); + } + + + // set globals scope.SetVariable("__file__", sourcePath); + if (variables != null) + foreach(var keyPair in variables) + scope.SetVariable(keyPair.Key, keyPair.Value); + //var script = engine.CreateScriptSourceFromString(source, SourceCodeKind.Statements); var script = engine.CreateScriptSourceFromFile(sourcePath, Encoding.UTF8, SourceCodeKind.Statements); @@ -61,59 +69,71 @@ public int ExecuteScript(string sourcePath) // Setting up error reporter and compile the script var errors = new ErrorReporter(); var command = script.Compile(compiler_options, errors); - if (command == null) - return (int)Result.Cancelled; + if (command == null) { + // compilation failed, print errors and return + Message = + string.Join("\r\n", "IronPython Traceback:", string.Join("\r\n", errors.Errors.ToArray())); + if (logFilePath != null) + File.WriteAllText(logFilePath, Message); + + return Result.Cancelled; + } - try - { + try { script.Execute(scope); - return (int)Result.Succeeded; + return Result.Succeeded; } - catch (SystemExitException) - { + catch (SystemExitException) { // ok, so the system exited. That was bound to happen... - return (int)Result.Succeeded; + return Result.Succeeded; } - catch (Exception exception) - { + catch (Exception exception) { string _dotnet_err_message = exception.ToString(); string _ipy_err_messages = engine.GetService().FormatException(exception); - // Print all errors to stdout and return cancelled to Revit. - // This is to avoid getting window prompts from Revit. - // Those pop ups are small and errors are hard to read. - _ipy_err_messages = _ipy_err_messages.Replace("\r\n", "\n"); - _dotnet_err_message = _dotnet_err_message.Replace("\r\n", "\n"); + _ipy_err_messages = + string.Join("\n", "IronPython Traceback:", _ipy_err_messages.Replace("\r\n", "\n")); + _dotnet_err_message = + string.Join("\n", "Script Executor Traceback:", _dotnet_err_message.Replace("\r\n", "\n")); - _message = _ipy_err_messages + "\n\n" + _dotnet_err_message; - return (int)Result.Failed; + Message = _ipy_err_messages + "\n\n" + _dotnet_err_message; + + // execution failed, log errors and return + if (logFilePath != null) + File.WriteAllText(logFilePath, Message); + + return Result.Failed; } - finally - { + finally { engine.Runtime.Shutdown(); engine = null; } } - catch (Exception ex) - { - _message = ex.ToString(); - return (int)Result.Failed; + catch (Exception ex) { + Message = ex.ToString(); + return Result.Failed; } } - public ScriptEngine CreateEngine() - { - var engine = IronPython.Hosting.Python.CreateEngine(new Dictionary() { - { "LightweightScopes", true} - }); + public ScriptEngine CreateEngine() { + var flags = new Dictionary(); + + // default flags + flags["LightweightScopes"] = true; + + if (_fullframe) { + flags["Frames"] = true; + flags["FullFrames"] = true; + } + + var engine = IronPython.Hosting.Python.CreateEngine(flags); return engine; } - public void AddEmbeddedLib(ScriptEngine engine) - { + public void AddEmbeddedLib(ScriptEngine engine) { // use embedded python lib var asm = this.GetType().Assembly; var resQuery = from name in asm.GetManifestResourceNames() @@ -126,8 +146,7 @@ where name.ToLowerInvariant().EndsWith(string.Format("python_{0}_lib.zip", Engin } // Set up an IronPython environment - public ScriptScope SetupEnvironment(ScriptEngine engine) - { + public ScriptScope SetupEnvironment(ScriptEngine engine) { var scope = IronPython.Hosting.Python.CreateModule(engine, "__main__"); SetupEnvironment(engine, scope); @@ -135,8 +154,7 @@ public ScriptScope SetupEnvironment(ScriptEngine engine) return scope; } - public void SetupEnvironment(ScriptEngine engine, ScriptScope scope) - { + public void SetupEnvironment(ScriptEngine engine, ScriptScope scope) { // add two special variables: __revit__ and __vars__ to be globally visible everywhere: var builtin = IronPython.Hosting.Python.GetBuiltinModule(engine); builtin.SetVariable("__revit__", _revit); @@ -153,18 +171,14 @@ public void SetupEnvironment(ScriptEngine engine, ScriptScope scope) } } - - public class ErrorReporter : ErrorListener - { + public class ErrorReporter : ErrorListener { public List Errors = new List(); - public override void ErrorReported(ScriptSource source, string message, SourceSpan span, int errorCode, Severity severity) - { + public override void ErrorReported(ScriptSource source, string message, SourceSpan span, int errorCode, Severity severity) { Errors.Add(string.Format("{0} (line {1})", message, span.Start.Line)); } - public int Count - { + public int Count { get { return Errors.Count; } } } diff --git a/dev/pyRevitLoader/pyRevitLoader.sln b/dev/pyRevitLoader/pyRevitLoader.sln index dd8a7312b..21cc91936 100644 --- a/dev/pyRevitLoader/pyRevitLoader.sln +++ b/dev/pyRevitLoader/pyRevitLoader.sln @@ -11,6 +11,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pyRevitLoader273", "pyRevit EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pyRevitLoader279", "pyRevitLoader279\pyRevitLoader279.csproj", "{D607CF8F-7DFC-49DC-9CCF-3174EF0AEDF5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pyRevitRunner277", "pyRevitRunner277\pyRevitRunner277.csproj", "{DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Loaders", "Loaders", "{5D24CE7B-67FD-4685-AC89-578FF15552A2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Runners", "Runners", "{74C50D6F-68E5-411B-A781-800BC60C9ECF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pyRevitRunner273", "pyRevitRunner273\pyRevitRunner273.csproj", "{27A6711F-EC60-4FB9-8FF0-B33F2B7AF983}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pyRevitRunner278", "pyRevitRunner278\pyRevitRunner278.csproj", "{B3857355-C71A-402E-867A-D97BDD27950D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "pyRevitRunner279", "pyRevitRunner279\pyRevitRunner279.csproj", "{566D96D9-0C02-4F6D-A5EB-862DCB01D14B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,10 +45,36 @@ Global {D607CF8F-7DFC-49DC-9CCF-3174EF0AEDF5}.Debug|Any CPU.Build.0 = Debug|Any CPU {D607CF8F-7DFC-49DC-9CCF-3174EF0AEDF5}.Release|Any CPU.ActiveCfg = Release|Any CPU {D607CF8F-7DFC-49DC-9CCF-3174EF0AEDF5}.Release|Any CPU.Build.0 = Release|Any CPU + {DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE}.Release|Any CPU.Build.0 = Release|Any CPU + {27A6711F-EC60-4FB9-8FF0-B33F2B7AF983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27A6711F-EC60-4FB9-8FF0-B33F2B7AF983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27A6711F-EC60-4FB9-8FF0-B33F2B7AF983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27A6711F-EC60-4FB9-8FF0-B33F2B7AF983}.Release|Any CPU.Build.0 = Release|Any CPU + {B3857355-C71A-402E-867A-D97BDD27950D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3857355-C71A-402E-867A-D97BDD27950D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3857355-C71A-402E-867A-D97BDD27950D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3857355-C71A-402E-867A-D97BDD27950D}.Release|Any CPU.Build.0 = Release|Any CPU + {566D96D9-0C02-4F6D-A5EB-862DCB01D14B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {566D96D9-0C02-4F6D-A5EB-862DCB01D14B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {566D96D9-0C02-4F6D-A5EB-862DCB01D14B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {566D96D9-0C02-4F6D-A5EB-862DCB01D14B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {8D8DCC3A-5A07-4B96-9144-E6E23CA71CBE} = {5D24CE7B-67FD-4685-AC89-578FF15552A2} + {86FCE155-A626-4C0F-8B1B-7C912E5526D4} = {5D24CE7B-67FD-4685-AC89-578FF15552A2} + {AB6ED1C5-B02A-4EA8-9374-B6FAF3588C2E} = {5D24CE7B-67FD-4685-AC89-578FF15552A2} + {D607CF8F-7DFC-49DC-9CCF-3174EF0AEDF5} = {5D24CE7B-67FD-4685-AC89-578FF15552A2} + {DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE} = {74C50D6F-68E5-411B-A781-800BC60C9ECF} + {27A6711F-EC60-4FB9-8FF0-B33F2B7AF983} = {74C50D6F-68E5-411B-A781-800BC60C9ECF} + {B3857355-C71A-402E-867A-D97BDD27950D} = {74C50D6F-68E5-411B-A781-800BC60C9ECF} + {566D96D9-0C02-4F6D-A5EB-862DCB01D14B} = {74C50D6F-68E5-411B-A781-800BC60C9ECF} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8CC1064C-1D16-446B-B480-989CE124102A} EndGlobalSection diff --git a/dev/pyRevitLoader/pyRevitLoader273/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitLoader273/Properties/AssemblyInfo.cs index 88f626577..b449bd3f0 100644 --- a/dev/pyRevitLoader/pyRevitLoader273/Properties/AssemblyInfo.cs +++ b/dev/pyRevitLoader/pyRevitLoader273/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("pyRevit")] [assembly: AssemblyProduct("PyRevitLoader")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/dev/pyRevitLoader/pyRevitLoader277/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitLoader277/Properties/AssemblyInfo.cs index 627b45a5d..2f592558d 100644 --- a/dev/pyRevitLoader/pyRevitLoader277/Properties/AssemblyInfo.cs +++ b/dev/pyRevitLoader/pyRevitLoader277/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("pyRevit")] [assembly: AssemblyProduct("PyRevitLoader")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/dev/pyRevitLoader/pyRevitLoader278/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitLoader278/Properties/AssemblyInfo.cs index 8a0474cf1..265880476 100644 --- a/dev/pyRevitLoader/pyRevitLoader278/Properties/AssemblyInfo.cs +++ b/dev/pyRevitLoader/pyRevitLoader278/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("pyRevit")] [assembly: AssemblyProduct("PyRevitLoader")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/dev/pyRevitLoader/pyRevitLoader279/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitLoader279/Properties/AssemblyInfo.cs index fc1770f09..5e030337d 100644 --- a/dev/pyRevitLoader/pyRevitLoader279/Properties/AssemblyInfo.cs +++ b/dev/pyRevitLoader/pyRevitLoader279/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("pyRevit")] [assembly: AssemblyProduct("PyRevitLoader")] -[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/dev/pyRevitLoader/pyRevitRunner273/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitRunner273/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..5087c90f0 --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner273/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("pyRevitRunner")] +[assembly: AssemblyDescription("pyRevit Runner DLL for Autodesk Revit")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("pyRevit")] +[assembly: AssemblyProduct("pyRevitRunner")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("D49D3677-61C4-47A8-BFFF-49E6616D54C1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2019.2.7.7")] +[assembly: AssemblyFileVersion("2019.2.7.7")] diff --git a/dev/pyRevitLoader/pyRevitRunner273/pyRevitRunner273.csproj b/dev/pyRevitLoader/pyRevitRunner273/pyRevitRunner273.csproj new file mode 100644 index 000000000..8a95f3297 --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner273/pyRevitRunner273.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {27A6711F-EC60-4FB9-8FF0-B33F2B7AF983} + Library + Properties + pyRevitRunner + pyRevitRunner + v4.6.1 + 512 + true + + + + true + full + false + ..\..\..\bin\engines\273\ + DEBUG;TRACE + prompt + 4 + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\bin\engines\273\IronPython.dll + False + + + ..\..\..\bin\engines\273\IronPython.Modules.dll + False + + + ..\..\..\bin\engines\273\IronPython.SQLite.dll + False + + + ..\..\..\bin\engines\273\IronPython.Wpf.dll + False + + + ..\..\..\bin\engines\273\Microsoft.Dynamic.dll + False + + + ..\..\..\bin\engines\273\Microsoft.Scripting.dll + False + + + ..\..\..\bin\engines\273\Microsoft.Scripting.Metadata.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPI.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPIUI.dll + False + + + + + + + + + + + + + PyRevitRunnerApplication.cs + + + PyRevitRunnerCommand.cs + + + ScriptExecutor.cs + + + + + + Resources\python_273_lib.zip + + + + + rd /S /Q "$(ProjectDir)\obj" +signtool sign /n "Ehsan Iran Nejad" /t http://timestamp.digicert.com /fd sha256 $(TargetPath) + + \ No newline at end of file diff --git a/dev/pyRevitLoader/pyRevitRunner277/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitRunner277/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..5087c90f0 --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner277/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("pyRevitRunner")] +[assembly: AssemblyDescription("pyRevit Runner DLL for Autodesk Revit")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("pyRevit")] +[assembly: AssemblyProduct("pyRevitRunner")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("D49D3677-61C4-47A8-BFFF-49E6616D54C1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2019.2.7.7")] +[assembly: AssemblyFileVersion("2019.2.7.7")] diff --git a/dev/pyRevitLoader/pyRevitRunner277/pyRevitRunner277.csproj b/dev/pyRevitLoader/pyRevitRunner277/pyRevitRunner277.csproj new file mode 100644 index 000000000..e4601cbf3 --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner277/pyRevitRunner277.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {DF80A4BB-CB40-4F2E-BF40-5CBC8ABAECBE} + Library + Properties + pyRevitRunner + pyRevitRunner + v4.6.1 + 512 + true + + + + true + full + false + ..\..\..\bin\engines\277\ + DEBUG;TRACE + prompt + 4 + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\bin\engines\277\IronPython.dll + False + + + ..\..\..\bin\engines\277\IronPython.Modules.dll + False + + + ..\..\..\bin\engines\277\IronPython.SQLite.dll + False + + + ..\..\..\bin\engines\277\IronPython.Wpf.dll + False + + + ..\..\..\bin\engines\277\Microsoft.Dynamic.dll + False + + + ..\..\..\bin\engines\277\Microsoft.Scripting.dll + False + + + ..\..\..\bin\engines\277\Microsoft.Scripting.Metadata.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPI.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPIUI.dll + False + + + + + + + + + + + + + PyRevitRunnerApplication.cs + + + PyRevitRunnerCommand.cs + + + ScriptExecutor.cs + + + + + + Resources\python_277_lib.zip + + + + + rd /S /Q "$(ProjectDir)\obj" +signtool sign /n "Ehsan Iran Nejad" /t http://timestamp.digicert.com /fd sha256 $(TargetPath) + + \ No newline at end of file diff --git a/dev/pyRevitLoader/pyRevitRunner278/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitRunner278/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..5087c90f0 --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner278/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("pyRevitRunner")] +[assembly: AssemblyDescription("pyRevit Runner DLL for Autodesk Revit")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("pyRevit")] +[assembly: AssemblyProduct("pyRevitRunner")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("D49D3677-61C4-47A8-BFFF-49E6616D54C1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2019.2.7.7")] +[assembly: AssemblyFileVersion("2019.2.7.7")] diff --git a/dev/pyRevitLoader/pyRevitRunner278/pyRevitRunner278.csproj b/dev/pyRevitLoader/pyRevitRunner278/pyRevitRunner278.csproj new file mode 100644 index 000000000..7f0d23bef --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner278/pyRevitRunner278.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {B3857355-C71A-402E-867A-D97BDD27950D} + Library + Properties + pyRevitRunner + pyRevitRunner + v4.6.1 + 512 + true + + + + true + full + false + ..\..\..\bin\engines\278\ + DEBUG;TRACE + prompt + 4 + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\bin\engines\278\IronPython.dll + False + + + ..\..\..\bin\engines\278\IronPython.Modules.dll + False + + + ..\..\..\bin\engines\278\IronPython.SQLite.dll + False + + + ..\..\..\bin\engines\278\IronPython.Wpf.dll + False + + + ..\..\..\bin\engines\278\Microsoft.Dynamic.dll + False + + + ..\..\..\bin\engines\278\Microsoft.Scripting.dll + False + + + ..\..\..\bin\engines\278\Microsoft.Scripting.Metadata.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPI.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPIUI.dll + False + + + + + + + + + + + + + PyRevitRunnerApplication.cs + + + PyRevitRunnerCommand.cs + + + ScriptExecutor.cs + + + + + + Resources\python_278_lib.zip + + + + + rd /S /Q "$(ProjectDir)\obj" +signtool sign /n "Ehsan Iran Nejad" /t http://timestamp.digicert.com /fd sha256 $(TargetPath) + + \ No newline at end of file diff --git a/dev/pyRevitLoader/pyRevitRunner279/Properties/AssemblyInfo.cs b/dev/pyRevitLoader/pyRevitRunner279/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..5087c90f0 --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner279/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("pyRevitRunner")] +[assembly: AssemblyDescription("pyRevit Runner DLL for Autodesk Revit")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("pyRevit")] +[assembly: AssemblyProduct("pyRevitRunner")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("D49D3677-61C4-47A8-BFFF-49E6616D54C1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("2019.2.7.7")] +[assembly: AssemblyFileVersion("2019.2.7.7")] diff --git a/dev/pyRevitLoader/pyRevitRunner279/pyRevitRunner279.csproj b/dev/pyRevitLoader/pyRevitRunner279/pyRevitRunner279.csproj new file mode 100644 index 000000000..b3a0b723b --- /dev/null +++ b/dev/pyRevitLoader/pyRevitRunner279/pyRevitRunner279.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {566D96D9-0C02-4F6D-A5EB-862DCB01D14B} + Library + Properties + pyRevitRunner + pyRevitRunner + v4.6.1 + 512 + true + + + + true + full + false + ..\..\..\bin\engines\279\ + DEBUG;TRACE + prompt + 4 + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\bin\engines\279\IronPython.dll + False + + + ..\..\..\bin\engines\279\IronPython.Modules.dll + False + + + ..\..\..\bin\engines\279\IronPython.SQLite.dll + False + + + ..\..\..\bin\engines\279\IronPython.Wpf.dll + False + + + ..\..\..\bin\engines\279\Microsoft.Dynamic.dll + False + + + ..\..\..\bin\engines\279\Microsoft.Scripting.dll + False + + + ..\..\..\bin\engines\279\Microsoft.Scripting.Metadata.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPI.dll + False + + + ..\..\..\..\..\..\..\..\..\Program Files\Autodesk\Revit 2018\RevitAPIUI.dll + False + + + + + + + + + + + + + PyRevitRunnerApplication.cs + + + PyRevitRunnerCommand.cs + + + ScriptExecutor.cs + + + + + + Resources\python_279_lib.zip + + + + + rd /S /Q "$(ProjectDir)\obj" +signtool sign /n "Ehsan Iran Nejad" /t http://timestamp.digicert.com /fd sha256 $(TargetPath) + + \ No newline at end of file diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/script.py index 6b5ed6d10..8ac01f42b 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/script.py @@ -190,7 +190,7 @@ def _setup_addinfiles(self): """Gets the installed Revit versions and sets up the ui""" installed_revits = \ {str(x.ProductYear):x - for x in Revit.RevitController.ListInstalledRevits()} + for x in Revit.RevitProduct.ListInstalledProducts()} attachments = \ {str(x.Product.ProductYear):x for x in Revit.PyRevit.GetAttachments()} diff --git a/pyrevitlib/pyrevit/__init__.py b/pyrevitlib/pyrevit/__init__.py index e129b91eb..9ce059632 100644 --- a/pyrevitlib/pyrevit/__init__.py +++ b/pyrevitlib/pyrevit/__init__.py @@ -38,7 +38,7 @@ PYREVIT_ADDON_NAME = 'pyRevit' VERSION_MAJOR = 4 VERSION_MINOR = 6 -BUILD_METADATA = '.10' +BUILD_METADATA = '.11' # ----------------------------------------------------------------------------- # config environment paths diff --git a/release/pyRevit.aip b/release/pyRevit.aip index 5e1bac17e..fbcf34671 100644 --- a/release/pyRevit.aip +++ b/release/pyRevit.aip @@ -27,10 +27,10 @@ - + - + @@ -427,7 +427,7 @@ - + @@ -827,6 +827,10 @@ + + + + @@ -880,7 +884,7 @@ - + @@ -1892,7 +1896,7 @@ - + @@ -5152,6 +5156,14 @@ + + + + + + + +