diff --git a/dev/Pipfile b/Pipfile similarity index 84% rename from dev/Pipfile rename to Pipfile index 67258ea00..8abcdc710 100644 --- a/dev/Pipfile +++ b/Pipfile @@ -12,6 +12,7 @@ black = "*" docopt = "*" requests = "*" pygount = "*" +pyyaml = "*" [requires] python_version = "3.8" @@ -20,4 +21,4 @@ python_version = "3.8" allow_prereleases = true [scripts] -pyrevit = "python ./pyrevit.py" +pyrevit = "python ./dev/pyrevit.py" diff --git a/dev/Pipfile.lock b/Pipfile.lock similarity index 92% rename from dev/Pipfile.lock rename to Pipfile.lock index 2c4c62a63..dc5f00294 100644 --- a/dev/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "56be4eed87a6b243e79b0b5db30cf58cda3a0ea1fed05be89516b0edeb0462d3" + "sha256": "3713a567f66d0831ada3c14761937dedb6a59ed641e48c17e3216f25c0ab880a" }, "pipfile-spec": 6, "requires": { @@ -60,6 +60,23 @@ "index": "pypi", "version": "==1.2.4" }, + "pyyaml": { + "hashes": [ + "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", + "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", + "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", + "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", + "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", + "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", + "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", + "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", + "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", + "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", + "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" + ], + "index": "pypi", + "version": "==5.3.1" + }, "requests": { "hashes": [ "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", diff --git a/bin/engines/2710/pyRevitLoader.dll b/bin/engines/2710/pyRevitLoader.dll index f88a4e76c..2c7c9e8e3 100644 Binary files a/bin/engines/2710/pyRevitLoader.dll and b/bin/engines/2710/pyRevitLoader.dll differ diff --git a/bin/engines/2710/pyRevitRunner.dll b/bin/engines/2710/pyRevitRunner.dll index 4d433a5dd..32a66250a 100644 Binary files a/bin/engines/2710/pyRevitRunner.dll and b/bin/engines/2710/pyRevitRunner.dll differ diff --git a/bin/engines/273/pyRevitLoader.dll b/bin/engines/273/pyRevitLoader.dll index 8ccbeab07..61e53f68c 100644 Binary files a/bin/engines/273/pyRevitLoader.dll and b/bin/engines/273/pyRevitLoader.dll differ diff --git a/bin/engines/273/pyRevitRunner.dll b/bin/engines/273/pyRevitRunner.dll index e9c535410..b433097d3 100644 Binary files a/bin/engines/273/pyRevitRunner.dll and b/bin/engines/273/pyRevitRunner.dll differ diff --git a/bin/engines/277/pyRevitLoader.dll b/bin/engines/277/pyRevitLoader.dll index 659bfbb76..7fbb2af38 100644 Binary files a/bin/engines/277/pyRevitLoader.dll and b/bin/engines/277/pyRevitLoader.dll differ diff --git a/bin/engines/277/pyRevitRunner.dll b/bin/engines/277/pyRevitRunner.dll index 386d55f7f..712d33362 100644 Binary files a/bin/engines/277/pyRevitRunner.dll and b/bin/engines/277/pyRevitRunner.dll differ diff --git a/bin/engines/278/pyRevitLoader.dll b/bin/engines/278/pyRevitLoader.dll index f95cdf2de..b1e4aa982 100644 Binary files a/bin/engines/278/pyRevitLoader.dll and b/bin/engines/278/pyRevitLoader.dll differ diff --git a/bin/engines/278/pyRevitRunner.dll b/bin/engines/278/pyRevitRunner.dll index b443807f0..d1173a92b 100644 Binary files a/bin/engines/278/pyRevitRunner.dll and b/bin/engines/278/pyRevitRunner.dll differ diff --git a/bin/engines/279/pyRevitLoader.dll b/bin/engines/279/pyRevitLoader.dll index 21c78ea8e..a2db1d1e7 100644 Binary files a/bin/engines/279/pyRevitLoader.dll and b/bin/engines/279/pyRevitLoader.dll differ diff --git a/bin/engines/279/pyRevitRunner.dll b/bin/engines/279/pyRevitRunner.dll index be79303c1..2d72bbfb2 100644 Binary files a/bin/engines/279/pyRevitRunner.dll and b/bin/engines/279/pyRevitRunner.dll differ diff --git a/bin/engines/378/pyRevitLabs.PythonNet.dll b/bin/engines/378/pyRevitLabs.PythonNet.dll index 08fab79cf..5304bc3b0 100644 Binary files a/bin/engines/378/pyRevitLabs.PythonNet.dll and b/bin/engines/378/pyRevitLabs.PythonNet.dll differ diff --git a/bin/engines/385/pyRevitLabs.PythonNet.dll b/bin/engines/385/pyRevitLabs.PythonNet.dll index 437844866..3ead8e633 100644 Binary files a/bin/engines/385/pyRevitLabs.PythonNet.dll and b/bin/engines/385/pyRevitLabs.PythonNet.dll differ diff --git a/bin/pyRevitLabs.Common.dll b/bin/pyRevitLabs.Common.dll index 6c1ca0cfb..a15dd71c7 100644 Binary files a/bin/pyRevitLabs.Common.dll and b/bin/pyRevitLabs.Common.dll differ diff --git a/bin/pyRevitLabs.CommonCLI.dll b/bin/pyRevitLabs.CommonCLI.dll index 23762f3ca..7bd9a4015 100644 Binary files a/bin/pyRevitLabs.CommonCLI.dll and b/bin/pyRevitLabs.CommonCLI.dll differ diff --git a/bin/pyRevitLabs.CommonWPF.dll b/bin/pyRevitLabs.CommonWPF.dll index 79f85349d..5ef347340 100644 Binary files a/bin/pyRevitLabs.CommonWPF.dll and b/bin/pyRevitLabs.CommonWPF.dll differ diff --git a/bin/pyRevitLabs.DeffrelDB.dll b/bin/pyRevitLabs.DeffrelDB.dll index e07041cce..1d7785d79 100644 Binary files a/bin/pyRevitLabs.DeffrelDB.dll and b/bin/pyRevitLabs.DeffrelDB.dll differ diff --git a/bin/pyRevitLabs.Emojis.dll b/bin/pyRevitLabs.Emojis.dll index 3073b3823..95c9c8a92 100644 Binary files a/bin/pyRevitLabs.Emojis.dll and b/bin/pyRevitLabs.Emojis.dll differ diff --git a/bin/pyRevitLabs.Json.dll b/bin/pyRevitLabs.Json.dll index 925521376..5ca7c78e2 100644 Binary files a/bin/pyRevitLabs.Json.dll and b/bin/pyRevitLabs.Json.dll differ diff --git a/bin/pyRevitLabs.Language.dll b/bin/pyRevitLabs.Language.dll index 03f6f20bc..3e3d92734 100644 Binary files a/bin/pyRevitLabs.Language.dll and b/bin/pyRevitLabs.Language.dll differ diff --git a/bin/pyRevitLabs.MahAppsMetro.dll b/bin/pyRevitLabs.MahAppsMetro.dll index b694dbc40..359f54908 100644 Binary files a/bin/pyRevitLabs.MahAppsMetro.dll and b/bin/pyRevitLabs.MahAppsMetro.dll differ diff --git a/bin/pyRevitLabs.NLog.dll b/bin/pyRevitLabs.NLog.dll index 3c92fe434..495c427bd 100644 Binary files a/bin/pyRevitLabs.NLog.dll and b/bin/pyRevitLabs.NLog.dll differ diff --git a/bin/pyRevitLabs.PyRevit.dll b/bin/pyRevitLabs.PyRevit.dll index 708699051..23399c442 100644 Binary files a/bin/pyRevitLabs.PyRevit.dll and b/bin/pyRevitLabs.PyRevit.dll differ diff --git a/bin/pyRevitLabs.TargetApps.AutoCAD.dll b/bin/pyRevitLabs.TargetApps.AutoCAD.dll index 25d05a96e..a10bffac3 100644 Binary files a/bin/pyRevitLabs.TargetApps.AutoCAD.dll and b/bin/pyRevitLabs.TargetApps.AutoCAD.dll differ diff --git a/bin/pyRevitLabs.TargetApps.Navisworks.dll b/bin/pyRevitLabs.TargetApps.Navisworks.dll index b815bbd72..446fd7db6 100644 Binary files a/bin/pyRevitLabs.TargetApps.Navisworks.dll and b/bin/pyRevitLabs.TargetApps.Navisworks.dll differ diff --git a/bin/pyRevitLabs.TargetApps.Revit.dll b/bin/pyRevitLabs.TargetApps.Revit.dll index 0603b2aca..aebeeaab8 100644 Binary files a/bin/pyRevitLabs.TargetApps.Revit.dll and b/bin/pyRevitLabs.TargetApps.Revit.dll differ diff --git a/bin/pyrevit-autocomplete.exe b/bin/pyrevit-autocomplete.exe index e59831ba2..817806c3d 100644 Binary files a/bin/pyrevit-autocomplete.exe and b/bin/pyrevit-autocomplete.exe differ diff --git a/bin/pyrevit-products.json b/bin/pyrevit-products.json index 439340fe8..49a0b7528 100644 --- a/bin/pyrevit-products.json +++ b/bin/pyrevit-products.json @@ -1,4 +1,10 @@ [ + { + "product": "pyRevit", + "release": "4.8.2", + "version": "4.8.2", + "key": "{ECFE3DF3-2276-4A11-BA07-9F166AFE4693}" + }, { "product": "pyRevit", "release": "4.8.1", @@ -197,6 +203,12 @@ "version": "4.6.1", "key": "{EF91A585-DC0C-43B8-B88B-4C130F430E84}" }, + { + "product": "pyRevit CLI", + "release": "4.8.2", + "version": "4.8.2", + "key": "{667ABAF1-CF3A-4CF6-AF75-68F5CA26BFA6}" + }, { "product": "pyRevit CLI", "release": "4.8.1", diff --git a/bin/pyrevit-stubsbuilder.exe b/bin/pyrevit-stubsbuilder.exe index 582c16df0..b09cae8a5 100644 Binary files a/bin/pyrevit-stubsbuilder.exe and b/bin/pyrevit-stubsbuilder.exe differ diff --git a/bin/pyrevit-telemetryserver.exe b/bin/pyrevit-telemetryserver.exe index 0d562bbc1..f7bc3bcea 100644 Binary files a/bin/pyrevit-telemetryserver.exe and b/bin/pyrevit-telemetryserver.exe differ diff --git a/bin/pyrevit-toast.exe b/bin/pyrevit-toast.exe index d22634222..b77a85f18 100644 Binary files a/bin/pyrevit-toast.exe and b/bin/pyrevit-toast.exe differ diff --git a/bin/pyrevit.exe b/bin/pyrevit.exe index c15feb1ac..1d815ca14 100644 Binary files a/bin/pyrevit.exe and b/bin/pyrevit.exe differ diff --git a/dev/_props.py b/dev/_props.py index dde633dbe..2878d6dba 100644 --- a/dev/_props.py +++ b/dev/_props.py @@ -1,13 +1,16 @@ """Set various metadata properties across source files""" import sys -from typing import Dict +import os +import os.path as op +from typing import Dict, List import re import datetime -import json +import yaml from scripts import configs from scripts import utils from scripts import airtavolo +from scripts.airtavolo import ToolLocales def _modify_contents(files, finder, new_value): @@ -62,10 +65,85 @@ def set_ver(args: Dict[str, str]): sys.exit(1) -# TODO: find a list of all bundles with their names -# TODO: for each tool locale, lookup the bundle -# TODO: write in yaml files only? +def _find_tbundles(root_path) -> List[str]: + tbfinder = re.compile(r".+\..+") + scfinder = re.compile(r".*script\.py") + tbundles = [] + for entry in os.listdir(root_path): + epath = op.join(root_path, entry) + if op.isdir(epath) and tbfinder.match(entry): + if any(scfinder.match(x) for x in os.listdir(epath)): + tbundles.append(epath) + else: + tbundles.extend(_find_tbundles(epath)) + return tbundles + + +def _extract_title(bundle_dict): + title_data = bundle_dict.get("title", None) + if isinstance(title_data, dict): + # find english name + return title_data.get("en_us", None) or title_data.get("english", None) + elif isinstance(title_data, str): + # assume english?! + return title_data + + +def _find_tlocale(bundle_title: str, tool_locales) -> ToolLocales: + for tlocale in tool_locales: + if bundle_title == tlocale.name: + return tlocale + + +def _prepare_title(langs_dict): + tdata = {} + lcode_finder = re.compile(r".+\s*\[(.+)\]") + for lang, tvalue in langs_dict.items(): + if lcode := lcode_finder.match(lang): + tdata[lcode.groups()[0]] = tvalue + return tdata + + +def _update_locales(bundle_path: str, tool_locales: List[ToolLocales]): + blfinder = re.compile(r"(.*bundle\.yaml)") + bundlefile_match = next( + (x for x in os.listdir(bundle_path) if blfinder.match(x)), None + ) + bundle_name = op.splitext(op.basename(bundle_path))[0] + # if bundle file exist, load and find the english title + # search tool_locales for one with matching title + # create the locale dict and update the existing + if bundlefile_match: + bundle_file = op.join(bundle_path, bundlefile_match) + # read existing bundle + with open(bundle_file, "r") as bfile: + bundle_dict = yaml.load(bfile, Loader=yaml.SafeLoader) + title = _extract_title(bundle_dict) or bundle_name + tlocale = _find_tlocale(title, tool_locales) + if tlocale: + title_dict = bundle_dict.get("title", {"en_us": title}) + if isinstance(title_dict, str): + title_dict = {"en_us": title_dict} + # apply new values + title_dict.update(_prepare_title(tlocale.langs)) + bundle_dict["title"] = title_dict + # write back changes + with open(bundle_file, "w") as bfile: + yaml.dump(bundle_dict, bfile, allow_unicode=True) + # otherwise if there is data for this bundle + # create the bundle file and dump data + else: + bundle_file = op.join(bundle_path, "bundle.yaml") + # grab name from bundle + tlocale = _find_tlocale(bundle_name, tool_locales) + if tlocale: + bundle_dict = {"title": _prepare_title(tlocale.langs)} + with open(bundle_file, "w") as bfile: + yaml.dump(bundle_dict, bfile) + + def update_locales(_: Dict[str, str]): """Update locale files across the extensions""" tool_locales = airtavolo.get_tool_locales() - print(len(tool_locales)) + for tbundle in _find_tbundles(configs.EXTENSIONS_PATH): + _update_locales(tbundle, tool_locales) diff --git a/dev/_release.py b/dev/_release.py index 612819312..a17110113 100644 --- a/dev/_release.py +++ b/dev/_release.py @@ -103,10 +103,24 @@ def _sign_binaries(): ]) +def _ensure_clean_tree(): + res = utils.system(['git', 'status']) + if 'nothing to commit' not in res: + print('You have uncommited changes in working tree. Commit those first') + sys.exit(1) + + +def _commit_changes(msg): + utils.system(['git', 'add', '--all']) + utils.system(['git', 'commit', '-m', msg]) + + def create_release(args: Dict[str, str]): - """Create pyRevit release (build, test, publish)""" + """Create pyRevit release (build all, create installers)""" utils.ensure_windows() + # _ensure_clean_tree() + # run a check on all tools if not install.check(args): _abort('At least one necessary tool is missing for release process') @@ -118,14 +132,16 @@ def create_release(args: Dict[str, str]): args[""] = release_ver props.set_ver(args) - # now build all projects - buildall.build_all(args) - # update installers and get new product versions pyrevit_pc, pyrevitcli_pc = _installer_set_version(release_ver) _update_product_data(release_ver, pyrevit_pc) _update_product_data(release_ver, pyrevitcli_pc, cli=True) + # _commit_changes(f"Updated version: {release_ver}") + + # now build all projects + buildall.build_all(args) + # sign everything _sign_binaries() diff --git a/dev/_telem.py b/dev/_telem.py index 684d95e8f..2527da69c 100644 --- a/dev/_telem.py +++ b/dev/_telem.py @@ -18,7 +18,7 @@ def _get_test_bin(): bin_fname = "ts" if sys.platform == "win32": bin_fname = "ts.exe" - return configs.TELEMETRYSERVERPATH + bin_fname + return op.join(configs.TELEMETRYSERVERPATH, bin_fname) def _handle_break(signum, stack): #pylint: disable=unused-argument diff --git a/dev/pyRevit/AssemblyVersion.cs b/dev/pyRevit/AssemblyVersion.cs index 4d5738561..34adf850b 100644 --- a/dev/pyRevit/AssemblyVersion.cs +++ b/dev/pyRevit/AssemblyVersion.cs @@ -2,5 +2,5 @@ using System.Runtime.InteropServices; using System.Runtime.CompilerServices; -[assembly: AssemblyVersion("4.8.1")] -[assembly: AssemblyFileVersion("4.8.1")] +[assembly: AssemblyVersion("4.8.2")] +[assembly: AssemblyFileVersion("4.8.2")] diff --git a/dev/pyRevitLabs/pyRevitLabs.Common/CodeCompiler.cs b/dev/pyRevitLabs/pyRevitLabs.Common/CodeCompiler.cs index 6a94852f5..5909884f6 100644 --- a/dev/pyRevitLabs/pyRevitLabs.Common/CodeCompiler.cs +++ b/dev/pyRevitLabs/pyRevitLabs.Common/CodeCompiler.cs @@ -26,6 +26,7 @@ public static bool CompileCSharp( string outputPath, IEnumerable references, IEnumerable defines, + bool debug, out List messages ) { CS.CSharpCompilation compilation = @@ -34,11 +35,22 @@ out List messages Path.GetFileName(outputPath), references, defines, + debug, out messages ); // compile and write results - var result = compilation.Emit(outputPath); + EmitResult result; + if (debug) { + string pdbName = Path.Combine( + Path.GetDirectoryName(outputPath), + Path.GetFileNameWithoutExtension(outputPath) + ".pdb" + ); + result = compilation.Emit(outputPath, pdbName); + } + else + result = compilation.Emit(outputPath); + foreach (var diag in result.Diagnostics) messages.Add(diag.ToString()); @@ -50,6 +62,7 @@ public static Assembly CompileCSharpToAssembly( string assemblyName, IEnumerable references, IEnumerable defines, + bool debug, out List messages ) { var compilation = CreateCSharpCompilation( @@ -57,29 +70,52 @@ out List messages assemblyName, references, defines, + debug, out messages ); + // compile and write results var emitOpts = new EmitOptions(); - using (var assmData = new MemoryStream()) - using (var assmPdbData = new MemoryStream()) { - var result = - compilation.Emit( - peStream: assmData, - pdbStream: assmPdbData, - options: emitOpts - ); - foreach (var diag in result.Diagnostics) - messages.Add(diag.ToString()); - - // load assembly from memory stream - assmData.Seek(0, SeekOrigin.Begin); - if (assmData.Length > 0) - return Assembly.Load( - assmData.ToArray(), - assmPdbData.ToArray() - ); + if (debug) { + using (var assmData = new MemoryStream()) + using (var assmPdbData = new MemoryStream()) { + var result = + compilation.Emit( + peStream: assmData, + pdbStream: assmPdbData, + options: emitOpts + ); + + foreach (var diag in result.Diagnostics) + messages.Add(diag.ToString()); + + // load assembly from memory stream + assmData.Seek(0, SeekOrigin.Begin); + if (assmData.Length > 0) + return Assembly.Load( + assmData.ToArray(), + assmPdbData.ToArray() + ); + } } + else { + using (var assmData = new MemoryStream()) { + var result = + compilation.Emit( + peStream: assmData, + options: emitOpts + ); + + foreach (var diag in result.Diagnostics) + messages.Add(diag.ToString()); + + // load assembly from memory stream + assmData.Seek(0, SeekOrigin.Begin); + if (assmData.Length > 0) + return Assembly.Load(assmData.ToArray()); + } + } + return null; } @@ -89,6 +125,7 @@ private static CS.CSharpCompilation CreateCSharpCompilation( string assemblyName, IEnumerable references, IEnumerable defines, + bool debug, out List messages ) { // parse the source files @@ -123,7 +160,7 @@ out List messages messages.Add($"Reference: {refPath}"); mdataRefs.Add( AssemblyMetadata.CreateFromFile(refPath).GetReference() - ); + ); } // compile options @@ -131,7 +168,7 @@ out List messages new CS.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary) .WithOverflowChecks(true) .WithPlatform(Platform.X64) - .WithOptimizationLevel(OptimizationLevel.Release); + .WithOptimizationLevel(debug ? OptimizationLevel.Debug : OptimizationLevel.Release); // create compilation job return CS.CSharpCompilation.Create( @@ -152,11 +189,12 @@ out List messages .Max(); public static bool CompileVisualBasic( - IEnumerable sourceFiles, - string outputPath, - IEnumerable references, - IEnumerable> defines, - out List messages + IEnumerable sourceFiles, + string outputPath, + IEnumerable references, + IEnumerable> defines, + bool debug, + out List messages ) { VB.VisualBasicCompilation compilation = CreateVisualBasicCompilation( @@ -164,11 +202,22 @@ out List messages Path.GetFileName(outputPath), references, defines, + debug, out messages ); // compile and write results - var result = compilation.Emit(outputPath); + EmitResult result; + if (debug) { + string pdbName = Path.Combine( + Path.GetDirectoryName(outputPath), + Path.GetFileNameWithoutExtension(outputPath) + ".pdb" + ); + result = compilation.Emit(outputPath, pdbName); + } + else + result = compilation.Emit(outputPath); + foreach (var diag in result.Diagnostics) messages.Add(diag.ToString()); @@ -180,6 +229,7 @@ public static Assembly CompileVisualBasicToAssembly( string assemblyName, IEnumerable references, IEnumerable> defines, + bool debug, out List messages ) { var compilation = CreateVisualBasicCompilation( @@ -187,29 +237,52 @@ out List messages assemblyName, references, defines, + debug, out messages ); + // compile and write results var emitOpts = new EmitOptions(); - using (var assmData = new MemoryStream()) - using (var assmPdbData = new MemoryStream()) { - var result = - compilation.Emit( - peStream: assmData, - pdbStream: assmPdbData, - options: emitOpts - ); - foreach (var diag in result.Diagnostics) - messages.Add(diag.ToString()); - - // load assembly from memory stream - assmData.Seek(0, SeekOrigin.Begin); - if (assmData.Length > 0) - return Assembly.Load( - assmData.ToArray(), - assmPdbData.ToArray() - ); + if (debug) { + using (var assmData = new MemoryStream()) + using (var assmPdbData = new MemoryStream()) { + var result = + compilation.Emit( + peStream: assmData, + pdbStream: assmPdbData, + options: emitOpts + ); + + foreach (var diag in result.Diagnostics) + messages.Add(diag.ToString()); + + // load assembly from memory stream + assmData.Seek(0, SeekOrigin.Begin); + if (assmData.Length > 0) + return Assembly.Load( + assmData.ToArray(), + assmPdbData.ToArray() + ); + } + } + else { + using (var assmData = new MemoryStream()) { + var result = + compilation.Emit( + peStream: assmData, + options: emitOpts + ); + + foreach (var diag in result.Diagnostics) + messages.Add(diag.ToString()); + + // load assembly from memory stream + assmData.Seek(0, SeekOrigin.Begin); + if (assmData.Length > 0) + return Assembly.Load(assmData.ToArray()); + } } + return null; } @@ -219,6 +292,7 @@ private static VB.VisualBasicCompilation CreateVisualBasicCompilation( string assemblyName, IEnumerable references, IEnumerable> defines, + bool debug, out List messages ) { // parse the source files @@ -261,7 +335,7 @@ out List messages new VB.VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary) .WithOverflowChecks(true) .WithPlatform(Platform.X64) - .WithOptimizationLevel(OptimizationLevel.Release); + .WithOptimizationLevel(debug ? OptimizationLevel.Debug : OptimizationLevel.Release); // create compilation job return VB.VisualBasicCompilation.Create( diff --git a/dev/pyRevitLabs/pyRevitLabs.DeffrelDB/DefaultDataFormatter.cs b/dev/pyRevitLabs/pyRevitLabs.DeffrelDB/DefaultDataFormatter.cs index 9af83dafa..db421b2fe 100644 --- a/dev/pyRevitLabs/pyRevitLabs.DeffrelDB/DefaultDataFormatter.cs +++ b/dev/pyRevitLabs/pyRevitLabs.DeffrelDB/DefaultDataFormatter.cs @@ -319,11 +319,11 @@ public List> ReadRecordsData(List dstoreEntri if (tableDef.IsHidden) cleanedDLine = cleanedDLine.Replace(medataLineStart + mdataRecordSeparator, ""); var fieldValues = cleanedDLine.Split(new string[] { tableDef.FieldDelimiter }, StringSplitOptions.None); + var fieldValuesDict = new Dictionary(); int fieldIndex = 0; - foreach (var field in tableDef.Fields) { - fieldValuesDict.Add(field.Name, decodeFieldValue(fieldValueString: fieldValues[fieldIndex], + fieldValuesDict.Add(field.Name, decodeFieldValue(fieldValueString: fieldValues.ElementAtOrDefault(fieldIndex), fieldType: field.FieldType)); fieldIndex++; } diff --git a/dev/pyrevit.py b/dev/pyrevit.py index 8d56e35a5..76900c90f 100644 --- a/dev/pyrevit.py +++ b/dev/pyrevit.py @@ -8,7 +8,7 @@ directory for these tools to your system PATH. Run `check` to test Visual Studio: for building labs (https://visualstudio.microsoft.com/downloads/) - ├── msbuild building C# + ├── msbuild building C# projects └── signtool digitally signing binaries gcc for building sqlite package in telemetry server (http://mingw.org) go for building telemetry server (https://golang.org) @@ -22,14 +22,13 @@ Some of the commands call web APIs for necessary information. Access tokens must be set in env vars otherwise access will be - limited to github API rate limits: + limited to API rate limits: GITHUBAUTH for accessing repo info on github AIRTABLEAUTH for accessing shared tables on airtable """ # pylint: disable=line-too-long # - [ ] run tests? -# - [ ] push translation files into pyRevit (airtable api) # pylint: disable=invalid-name,broad-except import logging diff --git a/dev/scripts/airtavolo.py b/dev/scripts/airtavolo.py index 2edf80c21..0e759b1cf 100644 --- a/dev/scripts/airtavolo.py +++ b/dev/scripts/airtavolo.py @@ -1,6 +1,7 @@ """Wrapping needed airtable api functions""" import os import logging +from typing import List from collections import namedtuple import requests @@ -24,7 +25,7 @@ def _call_airtable(url): return requests.get(url, headers=headers) -def get_tool_locales(): +def get_tool_locales() -> List[ToolLocales]: """Download the language table from airtable source""" records = [] offset = "" @@ -39,6 +40,7 @@ def get_tool_locales(): fields = record["fields"] rname = fields.get("Name (English US)", None) if rname: + fields.pop("Name (English US)") records.append(ToolLocales(name=rname, langs=fields)) if not offset: break diff --git a/dev/scripts/configs.py b/dev/scripts/configs.py index 12403059d..f37062f11 100644 --- a/dev/scripts/configs.py +++ b/dev/scripts/configs.py @@ -1,65 +1,70 @@ """Dev scripts configs""" +import os.path as op + # ============================================================================== # Configs # ------------------------------------------------------------------------------ +ROOT = op.dirname(op.dirname(op.dirname(__file__))) # supported versions VERSION_RANGE = 2017, 2021 # binaries -BINPATH = "../bin/" +BINPATH = op.join(ROOT, "bin") # root path for non-deployable source files -DEVPATH = "../dev/" -LABS = "./pyRevitLabs/pyRevitLabs.sln" -LOADERS = "./pyRevitLoader/pyRevitLoader.sln" -CPYTHONRUNTIME = ( - "./modules/pyRevitLabs.Python.Net/src/runtime/Python.Runtime.csproj" +DEVPATH = op.join(ROOT, "dev") +LABS = op.join(DEVPATH, "pyRevitLabs/pyRevitLabs.sln") +LOADERS = op.join(DEVPATH, "pyRevitLoader/pyRevitLoader.sln") +CPYTHONRUNTIME = op.join( + DEVPATH, "modules/pyRevitLabs.Python.Net/src/runtime/Python.Runtime.csproj" ) # cli autocomplete files -USAGEPATTERNS = "./pyRevitLabs/pyRevitCLI/Resources/UsagePatterns.txt" +USAGEPATTERNS = op.join(DEVPATH, "pyRevitLabs/pyRevitCLI/Resources/UsagePatterns.txt") AUTOCOMP = "pyrevit-autocomplete.go" -AUTOCOMPBIN = BINPATH + "pyrevit-autocomplete.exe" +AUTOCOMPBIN = op.join(BINPATH, "pyrevit-autocomplete.exe") # telemetry server files -TELEMETRYSERVERPATH = "./pyRevitTelemetryServer/" -TELEMETRYSERVER = TELEMETRYSERVERPATH + "main.go" -TELEMETRYSERVERBIN = BINPATH + "pyrevit-telemetryserver.exe" +TELEMETRYSERVERPATH = op.join(DEVPATH, "pyRevitTelemetryServer") +TELEMETRYSERVER = op.join(TELEMETRYSERVERPATH, "main.go") +TELEMETRYSERVERBIN = op.join(BINPATH, "pyrevit-telemetryserver.exe") # python docs -DOCS_DIR = "../docs/" -DOCS_BUILD = DOCS_DIR + "_build/" -DOCS_INDEX = DOCS_BUILD + "index.html" +DOCS_DIR = op.join(ROOT, "docs") +DOCS_BUILD = op.join(DOCS_DIR, "_build") +DOCS_INDEX = op.join(DOCS_BUILD, "index.html") # release files # API file paths must be absolute otherwise advancedinstaller will mess up # the relative source paths defined inside the api file and fails -PYREVIT_AIPFILE = "../release/pyrevit.aip" -PYREVIT_CLI_AIPFILE = "../release/pyrevit-cli.aip" -PYREVIT_VERSION = "" -PYREVIT_VERSION_FILE = "../pyrevitlib/pyrevit/version" -PYREVIT_CLI_VERSION = "" +RELEASE_PATH = op.join(ROOT, "release") +PYREVIT_AIPFILE = op.join(RELEASE_PATH, "pyrevit.aip") +PYREVIT_CLI_AIPFILE = op.join(RELEASE_PATH, "pyrevit-cli.aip") +PYREVIT_VERSION_FILE = op.join(ROOT, "pyrevitlib/pyrevit/version") # data files -PYREVIT_HOSTS_DATAFILE = "../bin/pyrevit-hosts.json" -PYREVIT_PRODUCTS_DATAFILE = "../bin/pyrevit-products.json" +PYREVIT_HOSTS_DATAFILE = op.join(BINPATH, "pyrevit-hosts.json") +PYREVIT_PRODUCTS_DATAFILE = op.join(BINPATH, "pyrevit-products.json") # files containing version definition VERSION_FILES = [ - "./pyRevit/AssemblyVersion.cs", - "../pyrevitlib/pyrevit/version", + op.join(DEVPATH, "pyRevit/AssemblyVersion.cs"), + PYREVIT_VERSION_FILE, ] # files containing copyright notice COPYRIGHT_FILES = [ - "./pyRevit/AssemblyCopyright.cs", - "../pyrevitlib/pyrevit/versionmgr/about.py", - "../docs/conf.py", + op.join(DEVPATH, "pyRevit/AssemblyCopyright.cs"), + op.join(ROOT, "pyrevitlib/pyrevit/versionmgr/about.py"), + op.join(DOCS_DIR, "conf.py"), ] # all source file locations that are part of pyRevit project SOURCE_DIRS = [ - "../pyrevitlib/pyrevit", + op.join(ROOT, "pyrevitlib/pyrevit"), DEVPATH, ] + +# all extensions +EXTENSIONS_PATH = op.join(ROOT, "extensions") diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/bundle.yaml new file mode 100644 index 000000000..b6887d48c --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Add or remove pyRevit extensions +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/script.py index 86ab88827..6800f97ed 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Extensions.smartbutton/script.py @@ -14,9 +14,6 @@ import pyrevitcore_globals -__context__ = 'zero-doc' - - logger = script.get_logger() diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/bundle.yaml new file mode 100644 index 000000000..135e11417 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Settings.smartbutton/bundle.yaml @@ -0,0 +1,9 @@ +tooltip: >- + Shows the preferences window for pyRevit. You can customize how pyRevit loads and set some basic parameters here. + + + Shift-Click: + + Shows config file in explorer. +title: Settings +context: zero-doc 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 64d4bc1a8..fe96f0980 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 @@ -1,4 +1,5 @@ +"""Shows the preferences window for pyRevit""" #pylint: disable=E0401,W0703,W0613,C0111,C0103 import os import os.path as op @@ -23,13 +24,6 @@ import pyrevitcore_globals -__context__ = 'zero-doc' - -__doc__ = 'Shows the preferences window for pyRevit. You can customize how ' \ - 'pyRevit loads and set some basic parameters here.' \ - '\n\nShift-Click:\nShows config file in explorer.' - - logger = script.get_logger() diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/bundle.yaml new file mode 100644 index 000000000..0dfa2ec53 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Downloads updates from the remote git repositories (e.g github, bitbucket) +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/script.py index e4ba8dffb..717526658 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/Update.smartbutton/script.py @@ -10,12 +10,6 @@ logger = script.get_logger() -__context__ = 'zero-doc' - -__doc__ = 'Downloads updates from the remote git repositories ' \ - '(e.g github, bitbucket).' - - def __selfinit__(script_cmp, ui_button_cmp, __rvt__): # do not load the tool if user should not update if not user_config.user_can_update: diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/bundle.yaml new file mode 100644 index 000000000..1bf3d88d4 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Opens the issue tracker on github to report bugs and issues +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/script.py index a01f6f809..f08756b31 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/links.stack/Report Bugs.pushbutton/script.py @@ -3,7 +3,4 @@ from pyrevit.versionmgr import urls -__context__ = 'zero-doc' - - script.open_url(urls.PYREVIT_GITHUBISSUES) diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/bundle.yaml new file mode 100644 index 000000000..6c3eaae1d --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: Opens the pyRevit blog. +title: + en_us: "Blog" + fa: "وبلاگ" + ar: "بلاگ" +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/script.py index f9c8e3c28..05744540e 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Blog.pushbutton/script.py @@ -5,11 +5,4 @@ from pyrevit.versionmgr import urls -__context__ = 'zero-doc' -__title__ = { - 'en_us': "Blog", - 'fa': "وبلاگ", - 'ar': "بلاگ", -} - script.open_url(urls.PYREVIT_BLOG) diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/bundle.yaml new file mode 100644 index 000000000..44cb7402e --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Opens the git repository page +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/script.py index bacdd62f5..38355ab09 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Repo.pushbutton/script.py @@ -3,7 +3,4 @@ from pyrevit.versionmgr import urls -__context__ = 'zero-doc' - - script.open_url(urls.PYREVIT_GITHUB) diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/bundle.yaml new file mode 100644 index 000000000..a6f2958e2 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Opens the wiki page +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/script.py index 063445c4f..7bc0d56b8 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/prlinks.stack/Wiki.pushbutton/script.py @@ -3,7 +3,4 @@ from pyrevit.versionmgr import urls -__context__ = 'zero-doc' - - script.open_url(urls.PYREVIT_WIKI) diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/bundle.yaml new file mode 100644 index 000000000..bc831d153 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Prints all available emojis with shorthand codes +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/script.py index cced81ee3..50363fc04 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/rpwlinks.stack/emojis.pushbutton/script.py @@ -6,8 +6,6 @@ output = script.get_output() -__context__ = 'zero-doc' - output.freeze() for e in ScriptConsoleEmojis.emojiDict.Keys: print(':{0}: : {0}'.format(e)) diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/bundle.yaml new file mode 100644 index 000000000..9a90a68a8 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/bundle.yaml @@ -0,0 +1,9 @@ +tooltip: Searches the script folders and create buttons for the new script or newly installed extensions +engine: + clean: true +title: + en_us: 'Reload' + fa: 'بارگذاری مجدد' + bg: 'Презареди' + nl_nl: 'Herladen' +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/script.py index 713bcf1ec..8da2b07da 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Reload.pushbutton/script.py @@ -8,18 +8,6 @@ from pyrevit.loader import sessioninfo -__cleanengine__ = True -__context__ = 'zero-doc' -__doc__ = 'Searches the script folders and create buttons ' \ - 'for the new script or newly installed extensions.' -__title__ = { - 'en_us': 'Reload', - 'fa': 'بارگذاری مجدد', - 'bg': 'Презареди', - 'nl_nl': 'Herladen', -} - - res = True if EXEC_PARAMS.executed_from_ui: res = forms.alert('Reloading increases the memory footprint and is ' diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/bundle.yaml new file mode 100644 index 000000000..6c881ec2b --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/bundle.yaml @@ -0,0 +1,9 @@ +tooltip: The best interface ever! +title: + en_us: 'Search' + fa: 'جستجو' + bg: 'Търси' + nl_nl: 'Zoek' + fr_fr: 'Rechercher' + de_de: 'Suche' +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/script.py index 7c4d60b46..7ff85c9b2 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Search.pushbutton/script.py @@ -12,17 +12,6 @@ import pyrevit.extensions as exts -__context__ = 'zero-doc' -__title__ = { - 'en_us': 'Search', - 'fa': 'جستجو', - 'bg': 'Търси', - 'nl_nl': 'Zoek', - 'fr_fr': 'Rechercher', - 'de_de': 'Suche', -} - - logger = script.get_logger() diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/bundle.yaml new file mode 100644 index 000000000..560f9120a --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: List all currently loaded assemblies +context: zero-doc diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/script.py b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/script.py index 3bf69ba75..26cb5337d 100644 --- a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/script.py +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Find All Loaded Assemblies.pushbutton/script.py @@ -4,8 +4,6 @@ from pyrevit import framework from pyrevit import script -__context__ = 'zero-doc' - output = script.get_output() diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/List Elements.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/List Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..0ea79c542 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/List Elements.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists specific elements from the model database diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Current Project Central Log.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Current Project Central Log.pushbutton/bundle.yaml new file mode 100644 index 000000000..ee406659f --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Current Project Central Log.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Opens the central log for the current workshared project diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Current Session Journal.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Current Session Journal.pushbutton/bundle.yaml new file mode 100644 index 000000000..701331cc3 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Current Session Journal.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Increases the sheet number of the selected sheets by one diff --git a/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Journals Folder.pushbutton/bundle.yaml b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Journals Folder.pushbutton/bundle.yaml new file mode 100644 index 000000000..1634723f3 --- /dev/null +++ b/extensions/pyRevitCore.extension/pyRevit.tab/pyRevit.panel/tools.stack/Spy.pulldown/Open Journals Folder.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Opens the Revit journals folder for current user diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Bundle Tests.pulldown/Test C# Script.pushbutton/script.cs b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Bundle Tests.pulldown/Test C# Script.pushbutton/script.cs index f8a56ed6e..af96e8762 100644 --- a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Bundle Tests.pulldown/Test C# Script.pushbutton/script.cs +++ b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Bundle Tests.pulldown/Test C# Script.pushbutton/script.cs @@ -20,7 +20,10 @@ public Result Execute(ExternalCommandData revit, ref string message, ElementSet logger.Debug("Logger works..."); Console.WriteLine(execParams.ScriptPath); - // Debugger.Break(); + Debugger.Break(); + int m = 12; + Console.WriteLine(m); + Debugger.Break(); TaskDialog.Show(execParams.CommandName, "Hello World from C#!"); @@ -46,7 +49,7 @@ public Result Execute(ExternalCommandData revit, ref string message, ElementSet var inputString = Console.ReadLine(); Console.WriteLine($"echo: {inputString}"); - // Debugger.Log(0, "", "Testing debugger...\n"); + Debugger.Log(0, "", "Testing debugger...\n"); return Result.Succeeded; } diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/Test CLR Engine Debugger.pushbutton/bundle.yaml b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/Test CLR Engine Debugger.pushbutton/bundle.yaml new file mode 100644 index 000000000..c796d8ddf --- /dev/null +++ b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/Test CLR Engine Debugger.pushbutton/bundle.yaml @@ -0,0 +1,3 @@ +title: Test CLR Engine Debugger +tooltip: Test CLR Engine Debugger +author: "{{author}}" diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/Test CLR Engine Debugger.pushbutton/script.cs b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/Test CLR Engine Debugger.pushbutton/script.cs new file mode 100644 index 000000000..223dea9b5 --- /dev/null +++ b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/Test CLR Engine Debugger.pushbutton/script.cs @@ -0,0 +1,30 @@ +using System; +using System.Diagnostics; + +using Autodesk.Revit.UI; +using Autodesk.Revit.DB; + +using PyRevitLabs.PyRevit.Runtime; +using pyRevitLabs.NLog; + +namespace HelloWorld { + public class Test2: IExternalCommand { + public ExecParams execParams; + + private Logger logger = LogManager.GetCurrentClassLogger(); + + public Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { + + int first = 11; + int second = 31; + + Debugger.Break(); + + + Debugger.Log(0, "", "Testing debugger...\n"); + Debugger.Log(0, "", $"{first + second}\n"); + + return Result.Succeeded; + } + } +} \ No newline at end of file diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/bundle.yaml b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/bundle.yaml index 35e6913cb..b4702eb70 100644 --- a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/bundle.yaml +++ b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Debug.panel/Engine Tests.pulldown/bundle.yaml @@ -15,3 +15,5 @@ layout: - Test CPython Search Paths - Test CPython Events - Test CPython Debugger + - ----- + - Test CLR Engine Debugger diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/Update Locales.pushbutton/icon.png b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/Update Locales.pushbutton/icon.png deleted file mode 100644 index 556b56857..000000000 Binary files a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/Update Locales.pushbutton/icon.png and /dev/null differ diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/Update Locales.pushbutton/script.py b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/Update Locales.pushbutton/script.py deleted file mode 100644 index 25a94766f..000000000 --- a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/Update Locales.pushbutton/script.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Updates tool locales from the given files.""" -#pylint: disable=import-error,invalid-name,broad-except,superfluous-parens -import os.path as op - -from pyrevit.coreutils import yaml -from pyrevit.coreutils import applocales -from pyrevit.extensions import extensionmgr -from pyrevit import forms -from pyrevit import script - - -__title__ = 'Update\nLocales' -__context__ = 'zero-doc' - -logger = script.get_logger() -output = script.get_output() - - -DEFAULT_LOCAL_KEY = applocales.DEFAULT_LOCALE.locale_codes[0] -DEFAULT_BUNDLE_FILENAME = 'bundle.yaml' - - -def localize_property(mdata, prop_name, default_key): - value = mdata.get(prop_name, {}) - if isinstance(value, str): - mdata[prop_name] = {default_key: value} - else: - mdata[prop_name] = value - return mdata - - -def get_prop_from_comp(prop_name, bcomp): - if prop_name == 'title': - return getattr(bcomp, 'ui_title') - - -def update_bundle_property(bdata, bcomp, prop_name): - # bdata is bundle locale data - # bcomp is bundle component - locale_data = bdata.get(bcomp.name, []) - if locale_data: - # ensure there is bundle metadata file - meta_file = bcomp.meta_file - if not meta_file: - print('creating bundle file for \"%s\"' % bcomp) - meta_file = op.join(bcomp.directory, DEFAULT_BUNDLE_FILENAME) - yaml.dump_dict({ - prop_name: { - DEFAULT_LOCAL_KEY: get_prop_from_comp(prop_name, bcomp) - }}, meta_file) - - meta = yaml.load_as_dict(meta_file) - meta = localize_property(meta, prop_name, DEFAULT_LOCAL_KEY) - print('updating bundle locale data for \"%s\"' % bcomp) - for locale_code, locale_str in locale_data.items(): - if locale_str: - if locale_code in meta[prop_name]: - print('updating existing locale \"%s\" -> \"%s\"' - % (meta[prop_name][locale_code], locale_str)) - else: - print('adding locale \"%s\" -> \"%s\"' - % (locale_code, locale_str)) - meta[prop_name][locale_code] = locale_str - - yaml.dump_dict(meta, meta_file) - - if bcomp.is_container: - for child_comp in bcomp: - update_bundle_property(bdata, child_comp, prop_name) - - -# 1) ========================================================================== -# update title locales in bundle files from input csv file -csv_file = forms.pick_file(files_filter='CSV Title Locale File |*.csv') -if not csv_file: - script.exit() - -# load, parse and prepare the bundle local data -title_locales_data = {} -csv_data = script.load_csv(csv_file) -# translate language names in csv header to language codes -locale_code_fields = [] -for locale_name in csv_data[0][1:]: # grabs first csv line and columns 1: - logger.debug('finding locale codes for \"%s\"', locale_name) - applocale = applocales.get_applocale_by_lang_name(locale_name) - if applocale: - locale_code_fields.append(applocale.locale_codes[0]) - else: - logger.error('can not determine langauge code for \"%s\"', locale_name) - script.exit() - -for csv_record in csv_data[1:]: - name = csv_record[0] - locales = {} - for field_idx, field_value in enumerate(csv_record[1:]): - locales[locale_code_fields[field_idx]] = field_value - title_locales_data[name] = locales - -if title_locales_data: - selected_extensions = forms.SelectFromList.show( - extensionmgr.get_installed_ui_extensions(), - title='Select Extention', - multiselect=True - ) - for ui_ext in selected_extensions: - print('updating bundle locale data for ext \"%s\"' % ui_ext.name) - update_bundle_property(title_locales_data, ui_ext, 'title') - -print('done...') diff --git a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/bundle.yaml b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/bundle.yaml index 23c74b0a2..a0e7e4ec6 100644 --- a/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/bundle.yaml +++ b/extensions/pyRevitDevTools.extension/pyRevitDev.tab/Developer Tools.panel/bundle.yaml @@ -2,6 +2,5 @@ layout: - Developer Docs - Generate API Stubs - Get Extension Hashes - - Update Locales - ----- - links \ No newline at end of file diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/bundle.yaml new file mode 100644 index 000000000..c427ec3b7 --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +help_url: '{{docpath}}po0lCldSGmk' +tooltip: Manage sheet packages +author: '{{author}}' +title: >- + Manage + + Packages diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/script.py b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/script.py index c291b7ac4..9ba3005fe 100644 --- a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/script.py +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Packages.pushbutton/script.py @@ -12,10 +12,6 @@ from pkgcommits import CommitPointTypes, CommitTypes, Commit -__title__ = 'Manage\nPackages' -__author__ = '{{author}}' -__helpurl__ = '{{docpath}}po0lCldSGmk' - logger = script.get_logger() diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/bundle.yaml new file mode 100644 index 000000000..e7bf3ece3 --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +help_url: '{{docpath}}FYNDSAypWlg' +tooltip: Manage tags in project or selected elements +author: '{{author}}' +title: >- + Manage + + Tags diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/script.py b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/script.py index fe5cb8c38..f11be2669 100644 --- a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/script.py +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Manage Tags.pushbutton/script.py @@ -9,11 +9,6 @@ import tagsmgr -__title__ = 'Manage\nTags' -__author__ = '{{author}}' -__helpurl__ = '{{docpath}}FYNDSAypWlg' - - logger = script.get_logger() diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/bundle.yaml new file mode 100644 index 000000000..2f513e41a --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +help_url: '{{docpath}}FYNDSAypWlg' +tooltip: Apply tag to selected elements +author: '{{author}}' +title: >- + Tag + + Selected diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/script.py b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/script.py index 1dfe10cff..94db342b6 100644 --- a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/script.py +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/Tag.pushbutton/script.py @@ -10,11 +10,6 @@ import tagsmgr -__title__ = 'Tag\nSelected' -__author__ = '{{author}}' -__helpurl__ = '{{docpath}}FYNDSAypWlg' - - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/TagsConfig.panelbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/TagsConfig.panelbutton/bundle.yaml new file mode 100644 index 000000000..21e9014a2 --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/TagsConfig.panelbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Tags configuration options +context: zero-doc diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/bundle.yaml new file mode 100644 index 000000000..7801be317 --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Clear tag information from selected elements +author: '{{author}}' diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/script.py b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/script.py index be85646b1..846764944 100644 --- a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/script.py +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Clear Tags.pushbutton/script.py @@ -9,9 +9,6 @@ import tagsmgr -__author__ = '{{author}}' - - logger = script.get_logger() diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/bundle.yaml new file mode 100644 index 000000000..ffef2bcb2 --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Manage sheet packages +author: '{{author}}' \ No newline at end of file diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/script.py b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/script.py index f4cc694e4..3e1eed6dc 100644 --- a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/script.py +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Export Tagged.pushbutton/script.py @@ -8,8 +8,6 @@ import tagsmgr -__author__ = "{{author}}" - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/bundle.yaml b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/bundle.yaml new file mode 100644 index 000000000..9711679d4 --- /dev/null +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Match Tags between selected elements +author: '{{author}}' diff --git a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/script.py b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/script.py index 0df23468d..5ce21ae53 100644 --- a/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/script.py +++ b/extensions/pyRevitTags.extension/pyRevit.tab/Packages & Tags.panel/tagstack.stack/Match Tags.pushbutton/script.py @@ -8,9 +8,6 @@ import tagsmgr -__author__ = '{{author}}' - - def pick_and_match_styles(src_element): with forms.WarningBar(title='Pick target elements:'): while True: diff --git a/extensions/pyRevitTemplates.extension/pyRevit.tab/Templates.panel/Template.pulldown/Generate FilledRegion Swatches.pushbutton/bundle.yaml b/extensions/pyRevitTemplates.extension/pyRevit.tab/Templates.panel/Template.pulldown/Generate FilledRegion Swatches.pushbutton/bundle.yaml new file mode 100644 index 000000000..c9765b159 --- /dev/null +++ b/extensions/pyRevitTemplates.extension/pyRevit.tab/Templates.panel/Template.pulldown/Generate FilledRegion Swatches.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Generate filledregion swatches in active view diff --git a/extensions/pyRevitTemplates.extension/pyRevit.tab/Templates.panel/Template.pulldown/Generate FilledRegion Types from Fill Patterns.pushbutton/bundle.yaml b/extensions/pyRevitTemplates.extension/pyRevit.tab/Templates.panel/Template.pulldown/Generate FilledRegion Types from Fill Patterns.pushbutton/bundle.yaml new file mode 100644 index 000000000..ae4b5e2c7 --- /dev/null +++ b/extensions/pyRevitTemplates.extension/pyRevit.tab/Templates.panel/Template.pulldown/Generate FilledRegion Types from Fill Patterns.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Generate FilledRegion Swatches diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/bundle.yaml new file mode 100644 index 000000000..6300137ec --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Find all Rooms/Areas/Spaces with identical names to the select room, area or space and calculates the average area of that space type +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/script.py index 423db99e4..352e24ebe 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Calculate Average Area.pushbutton/script.py @@ -6,12 +6,6 @@ output = script.get_output() -__context__ = 'selection' -__doc__ = 'Find all Rooms/Areas/Spaces with identical names to the select '\ - 'room, area or space and calculates the average area '\ - 'of that space type.' - - areas = DB.FilteredElementCollector(revit.doc)\ .OfCategory(DB.BuiltInCategory.OST_Areas)\ .WhereElementIsNotElementType().ToElements() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Find Range Of Roof Slopes.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Find Range Of Roof Slopes.pushbutton/bundle.yaml new file mode 100644 index 000000000..e6b563711 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Find Range Of Roof Slopes.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists all roof slopes in the model diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/bundle.yaml new file mode 100644 index 000000000..55d04dcba --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/bundle.yaml @@ -0,0 +1,9 @@ +tooltip: >- + Get a total count and types of In Place Family in the current document. + + + Copyright (c) 2019 Jean-Marc Couffin + + https://github.com/jmcouffin +author: 'Jean-Marc Couffin' +contact: 'https://github.com/jmcouffin' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/script.py index 9fc60e02d..a30b2a0a5 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get In Place Family Count.pushbutton/script.py @@ -8,10 +8,6 @@ from pyrevit import script -__author__ = 'Jean-Marc Couffin' -__contact__ = 'https://github.com/jmcouffin' - - output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get Parking Count In Current View.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get Parking Count In Current View.pushbutton/bundle.yaml new file mode 100644 index 000000000..a91aaec29 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Analyse.pulldown/Get Parking Count In Current View.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Get a total count and types of parking elements in the current view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..1223f2d9a --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Compared two views by comparing the contents against each other. By default this tool does not pay attention to the element types. For example, two text elements having the same contents but with different styles are considered equal. This however can be overridden using the SHIFT-Click. If the views do not match, all the different elements will be selected. This tool is helpful when comparing duplicate detail views + + + SHIFT-Click: + + Include Element Types in comparing views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/script.py index e2a3eb15d..51ef99e46 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Compare Detail Views.pushbutton/script.py @@ -4,17 +4,6 @@ import diffutils -__doc__ = 'Compared two views by comparing the contents against each other.'\ - ' By default this tool does not pay attention to the element types.'\ - ' For example, two text elements having the same contents but'\ - ' with different styles are considered equal.'\ - ' This however can be overridden using the SHIFT-Click. ' \ - 'If the views do not match, all the different elements will'\ - ' be selected. This tool is helpful when comparing duplicate'\ - ' detail views.'\ - '\n\nSHIFT-Click: Include Element Types in comparing views' - - view_list = [] selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/bundle.yaml new file mode 100644 index 000000000..5e4634d6c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: >- + Counts all lines in the model with matching style to the selected line + + + CTRL-Click: Lists every matching line +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/script.py index 88cf18893..471913cda 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Count Lines Of Selected Style.pushbutton/script.py @@ -7,9 +7,6 @@ from pyrevit import revit, DB -__context__ = 'selection' - - logger = script.get_logger() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/bundle.yaml new file mode 100644 index 000000000..79db7ec4d --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Find all constraints attached to the selected element +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/script.py index c9db0eecc..2bd13fe47 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find All Attached Constraints.pushbutton/script.py @@ -3,9 +3,6 @@ from pyrevit import revit, DB -__context__ = 'selection' - - def listconstraints(selected_el): print('THIS OBJECT ID: {0}'.format(selected_el.Id)) clconst = DB.FilteredElementCollector(revit.doc)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Identical Room Numbers.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Identical Room Numbers.pushbutton/bundle.yaml new file mode 100644 index 000000000..3216d90c7 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Identical Room Numbers.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Finds and lists rooms with identical numbers diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/bundle.yaml new file mode 100644 index 000000000..248a4f292 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: List Revit link that is being monitored by selected element(s) +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/script.py index b93a93927..854e28b07 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Monitored Revit Link.pushbutton/script.py @@ -4,9 +4,6 @@ from pyrevit import script -__context__ = 'selection' - - output = script.get_output() for element in revit.get_selection(): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..0128a094b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/bundle.yaml @@ -0,0 +1,3 @@ +help_url: '{{docpath}}4IlvCkoOolw' +tooltip: Lists all the elements that are tied to the selected element. For example elements tags or dimensions +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/script.py index 392800d0b..3a16ecac9 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Elements.pushbutton/script.py @@ -3,12 +3,6 @@ from pyrevit import revit, DB -__context__ = 'selection' -__helpurl__ = '{{docpath}}4IlvCkoOolw' -__doc__ = "Lists all the elements that are tied to the selected element."\ - " For example elements tags or dimensions." - - selection = revit.get_selection() output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/bundle.yaml new file mode 100644 index 000000000..ec7ab206b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Lists all the views referenced by the selected elevation tag +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/script.py index 75f7464dd..122627cc0 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referenced Views By Selected Elevation Tag.pushbutton/script.py @@ -3,9 +3,6 @@ from pyrevit import revit, DB -__context__ = 'selection' - - el = revit.get_selection().first if isinstance(el, DB.ElevationMarker): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..8568cf3ae --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: >- + Find all sheets referencing the current view + + Especially useful for finding legends +author: '{{author}}' + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/script.py index abbcba439..a7a689968 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Referencing Sheets.pushbutton/script.py @@ -6,8 +6,6 @@ from pyrevit import forms from pyrevit import script -__author__ = "{{author}}" - output = script.get_output() curview = revit.active_view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/bundle.yaml new file mode 100644 index 000000000..c8bfa49ea --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Lists all sheets and views that the selected elements is visible in +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/script.py index 972c1b209..07824969d 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Sheets Showing Selected Element.pushbutton/script.py @@ -5,9 +5,6 @@ from pyrevit import revit, DB -__context__ = 'selection' - - output = script.get_output() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/bundle.yaml new file mode 100644 index 000000000..4f32c4677 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Lists all views that the selected elements is visible in +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/script.py index 7bd1278f8..06e769ab5 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/Find Views Showing Selected Element.pushbutton/script.py @@ -4,8 +4,6 @@ from pyrevit import script -__context__ = 'selection' - output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/LinesPerViewCounter_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/LinesPerViewCounter_script.py index 11436c3b5..2f7a0ee46 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/LinesPerViewCounter_script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/LinesPerViewCounter_script.py @@ -5,13 +5,6 @@ from pyrevit import revit, DB -__title__ = 'Lines Per View Counter' -__author__ = 'Frederic Beaupere' -__contact__ = 'https://github.com/frederic-beaupere' -__credits__ = 'http://eirannejad.github.io/pyRevit/credits/' - - - output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/bundle.yaml new file mode 100644 index 000000000..1a057238f --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/LinesPerViewCounter.pushbutton/bundle.yaml @@ -0,0 +1,5 @@ +title: 'Lines Per View Counter' +tooltip: List sorted Detail Line Counts for all views with Detail Lines +author: 'Frederic Beaupere' +contact: 'https://github.com/frederic-beaupere' + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/ListElementsOfSelectedLevel_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/ListElementsOfSelectedLevel_script.py index 0991b693d..b9124d0dd 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/ListElementsOfSelectedLevel_script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/ListElementsOfSelectedLevel_script.py @@ -7,12 +7,6 @@ from pyrevit import forms -__title__ = 'List Elements of Selected Level(s)' -__author__ = 'Frederic Beaupere' -# __context__ = 'selection' -__contact__ = 'https://github.com/frederic-beaupere' -__credits__ = 'http://eirannejad.github.io/pyRevit/credits/' - output = script.get_output() all_elements = DB.FilteredElementCollector(revit.doc)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/bundle.yaml new file mode 100644 index 000000000..43602927b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListElementsOfSelectedLevel.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: List all Elements of the selected level(s) +title: List Elements of Selected Level(s) +author: 'Frederic Beaupere' +contact: 'https://github.com/frederic-beaupere' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/ListFamilySizeCreator_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/ListFamilySizeCreator_script.py index e0b5bceb2..ec68483b3 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/ListFamilySizeCreator_script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/ListFamilySizeCreator_script.py @@ -1,20 +1,26 @@ # -*- coding: utf-8 -*- """List all families and their sizes.""" -import os.path as op +import os import math -from collections import defaultdict - -from pyrevit import revit, DB +import tempfile +from pyrevit import revit, forms, script, DB, HOST_APP __title__ = 'Lists Family Sizes' -__author__ = 'Frederic Beaupere' +__authors__ = ['Frederic Beaupere', 'Alex Melnikov'] __contact__ = 'https://github.com/frederic-beaupere' __credits__ = 'http://eirannejad.github.io/pyRevit/credits/' +FIELDS = ["Size", "Name", "Category", "Creator"] +# temporary path for saving families +temp_dir = os.path.join(tempfile.gettempdir(), "pyRevit_ListFamilySizes") +if not os.path.exists(temp_dir): + os.mkdir(temp_dir) +save_as_options = DB.SaveAsOptions() +save_as_options.OverwriteExistingFile = True def convert_size(size_bytes): - if size_bytes == 0: - return "0B" + if not size_bytes: + return "N/A" size_unit = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") i = int(math.floor(math.log(size_bytes, 1024))) p = math.pow(1024, i) @@ -22,39 +28,117 @@ def convert_size(size_bytes): return "{}{}".format(size, size_unit[i]) +def print_totals(families): + total_size = sum([fam_item.get("Size") or 0 for fam_item in families]) + print("%d families, found total size: %s\n\n" % ( + len(families), convert_size(total_size))) + + +def print_sorted(families, group_by): + # group by provided field, use the next field in the list to sort by + fields_rest = list(FIELDS) + fields_rest.pop(FIELDS.index(group_by)) + sort_by = fields_rest[0] + fields_sorted = [group_by] + fields_rest + + if group_by not in ["Creator", "Category"]: # do not group by name and size + print("Sort by: %s" % group_by) + print("; ".join(fields_sorted)) + families_grouped = {"": sorted(families, key=\ + lambda fam_item: fam_item.get(group_by), + reverse=group_by=="Size")} + else: + print("Group by: %s" % group_by) + print("Sort by: %s" % sort_by) + print(";".join(fields_rest)) + # convert to grouped dict + families_grouped = {} + # reverse if sorted by Size + for fam_item in sorted(families, key=\ + lambda fam_item: fam_item.get(sort_by), + reverse=sort_by=="Size"): + group_by_value = fam_item[group_by] + fam_item_reduced = dict(fam_item) + fam_item_reduced.pop(group_by) + if group_by_value not in families_grouped: + families_grouped[group_by_value] = [] + families_grouped[group_by_value].append(fam_item_reduced) + + for group_value in sorted(families_grouped.keys()): + print(50 * "-") + print("%s: %s" % (group_by, group_value)) + for fam_item in families_grouped[group_value]: + family_row = [] + for field in fields_sorted: + value = fam_item.get(field) + if value is None: + continue + if field == "Size": + value = convert_size(value) + family_row.append(value) + print("; ".join(family_row)) + print_totals(families_grouped[group_value]) + +# main logic +# ask use to choose sort option +sort_by = forms.CommandSwitchWindow.show(FIELDS, + message='Sorting options:', +) +if not sort_by: + script.exit() + all_fams = DB.FilteredElementCollector(revit.doc)\ .OfClass(DB.Family)\ .ToElements() -fams_creator = defaultdict(list) - -for fam in all_fams: - if fam.IsEditable: - fam_doc = revit.doc.EditFamily(fam) - fam_path = fam_doc.PathName - fam_size = "0" - fam_creator = \ - DB.WorksharingUtils.GetWorksharingTooltipInfo(revit.doc, - fam.Id).Creator - if fam_path: - if op.exists(fam_path): - fam_size = str(op.getsize(fam_path)) - fams_creator[fam_creator].append(fam_size + "; " + fam.Name) +all_family_items = [] +opened_families = [od.Title for od in HOST_APP.uiapp.Application.Documents + if od.IsFamilyDocument] +with forms.ProgressBar(title=__title__, cancellable=True) as pb: + i = 0 -print("Families overview:") -for creator in fams_creator: - print(50*"-") - print("{} created:".format(creator)) - sum_size_created = 0 - for fam in fams_creator[creator]: - size_prefix = int(fam.split(";")[0]) - fam_name = fam.split(";")[1] - sum_size_created += int(size_prefix) - if size_prefix == 0: - size_prefix = " N/A " + for fam in all_fams: + with revit.ErrorSwallower() as swallower: + if fam.IsEditable: + fam_doc = revit.doc.EditFamily(fam) + fam_path = fam_doc.PathName + # if the family path does not exists, save it temporary + # only if the wasn't opened when the script was started + if fam_doc.Title not in opened_families and ( + not fam_path or not os.path.exists(fam_path)): + # edit family + fam_doc = revit.doc.EditFamily(fam) + # save with temporary path, to know family size + fam_path = os.path.join(temp_dir, fam_doc.Title) + fam_doc.SaveAs(fam_path, save_as_options) + + fam_size = 0 + fam_category = fam.FamilyCategory.Name if fam.FamilyCategory \ + else "N/A" + fam_creator = \ + DB.WorksharingUtils.GetWorksharingTooltipInfo(revit.doc, + fam.Id).Creator + if fam_path and os.path.exists(fam_path): + fam_size = os.path.getsize(fam_path) + all_family_items.append({"Size": fam_size, + "Creator": fam_creator, + "Category": fam_category, + "Name": fam.Name}) + # if the family wasn't opened before, close it + if fam_doc.Title not in opened_families: + fam_doc.Close(False) + # remove temporary family + if fam_path.lower().startswith(temp_dir.lower()): + os.remove(fam_path) + if pb.cancelled: + break else: - size_prefix = convert_size(size_prefix) - print(size_prefix, fam_name) - print("{1} families, found total size: {0}" - .format(convert_size(sum_size_created), - len(fams_creator[creator]))) + pb.update_progress(i, len(all_fams)) + i += 1 + + +# print results +print("Families overview:") +print_sorted(all_family_items, sort_by) +print_totals(all_family_items) + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/bundle.yaml new file mode 100644 index 000000000..fd5dc5540 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizeCreator.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: List all families and their sizes +title: Lists Family Sizes +author: 'Frederic Beaupere' +contact: 'https://github.com/frederic-beaupere' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizesCreatorGrouped.pushbutton/ListFamilySizesCreatorGrouped_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizesCreatorGrouped.pushbutton/ListFamilySizesCreatorGrouped_script.py deleted file mode 100644 index de98b8f76..000000000 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Inspect.pulldown/ListFamilySizesCreatorGrouped.pushbutton/ListFamilySizesCreatorGrouped_script.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -"""List all families and their sizes grouped by creator.""" -import os.path as op -import math -from collections import defaultdict - -from pyrevit import revit, DB - - -__title__ = 'Lists Families Sizes Grouped by Creator' -__author__ = 'Frederic Beaupere' -__contact__ = 'https://github.com/frederic-beaupere' -__credits__ = 'http://eirannejad.github.io/pyRevit/credits/' - - -def convert_size(size_bytes): - if size_bytes == 0: - return "0B" - size_unit = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") - i = int(math.floor(math.log(size_bytes, 1024))) - p = math.pow(1024, i) - size = round(size_bytes / p, 2) - return "{}{}".format(size, size_unit[i]) - - -all_fams = DB.FilteredElementCollector(revit.doc)\ - .OfClass(DB.Family)\ - .ToElements() - -fams_creator = defaultdict(list) - -for fam in all_fams: - if fam.IsEditable: - fam_doc = revit.doc.EditFamily(fam) - fam_path = fam_doc.PathName - fam_size = "0" - fam_creator = \ - DB.WorksharingUtils.GetWorksharingTooltipInfo(revit.doc, - fam.Id).Creator - if fam_path: - if op.exists(fam_path): - fam_size = str(op.getsize(fam_path)) - fams_creator[fam_creator].append(fam_size + "; " + fam.Name) - -print("Families overview:") -for creator in fams_creator: - print(50*"-") - print("{} created:".format(creator)) - sum_size_created = 0 - for fam in fams_creator[creator]: - size_prefix = int(fam.split(";")[0]) - fam_name = fam.split(";")[1] - sum_size_created += int(size_prefix) - if size_prefix == 0: - size_prefix = " N/A " - else: - size_prefix = convert_size(size_prefix) - print(size_prefix, fam_name) - print("{1} families, found total size: {0}" - .format(convert_size(sum_size_created), - len(fams_creator[creator]))) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/bundle.yaml new file mode 100644 index 000000000..ddb114d86 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/bundle.yaml @@ -0,0 +1,3 @@ +tooltip: Sums up the values of selected parameter on selected elements. This tool studies the selected elements and their associated types and presents the user with a list of parameters that are shared between the selected elements. Only parameters with Double or Integer values are included. +title: Sum Total +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/script.py index df5ab9127..f60e5e90b 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Analysis.panel/Tools.stack/Sum.pushbutton/script.py @@ -8,16 +8,6 @@ from pyrevit.coreutils import pyutils -__context__ = 'selection' -__doc__ = 'Sums up the values of selected parameter on selected elements. ' \ - 'This tool studies the selected elements and their associated ' \ - 'types and presents the user with a list of parameters that are ' \ - 'shared between the selected elements. Only parameters with ' \ - 'Double or Integer values are included.' - -__title__ = 'Sum Total' - - selection = revit.get_selection() logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/bundle.yaml new file mode 100644 index 000000000..a198a182c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/bundle.yaml @@ -0,0 +1,15 @@ +help_url: https://www.notion.so/pyrevitlabs/Manage-Keynotes-6f083d6f66fe43d68dc5d5407c8e19da +tooltip: >- + Manage project keynotes. + + + Shift+Click: + + Reset window configurations and open. +title: >- + Manage + + Keynotes +min_revit_version: 2014 +author: '{{author}}' + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/keynotesdb.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/keynotesdb.py index 508c6fede..a2a63c151 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/keynotesdb.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/keynotesdb.py @@ -2,7 +2,7 @@ #pylint: disable=E0401,W0613 import re import codecs -from collections import namedtuple, defaultdict +from collections import defaultdict from pyrevit import HOST_APP from pyrevit import coreutils @@ -64,8 +64,10 @@ def __init__(self, name="Regular Expression (Regex)", regex=None, negate=False): - self.name = (name + "{}").format(" [Exclude]" if negate else "") - self.code = ":notregex:" if negate else ":regex:" + super(RKeynoteRegexFilter, self).__init__( + name=(name + "{}").format(" [Exclude]" if negate else ""), + code=":notregex:" if negate else ":regex:" + ) self.regex = regex or "" def format_term(self, exst_term): @@ -78,8 +80,7 @@ class RKeynoteViewFilter(RKeynoteFilter): """Keynote smart regular expressions filter.""" def __init__(self): - self.name = "Current View Only" - self.code = ":view:" + super(RKeynoteViewFilter, self).__init__("Current View Only", ":view:") self.keys = [] def __contains__(self, knote_key): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/script.py index 5ee01eddf..2a963f702 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Keynotes.pushbutton/script.py @@ -23,12 +23,6 @@ import keynotesdb as kdb -__title__ = "Manage\nKeynotes" -__author__ = "{{author}}" -__helpurl__ = "https://www.notion.so/pyrevitlabs/Manage-Keynotes-6f083d6f66fe43d68dc5d5407c8e19da" -__min_revit_ver__ = 2014 - - logger = script.get_logger() output = script.get_output() @@ -358,7 +352,10 @@ def __init__(self, xaml_file_name, reset_config=False): try: self._conn = kdb.connect(self._kfile) except System.TimeoutException as toutex: - forms.alert(toutex.Message, exitscript=True) + forms.alert(toutex.Message, + expanded="{}::__init__()".format( + self.__class__.__name__), + exitscript=True) except Exception as ex: logger.debug('Connection failed | %s' % ex) res = forms.alert( @@ -388,7 +385,7 @@ def __init__(self, xaml_file_name, reset_config=False): elif res == "Select a different keynote file": self._change_kfile() elif res == "Give me more info": - script.open_url(__helpurl__) + script.open_url(__helpurl__) #pylint: disable=undefined-variable script.exit() else: forms.alert("Keynote file is not yet converted.", @@ -448,11 +445,7 @@ def postcmd_idx(self): @postcmd_idx.setter def postcmd_idx(self, index): - # self.keynotetype_cb.ItemsSource = \ - # [str(x).replace('UI.PostableCommand', '') - # for x in get_keynote_pcommands()] - # self.keynotetype_cb.SelectedIndex = index - postcmd_op = self.postcmd_options[index] + postcmd_op = self.postcmd_options[index if index else 0] postcmd_op.IsChecked = True @property @@ -481,7 +474,9 @@ def all_categories(self): try: return kdb.get_categories(self._conn) except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::all_categories()".format( + self.__class__.__name__)) return [] @property @@ -489,7 +484,9 @@ def all_keynotes(self): try: return kdb.get_keynotes(self._conn) except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::all_keynotes()".format( + self.__class__.__name__)) return [] @property @@ -502,9 +499,14 @@ def keynote_text_with(self): def get_used_keynote_elements(self): used_keys = defaultdict(list) - for knote in revit.query.get_used_keynotes(doc=revit.doc): - key = knote.Parameter[DB.BuiltInParameter.KEY_VALUE].AsString() - used_keys[key].append(knote.Id) + try: + for knote in revit.query.get_used_keynotes(doc=revit.doc): + key = knote.Parameter[DB.BuiltInParameter.KEY_VALUE].AsString() + used_keys[key].append(knote.Id) + except Exception as ex: + forms.alert(str(ex), + expanded="{}::get_used_keynote_elements()".format( + self.__class__.__name__)) return used_keys def save_config(self): @@ -611,7 +613,10 @@ def _convert_existing(self): self._conn = kdb.connect(self._kfile) kdb.import_legacy_keynotes(self._conn, temp_kfile, skip_dup=True) except System.TimeoutException as toutex: - forms.alert(toutex.Message, exitscript=True) + forms.alert(toutex.Message, + expanded="{}::_convert_existing()".format( + self.__class__.__name__), + exitscript=True) def _change_kfile(self): kfile = forms.pick_file('txt') @@ -628,12 +633,16 @@ def _change_kfile(self): except Exception as ckf_ex: forms.alert( "Error opening seleced keynote file.", - sub_msg=str(ckf_ex) + sub_msg=str(ckf_ex), + expanded="{}::_change_kfile() [kdb.connect]".format( + self.__class__.__name__) ) return self._kfile except Exception as skex: - forms.alert(str(skex)) + forms.alert(str(skex), + expanded="{}::_change_kfile() [transaction]".format( + self.__class__.__name__)) def _update_ktree(self, active_catkey=None): categories = [self._allcat] @@ -670,8 +679,19 @@ def _update_ktree_knotes(self, fast=False): try: active_tree = kdb.get_keynotes_tree(self._conn) except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert( + toutex.Message, + expanded="{}::_update_ktree_knotes() [timeout]".format( + self.__class__.__name__)) active_tree = [] + except Exception as ex: + forms.alert( + "Error retrieving keynotes.", + expanded="{}\n{}::_update_ktree_knotes()".format( + str(ex), + self.__class__.__name__), + exitscript=True + ) selected_cat = self.selected_category # if the is a category selected, list its children @@ -773,9 +793,13 @@ def add_category(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::add_category() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::add_category()".format( + self.__class__.__name__)) def edit_category(self, sender, args): selected_category = self.selected_category @@ -804,9 +828,13 @@ def edit_category(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::edit_category() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::edit_category()".format( + self.__class__.__name__)) finally: self._update_ktree() if selected_keynote: @@ -836,9 +864,14 @@ def remove_category(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert( + toutex.Message, + expanded="{}::remove_category() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::remove_category()".format( + self.__class__.__name__)) finally: self._update_ktree(active_catkey=self._allcat) @@ -851,10 +884,12 @@ def add_keynote(self, sender, args): parent_key = self.selected_category.key # otherwise ask to select a parent category if not parent_key: - cat = forms.SelectFromList.show(self.all_categories, - title="Select Parent Category", - name_attr='text', - owner=self) + cat = forms.SelectFromList.show( + self.all_categories, + title="Select Parent Category", + name_attr='text', + item_container_template=self.Resources["treeViewItem"], + owner=self) if cat: parent_key = cat.key # if parent key is available proceed to create keynote @@ -866,9 +901,13 @@ def add_keynote(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::add_keynote() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::add_keynote()".format( + self.__class__.__name__)) finally: self._update_ktree_knotes() @@ -882,9 +921,13 @@ def add_sub_keynote(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::add_sub_keynote() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::add_sub_keynote()".format( + self.__class__.__name__)) finally: self._update_ktree_knotes() @@ -900,9 +943,13 @@ def duplicate_keynote(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::duplicate_keynote() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::duplicate_keynote()".format( + self.__class__.__name__)) finally: self._update_ktree_knotes() @@ -927,9 +974,15 @@ def remove_keynote(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert( + toutex.Message, + expanded="{}::remove_keynote() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert( + str(ex), + expanded="{}::remove_keynote()".format( + self.__class__.__name__)) finally: self._update_ktree_knotes() @@ -944,9 +997,13 @@ def edit_keynote(self, sender, args): # make sure to relaod on close self._needs_update = True except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::edit_keynote() [timeout]".format( + self.__class__.__name__)) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::edit_keynote()".format( + self.__class__.__name__)) finally: self._update_ktree_knotes() @@ -1002,7 +1059,9 @@ def place_keynote(self, sender, args): knote_key ) except Exception as ex: - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::place_keynote()".format( + self.__class__.__name__)) def enable_history(self, sender, args): forms.alert("Not yet implemented. Coming soon.") @@ -1033,10 +1092,14 @@ def import_keynotes(self, sender, args): try: kdb.import_legacy_keynotes(self._conn, kfile, skip_dup=res) except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::import_keynotes() [timeout]".format( + self.__class__.__name__)) except Exception as ex: logger.debug('Importing legacy keynotes failed | %s' % ex) - forms.alert(str(ex)) + forms.alert(str(ex), + expanded="{}::import_keynotes()".format( + self.__class__.__name__)) finally: self._update_ktree(active_catkey=self._allcat) self._update_ktree_knotes() @@ -1048,7 +1111,9 @@ def export_keynotes(self, sender, args): try: kdb.export_legacy_keynotes(self._conn, kfile) except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::export_keynotes()".format( + self.__class__.__name__)) def export_visible_keynotes(self, sender, args): kfile = forms.save_file('txt') @@ -1062,7 +1127,9 @@ def export_visible_keynotes(self, sender, args): kfile, include_keys=include_list) except System.TimeoutException as toutex: - forms.alert(toutex.Message) + forms.alert(toutex.Message, + expanded="{}::export_visible_keynotes()".format( + self.__class__.__name__)) def update_model(self, sender, args): self.Close() @@ -1076,7 +1143,9 @@ def window_closing(self, sender, args): self.save_config() except Exception as saveex: logger.debug('Saving configuration failed | %s' % saveex) - forms.alert(str(saveex)) + forms.alert(str(saveex), + expanded="{}::window_closing()".format( + self.__class__.__name__)) if self._conn: # manuall call dispose to release locks @@ -1092,4 +1161,4 @@ def window_closing(self, sender, args): reset_config=__shiftclick__ #pylint: disable=undefined-variable ).show(modal=True) except Exception as kmex: - forms.alert(str(kmex)) + forms.alert(str(kmex), expanded="Creating keynote manager window") diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..f108bbb39 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/bundle.yaml @@ -0,0 +1,5 @@ +tooltip: "Print sheets in order from a sheet index.\n\nNote:\nWhen using the `Combine into one file` option,\nthe tool adds non-printable character u'\\u200e'\n(Left-To-Right Mark) at the start of the sheet names\nto push Revit's interenal printing engine to sort\nthe sheets correctly per the drawing index order. \n\nMake sure your drawings indices consider this\nwhen filtering for sheet numbers.\n\nShift-Click:\nShift-Clicking the tool will remove all\nnon-printable characters from the sheet numbers,\nin case an error in the tool causes these characters\nto remain." +title: >- + Print + + Sheets diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/script.py index 66bae1f36..154635b4b 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Print Sheets.pushbutton/script.py @@ -33,8 +33,6 @@ from pyrevit import script -__title__ = 'Print\nSheets' - logger = script.get_logger() config = script.get_config() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/bundle.yaml new file mode 100644 index 000000000..e18a9166c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Copy selected revisions from current model to selected open models \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/script.py index 5f202f15c..b4552e9f6 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Copy Revisions to Open Documents.pushbutton/script.py @@ -4,10 +4,6 @@ from pyrevit import forms -__doc__ = 'Copy selected revisions from current model ' \ - 'to selected open models.' - - selected_revisions = forms.select_revisions(button_name='Select Revision', multiple=True) if selected_revisions: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/bundle.yaml new file mode 100644 index 000000000..599ae9f8d --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Select a revision from the list of revisions and this script will create a print sheet set for the revised sheets under the selected revision, and will assign the new sheet set as the default print set \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/script.py index 6a2003f5f..eab396b4f 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Create Revised Sheet Set.pushbutton/script.py @@ -3,12 +3,6 @@ from pyrevit import forms -__doc__ = 'Select a revision from the list of revisions and this script '\ - 'will create a print sheet set for the revised sheets under the '\ - 'selected revision, and will assign the new sheet set as '\ - 'the default print set.' - - revisions = forms.select_revisions(button_name='Create Sheet Set', multiple=True) if revisions: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revised Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revised Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..1dab40bff --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revised Sheets.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists all sheets revised under any revision diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..b121dac69 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists all revision clouds in this model that have been placed on a view and not on sheet \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/script.py index 0b28b3cff..deaeb9594 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Revision Clouds On Views.pushbutton/script.py @@ -1,9 +1,6 @@ from pyrevit import revit, DB -__doc__ = 'Lists all revision clouds in this model that have been '\ - 'placed on a view and not on sheet.' - revcs = DB.FilteredElementCollector(revit.doc)\ .OfCategory(DB.BuiltInCategory.OST_RevisionClouds)\ .WhereElementIsNotElementType() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/bundle.yaml new file mode 100644 index 000000000..ec84841c2 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Sometimes when a revision cloud is placed inside a view (instead of a sheet) and the view is placed on a sheet, the revision schedule on the sheet does not get updated with the revision number of the cloud inside the sheeted view. This script verifies that the sheet revision schedule is actually listing all the revisions shown inside the views of that sheet \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/script.py index df8266ef5..a705405f8 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets Missing Revision Number.pushbutton/script.py @@ -1,15 +1,6 @@ from pyrevit import revit, DB -__doc__ = 'Sometimes when a revision cloud is placed inside a view '\ - '(instead of a sheet) and the view is placed on a sheet, '\ - 'the revision schedule on the sheet does not get updated '\ - 'with the revision number of the cloud inside the sheeted view. '\ - 'This script verifies that the sheet revision schedule is '\ - 'actually listing all the revisions shown inside '\ - 'the views of that sheet.' - - # Collecting all revisions revclouds = DB.FilteredElementCollector(revit.doc)\ .OfCategory(DB.BuiltInCategory.OST_RevisionClouds)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/bundle.yaml new file mode 100644 index 000000000..9704fc7b0 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Select a revision cloud and this tool will list all the sheets revised under the same revision diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/script.py index d62148b54..584b4d0f9 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find All Sheets With Selected Revision.pushbutton/script.py @@ -1,9 +1,6 @@ from pyrevit import revit, DB -__doc__ = 'Select a revision cloud and this tool will list all '\ - 'the sheets revised under the same revision.' - selection = revit.get_selection() selectedrevs = [] diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/ListRevCloudedLegends_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/ListRevCloudedLegends_script.py index b6934d68b..b55faa668 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/ListRevCloudedLegends_script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/ListRevCloudedLegends_script.py @@ -4,17 +4,6 @@ from pyrevit import script -__title__ = 'Find Legends with Revision Clouds' -__author__ = 'Frederic Beaupere' -__contact__ = 'https://github.com/frederic-beaupere' -__credits__ = 'http://eirannejad.github.io/pyRevit/credits/' - -__doc__ = 'Lists all legends with revision clouds on them. '\ - 'Legends with revision clouds will not trigger the sheet '\ - 'index of the sheet they are placed on and '\ - 'that is why this tool is useful.' - - output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/bundle.yaml new file mode 100644 index 000000000..ab89bd159 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Find Rev Clouded Legends.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: Lists all legends with revision clouds on them. Legends with revision clouds will not trigger the sheet index of the sheet they are placed on and that is why this tool is useful +title: Find Legends with Revision Clouds +author: 'Frederic Beaupere' +contact: 'https://github.com/frederic-beaupere' \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Generate Revision Report.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Generate Revision Report.pushbutton/bundle.yaml new file mode 100644 index 000000000..574d83e75 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Generate Revision Report.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Generates a report from all revisions in current project \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..013889eac --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/bundle.yaml @@ -0,0 +1,5 @@ +tooltip: >- + Select a revision from the list of revisions + + and this script will remove that revision from all sheets if it has not been "clouded" on the sheet +title: Remove Revision From Sheets \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/script.py index f298928da..994188571 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Remove Revision From Sheets.pushbutton/script.py @@ -5,10 +5,6 @@ from pyrevit import script -__doc__ = 'Select a revision from the list of revisions\n'\ - 'and this script will remove that revision ' \ - 'from all sheets if it has not been "clouded" on the sheet.' - logger = script.get_logger() @@ -18,7 +14,8 @@ logger.debug(revisions) if revisions: - sheets = forms.select_sheets(button_name='Set Revision') + sheets = forms.select_sheets(button_name='Set Revision', + include_placeholder=False) if sheets: with revit.Transaction('Remove Revision from Sheets'): updated_sheets = revit.update.update_sheet_revisions(revisions, diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..914aa6150 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Select a revision from the list of revisions and this script set that revision on all sheets in the model as an additional revision diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/script.py index c9139b526..b156c22ff 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Set Revision On Sheets.pushbutton/script.py @@ -4,16 +4,12 @@ from pyrevit import forms -__doc__ = 'Select a revision from the list of revisions and '\ - 'this script set that revision on all sheets in the '\ - 'model as an additional revision.' - - revisions = forms.select_revisions(button_name='Select Revision', multiple=True) if revisions: - sheets = forms.select_sheets(button_name='Set Revision') + sheets = forms.select_sheets(button_name='Set Revision', + include_placeholder=False) if sheets: with revit.Transaction('Set Revision on Sheets'): updated_sheets = revit.update.update_sheet_revisions(revisions, diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Turn Off All Revisions.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Turn Off All Revisions.pushbutton/bundle.yaml new file mode 100644 index 000000000..a3723278f --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Revision.pulldown/Turn Off All Revisions.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Sets the revision visibility parameter to None for all revisions diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/bundle.yaml new file mode 100644 index 000000000..35f6011d2 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +help_url: '{{docpath}}SJzs9ZxqRYc' +tooltip: Enter sheet names and numbers in the text box and this tool will create all at once \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/script.py index e8db6057b..b37f8cfe6 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Batch Sheet Maker.pushbutton/script.py @@ -6,12 +6,6 @@ from pyrevit import script -__helpurl__ = "{{docpath}}SJzs9ZxqRYc" - -__doc__ = 'Enter sheet names and numbers in the text box and '\ - 'this tool will create all at once.' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..f67137dfb --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Open the source sheet. Run this script and select destination sheets. Select Viewports and push Finish button on the properties bar. The selected views will be added to the destination sheets. If the view or schedule already exists on that sheet, the location and type will be updated +title: Copy/Update Selected Viewports To Selected Sheets diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/script.py index ae3ae773b..5d72511dd 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Selected Viewports To Selected Sheets.pushbutton/script.py @@ -3,15 +3,6 @@ from pyrevit import script -__title__ = 'Copy/Update Selected Viewports To Selected Sheets' - -__doc__ = 'Open the source sheet. Run this script and select destination '\ - 'sheets. Select Viewports and push Finish button on the '\ - 'properties bar. The selected views will be added to the '\ - 'destination sheets. If the view or schedule already exists on '\ - 'that sheet, the location and type will be updated.' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/bundle.yaml new file mode 100644 index 000000000..bca8dd5c5 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +help_url: '{{docpath}}9Q-J6mWBYJI&t=17s' +tooltip: Copies selected or current sheet(s) to other projects currently open in Revit. Make sure the destination documents have at least one Legend view (Revit API does not provide a method to create Legend views so this script needs to duplicate an existing one to create a new Legend) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/script.py index 12885d724..26e152180 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Copy Sheets to Open Documents.pushbutton/script.py @@ -8,14 +8,6 @@ from Autodesk.Revit.DB import Element as DBElement -__helpurl__ = '{{docpath}}9Q-J6mWBYJI&t=17s' -__doc__ = 'Copies selected or current sheet(s) to other ' \ - 'projects currently open in Revit. Make sure the destination ' \ - 'documents have at least one Legend view (Revit API does not ' \ - 'provide a method to create Legend views so this script needs ' \ - 'to duplicate an existing one to create a new Legend).' - - logger = script.get_logger() output = script.get_output() @@ -73,7 +65,8 @@ def get_user_options(): def get_dest_docs(): # find open documents other than the active doc selected_dest_docs = \ - forms.select_open_docs(title='Select Destination Documents') + forms.select_open_docs(title='Select Destination Documents', + filterfunc=lambda d: not d.IsFamilyDocument) if not selected_dest_docs: sys.exit(0) else: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/bundle.yaml new file mode 100644 index 000000000..b6e921586 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Decreases the sheet number of the selected sheets by one. The sheet name change will be printed if logging is set to Verbose in pyRevit settings \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/script.py index 503c81a78..dc14d8c3e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Decrement Selected Sheet Numbers.pushbutton/script.py @@ -5,18 +5,14 @@ from pyrevit import script -__doc__ = 'Decreases the sheet number of the selected sheets by one. '\ - 'The sheet name change will be printed if logging is set '\ - 'to Verbose in pyRevit settings.' - - selection = revit.get_selection() logger = script.get_logger() shift = -1 -selected_sheets = forms.select_sheets(title='Select Sheets', use_selection=True) +selected_sheets = forms.select_sheets(title='Select Sheets', + use_selection=True) if not selected_sheets: script.exit() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/bundle.yaml new file mode 100644 index 000000000..fe504b678 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Increases the sheet number of the selected sheets by one. The sheet name change will be printed if logging is set to Verbose in pyRevit settings diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/script.py index c35147d4a..abd403db9 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Increment Selected Sheet Numbers.pushbutton/script.py @@ -5,11 +5,6 @@ from pyrevit import script -__doc__ = 'Increases the sheet number of the selected sheets by one. '\ - 'The sheet name change will be printed if logging is set '\ - 'to Verbose in pyRevit settings.' - - logger = script.get_logger() selection = revit.get_selection() @@ -17,7 +12,8 @@ shift = 1 -selected_sheets = forms.select_sheets(title='Select Sheets') +selected_sheets = forms.select_sheets(title='Select Sheets', + use_selection=True) if not selected_sheets: script.exit() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/bundle.yaml new file mode 100644 index 000000000..54d9e1242 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Open the source sheet. Run this script and select destination sheet. Select Viewports and push Finish button on the properties bar. The selected views will be MOVED to the destination sheet diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/script.py index 6561e865a..6b35c69a8 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Move Selected Viewports To Selected Sheet.pushbutton/script.py @@ -4,13 +4,6 @@ from pyrevit import script -__doc__ = 'Open the source sheet. Run this script and select destination '\ - 'sheet. Select Viewports and push Finish button on the '\ - 'properties bar. The selected views will be MOVED to '\ - 'the destination sheet.' - - - cursheet = revit.active_view forms.check_viewtype(cursheet, DB.ViewType.DrawingSheet, exitscript=True) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/bundle.yaml new file mode 100644 index 000000000..d46c876ec --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Opens the view associated to the selected viewport. You can assign a shortcut to this tool and this is a quick way top open the views when working on sheets diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/script.py index 397c9dbda..3780b795e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Open Selected Viewport.pushbutton/script.py @@ -2,11 +2,6 @@ from pyrevit import forms -__doc__ = 'Opens the view associated to the selected viewport. '\ - 'You can assign a shortcut to this tool and this is a '\ - 'quick way top open the views when working on sheets.' - - selection = revit.get_selection() # Opens the associated view with the selected viewport on a sheet. diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/bundle.yaml new file mode 100644 index 000000000..104e365b7 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Pins all viewports on selected sheets. + + + Shift-Click: + + Pin all viewports on active sheet diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/script.py index ce62d1c36..91268c120 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Pin All Viewports.pushbutton/script.py @@ -36,7 +36,9 @@ def pin_viewports(sheet_list): forms.alert('Active view must be a sheet.') script.exit() else: - sel_sheets = forms.select_sheets(title='Select Sheets', use_selection=True) + sel_sheets = forms.select_sheets(title='Select Sheets', + use_selection = True, + include_placeholder=False) if sel_sheets: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/ReOrder Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/ReOrder Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..94a5eaa34 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/ReOrder Sheets.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Print items in order from a sheet index + + + This tool looks for project parameters (on Sheets) that are + + Instance, of type Integer, and have "Order" in their names diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..4093ba50f --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: >- + Renames PDF sheets printed from Revit and removes the Central model name from the PDF names. The tool will ask for a folder containing the file. + + + Shift-Click: + + Rename files on Desktop +context: zero-doc diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/script.py index 73c014adf..4a79c4ac6 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename PDF Sheets.pushbutton/script.py @@ -6,13 +6,6 @@ from pyrevit import forms -__context__ = 'zero-doc' -__doc__ = 'Renames PDF sheets printed from Revit and removes the Central ' \ - 'model name from the PDF names. The tool will ask for a folder ' \ - 'containing the file.\n\n' \ - 'Shift-Click:\nRename files on Desktop' - - # if user shift-clicks, default to user desktop, # otherwise ask for a folder containing the PDF files if __shiftclick__: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename Selected Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename Selected Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..43bb78d87 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Rename Selected Sheets.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Change the selected sheet names \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Reorder Selected Viewport.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Reorder Selected Viewport.pushbutton/bundle.yaml new file mode 100644 index 000000000..af52918cf --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Reorder Selected Viewport.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Reorders the selected viewport on current sheet diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..c89ac2a4e --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select Sheets.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Select multiple sheets from a list diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..c52f8c2c8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Select title blocks on selected sheets for batch editing diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/script.py index 1809176b8..ac00a372c 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Select TitleBlocks on Sheets.pushbutton/script.py @@ -10,7 +10,9 @@ def get_source_sheets(): - sheet_elements = forms.select_sheets(button_name='Select TitleBlocks', use_selection=True) + sheet_elements = forms.select_sheets(button_name='Select TitleBlocks', + use_selection=True, + include_placeholder=False) if not sheet_elements: script.exit() return sheet_elements diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/bundle.yaml new file mode 100644 index 000000000..a640e2f18 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Draw the desired crop boundary as a closed polygon on your sheet (using detail lines). Then select the bounday and the destination viewport and run the script. This script will apply the drafted boundary to the view of the selected viewport \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/script.py index bbf695912..96b581d1d 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/Set Crop Region To Selected Shape.pushbutton/script.py @@ -3,12 +3,6 @@ from pyrevit import forms -__doc__ = 'Draw the desired crop boundary as a closed polygon on your sheet '\ - '(using detail lines). Then select the bounday and the '\ - 'destination viewport and run the script. This script will '\ - 'apply the drafted boundary to the view of the selected viewport.' - - # note: no needs to check for curves in polygon. # currently it takes a straight line between the start and end point. # (no errors so far) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/bundle.yaml new file mode 100644 index 000000000..45dc49953 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Run this tool in a sheet view and click on sheet viewports one by one and this tool will change the detail number sequentially \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/script.py index 155c072b0..03b3a1527 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/Sheets.pulldown/View Ordering Tool.pushbutton/script.py @@ -3,10 +3,6 @@ from pyrevit import forms -__doc__ = 'Run this tool in a sheet view and click on sheet viewports one '\ - 'by one and this tool will change the detail number sequentially.' - - # verify active view is sheet curview = revit.active_view if not isinstance(curview, DB.ViewSheet): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Convert Drafting to Legend.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Convert Drafting to Legend.pushbutton/bundle.yaml new file mode 100644 index 000000000..3111f8e20 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Convert Drafting to Legend.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Converts selected detail views to legend views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Convert Legend to Drafting.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Convert Legend to Drafting.pushbutton/bundle.yaml new file mode 100644 index 000000000..19acf8ce8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Convert Legend to Drafting.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Converts selected legend views to detail views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/bundle.yaml new file mode 100644 index 000000000..8b0a5eaca --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +help_url: '{{docpath}}ThzcRM_Tj8g' +tooltip: Converts selected legend views to detail views and copies them to all projects currently open in Revit diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/script.py index 51752368b..6aacd077e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends as Drafting to Other Documents.pushbutton/script.py @@ -6,11 +6,6 @@ from pyrevit import forms -__helpurl__ = '{{docpath}}ThzcRM_Tj8g' -__doc__ = 'Converts selected legend views to detail views and copies '\ - 'them to all projects currently open in Revit.' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/bundle.yaml new file mode 100644 index 000000000..a5773a34c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/bundle.yaml @@ -0,0 +1 @@ +help_url: '{{docpath}}ThzcRM_Tj8g' \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/script.py index f4c322545..f3ab123fc 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Legends.pulldown/Copy Legends to Other Documents.pushbutton/script.py @@ -6,9 +6,6 @@ from pyrevit import forms -__helpurl__ = '{{docpath}}ThzcRM_Tj8g' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/bundle.yaml new file mode 100644 index 000000000..caa471058 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/bundle.yaml @@ -0,0 +1,18 @@ +tooltip: >- + Import existing CSV file as a key schedule + + + - First CSV row must be field names + + - First CSV field must be "Key Name" + + + CSV Example: + + Key Name,Parameter1 Name,Parameter2 Name + + A,Value11,Value12 + + B,Value21,Value22 + + C,Value32,Value32 diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/script.py index ede02e4d8..36f9b2734 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Create Schedule from CSV.pushbutton/script.py @@ -14,6 +14,7 @@ import csv import codecs import os.path as op +from collections import defaultdict from pyrevit import PyRevitException from pyrevit import forms @@ -45,6 +46,40 @@ def create_schedule_record(schedule, count=1): section_data.InsertRow(section_data.LastRowNumber + 1) +def create_schedule_records(schedule, fields, records): + """Create records in given schedule""" + # create records first + create_schedule_record(schedule, count=len(records)) + # now grab the records and update their param values + # iterate over elements and records + for keysched_el, record_data in zip( + revit.query.get_all_elements_in_view(schedule), + records): + logger.debug('Processing record: %s', record_data) + for idx, field_name in enumerate(fields): + if record_data[idx]: + p = keysched_el.LookupParameter(field_name) + if p and not p.SetValueString(record_data[idx]): + if p.StorageType == DB.StorageType.Integer: + p.Set(int(record_data[idx])) + elif p.StorageType == DB.StorageType.Double: + p.Set(float(record_data[idx])) + elif p.StorageType == DB.StorageType.String: + p.Set(record_data[idx]) + elif p.StorageType == DB.StorageType.ElementId: + p.Set(DB.ElementId(int(record_data[idx]))) + + +def has_matching_fields(keysched_def, fields): + """Check if given schedule definition contains any of the fields""" + exist_ksch_fields = set() + for idx in range(keysched_def.GetFieldCount()): + sched_field = keysched_def.GetField(idx) + exist_ksch_fields.add(sched_field.GetName()) + other_fields = exist_ksch_fields.difference(set(fields)) + return len(other_fields) == 0 + + def has_field_conflicts(keysched_def, fields): """Check if given schedule definition contains any of the fields""" for idx in range(keysched_def.GetFieldCount()): @@ -53,12 +88,21 @@ def has_field_conflicts(keysched_def, fields): return sched_field.GetName() -def resolve_messy_conflicts(category, sched_name, fields, doc=None): - """Decide what to do if there is an existing sched with identical name""" +def resolve_naming_conflicts(category, sched_name, fields, doc=None): + """Decide what to do if there is an existing sched with identical name + + This function needs to check these conditions, in this order: + 1- exisiting key schedule for given category, with any of the fields + 2- existing any schedule with matching name + + Exisiting key schedule for given category, with identical fields, has + already been checked for and the update function would be called + """ doc = doc or revit.doc + all_schedules = \ revit.query.get_all_views(doc=doc, view_types=[DB.ViewType.Schedule]) - # check for existing key schedules that use the fields already + # check for existing key schedules (check 1) matching_keysched = next( ( x for x in all_schedules @@ -82,36 +126,26 @@ def resolve_messy_conflicts(category, sched_name, fields, doc=None): # the the process continue to check matching names below if not safe_delete_keysched(doc, matching_keysched): return None + else: + return None - # check for matching view names + # by now, if there was a key schdule matching name, it is deleted + # check for matching view names, of other types all_schedules = \ revit.query.get_all_views(doc=doc, view_types=[DB.ViewType.Schedule]) - existing_view = \ + existing_sched = \ revit.query.get_view_by_name(sched_name, view_types=[DB.ViewType.Schedule]) - if existing_view: - if isinstance(existing_view, DB.ViewSchedule) \ - and existing_view.Definition.IsKeySchedule \ - and existing_view.Definition.CategoryId == category.Id: - if forms.alert( - "There is a \"{}\" key schedule with name \"{}\". " - "Do you want to delete this first?".format( - category.Name, - sched_name), - yes=True, no=True): - if safe_delete_keysched(doc, existing_view): - return sched_name - else: - if forms.alert( - "There is a view with the same name \"{}\" but it is " - "not a key schedule! Do you want to choose a new name " - "for this key schedule?" - .format(sched_name), - yes=True, no=True): - return forms.ask_for_unique_string( - reserved_values=[x.Name for x in all_schedules], - default='{} {}'.format(sched_name, coreutils.current_date()) - ) + if existing_sched: + if forms.alert( + "There is an existing schedule with the same name \"{}\"." + "Do you want to choose a new name for this key schedule?" + .format(sched_name), + yes=True, no=True): + return forms.ask_for_unique_string( + reserved_values=[x.Name for x in all_schedules], + default='{} {}'.format(sched_name, coreutils.current_date()) + ) return None return sched_name @@ -127,7 +161,7 @@ def create_key_schedule(category, key_name, sched_name, # set name and key parameter name # fields[1:] because first field in keyname new_name = \ - resolve_messy_conflicts(category, sched_name, fields[1:], doc=doc) + resolve_naming_conflicts(category, sched_name, fields[1:], doc=doc) # if not name skip making schedule if not new_name: return @@ -160,30 +194,76 @@ def create_key_schedule(category, key_name, sched_name, # fill with data if records: - # create records first - create_schedule_record(new_key_sched, count=len(records)) - # now grab the records and update their param values - # iterate over elements and records - # FIXME: collect new elements only - for keysched_el, record_data in zip( - revit.query.get_all_elements_in_view(new_key_sched), - records): - logger.debug('Processing record: %s', record_data) - for idx, field_name in enumerate(fields): - if record_data[idx]: - p = keysched_el.LookupParameter(field_name) - if p and not p.SetValueString(record_data[idx]): - if p.StorageType == DB.StorageType.Integer: - p.Set(int(record_data[idx])) - elif p.StorageType == DB.StorageType.Double: - p.Set(float(record_data[idx])) - elif p.StorageType == DB.StorageType.String: - p.Set(record_data[idx]) - elif p.StorageType == DB.StorageType.ElementId: - p.Set(DB.ElementId(int(record_data[idx]))) + create_schedule_records(new_key_sched, fields, records) return new_key_sched +def find_matching_keyschedule(category, fields, doc=None): + """Find any existing key schedules that have matching fields""" + doc = doc or revit.doc + all_schedules = \ + revit.query.get_all_views(doc=doc, view_types=[DB.ViewType.Schedule]) + # check for existing key schedules (check 1) + matching_keysched = next( + ( + x for x in all_schedules + if x.Definition.IsKeySchedule + and x.Definition.CategoryId == category.Id + ), + None + ) + if matching_keysched: + if has_matching_fields(matching_keysched.Definition, fields): + return matching_keysched + + +def update_key_schedule(keyschedule, category, fields, records, doc=None): + """Update existing key schedule with provided values""" + doc = doc or revit.doc + if forms.alert( + "key schedule \"{}\" has identical fields. Multiple key " + "schedules can not set values for same parameter.\n" + "Do you want to update the data in existing schedule?" + .format(keyschedule.Name), + yes=True, no=True): + # updating cells is possible but more complex logic was necessary + # to find existing, new, and deleted records + # the approach below is simpler but takes more exec time + # collect key schedule param values on all elements + value_dict = defaultdict(list) + param_name = keyschedule.KeyScheduleParameterName + for exst_el in revit.query.get_elements_by_categories( + [revit.query.get_builtincategory(category.Name)], + doc=doc): + param = exst_el.LookupParameter(param_name) + if param: + value_dict[param.AsValueString()].append(exst_el.Id) + + # remove existing fields + table_data = keyschedule.GetTableData() + section_data = table_data.GetSectionData(DB.SectionType.Body) + for idx in range(section_data.NumberOfRows-1, 0, -1): + if section_data.CanRemoveRow(idx): + section_data.RemoveRow(idx) + # create new fields + create_schedule_records(keyschedule, fields, records) + + # update all elements with the same key schedule value + schedule_els = revit.query.get_all_elements_in_view(keyschedule) + first_rec = fields[0] + sched_items = {x.LookupParameter(first_rec).AsString(): x.Id + for x in schedule_els} + new_possible_values = [x[0] for x in records] + for param_value, element_ids in value_dict.items(): + if param_value in new_possible_values: + for eid in element_ids: + exst_el = doc.GetElement(eid) + if exst_el: + param = exst_el.LookupParameter(param_name) + if param: + param.Set(sched_items[param_value]) + + def ensure_parameters(category, parameter_defs, doc=None): """Ensure parameters exist for given categoryself. @@ -264,19 +344,35 @@ def read_csv_typed_data(csv_file): param_defs, param_data = read_csv_typed_data(source_file) # grab the param names param_names = [x[0] for x in param_defs] - # start transaction - with revit.Transaction('Create Schedule from CSV', - log_errors=False): - # make sure field parameters exist - # creates project params if not - # skip the first on since it is "Key Name" and only applies - # to elements inside a key schedule - if ensure_parameters(key_sched_cat, param_defs[1:]): - # create the schedule and fill with data now - create_key_schedule( + # decide to create, or update existing + existing_keyschedule = \ + find_matching_keyschedule(category=key_sched_cat, + fields=param_names) + if existing_keyschedule: + with revit.Transaction('Update Schedule from CSV', + log_errors=False): + # update the data in current schedule + update_key_schedule( + keyschedule=existing_keyschedule, category=key_sched_cat, - key_name=fname, - sched_name=fname, fields=param_names, records=param_data, - doc=revit.doc) + doc=revit.doc + ) + else: + with revit.Transaction('Create Schedule from CSV', + log_errors=False): + # make sure field parameters exist + # creates project params if not + # skip the first on since it is "Key Name" and only applies + # to elements inside a key schedule + if ensure_parameters(key_sched_cat, param_defs[1:]): + # create the schedule and fill with data now + create_key_schedule( + category=key_sched_cat, + key_name=fname, + sched_name=fname, + fields=param_names, + records=param_data, + doc=revit.doc + ) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Export Schedules To CSV.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Export Schedules To CSV.pushbutton/bundle.yaml new file mode 100644 index 000000000..c3f5eeae9 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Schedules.pulldown/Export Schedules To CSV.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Exports selected schedules to CSV files + + + Shift-Click: + + Pick from default output locations diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/bundle.yaml new file mode 100644 index 000000000..269e8d143 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: >- + Adds the selected views (callouts, sections, elevations) to the selected sheets. Model views will only be added to the first selected sheet since they can not exist on multiple sheets. The command defaults to active view if no views are selected + + + Shift+Click: + + Pick source views from list instead of selection or active view +author: 'Dan Mapes' \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/script.py index 0501fcdfd..a1cb7cb3e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Add Views to Sheets.pushbutton/script.py @@ -5,15 +5,6 @@ from pyrevit import script -__author__ = 'Dan Mapes' -__doc__ = 'Adds the selected views (callouts, sections, elevations) to the '\ - 'selected sheets. Model views will only be added to the first '\ - 'selected sheet since they can not exist on multiple sheets. ' \ - 'The command defaults to active view if no views are selected.' \ - '\n\nShift+Click:\n' \ - 'Pick source views from list instead of selection or active view.' - - logger = script.get_logger() @@ -23,7 +14,7 @@ if selected_views: logger.debug('Selected views: {}'.format(len(selected_views))) # get the destination sheets from user - dest_sheets = forms.select_sheets() + dest_sheets = forms.select_sheets(include_placeholder=False) if dest_sheets: logger.debug('Selected sheets: {}'.format(len(dest_sheets))) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Copy View Templates to Open Documents.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Copy View Templates to Open Documents.pushbutton/bundle.yaml new file mode 100644 index 000000000..89776913a --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Copy View Templates to Open Documents.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Copy selected view templates to other open models diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Parallel Section.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Parallel Section.pushbutton/bundle.yaml new file mode 100644 index 000000000..9b5fd08b4 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Parallel Section.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Create section parallel to the plane of selected walls or planar element diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..a3a20d71c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Creates print set from selected views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/script.py index 1b3940566..6636b0038 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Create Print Set From Selected Views.pushbutton/script.py @@ -1,19 +1,26 @@ """Creates print set from selected views.""" from pyrevit import framework -from pyrevit import revit, DB, UI +from pyrevit import revit, script, DB, UI from pyrevit import forms -sheetsetname = 'ViewPrintSet' # Get printmanager / viewsheetsetting printmanager = revit.doc.PrintManager printmanager.PrintRange = DB.PrintRange.Select viewsheetsetting = printmanager.ViewSheetSetting +# Collect existing ViewSheetSets +print_sets_existing = DB.FilteredElementCollector(revit.doc)\ + .WhereElementIsNotElementType().OfClass(DB.ViewSheetSet).ToElements() +print_sets_names_existing = [vs.Name for vs in print_sets_existing if vs.Name] + # Collect selected views -selected_views = forms.select_views(use_selection=True) +selected_views = forms.select_views(use_selection=True, + filterfunc=lambda v: not isinstance(v, DB.ViewSheet) + or not v.IsPlaceholder) + if selected_views: myviewset = DB.ViewSet() for el in selected_views: @@ -22,6 +29,19 @@ if myviewset.IsEmpty: forms.alert('At least one view must be selected.') else: + # Ask for a print set name and check if need to be replaced + sheetsetname = None + while not sheetsetname\ + or (sheetsetname in print_sets_names_existing + and not forms.alert("Replace existing Print Set?", + yes=True, no=True)): + sheetsetname = forms.ask_for_string( + default=print_sets_names_existing[-1]\ + if print_sets_names_existing else 'ViewPrintSet', + prompt="Give new Print Set a Name:") + if not sheetsetname: + script.exit() + # Collect existing sheet sets viewsheetsets = DB.FilteredElementCollector(revit.doc)\ .OfClass(framework.get_type(DB.ViewSheetSet))\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..24c4b73f3 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Batch duplicates the selected views with or without detailing diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/script.py index eafb88f2f..136049506 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Duplicate Selected Views.pushbutton/script.py @@ -13,6 +13,7 @@ def duplicableview(view): def duplicate_views(viewlist, with_detailing=True): + dup_view_ids = [] with revit.Transaction('Duplicate selected views'): for el in viewlist: if with_detailing: @@ -21,11 +22,13 @@ def duplicate_views(viewlist, with_detailing=True): dupop = DB.ViewDuplicateOption.Duplicate try: - el.Duplicate(dupop) + dup_view_ids.append(el.Duplicate(dupop)) except Exception as duplerr: logger.error('Error duplicating view "{}" | {}' .format(revit.query.get_name(el), duplerr)) - + if dup_view_ids: + revit.doc.Regenerate() + return dup_view_ids selected_views = forms.select_views(filterfunc=duplicableview, use_selection=True) @@ -39,7 +42,9 @@ def duplicate_views(viewlist, with_detailing=True): ) if selected_option: - duplicate_views( + dup_view_ids = duplicate_views( selected_views, with_detailing=True if selected_option == 'WITH Detailing' else False) + if dup_view_ids: + revit.get_selection().set_to(dup_view_ids) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Referring Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Referring Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..3159c6aa7 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Referring Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: List all view that are referring the selected viewports or active view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Used View Templates Filters.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Used View Templates Filters.pushbutton/bundle.yaml new file mode 100644 index 000000000..b1cf42945 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Used View Templates Filters.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists all view templates and the filters that has been assigned to each \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Views By Filter.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Views By Filter.pushbutton/bundle.yaml new file mode 100644 index 000000000..b2237bb2b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Find Views By Filter.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists views based on a search option \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/bundle.yaml new file mode 100644 index 000000000..6e03b19ae --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Matches the "Title On Sheet" value of all views in open documents to current document so all views with matching names will have matching "Title On Sheet" values \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/script.py index 22bbce942..e81399fe4 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Match Title on Sheet in Open Docs.pushbutton/script.py @@ -1,11 +1,6 @@ from pyrevit import revit, DB -__doc__ = 'Matches the "Title On Sheet" value of all views in open documents '\ - 'to current document so all views with matching names will have '\ - 'matching "Title On Sheet" values.' - - def collect_views(input_doc): return DB.FilteredElementCollector(input_doc) \ .OfCategory(DB.BuiltInCategory.OST_Views) \ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Open Referencing Sheet.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Open Referencing Sheet.pushbutton/bundle.yaml new file mode 100644 index 000000000..3a0471a08 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Open Referencing Sheet.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Opens the sheet containing this view and zooms to the viewport diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Query View Referencing.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Query View Referencing.pushbutton/bundle.yaml new file mode 100644 index 000000000..20e6d6243 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Query View Referencing.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Query all selected views and determine if referenced or not diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Query View Sheet Placement.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Query View Sheet Placement.pushbutton/bundle.yaml new file mode 100644 index 000000000..dbb563eb5 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Query View Sheet Placement.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists views that have not been placed on any sheets diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Remove Empty Tags.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Remove Empty Tags.pushbutton/bundle.yaml new file mode 100644 index 000000000..9750fbf99 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Remove Empty Tags.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Removes empty tags in current view + + + Shift+Click: + + Remove tags in selected views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Remove Underlay From Selected Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Remove Underlay From Selected Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..6ffb42bc4 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Remove Underlay From Selected Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Removes Underlay From Selected Views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Rename Selected Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Rename Selected Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..fe58c03df --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Rename Selected Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Changes the selected view names diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/bundle.yaml new file mode 100644 index 000000000..0bae3e959 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Toggle all/selected grid bubbles in the active view +min_revit_version: 2016 diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/script.py index 7d96b1dae..a28e26e95 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Drawing Set.panel/views.stack/Views.pulldown/Toggle All Grid Bubbles in Current View.pushbutton/script.py @@ -4,9 +4,6 @@ from pyrevit import revit, DB -__min_revit_ver__ = 2016 - - all_grids = DB.FilteredElementCollector(revit.doc)\ .OfCategory(DB.BuiltInCategory.OST_Grids)\ .WhereElementIsNotElementType().ToElements() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/bundle.yaml new file mode 100644 index 000000000..df3d998c3 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +help_url: '{{docpath}}b050tpp4vCE&t=42s' +tooltip: Aligns the section box of the current 3D view to selected face diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/script.py index 1208fb216..34e9c3d80 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient Section Box To Face.pushbutton/script.py @@ -5,9 +5,6 @@ from pyrevit import forms -__helpurl__ = '{{docpath}}b050tpp4vCE&t=42s' - - curview = revit.active_view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/bundle.yaml new file mode 100644 index 000000000..127f662d9 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +help_url: '{{docpath}}pIjDd4dZng0' +tooltip: Reorients the current 3D view camera, perpendicular to the selected face. This tool will set a sketch plane over the selected face for 3d drawing \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/script.py index 81c0065ec..b61c1d548 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Orient View To Face.pushbutton/script.py @@ -3,12 +3,6 @@ from pyrevit import forms -__helpurl__ = '{{docpath}}pIjDd4dZng0' -__doc__ = 'Reorients the current 3D view camera, perpendicular to the ' \ - 'selected face. This tool will set a sketch plane over the ' \ - 'selected face for 3d drawing.' - - def reorient(): face = revit.pick_face() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/Patterns.splitpushbutton/Batch Import PAT Files.pushbuttonscript.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/Patterns.splitpushbutton/Batch Import PAT Files.pushbuttonscript.py deleted file mode 100644 index be660fdc4..000000000 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/Patterns.splitpushbutton/Batch Import PAT Files.pushbuttonscript.py +++ /dev/null @@ -1,202 +0,0 @@ -"""Batch import AutoCAD PAT files into Revit model.""" - -import math -from collections import namedtuple - -from pyrevit import framework -from pyrevit import revit, DB -from pyrevit import forms -from pyrevit import script - - -logger = script.get_logger() -output = script.get_output() - - -DEFAULT_UNIT = 'MM' -DEFAULT_TYPE = 'DRAFTING' -MM_SCALE = 0.00328084 -INCH_SCALE = 1/12.0 - - -# namedtuple for patter contents -PatDef = namedtuple('PatDef', ['name', 'comments', - 'version', 'units', 'type', - 'grids']) - - -def extract_patdefs(patfile): - patdefs = [] - - # globals are for any settings that come before pattern name - # they're typically set one time per file before pattern defs - global_version = '' - global_units = '' - global_type = '' - - # these are for the pattern that's been detected and - # being currently extracted - active_name = '' - active_comments= '' - active_version = '' - active_units = '' - active_type = '' - active_grids = [] - print('Extracting patterns from {}'.format(patfile)) - with open(patfile, 'r') as patf: - for patline in patf.readlines(): - logger.debug('processing line: {}'.format(patline)) - # skip if patline is a comment line - if patline.startswith(';'): - cleanedpatline = patline.replace('\n', '') - - # if there is a pattern being processed, - # assing to the patten, otherwise global - if '%VERSION' in cleanedpatline: - detected_version = cleanedpatline.split('=')[1] - if active_name: - active_version = detected_version - else: - global_version = detected_version - elif '%UNITS' in cleanedpatline: - detected_units = cleanedpatline.split('=')[1].upper() - if active_name: - active_units = detected_units - else: - global_units = detected_units - elif '%TYPE' in cleanedpatline: - detected_type = cleanedpatline.split('=')[1].upper() - if active_name: - active_type = detected_type - else: - global_type = detected_type - else: - continue - - # start a new patstring if starts with * - elif patline.startswith('*'): - # save the active pattern and start a new - if active_grids: - patdefs.append( - PatDef( - name=active_name, - comments=active_comments, - version=active_version or global_version, - units=active_units or global_units or DEFAULT_UNIT, - type=active_type or global_type or DEFAULT_TYPE, - grids=active_grids - ) - ) - # grab name and comments of new pattern - # effectively starting a new capture - name_and_comment = \ - patline.replace('\n', '')[1:].split(',') - if len(name_and_comment) == 2: - active_name, active_comments = name_and_comment - else: - active_name = name_and_comment[0] - active_comments = '' - active_version = '' - active_units = '' - active_type = '' - active_grids = [] - - # treat as pattern grid if split by , has 5 or more elements - elif len(patline.split(',')) >= 5: - active_grids.append(patline) - - # make sure last pattern is also added - if active_grids: - patdefs.append( - PatDef( - name=active_name, - comments=active_comments, - version=active_version or global_version, - units=active_units or global_units or DEFAULT_UNIT, - type=active_type or global_type or DEFAULT_TYPE, - grids=active_grids - ) - ) - - return patdefs - - -def make_fillgrid(gridstring, scale=0.00328084): - logger.debug(gridstring, scale) - rvt_fill_grid = DB.FillGrid() - griddata = [float(x.strip()) for x in gridstring.split(',') if x] - if griddata: - rvt_fill_grid.Angle = math.radians(griddata[0]) - rvt_fill_grid.Origin = \ - DB.UV(griddata[1] * scale, griddata[2] * scale) - rvt_fill_grid.Shift = griddata[3] * scale - rvt_fill_grid.Offset = griddata[4] * scale - if len(griddata) > 5: - scaled_segments = [abs(x) * scale for x in griddata[5:]] - rvt_fill_grid.SetSegments(scaled_segments) - - return rvt_fill_grid - - -def make_pattern(patdef): - logger.debug(patdef) - - # make the grids - fill_grids = [] - for pgrid in patdef.grids: - pscale = MM_SCALE if patdef.units=='MM' else INCH_SCALE - logger.debug('scale is set to: {}'.format(pscale)) - fgrid = make_fillgrid(pgrid, scale=pscale) - if fgrid: - fill_grids.append(fgrid) - # determine pattern type - fp_target = \ - DB.FillPatternTarget.Model if patdef.type=='MODEL' \ - else DB.FillPatternTarget.Drafting - logger.debug('type is set to: {}'.format(fp_target)) - - # check if fillpattern element exists - existing_fpelement = \ - revit.query.get_fillpattern_element(patdef.name, fp_target) - - # make fillpattern - rvt_fill_pat = DB.FillPattern(patdef.name, - fp_target, - DB.FillPatternHostOrientation.ToHost) - rvt_fill_pat.SetFillGrids(framework.List[DB.FillGrid](fill_grids)) - - if existing_fpelement: - existing_fpelement.SetFillPattern(rvt_fill_pat) - logger.debug('Updated FillPatternElement with id:{}' - .format(existing_fpelement.Id)) - else: - # make pattern element - logger.debug('Creating new fillpattern element...') - fill_pat_element = DB.FillPatternElement.Create(revit.doc, rvt_fill_pat) - - # log results - logger.debug('Fill Pattern:{}'.format(fill_pat_element.Name)) - fp = fill_pat_element.GetFillPattern() - logger.debug('Fill Grids Count: {}'.format(len(fp.GetFillGrids()))) - for idx, fg in enumerate(fp.GetFillGrids()): - logger.debug('FillGrid #{} ' - 'Origin:{} Angle:{} Shift:{} Offset:{} Segments:{}' - .format(idx, fg.Origin, - fg.Angle, fg.Shift, - fg.Offset, fg.GetSegments())) - - -def get_files(): - return forms.pick_file(file_ext='pat', multi_file=True) - - -patfiles = get_files() -if patfiles: - with revit.Transaction("Batch import PAT files"): - for patfile in patfiles: - patdefs = extract_patdefs(patfile) - for patdef in patdefs: - print('Processing "{}" @ "{}" ({}, {})' - .format(patdef.name, patfile, patdef.units, patdef.type)) - make_pattern(patdef) - print('Done...') diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/bundle.yaml new file mode 100644 index 000000000..ed2d283ef --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Compare instance and type properties between two elements +author: '{{author}}' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/script.py index 0de0c1abd..6f64f2b06 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Compare Properties.pushbutton/script.py @@ -4,7 +4,6 @@ from pyrevit import forms from pyrevit import script -__author__ = "{{author}}" logger = script.get_logger() output = script.get_output() @@ -108,11 +107,38 @@ def compare_props(src_element, tgt_element): ) # main -source_element = None -with forms.WarningBar(title="Pick source object:"): - source_element = revit.pick_element() +# try use selected elements +selected_elements = revit.get_selection().elements +if len(selected_elements) == 1 and forms.alert("Use selected %s?" % ("view" + if isinstance(selected_elements[0], DB.View) else "element"), + yes=True, no=True): + source_element = selected_elements[0] + target_type = "Views" if isinstance(source_element, DB.View)\ + else "Elements" +else: + source_element = None + # ask for type of elements to match + # some are not selectable in graphical views + target_type = \ + forms.CommandSwitchWindow.show( + ["Elements", "Views"], + message="Pick type of targets:") + + # determine source element + if target_type == "Elements": + with forms.WarningBar(title="Pick source object:"): + source_element = revit.pick_element() + elif target_type == "Views": + source_element = \ + forms.select_views(title="Select Source View", multiple=False) # grab parameters from source element if source_element: - target_element = revit.pick_element(message="Pick target element:") - compare_props(source_element, target_element) + target_element = None + if target_type == "Elements": + target_element = revit.pick_element(message="Pick target element:") + elif target_type == "Views": + target_element = \ + forms.select_views(title="Select Target View", multiple=False) + if target_element: + compare_props(source_element, target_element) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Paint.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Paint.pushbutton/bundle.yaml new file mode 100644 index 000000000..18e98e505 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Paint.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Pickup painted surface material and apply to other surfaces diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/bundle.yaml new file mode 100644 index 000000000..318599965 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/bundle.yaml @@ -0,0 +1,9 @@ +tooltip: >- + Match instance or type properties between elements and their types + + + Shift+Click: + + Reapply the previous matched properties +author: '{{author}}' + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/script.py index fd9b0057b..e0c776d7a 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match Properties.pushbutton/script.py @@ -11,7 +11,6 @@ from pyrevit import forms from pyrevit import script -__author__ = "{{author}}" logger = script.get_logger() output = script.get_output() @@ -111,19 +110,6 @@ def get_source_properties(src_element): return props -def pick_and_match_types(src_props): - """Match property values for selected types.""" - with forms.WarningBar(title="Pick objects to match type properties:"): - while True: - dest_element = revit.pick_element() - if not dest_element: - break - - dest_type = revit.query.get_type(dest_element) - with revit.Transaction("Match Type Properties"): - match_prop(dest_element, dest_type, src_props) - - def recall(): """Load last matched properties from memory.""" data = [] @@ -150,22 +136,30 @@ def remember(src_props): logger.debug("Recalled data: %s", source_props) if not source_props: - source_element = None - - # ask for type of elements to match - # some are not selectable in graphical views - target_type = \ - forms.CommandSwitchWindow.show( - ["Elements", "Views"], - message="Pick type of targets:") - - # determine source element - if target_type == "Elements": - with forms.WarningBar(title="Pick source object:"): - source_element = revit.pick_element() - elif target_type == "Views": - source_element = \ - forms.select_views(title="Select Source View", multiple=False) + # try use selected elements + selected_elements = revit.get_selection().elements + if len(selected_elements) == 1 and forms.alert("Use selected %s?" % ("view" + if isinstance(selected_elements[0], DB.View) else "element"), + yes=True, no=True): + source_element = selected_elements[0] + target_type = "Views" if isinstance(source_element, DB.View)\ + else "Elements" + else: + source_element = None + # ask for type of elements to match + # some are not selectable in graphical views + target_type = \ + forms.CommandSwitchWindow.show( + ["Elements", "Views"], + message="Pick type of targets:") + + # determine source element + if target_type == "Elements": + with forms.WarningBar(title="Pick source object:"): + source_element = revit.pick_element() + elif target_type == "Views": + source_element = \ + forms.select_views(title="Select Source View", multiple=False) # grab properties from source element if source_element: @@ -176,7 +170,23 @@ def remember(src_props): # apply values if source_props: if target_type == "Elements": - pick_and_match_types(source_props) + with forms.WarningBar(title="Pick objects to match type properties:"): + while True: + dest_element = revit.pick_element() + if not dest_element: + break + + dest_type = revit.query.get_type(dest_element) + with revit.Transaction("Match Type Properties"): + # apply type params first + match_prop(dest_element, + dest_type, + [x for x in source_props if x.istype]) + # then instance params + match_prop(dest_element, + dest_type, + [x for x in source_props if not x.istype]) + elif target_type == "Views": target_views = \ forms.select_views(title="Select Target Views", multiple=True) @@ -184,4 +194,11 @@ def remember(src_props): with revit.Transaction("Match Type Properties"): for tview in target_views: tview_type = revit.query.get_type(tview) - match_prop(tview, tview_type, source_props) + # apply type params first + match_prop(tview, + tview_type, + [x for x in source_props if x.istype]) + # then instance params + match_prop(tview, + tview_type, + [x for x in source_props if not x.istype]) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/bundle.yaml new file mode 100644 index 000000000..f32dcd666 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +help_url: '{{docpath}}SrjyyGvarhw' +tooltip: >- + Pick the source object that has the element graphics override you like to match to, and then pick the destination objects one by one and this tool will match the graphics overrides + + + Shift-Click: + + Shows Match Config window diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/script.py index 79a52a0f7..99bf47962 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Match.splitpushbutton/Match.pushbutton/script.py @@ -5,14 +5,6 @@ from pyrevit import forms -__helpurl__ = "{{docpath}}SrjyyGvarhw" - -__doc__ = 'Pick the source object that has the element graphics override '\ - 'you like to match to, and then pick the destination objects '\ - 'one by one and this tool will match the graphics overrides.'\ - '\n\nShift-Click:\nShows Match Config window.' - - my_config = script.get_config() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/bundle.yaml new file mode 100644 index 000000000..0a74cc8f2 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/bundle.yaml @@ -0,0 +1,5 @@ +tooltip: Deletes the lines overlapped by other lines (similar to AutoCAD Overkill) +author: >- + tylerk + + {{author}} diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/script.py index 79e12da73..206ead290 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Overkill.pushbutton/script.py @@ -10,8 +10,6 @@ from pyrevit import script -__authors__ = ["tylerk", "{{author}}"] - logger = script.get_logger() output = script.get_output() @@ -216,20 +214,24 @@ def extend(self, curve_element): return True -def filter_curves(elements, view_specific=None): +def filter_curves(elements, view_specific=None, room_sep_only=False): """Filter given curves for view specific.""" filtered_elements = \ revit.query.get_elements_by_class(DB.CurveElement, elements=elements) \ if elements else [] if view_specific is None: - return filtered_elements + if room_sep_only: + return [el for el in filtered_elements if el.Category and + el.Category.Id == DB.BuiltInCategory.OST_RoomSeparationLines] + else: + return filtered_elements else: return [x for x in filtered_elements if x.ViewSpecific == view_specific] def ask_for_curve_type(): # ask user for options and process - options = ['All Lines', 'Detail Lines', 'Model Lines'] + options = ['All Lines', 'Detail Lines', 'Model Lines', 'Room Separators'] switches = {'Consider Line Weights': True} selected_option, switches = \ forms.CommandSwitchWindow.show( @@ -248,11 +250,13 @@ def ask_consider_weight(): def overkill_curves(curve_elements, view_specific=None, - include_style=True): + include_style=True, + room_sep_only=False): # collect comparison info on each detail-lines geomtery cgroup_collection = CurveGroupCollection(include_style=include_style) for curve_element in filter_curves(curve_elements, - view_specific=view_specific): + view_specific=view_specific, + room_sep_only=room_sep_only): cgroup_collection.extend(curve_element) del_count = 0 @@ -272,13 +276,16 @@ def overkill_curves(curve_elements, overkill_curves(selected_curves, include_style=ask_consider_weight()) else: selected_opt, incl_style = ask_for_curve_type() - + room_sep_only = False if selected_opt == 'All Lines': view_spec = None - elif selected_opt == 'Model/Symbolic Lines': + elif selected_opt == 'Model Lines': view_spec = False elif selected_opt == 'Detail Lines': view_spec = True + elif selected_opt == 'Room Separators': + view_spec = False + room_sep_only = True if selected_opt: # collect all detail-lines in active view @@ -287,5 +294,6 @@ def overkill_curves(curve_elements, view_id=revit.active_view.Id) overkill_curves(list(curve_collector), view_specific=view_spec, - include_style=incl_style) + include_style=incl_style, + room_sep_only=room_sep_only) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Batch Import PAT Files.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Batch Import PAT Files.pushbutton/bundle.yaml new file mode 100644 index 000000000..8954aa970 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Batch Import PAT Files.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Batch import AutoCAD PAT files into Revit model diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/bundle.yaml new file mode 100644 index 000000000..d80e2c43d --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/bundle.yaml @@ -0,0 +1,15 @@ +help_url: '{{docpath}}H7b8hjHbauE&t=8s&list=PLc_1PNcpnV57FWI6G8Cd09umHpSOzvamf' +tooltip: >- + Draw your pattern tile in a detail view using detail lines, curves, circles or ellipses, or even filled regions + + Select the pattern lines and curves and run this tool. Give the pattern a name and hit "Create Pattern". The tool asks you to pick the boundary corners of the pattern. The tool will process the input lines, approximates the curves and splines with smaller lines and finds the best angles for these lines and will generate a pattern. It also reads the patterns from selected filled regions and will combine with selected detail lines + + + TIP: You can export existing patterns if no lines are selected + + + TRICK: You can convert existing pattern types by selecting a filled region only and create the opposite pattern type (selected drafting filled region and create model pattern) +title: >- + Make + + Pattern diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/patmaker.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/patmaker.py index c8fa020c8..bb7d6f9f9 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/patmaker.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/patmaker.py @@ -4,7 +4,7 @@ import re from math import sqrt, pi, sin, cos, degrees -from pyrevit import PyRevitException +from pyrevit import PyRevitException, HOST_APP from pyrevit import framework from pyrevit.framework import List from pyrevit import coreutils @@ -708,7 +708,10 @@ def _make_filledregion(fillpattern_name, fillpattern_id): source_fr = filledregion_types.FirstElement() with revit.Transaction('Create Filled Region'): new_fr = source_fr.Duplicate(fillpattern_name) - new_fr.FillPatternId = fillpattern_id + if HOST_APP.is_newer_than(2018): + new_fr.ForegroundPatternId = fillpattern_id + else: + new_fr.FillPatternId = fillpattern_id def _export_pat(revit_pat, export_dir): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/script.py index ae975ba93..436f18a5e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit1.stack/Patterns.splitpushbutton/Make Pattern.pushbutton/script.py @@ -11,29 +11,6 @@ import patmaker -__title__ = 'Make\nPattern' - -__helpurl__ = \ - '{{docpath}}H7b8hjHbauE&t=8s&list=PLc_1PNcpnV57FWI6G8Cd09umHpSOzvamf' - -__doc__ = 'Draw your pattern tile in a detail view using detail lines, '\ - 'curves, circles or ellipses, or even filled regions.\n'\ - 'Select the pattern lines and curves '\ - 'and run this tool. Give the pattern a name and '\ - 'hit "Create Pattern". The tool asks you to pick the boundary '\ - 'corners of the pattern. The tool will process the input lines, '\ - 'approximates the curves and splines with smaller lines and '\ - 'finds the best angles for these lines and will '\ - 'generate a pattern. It also reads the patterns from selected '\ - 'filled regions and will combine with selected detail lines.'\ - '\n\n'\ - 'TIP: You can export existing patterns if no lines are selected.'\ - '\n\n'\ - 'TRICK: You can convert existing pattern types by selecting a '\ - 'filled region only and create the opposite pattern type '\ - '(selected drafting filled region and create model pattern).'\ - - logger = script.get_logger() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/bundle.yaml new file mode 100644 index 000000000..69cb9b350 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Provides options for flipping (Hand/Face) selected elements +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/script.py index fbb48e9b1..bab94a637 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/Flip.pushbutton/script.py @@ -4,9 +4,6 @@ from pyrevit import forms -__context__ = 'selection' - - def flip_facing(): with revit.Transaction('Flip Facing Selected'): for el in revit.get_selection(): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/bundle.yaml new file mode 100644 index 000000000..e3d17fff2 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/bundle.yaml @@ -0,0 +1,3 @@ +tooltip: ReNumber numbered elements in order of selection +author: '{{author}}' + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/script.py index 88b1b33cc..fa1d31fbb 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReNumber.pushbutton/script.py @@ -9,8 +9,6 @@ from pyrevit import script -__author__ = "{{author}}" - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/bundle.yaml new file mode 100644 index 000000000..31ffe132e --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/bundle.yaml @@ -0,0 +1,3 @@ +help_url: '{{docpath}}-JDgiP3gK9Y' +tooltip: Reformat parameter string values (Super handy for renaming elements) +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/script.py index 955b875c6..9110cfcc8 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit2.stack/ReValue.pushbutton/script.py @@ -7,10 +7,6 @@ from pyrevit import forms -__context__ = "selection" -__helpurl__ = "{{docpath}}-JDgiP3gK9Y" - - class ReValueItem(object): def __init__(self, eid, oldvalue, final=False): self.eid = eid diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/bundle.yaml new file mode 100644 index 000000000..09fd1cb45 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Changes element type of the selected elements to a the element type of a picked element, while maintaining the values of all instance parameters. First select all the elements that you want to change the type for and run this tool. Then select the element that has the source element type +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/script.py index 27decefd5..c863bbde3 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Change Element Type Safely.pushbutton/script.py @@ -2,14 +2,6 @@ from pyrevit import script -__context__ = 'selection' -__doc__ = 'Changes element type of the selected elements to a the element '\ - 'type of a picked element, while maintaining the values of all '\ - 'instance parameters. First select all the elements that you want '\ - 'to change the type for and run this tool. '\ - 'Then select the element that has the source element type.' - - logger = script.get_logger() exclude_biparams = [DB.BuiltInParameter.ELEM_FAMILY_PARAM, # Family diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Convert Line Styles.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Convert Line Styles.pushbutton/bundle.yaml new file mode 100644 index 000000000..8b907e266 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Convert Line Styles.pushbutton/bundle.yaml @@ -0,0 +1,12 @@ +tooltip: >- + This is a tool to convert line styles. Run the tool, + + select a line with the style to be replaced, and then + + select a line with the interfacetypes style + + The script will correct the line styles in the model + + HOWEVER the lines that are part of a group will not be affected + + Also see the "Shake Filled Regions" tool diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Export View As Image.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Export View As Image.pushbutton/bundle.yaml new file mode 100644 index 000000000..a5c61bbd9 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Export View As Image.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Exports the current view to a 600DPI PNG image diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/bundle.yaml new file mode 100644 index 000000000..74e9a5fea --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/bundle.yaml @@ -0,0 +1,3 @@ +tooltip: Merge selected parts into one element +author: '{{author}}' +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/script.py index ac8a50c7d..24961e4bc 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Merge Parts.pushbutton/script.py @@ -5,9 +5,6 @@ from pyrevit import forms from pyrevit import script -__author__ = "{{author}}" -__context__ = "selection" - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Place Origin Marker.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Place Origin Marker.pushbutton/bundle.yaml new file mode 100644 index 000000000..7fb4dcdcf --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Place Origin Marker.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Place a cross marker at the true 0,0,0 origin \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/bundle.yaml new file mode 100644 index 000000000..b846530c1 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Moves all Filled Regions on the seleced views back-and-forth by a tiny amount to push Revit to regenerate the filled region and update the display. This tool is meant to be used in conjunction with the "Convert Line Styles" tool. The convert tool updates the line styles inside Filled region but does not currently shake the filled regions (Revit crashes on large models.) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/script.py index 71d90f1ed..9cc1bb9ce 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Shake Filled Regions.pushbutton/script.py @@ -2,13 +2,6 @@ from pyrevit import revit, DB from pyrevit import script -__doc__ = 'Moves all Filled Regions on the seleced views back-and-forth by '\ - 'a tiny amount to push Revit to regenerate the filled region and '\ - 'update the display. This tool is meant to be used in ' \ - 'conjunction with the "Convert Line Styles" tool. The convert tool '\ - 'updates the line styles inside Filled region but does not '\ - 'currently shake the filled regions (Revit crashes on large models.)' - output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Tag All in All Views.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Tag All in All Views.pushbutton/bundle.yaml new file mode 100644 index 000000000..65972e5ff --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Edit.pulldown/Tag All in All Views.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Tag all chosen element types in all views diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/bundle.yaml new file mode 100644 index 000000000..2683c7a97 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/bundle.yaml @@ -0,0 +1,14 @@ +tooltip: >- + Overrides graphics of groups instances on selected views or + + active view in such way that all instances of the same group type + + are marked with the same color. You can select multiple views before + + running the tool to colorize the group types in all of them at once + + + Note: + + Groups with only 1 instance on views will be colored in gray +title: Colorize Group Types diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/script.py index 0d003f624..0ced637c5 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/ColorizeGroupTypes.pushbutton/script.py @@ -16,9 +16,6 @@ from pyrevit import script -__title__ = "Colorize Group Types" - - logger = script.get_logger() @@ -194,12 +191,8 @@ def colorize_grouptypes_in_views(views): colorize_grouptypes_in_view(view, groups_colors) -selected_views = revit.get_selection().elements -if not selected_views: - selected_views = [revit.active_view] - -target_views = [v for v in selected_views if isinstance(v, DB.View)] +target_views = [v for v in revit.get_selection().elements + if isinstance(v, DB.View)] if not target_views: - forms.alert("No views were selected") -else: - colorize_grouptypes_in_views(target_views) + target_views = [revit.active_view] +colorize_grouptypes_in_views(target_views) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/bundle.yaml new file mode 100644 index 000000000..c972b0aa2 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/bundle.yaml @@ -0,0 +1,5 @@ +tooltip: >- + Explodes all instances of the selected groups and removes + + the group definition from project browser +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/script.py index ee91c6252..f9a53e8ed 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Explode And Remove Selected Groups.pushbutton/script.py @@ -7,9 +7,6 @@ from pyrevit import script -__context__ = 'selection' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/bundle.yaml new file mode 100644 index 000000000..95d93e488 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: List all groups that includethe selected group element as a nested group +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/script.py index ef2b90d71..f171bf53e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups Containing Selected Group.pushbutton/script.py @@ -4,9 +4,6 @@ from pyrevit import revit, DB -__context__ = 'selection' - - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/bundle.yaml new file mode 100644 index 000000000..88893bb3e --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: List all detail groups that include a text element inside them. This is helpful for spell checking \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/script.py index 5e6a42721..79a1d189d 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Find All Groups With Text Notes.pushbutton/script.py @@ -2,10 +2,6 @@ from pyrevit import revit, DB -__doc__ = 'List all detail groups that include a text element inside them. '\ - 'This is helpful for spell checking.' - - grps = list(DB.FilteredElementCollector(revit.doc) .OfClass(framework.get_type(DB.Group)) .ToElements()) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/bundle.yaml new file mode 100644 index 000000000..7debd49c5 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/bundle.yaml @@ -0,0 +1,10 @@ +tooltip: >- + Selects group instances, which contain selected elements + + By default excludes not-grouped elements from selection + + + Shift+Click: + + Include not-grouped elements +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/script.py index 795c57b5c..d8d614e0f 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Select Topmost Groups.pushbutton/script.py @@ -10,8 +10,6 @@ from pyrevit import script -__context__ = 'Selection' - logger = script.get_logger() output = script.get_output() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/bundle.yaml new file mode 100644 index 000000000..bf957d6f4 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: List the nested group structure around the selected group or element +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/script.py index b12858153..df5a913be 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Groups.pulldown/Show Nested Group Structure.pushbutton/script.py @@ -5,9 +5,6 @@ from pyrevit import script -__context__ = 'selection' - - output = script.get_output() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/bundle.yaml new file mode 100644 index 000000000..aac1cd3b5 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: Provides options for overriding values on selected dimensions +context: OST_Dimensions +author: >- + {{author}} + + SILMAN diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/script.py index 4784df062..6251ab3de 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Dims.pushbutton/script.py @@ -7,10 +7,6 @@ from pyrevit import forms -__authors__ = ['{{author}}', 'SILMAN'] -__context__ = 'OST_Dimensions' - - def grab_dims(): dims = [] for el in revit.get_selection(): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/bundle.yaml new file mode 100644 index 000000000..4a0e2b8b8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Provides options for overriding Visibility/Graphics on selected elements +context: OST_TextNotes diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/script.py index 136a5fc90..1f3ffa04b 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override Text.pushbutton/script.py @@ -5,9 +5,6 @@ from pyrevit import forms -__context__ = 'OST_TextNotes' - - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/bundle.yaml new file mode 100644 index 000000000..b8fa59907 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Provides options for overriding Visibility/Graphics on selected elements +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/script.py index 487a442e1..4fed15f27 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/edit3.stack/Override.pulldown/Override VG.pushbutton/script.py @@ -8,9 +8,6 @@ from pyrevit import script -__context__ = 'selection' - - logger = script.get_logger() selection = revit.get_selection() @@ -77,11 +74,22 @@ def halftone(): revit.doc.ActiveView.SetElementOverrides(el.Id, ogs) +def set_element_overrides(el, ogs, recursive=False): + """Set element overrides for provided element including nested elements + and subgroups""" + if recursive and isinstance(el, DB.Group): + for el_nested in el.GetMemberIds(): + set_element_overrides(revit.doc.GetElement(el_nested), + ogs, + recursive=True) + revit.doc.ActiveView.SetElementOverrides(el.Id, ogs) + + def reset_vg(): with revit.Transaction('Reset Element Override'): for el in selection: ogs = DB.OverrideGraphicSettings() - revit.doc.ActiveView.SetElementOverrides(el.Id, ogs) + set_element_overrides(el, ogs, recursive=True) def solid_line(): diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/bundle.yaml new file mode 100644 index 000000000..b0a94a6ec --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: Cycle family types. +title: >- + Cycle + + Types +authors: + - '{{author}}' + - Gui Talarico diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/script.py index 06ddbc183..1d63249c4 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Cycle Family Types.pushbutton/script.py @@ -3,9 +3,6 @@ from pyrevit import revit, DB from pyrevit import forms -__title__ = "Cycle\nTypes" -__author__ = "{{author}}\nGui Talarico" - forms.check_familydoc(doc=revit.doc, exitscript=True) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Attached Constraints.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Attached Constraints.pushbutton/bundle.yaml new file mode 100644 index 000000000..43f6f03ea --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Attached Constraints.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Deletes all attached_constraints attached to the selected object diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Data Schema.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Data Schema.pushbutton/bundle.yaml new file mode 100644 index 000000000..1fcafb005 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Data Schema.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Erase selected data schema and its entities diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/bundle.yaml new file mode 100644 index 000000000..6a31bd82f --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Genrally if all elevations creates by an elevation tag are deleted from the model, the empty elevation tag still remains in its location. This script will delete all empty elevation tags from the model \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/script.py index a52e9a1b5..90abfd454 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Empty Elevation Tags.pushbutton/script.py @@ -2,12 +2,6 @@ from pyrevit import script -__doc__ = 'Genrally if all elevations creates by an elevation tag are '\ - 'deleted from the model, the empty elevation tag still remains '\ - 'in its location. This script will delete all empty elevation ' \ - 'tags from the model.' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/bundle.yaml new file mode 100644 index 000000000..29ab50585 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: This tools helps you to remove extra unnecessary information in the model when sending to a contractor or consultant. Run the tools and select the categories that you'd like to be removed from the model. Then hit "Wipe Model" and the process will go through each category and will remove them. You might see some errors or warnings from Revit (since this is a very destructive) process but generally they should not crash the script \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/script.py index 157e6cdbd..d49b56018 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Model Components.pushbutton/script.py @@ -8,16 +8,6 @@ from pyrevit import compat -__doc__ = 'This tools helps you to remove extra unnecessary information in '\ - 'the model when sending to a contractor or consultant. '\ - 'Run the tools and select the categories that you\'d like '\ - 'to be removed from the model. Then hit \"Wipe Model\" and '\ - 'the process will go through each category and will ' \ - 'remove them. You might see some errors or warnings from Revit '\ - '(since this is a very destructive) ' \ - 'process but generally they should not crash the script.' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Site Designer Line Styles.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Site Designer Line Styles.pushbutton/bundle.yaml new file mode 100644 index 000000000..4451e9f45 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Site Designer Line Styles.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Deletes all extra lines styles created by the faulty Site Designer addin diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe SubCategories.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe SubCategories.pushbutton/bundle.yaml new file mode 100644 index 000000000..550e14b5b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe SubCategories.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Reset all model categories and subcategories back to default diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/bundle.yaml new file mode 100644 index 000000000..3322df01c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Asks user to select the viewport types to be converted and the viewport type to be replaced with. I made this tool to fix a problem with viewport types duplicating themselves during a project and would become unpurgable viewport types \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/script.py index 16a03c815..6c28a3355 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unpurgable Viewport Types.pushbutton/script.py @@ -6,12 +6,6 @@ from pyrevit import script -__doc__ = 'Asks user to select the viewport types to be converted and the '\ - 'viewport type to be replaced with. I made this tool to fix a '\ - 'problem with viewport types duplicating themselves '\ - 'during a project and would become unpurgable viewport types.' - - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/bundle.yaml new file mode 100644 index 000000000..2a46713fc --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Deletes all view parameter filters that has not been listed on any views. This includes sheets as well \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/script.py index f0cc991c7..f9afcca19 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused Filters.pushbutton/script.py @@ -3,9 +3,6 @@ from pyrevit import script -__doc__ = 'Deletes all view parameter filters that has not been '\ - 'listed on any views. This includes sheets as well.' - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/bundle.yaml new file mode 100644 index 000000000..0f022bdf0 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Deletes all unused view templates (Any view template that has not been assigned to a view) \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/script.py index c14d55037..8d90de335 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Wipe.pulldown/Wipe Unused View Templates.pushbutton/script.py @@ -1,9 +1,6 @@ from pyrevit import forms from pyrevit import revit, DB -__doc__ = 'Deletes all unused view templates '\ - '(Any view template that has not been assigned to a view).' - class ViewTemplateToPurge(forms.TemplateListItem): @property diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert ACIS Solid to FreeForm.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert ACIS Solid to FreeForm.pushbutton/bundle.yaml new file mode 100644 index 000000000..3bad25989 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert ACIS Solid to FreeForm.pushbutton/bundle.yaml @@ -0,0 +1,14 @@ +tooltip: >- + Convert ACIS Solid to FreeForm Element + + + creates FreeForm elements from your selected imported acis SAT + + solid geometry, so you can turn it into Void/Solid apply materials + + easily and get access to its shape handles + + + Copyright (c) 2019 Frederic Beaupere + + github.com/hdm-dt-fb diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/bundle.yaml new file mode 100644 index 000000000..bc596b2b8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: This script removes all instances of the selected element Family and tries to convert the family into face host based. Only families of CommunicationDevices, DataDevices, DuctTerminal, ElectricalEquipment, ElectricalFixtures, FireAlarmDevices, LightingDevices, LightingFixtures, MechanicalEquipment, NurseCallDevices, PlumbingFixtures, SecurityDevices, Sprinklers, TelephoneDevices can be converted \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/script.py index 99c3807ba..eb21cf02b 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Family To Face Host Based.pushbutton/script.py @@ -5,15 +5,6 @@ from pyrevit import forms -__doc__ = 'This script removes all instances of the selected element '\ - 'Family and tries to convert the family into face host based. '\ - 'Only families of CommunicationDevices, DataDevices, '\ - 'DuctTerminal, ElectricalEquipment, ElectricalFixtures, '\ - 'FireAlarmDevices, LightingDevices, LightingFixtures, '\ - 'MechanicalEquipment, NurseCallDevices, PlumbingFixtures, '\ - 'SecurityDevices, Sprinklers, TelephoneDevices can be converted.' - - def delete_all_instances(target_family): family_instances = [] try: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/bundle.yaml new file mode 100644 index 000000000..1e88730f5 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Convert Imported CAD Symbol to FreeForm or DirectShape Elements +is_beta: true diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/script.py index 1cbb3e5d7..44a0b0a67 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Convert Imported 3D CAD.pushbutton/script.py @@ -7,8 +7,6 @@ from pyrevit import script -__beta__ = True - logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/bundle.yaml new file mode 100644 index 000000000..5ce835df3 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/bundle.yaml @@ -0,0 +1,39 @@ +tooltip: >- + Export family configurations to yaml file. + + + Family configuration file is a yaml file, + + providing info about the parameters and types defined in the family. + + + The structure of this config file is as shown below: + + + parameters: + : + type: + category: + instance: + reporting: + formula: + default: + types: + : + : + : + ... + + + Example: + + + parameters: + Shelf Height (Upper): + type: Length + group: PG_GEOMETRY + instance: false + types: + 24D"x36H": + Shelf Height (Upper): 3'-0" +author: '{{author}}' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/script.py index a15bf777c..66adb03bd 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Export Family Config.pushbutton/script.py @@ -42,9 +42,6 @@ from pyrevit.coreutils import yaml -__author__ = "{{author}}" - - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/FamilyQuickcheck_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/FamilyQuickcheck_script.py index d8c2d6dab..0c150446a 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/FamilyQuickcheck_script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/FamilyQuickcheck_script.py @@ -12,9 +12,6 @@ from pyrevit import script -__author__ = 'Frederic Beaupere\n{{author}}' - - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/bundle.yaml new file mode 100644 index 000000000..bb12f9a80 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Family QuickCheck.pushbutton/bundle.yaml @@ -0,0 +1,14 @@ +tooltip: >- + Non-exhaustive check to detect corrupt Revit families. + + + Copyright (c) 2017 Frederic Beaupere + + github.com/frederic-beaupere + + + PR731 https://github.com/eirannejad/pyRevit/pull/731 +title: Family QuickCheck +author: + - Frederic Beaupere + - '{{author}}' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/bundle.yaml new file mode 100644 index 000000000..9615b0a28 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/bundle.yaml @@ -0,0 +1,39 @@ +tooltip: >- + Import family configurations from yaml file and modify current family. + + + Family configuration file is expected to be a yaml file, + + providing info about the parameters and types to be created. + + + The structure of this config file is as shown below: + + + parameters: + : + type: + category: + instance: + reporting: + formula: + default: + types: + : + : + : + ... + + + Example: + + + parameters: + Shelf Height (Upper): + type: Length + category: PG_GEOMETRY + instance: false + types: + 24D"x36H": + Shelf Height (Upper): 3'-0" +author: '{{author}}' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/script.py index 1fe029684..81ab27ba3 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Import Family Config.pushbutton/script.py @@ -44,9 +44,6 @@ from pyrevit.coreutils import yaml -__author__ = "{{author}}" - - logger = script.get_logger() output = script.get_output() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Save Families.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Save Families.pushbutton/bundle.yaml new file mode 100644 index 000000000..f5e9d1ef7 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Save Families.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Saves chosen families from the project \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Wipe Family Parameters.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Wipe Family Parameters.pushbutton/bundle.yaml new file mode 100644 index 000000000..0379e5500 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Family.pulldown/Wipe Family Parameters.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: >- + This script removes all custom parameters that has not been used + + in dimensions as labels and also resets the value for the other + + parameters to zero or null diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/bundle.yaml new file mode 100644 index 000000000..b38725969 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: This tool will create a workset for the selected linked element base on its name. If the model is not workshared, it will be converted to workshared model \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/script.py index 2e4855d05..4b107d7f8 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Create Workset For Linked Element.pushbutton/script.py @@ -3,11 +3,6 @@ from pyrevit import forms -__doc__ = 'This tool will create a workset for the selected linked '\ - 'element base on its name. If the model is not workshared, '\ - 'it will be converted to workshared model.' - - logger = script.get_logger() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/bundle.yaml new file mode 100644 index 000000000..8b9b2dd8b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Exports all original imported images to chosen path and adds file size to image type name diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/script.py index 4781e1b10..c2b0548ec 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Export All Raster Images To Desktop.pushbutton/script.py @@ -9,10 +9,6 @@ from pyrevit import script -__doc__ = 'Exports all original imported images to '\ - 'chosen path and adds file size to image type name.' - - def convert_size(size_bytes): if size_bytes == 0: return "0B" diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/ListDWGs_script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/ListDWGs_script.py index 4cceb9d13..5dc4673dd 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/ListDWGs_script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/ListDWGs_script.py @@ -1,12 +1,5 @@ # -*- coding: UTF-8 -*- """Lists all linked and imported DWG instances with worksets and creator.""" - -__title__ = 'List DWGs' -__author__ = 'Frederic Beaupere' -__contact__ = 'https://github.com/frederic-beaupere' -__credits__ = 'http://eirannejad.github.io/pyRevit/credits/' - - import clr from collections import defaultdict diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/bundle.yaml new file mode 100644 index 000000000..11cd97614 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/ListDWGs.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: Lists all linked and imported DWG instances with worksets and creator +title: List DWGs +author: 'Frederic Beaupere' +contact: 'https://github.com/frederic-beaupere' + + diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Reload Links.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Reload Links.pushbutton/bundle.yaml new file mode 100644 index 000000000..fa765b48c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Links.pulldown/Reload Links.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: >- + Reloads choosen Revit, CAD and DWG Links + + Can reload links "locally" for workshared models diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/bundle.yaml new file mode 100644 index 000000000..968adef56 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Lists all sheets containing elements currently "owned" by the user. "Owned" elements are the elementsby the user since the last synchronize and release diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/script.py index df4074e29..b039d4815 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Find Sheets With Elements Owned By Me.pushbutton/script.py @@ -3,11 +3,6 @@ from pyrevit import forms -__doc__ = 'Lists all sheets containing elements currently "owned" '\ - 'by the user. "Owned" elements are the elements' \ - 'by the user since the last synchronize and release.' - - sheetsnotsorted = DB.FilteredElementCollector(revit.doc)\ .OfCategory(DB.BuiltInCategory.OST_Sheets)\ .WhereElementIsNotElementType()\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/bundle.yaml new file mode 100644 index 000000000..39b77712e --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Uses the Worksharing tooltip to find out the element "last edited" by the user in the current view. If current view is a sheet, the tools searches all the views placed on this sheet as well."Last Edited" elements are elements last edited by the user, and are different from borrowed elements \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/script.py index 0e2f57933..43f0ff8b0 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Last Edited By Me In Current View.pushbutton/script.py @@ -4,14 +4,6 @@ from pyrevit import forms -__doc__ = 'Uses the Worksharing tooltip to find out the element '\ - '"last edited" by the user in the current view. '\ - 'If current view is a sheet, the tools searches all the '\ - 'views placed on this sheet as well.' \ - '"Last Edited" elements are elements last edited by the user, '\ - 'and are different from borrowed elements.' - - filteredlist = [] viewlist = [] diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/bundle.yaml new file mode 100644 index 000000000..c9f939a0e --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Uses the Worksharing tooltip to find out the element "owned" by the user in the current view.If current view is a sheet, the tools searches all the views placed on this sheet as well."Owned" elements are the elements edited by the user since the last synchronize and release \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/script.py index c5c67151d..15a814e8d 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Select Owned By Me In Current View.pushbutton/script.py @@ -4,14 +4,6 @@ from pyrevit import forms -__doc__ = 'Uses the Worksharing tooltip to find out the element '\ - '"owned" by the user in the current view.' \ - 'If current view is a sheet, the tools searches all the '\ - 'views placed on this sheet as well.' \ - '"Owned" elements are the elements edited by the user '\ - 'since the last synchronize and release.' - - filteredlist = [] viewlist = [] diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/bundle.yaml new file mode 100644 index 000000000..edf37a3ae --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: Figure out who made specific changes in the model. +title: Who did that?? +author: >- + {{author}} + + Frederic Beaupere \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/script.py index fbb70ff0c..1e0d27da5 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools.stack/Team.pulldown/Who Did That.pushbutton/script.py @@ -5,10 +5,6 @@ from pyrevit import script -__title__ = 'Who did that??' -__authors__ = ['{{author}}', 'Frederic Beaupere'] - - def who_reloaded_keynotes(): location = revit.doc.PathName if revit.doc.IsWorkshared: diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get Central Path.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get Central Path.pushbutton/bundle.yaml new file mode 100644 index 000000000..e35335628 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get Central Path.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Print the full path to the central model (if model is workshared) + + + Shift+Click: + + Open central model path in file browser diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/bundle.yaml new file mode 100644 index 000000000..5f924e584 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Get information from a RVT file +context: zero-doc diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/script.py index 087d50530..67b36d702 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Get RVT Info.pushbutton/script.py @@ -4,9 +4,6 @@ from pyrevit.labs import TargetApps -__context__ = 'zero-doc' - - rvt_file = forms.pick_file(files_filter='Revit Files |*.rvt;*.rte;*.rfa|' 'Revit Model |*.rvt|' 'Revit Template |*.rte|' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/bundle.yaml new file mode 100644 index 000000000..3f01e82cd --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Loads other types from selected family instance diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/script.py index e87b1516d..98f963d21 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/ptools2.stack/Load More Types.pushbutton/script.py @@ -101,22 +101,23 @@ def __lt__(self, other): # fake load the family so we can get the symbols symbol_list = set() -with revit.DryTransaction('Fake load'): - # remove existing family so we can load the original - revit.doc.Delete(family.Id) - # now load the original - ret_ref = clr.Reference[DB.Family]() - revit.doc.LoadFamily(fam_doc_path, ret_ref) - loaded_fam = ret_ref.Value - # get the symbols from the original - for sym_id in loaded_fam.GetFamilySymbolIds(): - family_symbol = revit.doc.GetElement(sym_id) - family_symbol_name = revit.query.get_name(family_symbol) - sortable_sym = SmartSortableFamilyType(family_symbol_name) - logger.debug('Importable Type: {}'.format(sortable_sym)) - symbol_list.add(sortable_sym) - # okay. we have all the symbols. - # DryTransaction will rollback all the changes +with revit.ErrorSwallower(): + with revit.DryTransaction('Fake load'): + # remove existing family so we can load the original + revit.doc.Delete(family.Id) + # now load the original + ret_ref = clr.Reference[DB.Family]() + revit.doc.LoadFamily(fam_doc_path, ret_ref) + loaded_fam = ret_ref.Value + # get the symbols from the original + for sym_id in loaded_fam.GetFamilySymbolIds(): + family_symbol = revit.doc.GetElement(sym_id) + family_symbol_name = revit.query.get_name(family_symbol) + sortable_sym = SmartSortableFamilyType(family_symbol_name) + logger.debug('Importable Type: {}'.format(sortable_sym)) + symbol_list.add(sortable_sym) + # okay. we have all the symbols. + # DryTransaction will rollback all the changes # ask user for required symbol and load into current document diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick Detail Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick Detail Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..de18872fa --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick Detail Elements.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Activates selection tool that picks only Detail 2D elements \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick Model Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick Model Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..76e4f14ba --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick Model Elements.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Activates selection tool that picks only Model elements diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick.pushbutton/bundle.yaml new file mode 100644 index 000000000..5b8ba50fd --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Pick.splitpushbutton/Pick.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Activates selection tool that picks a specific type of element + + + Shift-Click: + + Pick favorites from all available categories diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/bundle.yaml new file mode 100644 index 000000000..a88095e3c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: Sets the active workset from the selection +title: >- + Set + + Workset +context: selection +author: 'Jean-Marc Couffin' +contact: 'https://github.com/jmcouffin' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/script.py index a86386413..4fa8c0a49 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/Set Workset.pushbutton/script.py @@ -3,14 +3,6 @@ Copyright (c) 2020 Jean-Marc Couffin https://github.com/jmcouffin """ - -__title__ = 'Set\nWorkset' -__author__ = 'Jean-Marc Couffin' -__context__ = 'selection' -__contact__ = 'https://github.com/jmcouffin' -__credits__ = 'http://eirannejad.github.io/pyRevit/credits/' -__doc__ = 'Sets the active workset from the selection' - #pylint: disable=import-error,invalid-name,broad-except,superfluous-parens from pyrevit import revit from pyrevit import forms diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/bundle.yaml new file mode 100644 index 000000000..a71afe9bb --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +help_url: '{{docpath}}pAM-ARIXXLw' +tooltip: >- + Append current selection to memory + + Works like the M+ button in a calculator. This is a project-dependent memory. Every project has its own selection memory saved in %appdata%/pyRevit folder as *.pym files +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/script.py index 0c1650daf..5787b5fc0 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MAppend.pushbutton/script.py @@ -4,14 +4,6 @@ from pyrevit import revit -__context__ = 'Selection' -__helpurl__ = '{{docpath}}pAM-ARIXXLw' -__doc__ = 'Append current selection to memory.\n'\ - 'Works like the M+ button in a calculator. '\ - 'This is a project-dependent memory. Every project has its own '\ - 'selection memory saved in %appdata%/pyRevit folder as *.pym files.' - - datafile = script.get_document_data_file("SelList", "pym") diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/bundle.yaml new file mode 100644 index 000000000..50d916e71 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/bundle.yaml @@ -0,0 +1,5 @@ +help_url: '{{docpath}}pAM-ARIXXLw' +tooltip: >- + Read selection from memory + + Works like the MR button in a calculator. This is a project-dependent memory. Every project has its own selection memory saved in %appdata%/pyRevit folder as *.pym files \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/script.py index c11be244b..2150b3a67 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MRead.pushbutton/script.py @@ -5,12 +5,6 @@ from pyrevit import revit, DB -__helpurl__ = '{{docpath}}pAM-ARIXXLw' -__doc__ = 'Read selection from memory.\n'\ - 'Works like the MR button in a calculator. '\ - 'This is a project-dependent memory. Every project has its own '\ - 'selection memory saved in %appdata%/pyRevit folder as *.pym files.' - selection = revit.get_selection() datafile = script.get_document_data_file("SelList", "pym") diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/bundle.yaml new file mode 100644 index 000000000..f4f27cf9b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/bundle.yaml @@ -0,0 +1,6 @@ +help_url: '{{docpath}}pAM-ARIXXLw' +tooltip: >- + Clear memory and Append current selection + + Works like the MC and M+ button in a calculator. This is a project-dependent memory. Every project has its own selection memory saved in %appdata%/pyRevit folder as *.pym files +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/script.py index e08a39dba..956983415 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/mema.stack/MWrite.pushbutton/script.py @@ -4,14 +4,6 @@ from pyrevit import revit -__context__ = 'Selection' -__helpurl__ = '{{docpath}}pAM-ARIXXLw' -__doc__ = 'Clear memory and Append current selection.\n'\ - 'Works like the MC and M+ button in a calculator. '\ - 'This is a project-dependent memory. Every project has its own '\ - 'selection memory saved in %appdata%/pyRevit folder as *.pym files.' - - datafile = script.get_document_data_file("SelList", "pym") selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/bundle.yaml new file mode 100644 index 000000000..98af9da0a --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/bundle.yaml @@ -0,0 +1,12 @@ +tooltip: >- + Copies the state of desired parameter of the active + + view to memory. e.g. Visibility Graphics settings or + + Zoom state. Run it and see how it works +author: >- + Gui Talarico + + {{author}} + + Alex Melnikov diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/script.py index 31315c9cf..3cf816c4d 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Copy State.pushbutton/script.py @@ -9,9 +9,6 @@ import copypastestate -__authors__ = ['Gui Talarico', '{{author}}', 'Alex Melnikov'] - - # collect actions that are valid in this context available_actions = [ x for x in copypastestate.get_actions() if x.validate_context() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/bundle.yaml new file mode 100644 index 000000000..f6fc19c58 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: >- + Clears selection from memory + + Works like the MC button in a calculator. This is a project-dependent memory. Every project has its own selection memory saved in %appdata%/pyRevit folder as *.pym files \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/script.py index 360e5ff3b..66649ab8e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MClear.pushbutton/script.py @@ -6,12 +6,6 @@ from pyrevit import script -__doc__ = 'Clears selection from memory.\n'\ - 'Works like the MC button in a calculator. '\ - 'This is a project-dependent memory. Every project has its own '\ - 'selection memory saved in %appdata%/pyRevit folder as *.pym files.' - - datafile = script.get_document_data_file("SelList", "pym") f = open(datafile, 'wb') diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/bundle.yaml new file mode 100644 index 000000000..2f8460cba --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: >- + Deducts selection from memory keeping the rest + + Works like the M- button in a calculator. This is a project-dependent memory. Every project has its own selection memory saved in %appdata%/pyRevit folder as *.pym files diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/script.py index 424e615b1..32f72f827 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/MDeduct.pushbutton/script.py @@ -6,12 +6,6 @@ from pyrevit import script -__doc__ = 'Deducts selection from memory keeping the rest.\n'\ - 'Works like the M- button in a calculator. '\ - 'This is a project-dependent memory. Every project has its own '\ - 'selection memory saved in %appdata%/pyRevit folder as *.pym files.' - - datafile = script.get_document_data_file("SelList", "pym") selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Next.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Next.pushbutton/bundle.yaml new file mode 100644 index 000000000..10a0562e0 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Next.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Select next element in selection memory. + + + Click +1 + + Shift+Click +10 diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Prev.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Prev.pushbutton/bundle.yaml new file mode 100644 index 000000000..e5b4be21d --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Prev.pushbutton/bundle.yaml @@ -0,0 +1,7 @@ +tooltip: >- + Select previous element in selection memory. + + + Click +1 + + Shift+Click +10 \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Purge Memory Files.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Purge Memory Files.pushbutton/bundle.yaml new file mode 100644 index 000000000..c16c7f3d3 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Purge Memory Files.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Deletes all the temporary selection data files folder. This will clear all selection memories \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Save Memory as Selection.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Save Memory as Selection.pushbutton/bundle.yaml new file mode 100644 index 000000000..3d703bd74 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Memory.pulldown/Save Memory as Selection.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Saves current selection memory as a Selection Filter \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/bundle.yaml new file mode 100644 index 000000000..77067930c --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/bundle.yaml @@ -0,0 +1,15 @@ +tooltip: >- + Applies the copied state to the active view + + This works in conjunction with the Copy State tool + + + Shift-Click: + + Show additional options +author: >- + Gui Talarico + + {{author}} + + Alex Melnikov diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/script.py index 9e6675d17..86557f6a7 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/Paste State.pushbutton/script.py @@ -11,9 +11,6 @@ import copypastestate -__authors__ = ['Gui Talarico', '{{author}}', 'Alex Melnikov'] - - # collect actions that are valid in this context available_actions = [ x for x in copypastestate.get_actions() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/lib/copypastestate/actions.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/lib/copypastestate/actions.py index bc30aa6f0..7ff8ce9a9 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/lib/copypastestate/actions.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/memo.stack/lib/copypastestate/actions.py @@ -232,7 +232,7 @@ def get_cropable_views(): # py2 filter does not support keyword arguments selected_views = revit.get_selection().only_views() if not selected_views: - selected_views = [revit.active_view] + selected_views = [revit.uidoc.ActiveGraphicalView] return list(filter(revit.query.is_cropable_view, selected_views)) @staticmethod @@ -676,7 +676,7 @@ class FilterOverridesAction(basetypes.CopyPasteStateAction): def get_suitable_views(): selected_views = revit.get_selection().only_views() if not selected_views: - selected_views = [revit.active_view] + selected_views = [revit.uidoc.ActiveGraphicalView] return [view for view in selected_views if view.AreGraphicsOverridesAllowed()] diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..19fbb1ea4 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Discards (not delete) grouped elements from the current selection +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/script.py index e81721be1..35f28f085 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Grouped Elements.pushbutton/script.py @@ -3,8 +3,6 @@ from pyrevit import revit, DB -__context__ = 'Selection' - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..50ff61957 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Discards (not delete) pinned elements from current selection +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/script.py index 7338f6b69..4a1f6b54c 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Discard Pinned Elements.pushbutton/script.py @@ -3,8 +3,6 @@ from pyrevit import revit, DB -__context__ = 'Selection' - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/bundle.yaml new file mode 100644 index 000000000..e1684cfa1 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Looks into the current selection elements and keeps the ones hosted on a linked model surface +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/script.py index 8ce17f664..5da1e7f31 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Elements Hosted On Linked Model.pushbutton/script.py @@ -2,11 +2,6 @@ from pyrevit import script -__context__ = 'Selection' -__doc__ = 'Looks into the current selection elements and '\ - 'keeps the ones hosted on a linked model surface.' - - selection = revit.get_selection() logger = script.get_logger() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/bundle.yaml new file mode 100644 index 000000000..cede06481 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: >- + Keep only mirrored elements in current selection + + + Shift-Click: + + Keep only not-Mirrored +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/script.py index 70ec55d7f..70972724b 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Mirrored.pushbutton/script.py @@ -7,8 +7,5 @@ from pyrevit import revit -__context__ = 'selection' - - mirrored_elements = revit.select.select_mirrored(revit.get_selection()) revit.get_selection().set_to(mirrored_elements) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..ff0d7c8f8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: keeps elements with painted faces in current selection and filters everything else out +context: Selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/script.py index dd4aca67a..3cabf94d3 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Painted Elements.pushbutton/script.py @@ -3,8 +3,6 @@ from pyrevit import revit, DB -__context__ = 'Selection' - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Isolate.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Isolate.pushbutton/bundle.yaml new file mode 100644 index 000000000..c25f427a1 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Isolate.pushbutton/bundle.yaml @@ -0,0 +1,4 @@ +tooltip: >- + Isolates specific elements in current view and + + put the view in isolate element mode diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..cbac13636 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Select a series of tags and this tool will add their associated elements to selection. This is especially useful for isolating elements and their tags +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/script.py index 27be11112..a12845de1 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Add Tagged Elements.pushbutton/script.py @@ -2,11 +2,6 @@ from pyrevit import forms -__context__ = 'selection' -__doc__ = 'Select a series of tags and this tool will add their associated '\ - 'elements to selection. This is especially useful for isolating '\ - 'elements and their tags.' - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Find And Select Entities Without Dimensions.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Find And Select Entities Without Dimensions.pushbutton/bundle.yaml new file mode 100644 index 000000000..9ae6e88bf --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Find And Select Entities Without Dimensions.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Selects elements with no associated dimensions in current view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Find And Select Entities Without Tags.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Find And Select Entities Without Tags.pushbutton/bundle.yaml new file mode 100644 index 000000000..b24df0ac2 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Find And Select Entities Without Tags.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Selects elements with no associated tags in current view \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/bundle.yaml new file mode 100644 index 000000000..9d0234008 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: >- + Inverts selection in active view + + + Shift-Click: + + Select group members instead of parent group elements +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/script.py index fdfdb6c1a..a17b9bf9e 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Invert Selection.pushbutton/script.py @@ -6,8 +6,6 @@ #pylint: disable=import-error,invalid-name,broad-except from pyrevit import revit, DB -__context__ = 'selection' - # get view elements viewelements = DB.FilteredElementCollector(revit.doc, revit.active_view.Id)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/bundle.yaml new file mode 100644 index 000000000..8ee4bd5e8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Lists the selected element ids as clickable links. This is a quick way to go through a series of elements +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/script.py index b12f4806a..fb46fd8e8 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/List Selection as Clickable Links.pushbutton/script.py @@ -1,11 +1,6 @@ from pyrevit import script, revit -__context__ = 'selection' -__doc__ = 'Lists the selected element ids as clickable links. '\ - 'This is a quick way to go through a series of elements.' - - output = script.get_output() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/bundle.yaml new file mode 100644 index 000000000..d25d191d3 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Selects all revision clouds of a sepecific revision. This is helpful for setting a parameter or comment on all the revision clouds at once diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/script.py index f71eda847..8141561d8 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds Of Specific Revision.pushbutton/script.py @@ -2,11 +2,6 @@ from pyrevit import forms -__doc__ = 'Selects all revision clouds of a sepecific revision. '\ - 'This is helpful for setting a parameter or comment ' \ - 'on all the revision clouds at once.' - - def select_clouds(revision_element): cl = DB.FilteredElementCollector(revit.doc) revclouds = cl.OfCategory(DB.BuiltInCategory.OST_RevisionClouds)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/bundle.yaml new file mode 100644 index 000000000..ae25cf71e --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Selects all revision clouds in the model with comment matching selected revision cloud +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/script.py index 53e2da5cd..a1e01f1de 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Clouds with Same Comment.pushbutton/script.py @@ -3,11 +3,6 @@ from pyrevit import forms -__context__ = 'selection' -__doc__ = 'Selects all revision clouds in the model with comment '\ - 'matching selected revision cloud.' - - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/bundle.yaml new file mode 100644 index 000000000..95eeacb35 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Selects all elements (in model) of the same family as the currently selected object +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/script.py index d80fad256..4bf29ab67 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Elements Of Same Family.pushbutton/script.py @@ -2,18 +2,23 @@ from pyrevit import revit, DB, UI -__context__ = 'selection' -__doc__ = 'Selects all elements (in model) of the same family '\ - 'as the currently selected object.' - - matchlist = [] +families_checked = [] selection = revit.get_selection() for el in selection: try: - family = el.Symbol.Family + # allow to select Type (FamilySymbol) from ProjectBrowser + if isinstance(el, DB.FamilySymbol): + symbol = el + else: + symbol = el.Symbol + family = symbol.Family + # do not collect element of the same family twice + if family.Id in families_checked: + continue + families_checked.append(family.Id) symbolIdSet = family.GetFamilySymbolIds() for symid in symbolIdSet: cl = DB.FilteredElementCollector(revit.doc)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/bundle.yaml new file mode 100644 index 000000000..41dfff290 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/bundle.yaml @@ -0,0 +1,12 @@ +tooltip: >- + Select all elements of the same type as selected element + + and reports their IDs (sorted by the owner view if they + + are View Specific objects) + + + Shift-Click: + + Show Results +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/script.py index d52cbac57..c732279a2 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Objects Of Selected Type.pushbutton/script.py @@ -11,8 +11,6 @@ from pyrevit import forms -__context__ = 'selection' - output = script.get_output() selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/bundle.yaml new file mode 100644 index 000000000..26bd4e3f6 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Selects all Text Note elements in the model. This is helpful for spell checking diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/script.py index 17a6efc87..332589f87 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Text Notes.pushbutton/script.py @@ -2,10 +2,6 @@ from pyrevit import revit, DB -__doc__ = 'Selects all Text Note elements in the model. '\ - 'This is helpful for spell checking.' - - textnotes = DB.FilteredElementCollector(revit.doc)\ .OfClass(DB.TextNote)\ .WhereElementIsNotElementType()\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/bundle.yaml new file mode 100644 index 000000000..fb372ee78 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: >- + Selects all vertical(default) or horizontal reveals in the project + + + Shift-Click: + + Select horizontal reveals +title: Select Vertical/Horizontal Reveals diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/script.py index a3ed78b57..2435e73aa 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select All Vertical Reveals.pushbutton/script.py @@ -7,9 +7,6 @@ from pyrevit import revit, DB -__title__ = "Select Vertical/Horizontal Reveals" - - reveal_ids = [] for el in DB.FilteredElementCollector(revit.doc)\ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Element Types.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Element Types.pushbutton/bundle.yaml new file mode 100644 index 000000000..9da446ce0 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Element Types.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Select all element types of chosen category diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/bundle.yaml new file mode 100644 index 000000000..5d65f549b --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Replaces current selection with elements inside the groups +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/script.py index 7674cc283..67095d120 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Group Elements.pushbutton/script.py @@ -3,9 +3,6 @@ from pyrevit import revit, DB -__context__ = 'selection' - - selection = revit.get_selection() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/bundle.yaml new file mode 100644 index 000000000..b929ebb76 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/bundle.yaml @@ -0,0 +1,8 @@ +tooltip: >- + Selects elements similar to the currently + + selected elements in the active view + + + Shift-Click: select in whole project +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/script.py index 727a19dd4..5a85147a1 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select Similar Elements In Active View.pushbutton/script.py @@ -7,7 +7,6 @@ from pyrevit import forms from pyrevit.framework import List -__context__ = 'selection' if not __shiftclick__: # ensure active view is a graphical view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/bundle.yaml new file mode 100644 index 000000000..cea3b9f76 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/bundle.yaml @@ -0,0 +1,2 @@ +tooltip: Select a series of stacked walls. Run this tool and it will replace the selection with sub-walls of the selected stacked walls +context: selection diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/script.py index 741fabe82..23adbc46b 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Select.pulldown/Select SubWalls.pushbutton/script.py @@ -3,12 +3,6 @@ from pyrevit import forms -__context__ = 'selection' -__doc__ = 'Select a series of stacked walls. Run this tool and it '\ - 'will replace the selection with sub-walls '\ - 'of the selected stacked walls.' - - selection = revit.get_selection() sub_walls = [] diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/bundle.yaml new file mode 100644 index 000000000..43da65797 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/bundle.yaml @@ -0,0 +1,12 @@ +tooltip: >- + Reduce the list of open Revit tabs + + + Shift+Click: + + Customize which tabs should be hidden in minified mode +title: >- + Minify + + Revit UI +context: zero-doc diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/script.py index 18cdb4c61..23b424ad4 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/MinifyUI.smartbutton/script.py @@ -8,10 +8,6 @@ from pyrevit.coreutils.ribbon import ICON_MEDIUM -__title__ = 'Minify\nRevit UI' -__context__ = 'zero-doc' - - config = script.get_config() diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/bundle.yaml new file mode 100644 index 000000000..a9adc13d8 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/bundle.yaml @@ -0,0 +1,6 @@ +tooltip: Enables and disables the Revu PDF Printer prompt for filename option. The Icon shows the current state of this setting +title: >- + Revu + + Popup +context: zero-doc diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/script.py index 6218465f8..6c6a302e0 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Revu Popup.smartbutton/script.py @@ -9,14 +9,6 @@ logger = script.get_logger() -__context__ = 'zero-doc' -__title__ = 'Revu\nPopup' - - -__doc__ = 'Enables and disables the Revu PDF Printer prompt for '\ - 'filename option. The Icon shows the current state of this setting.' - - # op.sep = '\\' driver_keys = [] BBS_KEY_PATH = r'Software\Bluebeam Software' diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/bundle.yaml new file mode 100644 index 000000000..5bc351874 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/bundle.yaml @@ -0,0 +1,3 @@ +tooltip: Does its best at visually separating open documents +min_revit_version: 2019 +context: zero-doc diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/script.py index d5f9147a9..5c3aa1732 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles1.stack/Tab Coloring.smartbutton/script.py @@ -9,10 +9,6 @@ from pyrevit.userconfig import user_config -__context__ = 'zero-doc' -__min_revit_ver__ = 2019 - - output = script.get_output() COLOR_TAG_STYLE_TEMPLATE = \ diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/Imported.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/Imported.pushbutton/bundle.yaml new file mode 100644 index 000000000..d1200eded --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/Imported.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Toggles visibility of imported categories on current view diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/SectionBox.pushbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/SectionBox.pushbutton/bundle.yaml new file mode 100644 index 000000000..bbeae4a06 --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/SectionBox.pushbutton/bundle.yaml @@ -0,0 +1 @@ +tooltip: Toggles visibility of section box in current 3D view \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/Sync Views.smartbutton/bundle.yaml b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/Sync Views.smartbutton/bundle.yaml new file mode 100644 index 000000000..45f02437d --- /dev/null +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles2.stack/Sync Views.smartbutton/bundle.yaml @@ -0,0 +1,10 @@ +tooltip: >- + Keep views synchronized. This means that as you pan and zoom and + + switch between Plan and RCP views, this tool will keep the views + + in the same zoomed area so you can keep working in the same + + area without the need to zoom and pan again. + + This tool works best when the views are maximized \ No newline at end of file diff --git a/pyRevitfile b/pyRevitfile index 963e04bbd..1bf5476a0 100644 --- a/pyRevitfile +++ b/pyRevitfile @@ -52,7 +52,7 @@ runtime = false path = 'bin\engines\378' assembly = 'pyRevitLabs.PythonNet.dll' compatproducts = [] -description = 'Alternative command execution engine.' +description = 'Alternative command execution engine' [engines.CPY385] kernel = 'CPython' @@ -61,7 +61,7 @@ runtime = false path = 'bin\engines\385' assembly = 'pyRevitLabs.PythonNet.dll' compatproducts = [] -description = 'Alternative command execution engine.' +description = 'Alternative command execution engine' [deployments] core = ['bin', diff --git a/pyrevitlib/pyrevit/extensions/extpackages.py b/pyrevitlib/pyrevit/extensions/extpackages.py index 4a396678a..065c02102 100644 --- a/pyrevitlib/pyrevit/extensions/extpackages.py +++ b/pyrevitlib/pyrevit/extensions/extpackages.py @@ -432,16 +432,21 @@ def get_ext_packages(authorized_only=True): """ extpkgs = [] for ext_dir in user_config.get_ext_root_dirs(): - extpkg_deffile = op.join(ext_dir, PLUGIN_EXT_DEF_FILE) - mlogger.debug('Looking for %s', extpkg_deffile) - # check for external ext def file - if op.exists(extpkg_deffile): - mlogger.debug('Found %s', extpkg_deffile) - _update_extpkgs(extpkg_deffile, extpkgs) - # check internals now - internal_extpkg_defs = _find_internal_extpkgs(ext_dir) - for int_def_file in internal_extpkg_defs: - _update_extpkgs(int_def_file, extpkgs) + # make a list of all availabe extension definition sources + # default is under the extensions directory that ships with pyrevit + extpkg_def_files = {op.join(ext_dir, PLUGIN_EXT_DEF_FILE)} + # add other sources added by the user (using the cli) + extpkg_def_files.update(user_config.get_ext_sources()) + for extpkg_def_file in extpkg_def_files: + mlogger.debug('Looking for %s', extpkg_def_file) + # check for external ext def file + if op.exists(extpkg_def_file): + mlogger.debug('Found %s', extpkg_def_file) + _update_extpkgs(extpkg_def_file, extpkgs) + # check internals now + internal_extpkg_defs = _find_internal_extpkgs(ext_dir) + for int_def_file in internal_extpkg_defs: + _update_extpkgs(int_def_file, extpkgs) if authorized_only: return [x for x in extpkgs if x.user_has_access] diff --git a/pyrevitlib/pyrevit/forms/__init__.py b/pyrevitlib/pyrevit/forms/__init__.py index 08f31e03d..c41556853 100644 --- a/pyrevitlib/pyrevit/forms/__init__.py +++ b/pyrevitlib/pyrevit/forms/__init__.py @@ -987,8 +987,12 @@ def string_value_changed(self, sender, args): #pylint: disable=unused-argument """Handle string vlaue update event.""" filtered_rvalues = \ sorted([x for x in self.reserved_values - if self.stringValue_tb.Text == str(x)], + if self.stringValue_tb.Text == str(x)]) + similar_rvalues = \ + sorted([x for x in self.reserved_values + if self.stringValue_tb.Text in str(x)], reverse=True) + filtered_rvalues.extend(similar_rvalues) if filtered_rvalues: self.reservedValuesList.ItemsSource = filtered_rvalues self.show_element(self.reservedValuesListPanel) diff --git a/pyrevitlib/pyrevit/runtime/CLREngine.cs b/pyrevitlib/pyrevit/runtime/CLREngine.cs index 46f71fb89..9cf14058f 100644 --- a/pyrevitlib/pyrevit/runtime/CLREngine.cs +++ b/pyrevitlib/pyrevit/runtime/CLREngine.cs @@ -58,6 +58,7 @@ public class CLREngine : ScriptEngine { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); private string scriptSig = string.Empty; + private bool scriptDbg = false; private Assembly scriptAssm = null; public override void Init(ref ScriptRuntime runtime) { @@ -71,9 +72,10 @@ public override int Execute(ref ScriptRuntime runtime) { // compile first // only if the signature doesn't match var errors = new List(); - if (scriptSig == null || runtime.ScriptSourceFileSignature != scriptSig) { + if (scriptSig == null || runtime.ScriptSourceFileSignature != scriptSig || scriptDbg != runtime.ScriptRuntimeConfigs.DebugMode) { try { scriptSig = runtime.ScriptSourceFileSignature; + scriptDbg = runtime.ScriptRuntimeConfigs.DebugMode; scriptAssm = CompileCLRScript(ref runtime, out errors); if (scriptAssm == null) { if (runtime.RuntimeType == ScriptRuntimeType.ExternalCommand) { @@ -203,30 +205,32 @@ public static Assembly CompileCLRScript(ref ScriptRuntime runtime, out List refFiles, List defines, out List errors) { + private static Assembly CompileCSharp(string sourceFile, string outputPath, List refFiles, List defines, bool debug, out List errors) { return pyRevitLabs.Common.CodeCompiler.CompileCSharpToAssembly( sourceFiles: new string[] { sourceFile }, assemblyName: Path.GetFileName(outputPath), references: refFiles, defines: defines, + debug, out errors ); } - private static Assembly CompileVB(string sourceFile, string outputPath, List refFiles, List defines, out List errors) { + private static Assembly CompileVB(string sourceFile, string outputPath, List refFiles, List defines, bool debug, out List errors) { return pyRevitLabs.Common.CodeCompiler.CompileVisualBasicToAssembly( sourceFiles: new string[] { sourceFile }, assemblyName: Path.GetFileName(outputPath), references: refFiles, defines: defines.Select(x => new KeyValuePair(x, null)), + debug, out errors ); } diff --git a/pyrevitlib/pyrevit/runtime/__init__.py b/pyrevitlib/pyrevit/runtime/__init__.py index 391c8a5c4..f5f00686c 100644 --- a/pyrevitlib/pyrevit/runtime/__init__.py +++ b/pyrevitlib/pyrevit/runtime/__init__.py @@ -272,7 +272,8 @@ def _generate_runtime_asm(): defines=Array[str]([ "REVIT{}".format(HOST_APP.version), "REVIT{}".format(HOST_APP.subversion.replace('.', '_')) - ]) + ]), + debug=False ) # log results logfile = RUNTIME_ASSM_FILE.replace('.dll', '.log') diff --git a/pyrevitlib/pyrevit/userconfig.py b/pyrevitlib/pyrevit/userconfig.py index be86f514a..3233c53ed 100644 --- a/pyrevitlib/pyrevit/userconfig.py +++ b/pyrevitlib/pyrevit/userconfig.py @@ -108,6 +108,12 @@ def config_file(self): """Current config file path.""" return self._cfg_file_path + @property + def environment(self): + if not self.has_section(CONSTS.EnvConfigsSectionName): + self.add_section(CONSTS.EnvConfigsSectionName) + return self.get_section(CONSTS.EnvConfigsSectionName) + @property def core(self): if not self.has_section(CONSTS.ConfigsCoreSection): @@ -562,12 +568,12 @@ def get_thirdparty_ext_root_dirs(self, include_default=True): Returns: :obj:`list`: list of strings. External user extension directories. """ - dir_list = [] + dir_list = set() if include_default: # add default ext path - dir_list.append(THIRDPARTY_EXTENSIONS_DEFAULT_DIR) + dir_list.add(THIRDPARTY_EXTENSIONS_DEFAULT_DIR) try: - dir_list.extend([ + dir_list.update([ op.expandvars(op.normpath(x)) for x in self.core.get_option( CONSTS.ConfigsUserExtensionsKey, @@ -586,11 +592,19 @@ def get_ext_root_dirs(self): :obj:`list`: list of strings. user extension directories. """ - dir_list = [] + dir_list = set() if op.exists(EXTENSIONS_DEFAULT_DIR): - dir_list.append(EXTENSIONS_DEFAULT_DIR) - dir_list.extend(self.get_thirdparty_ext_root_dirs()) - return list(set(dir_list)) + dir_list.add(EXTENSIONS_DEFAULT_DIR) + dir_list.update(self.get_thirdparty_ext_root_dirs()) + return list(dir_list) + + def get_ext_sources(self): + """Return a list of extension definition source files""" + ext_sources = self.environment.get_option( + CONSTS.EnvConfigsExtensionLookupSourcesKey, + default_value=[], + ) + return list(set(ext_sources)) def set_thirdparty_ext_root_dirs(self, path_list): """Updates list of external extension directories in config file diff --git a/pyrevitlib/pyrevit/version b/pyrevitlib/pyrevit/version index 287156730..40d1f9dd0 100644 --- a/pyrevitlib/pyrevit/version +++ b/pyrevitlib/pyrevit/version @@ -1 +1 @@ -4.8.1 \ No newline at end of file +4.8.2 \ No newline at end of file diff --git a/release/pyrevit-cli.aip b/release/pyrevit-cli.aip index edd5a5bc8..63302fa53 100644 --- a/release/pyrevit-cli.aip +++ b/release/pyrevit-cli.aip @@ -21,10 +21,10 @@ - + - + diff --git a/release/pyrevit.aip b/release/pyrevit.aip index 341abf5f9..0edf91809 100644 --- a/release/pyrevit.aip +++ b/release/pyrevit.aip @@ -27,10 +27,10 @@ - + - + @@ -165,7 +165,6 @@ - @@ -207,7 +206,6 @@ - @@ -465,7 +463,6 @@ - @@ -518,7 +515,6 @@ - @@ -2474,7 +2470,6 @@ - @@ -2858,7 +2853,6 @@ - @@ -2964,6 +2958,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3175,7 +3359,6 @@ - @@ -3563,7 +3746,6 @@ -