diff --git a/extensions/pyRevitTools.extension/checks/audit_all_check.py b/extensions/pyRevitTools.extension/checks/audit_all_check.py index ccafd2643c..f798a9c773 100644 --- a/extensions/pyRevitTools.extension/checks/audit_all_check.py +++ b/extensions/pyRevitTools.extension/checks/audit_all_check.py @@ -14,19 +14,20 @@ from pyrevit.forms import alert, show_balloon from pyrevit.output.cards import card_builder, create_frame from pyrevit.revit.db import ProjectInfo as RevitProjectInfo -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) - +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta import pyrevit.revit.db.query as q import pyrevit.revit.db.count as cnt +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + + logger = get_logger() BODY_CSS = '
' @@ -630,7 +631,8 @@ def export_to_csv(self, export_file_path=EXPORT_FILE_PATH, headers=None): """ Exports the current data to a CSV file. If the CSV file does not exist, it creates a new file and writes the headers and data. - If the CSV file exists, it appends the data only if a row with the same date and document name does not already exist. + If the CSV file exists, it appends the data only if a row with the same date and document + name does not already exist. Args: export_file_path (str): The path to the CSV file. Defaults to EXPORT_FILE_PATH. @@ -955,19 +957,17 @@ def audit_document(doc, output): "N/A", "N/A", ] - from check_translations import get_check_translation - - output.print_md("# {}".format(get_check_translation("AuditAllMainFileInfos"))) + output.print_md("# {}".format(_t("AuditAllMainFileInfos"))) translated_headers = [ - get_check_translation("AuditAllProjectName"), - get_check_translation("AuditAllProjectNumber"), - get_check_translation("AuditAllClientName"), - get_check_translation("AuditAllProjectPhases"), - get_check_translation("AuditAllWorksets"), - get_check_translation("AuditAllLinkedFileName"), - get_check_translation("ModelCheckerInstanceName"), - get_check_translation("AuditAllLoadedStatus"), - get_check_translation("ModelCheckerPinnedStatus"), + _t("AuditAllProjectName"), + _t("AuditAllProjectNumber"), + _t("AuditAllClientName"), + _t("AuditAllProjectPhases"), + _t("AuditAllWorksets"), + _t("AuditAllLinkedFileName"), + _t("ModelCheckerInstanceName"), + _t("AuditAllLoadedStatus"), + _t("ModelCheckerPinnedStatus"), ] output.print_table([project_info], columns=translated_headers) @@ -1003,18 +1003,14 @@ def audit_document(doc, output): ) links_documents_data.append(link_document_data) if link_data: - output.print_md( - "# {}".format(get_check_translation("AuditAllLinkedFilesInfos")) - ) + output.print_md("# {}".format(_t("AuditAllLinkedFilesInfos"))) output.print_table(link_data, columns=translated_headers) links_cards = card_builder( - 50, - data.links_info.rvtlinks_count, - " {}".format(get_check_translation("AuditAllLinks")), + 50, data.links_info.rvtlinks_count, " {}".format(_t("AuditAllLinks")) ) + card_builder( 0, data.links_info.rvtlinks_unpinned_count, - " {}".format(get_check_translation("AuditAllLinksNotPinned")), + " {}".format(_t("AuditAllLinksNotPinned")), ) output.print_md( @@ -1026,9 +1022,7 @@ def audit_document(doc, output): data.export_to_csv() if data.rvtlinks_elements_items: - output.print_md( - "# {}".format(get_check_translation("ModelCheckerRVTLinks")) - ) + output.print_md("# {}".format(_t("ModelCheckerRVTLinks"))) for link_doc_data in links_documents_data: generate_rvt_links_report(link_doc_data, output) except Exception as e: @@ -1051,17 +1045,15 @@ def generate_rvt_links_report(link_document_data, output): output.print_md("## " + doc_clean_name) output.print_md("___") links_data = "" - from check_translations import get_check_translation - if link_document_data.rvtlinks_elements_items: links_data = card_builder( 50, link_document_data.links_info.rvtlinks_count, - " {}".format(get_check_translation("AuditAllLinks")), + " {}".format(_t("AuditAllLinks")), ) + card_builder( 0, link_document_data.links_info.rvtlinks_unpinned_count, - " {}".format(get_check_translation("AuditAllLinksNotPinned")), + " {}".format(_t("AuditAllLinksNotPinned")), ) html_content = generate_html_content(link_document_data, links_data) output.print_html(html_content) @@ -1069,15 +1061,7 @@ def generate_rvt_links_report(link_document_data, output): class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_AuditAll" - - @property - def name(self): - from check_translations import get_check_translation - - return get_check_translation("CheckName_AuditAll") - + name = _t("CheckName_AuditAll") author = "Jean-Marc Couffin" def setUp(self, doc, output): @@ -1091,3 +1075,6 @@ def tearDown(self, doc, output): endtime_hms = str(timedelta(seconds=endtime)) endtime_hms_claim = " \n\nCheck duration " + endtime_hms[0:7] output.print_md(endtime_hms_claim) + + +ModelChecker.__doc__ = _t("CheckDescription_AuditAll") diff --git a/extensions/pyRevitTools.extension/checks/cad_audit_check.py b/extensions/pyRevitTools.extension/checks/cad_audit_check.py index e324358415..f6cb95c53d 100644 --- a/extensions/pyRevitTools.extension/checks/cad_audit_check.py +++ b/extensions/pyRevitTools.extension/checks/cad_audit_check.py @@ -2,31 +2,44 @@ from pyrevit import script, revit, DB, DOCS -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta -from System.Windows import Window # Used for cancel button -from rpw.ui.forms import (FlexForm, Label, Separator, Button) # RPW -from rpw.ui.forms.flexform import RpwControlMixin, Controls # Used to create RadioButton -from pyrevit.coreutils import Timer # Used for timing the check -from datetime import timedelta # Used for timing the check +from System.Windows import Window # Used for cancel button +from rpw.ui.forms import FlexForm, Label, Separator, Button # RPW +from rpw.ui.forms.flexform import ( + RpwControlMixin, + Controls, +) # Used to create RadioButton + +from pyrevit.coreutils import Timer # Used for timing the check +from datetime import timedelta # Used for timing the check doc = DOCS.doc ac_view = doc.ActiveView +_XAML = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml" +) + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + def collect_cadinstances(active_view_only): - """ Collect ImportInstance class from whole model or from just active view """ - collector = DB.FilteredElementCollector(doc, ac_view.Id) if active_view_only else DB.FilteredElementCollector(doc) - cadinstances = collector.OfClass(DB.ImportInstance).WhereElementIsNotElementType().ToElements() + """Collect ImportInstance class from whole model or from just active view""" + collector = ( + DB.FilteredElementCollector(doc, ac_view.Id) + if active_view_only + else DB.FilteredElementCollector(doc) + ) + cadinstances = ( + collector.OfClass(DB.ImportInstance).WhereElementIsNotElementType().ToElements() + ) if cadinstances: return cadinstances @@ -37,6 +50,7 @@ def cancel_clicked(sender, e): window.close() script.exit() + # Add radio button functionality to RPW Flexforms class RadioButton(RpwControlMixin, Controls.RadioButton): """ @@ -44,6 +58,7 @@ class RadioButton(RpwControlMixin, Controls.RadioButton): >>> RadioButton('Label') """ + def __init__(self, name, radio_text, default=False, **kwargs): """ Args: @@ -60,40 +75,46 @@ def __init__(self, name, radio_text, default=False, **kwargs): @property def value(self): return self.IsChecked - + + def get_cad_site(cad_inst): - """ A CAD's location site cannot be got from the Shared Site parameter - cad_inst.Name returns the site name with a 'location' prefix (language-specific, eg 'emplacement' in French)""" + """A CAD's location site cannot be got from the Shared Site parameter + cad_inst.Name returns the site name with a 'location' prefix (language-specific, eg 'emplacement' in French) + """ return cad_inst.Name.replace("location", "-") def get_user_input(): - """ create RPW input FlexForm for user choice of collection mode (coll_mode) whole model or just active view """ - from check_translations import get_check_translation + """create RPW input FlexForm for user choice of collection mode (coll_mode) whole model or just active view""" flexform_comp = [ - Label(get_check_translation("CADAuditInstances")), - RadioButton("model", get_check_translation("CADAuditInProject"), True, GroupName="grp"), # GroupName implemented in class through kwargs - RadioButton("active_view", get_check_translation("CADAuditInActiveView"), False, GroupName="grp"), + Label(_t("CADAuditInstances")), + RadioButton( + "model", _t("CADAuditInProject"), True, GroupName="grp" + ), # GroupName implemented in class through kwargs + RadioButton("active_view", _t("CADAuditInActiveView"), False, GroupName="grp"), Separator(), - Button(get_check_translation("CADAuditCancel"), on_click=cancel_clicked), - Button(get_check_translation("CADAuditOK")), + Button(_t("CADAuditCancel"), on_click=cancel_clicked), + Button(_t("CADAuditOK")), ] - user_input = FlexForm(get_check_translation("CADAuditTitle"), flexform_comp, Width=500, Height=200) # returns a FlexForm object + user_input = FlexForm( + _t("CADAuditTitle"), flexform_comp, Width=500, Height=200 + ) # returns a FlexForm object user_input.show() - user_input_dict = user_input.values # This is a dictionary + user_input_dict = user_input.values # This is a dictionary if not user_input_dict: script.exit() return user_input_dict + def get_load_stat(cad, is_link): - """ Loaded status from the import instance's CADLinkType """ - cad_type = doc.GetElement(cad.GetTypeId()) # Retreive the type from the instance - + """Loaded status from the import instance's CADLinkType""" + cad_type = doc.GetElement(cad.GetTypeId()) # Retreive the type from the instance + if not is_link: return ":warning: IMPORTED" - + try: exfs = cad_type.GetExternalFileReference() if not exfs: @@ -108,8 +129,8 @@ def get_load_stat(cad, is_link): status = ext_ref.GetResourceVersionStatus().ToString() if not exfs: - return ":warning: IMPORTED" # Not an external reference - + return ":warning: IMPORTED" # Not an external reference + if status == "Loaded": return ":ballot_box_with_check: Loaded" if status == "NotFound": @@ -118,7 +139,7 @@ def get_load_stat(cad, is_link): return ":heavy_multiplication_x: Unloaded" if status == "OutOfDate": return ":warning: Outdated on ADC" - if status == "Current": + if status == "Current": return ":ballot_box_with_check: Current on ADC" raise ValueError("Unexpected status {}".format(status)) @@ -128,24 +149,33 @@ def check_model(doc, output): output = script.get_output() output.close_others() output.set_title("CAD audit of model '{}'".format(doc.Title)) - output.set_width (1700) - + output.set_width(1700) + coll_mode = get_user_input()["active_view"] - - from check_translations import get_check_translation - table_data = [] # store array for table formatted output + + table_data = [] # store array for table formatted output row_head = [ - get_check_translation("CADAuditNo"), - get_check_translation("CADAuditSelectZoom"), - get_check_translation("CADAuditDWGInstance"), - get_check_translation("CADAuditLoadedStatus"), - get_check_translation("CADAuditWorkplaneOrView"), - get_check_translation("CADAuditDuplicate"), - get_check_translation("AuditAllWorksets"), - get_check_translation("CADAuditCreatorUser"), - get_check_translation("CADAuditLocationSiteName") - ] # output table first and last row - row_no_cad = ["-", "-", get_check_translation("CADAuditNoInstances"), "-", "-", "-", "-", "-", "-"] # output table row for when no CAD found + _t("CADAuditNo"), + _t("CADAuditSelectZoom"), + _t("CADAuditDWGInstance"), + _t("CADAuditLoadedStatus"), + _t("CADAuditWorkplaneOrView"), + _t("CADAuditDuplicate"), + _t("AuditAllWorksets"), + _t("CADAuditCreatorUser"), + _t("CADAuditLocationSiteName"), + ] # output table first and last row + row_no_cad = [ + "-", + "-", + _t("CADAuditNoInstances"), + "-", + "-", + "-", + "-", + "-", + "-", + ] # output table row for when no CAD found cad_instances = collect_cadinstances(coll_mode) if not cad_instances: table_data.append(row_no_cad) @@ -154,15 +184,16 @@ def check_model(doc, output): cad_id = cad.Id cad_is_link = cad.IsLinked cad_name = cad.Parameter[DB.BuiltInParameter.IMPORT_SYMBOL_NAME].AsString() - + table_row = [ count, - output.linkify(cad_id, title=get_check_translation("CADAuditSelect")), + output.linkify(cad_id, title=_t("CADAuditSelect")), cad_name, - get_load_stat(cad, cad.IsLinked), # loaded status + get_load_stat(cad, cad.IsLinked), # loaded status ] - - # if the instance has an owner view, it was placed on the active view only (bad, so give warning and show the view name) + + # if the instance has an owner view, it was placed on the active view only (bad, so + # give warning and show the view name) # if the instance has no owner view, it should have a level or workplane (good) cad_own_view_id = cad.OwnerViewId if cad_own_view_id == DB.ElementId.InvalidElementId: @@ -170,49 +201,57 @@ def check_model(doc, output): else: cad_own_view_name = doc.GetElement(cad_own_view_id).Name table_row.append(":warning: view '{}'".format(cad_own_view_name)) - table_row.append(":warning:" if cad_name in [row[2] for row in table_data] else "-") # If the name is already in table_data, it is a duplicat (bad) - table_row.append(revit.query.get_element_workset(cad).Name) # cad instance workset - table_row.append(DB.WorksharingUtils.GetWorksharingTooltipInfo(revit.doc, cad.Id).Creator) # ID of the user - table_row.append(get_cad_site(cad)) # Extract site name from location + table_row.append( + ":warning:" if cad_name in [row[2] for row in table_data] else "-" + ) # If the name is already in table_data, it is a duplicat (bad) + table_row.append( + revit.query.get_element_workset(cad).Name + ) # cad instance workset + table_row.append( + DB.WorksharingUtils.GetWorksharingTooltipInfo(revit.doc, cad.Id).Creator + ) # ID of the user + table_row.append(get_cad_site(cad)) # Extract site name from location table_data.append(table_row) - table_data.append(row_head) - output.print_md("## {}".format(get_check_translation("CADAuditPreflightAudit"))) - output.print_table(table_data=table_data, - title="", - columns=row_head, - formats=['', '', '', '', '', '', '', '', ''], - last_line_style='background-color:#233749;color:white;font-weight:bold') - + table_data.append(row_head) + output.print_md("## {}".format(_t("CADAuditPreflightAudit"))) + output.print_table( + table_data=table_data, + title="", + columns=row_head, + formats=["", "", "", "", "", "", "", "", ""], + last_line_style="background-color:#233749;color:white;font-weight:bold", + ) + # Summary output section: - link_to_view = output.linkify(ac_view.Id, title=get_check_translation("CADAuditShowView")) - print("{} {}".format(len(cad_instances or []), get_check_translation("CADAuditInstancesFound"))) - if coll_mode: # if active view only - summary_msg = "{} ('{}') {}".format(get_check_translation("CADAuditActiveView"), ac_view.Name, link_to_view) + link_to_view = output.linkify(ac_view.Id, title=_t("CADAuditShowView")) + print("{} {}".format(len(cad_instances or []), _t("CADAuditInstancesFound"))) + if coll_mode: # if active view only + summary_msg = "{} ('{}') {}".format( + _t("CADAuditActiveView"), ac_view.Name, link_to_view + ) else: - summary_msg = "{} ({})".format(get_check_translation("CADAuditWholeModel"), doc.Title) - print("{} {}".format(get_check_translation("CADAuditCheckRunOn"), summary_msg)) - output.print_md("##{} :warning:".format(get_check_translation("CADAuditExplanations"))) - print(get_check_translation("CADAuditLoadedStatusExplanation")) - print(get_check_translation("CADAuditWorkplaneExplanation")) - print(get_check_translation("CADAuditDuplicateExplanation")) + summary_msg = "{} ({})".format(_t("CADAuditWholeModel"), doc.Title) + print("{} {}".format(_t("CADAuditCheckRunOn"), summary_msg)) + output.print_md("##{} :warning:".format(_t("CADAuditExplanations"))) + print(_t("CADAuditLoadedStatusExplanation")) + print(_t("CADAuditWorkplaneExplanation")) + print(_t("CADAuditDuplicateExplanation")) # Display check duration endtime = timer.get_time() endtime_hms = str(timedelta(seconds=endtime)) - endtime_hms_claim = " \n\n{} {}".format(get_check_translation("CADAuditCheckDuration"), endtime_hms[0:7]) # Remove seconods decimals from string + endtime_hms_claim = " \n\n{} {}".format( + _t("CADAuditCheckDuration"), endtime_hms[0:7] + ) # Remove seconods decimals from string print(endtime_hms_claim) + class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_CADAudit" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_CADAudit") - + name = _t("CheckName_CADAudit") author = "Kevin Salmon" - def startTest(self, doc, output): check_model(doc, output) + + +ModelChecker.__doc__ = _t("CheckDescription_CADAudit") diff --git a/extensions/pyRevitTools.extension/checks/check_translations.py b/extensions/pyRevitTools.extension/checks/check_translations.py deleted file mode 100644 index e08c7acad2..0000000000 --- a/extensions/pyRevitTools.extension/checks/check_translations.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: UTF-8 -*- -"""Translation helper for preflight check files using XAML ResourceDictionary. - -This module provides translation functions that load strings from -PreflightCheckTemplate ResourceDictionary XAML files. -""" -import os -import xml.etree.ElementTree as ET -from pyrevit.userconfig import user_config - - -def _find_resource_dictionary_path(): - """Find the path to PreflightCheckTemplate ResourceDictionary files. - - Returns: - (str): Base path to ResourceDictionary files or None if not found - """ - # Get the current file's directory (checks/) - current_dir = os.path.dirname(os.path.abspath(__file__)) - # Go up to extension root, then navigate to Preflight Checks.pushbutton - extension_root = os.path.dirname(current_dir) - template_path = os.path.join( - extension_root, - "pyRevit.tab", - "Project.panel", - "Preflight Checks.pushbutton", - "PreflightCheckTemplate.xaml" - ) - - if os.path.exists(template_path): - return template_path - return None - - -def _load_resource_string(resource_file, key): - """Load a string from a XAML resource dictionary file. - - Args: - resource_file (str): Path to resource dictionary XAML file - key (str): Resource key to retrieve - - Returns: - (str): Resource string value or None if not found - """ - if not resource_file or not os.path.isfile(resource_file): - return None - - try: - tree = ET.parse(resource_file) - root = tree.getroot() - # XAML namespace - ns = {"xaml": "http://schemas.microsoft.com/winfx/2006/xaml/presentation", - "x": "http://schemas.microsoft.com/winfx/2006/xaml", - "system": "clr-namespace:System;assembly=mscorlib"} - # Find the string resource - string_elem = root.find(".//system:String[@x:Key='{}']".format(key), ns) - if string_elem is not None: - return string_elem.text - except Exception as e: - print("Error loading resource string: {}".format(e)) - pass - return None - - -def get_check_translation(key): - """Get translated string from PreflightCheckTemplate ResourceDictionary. - - Args: - key (str): Resource key to retrieve - - Returns: - (str): Translated string in current locale, or key if not found - """ - template_path = _find_resource_dictionary_path() - if not template_path: - return key - - # Try localized version first - template_resfile = template_path.replace( - ".xaml", ".ResourceDictionary.{}.xaml".format(user_config.user_locale) - ) - if os.path.isfile(template_resfile): - result = _load_resource_string(template_resfile, key) - if result: - return result - - # Fallback to English - template_resfile_en = template_path.replace( - ".xaml", ".ResourceDictionary.en_us.xaml" - ) - if os.path.isfile(template_resfile_en): - result = _load_resource_string(template_resfile_en, key) - if result: - return result - - # Final fallback to key name - return key - - -class DocstringMeta(type): - """Metaclass to make __doc__ and name dynamic based on translation key.""" - def __init__(cls, name, bases, dct): - super(DocstringMeta, cls).__init__(name, bases, dct) - # If class has _docstring_key, set __doc__ to translated value - if '_docstring_key' in dct: - translation_key = dct['_docstring_key'] - translated = get_check_translation(translation_key) - # Only set if translation succeeded (not just returning the key) - if translated != translation_key: - cls.__doc__ = translated - # Otherwise keep the original docstring from dct if it exists - - - name_key = None - - if '_name_key' in dct: - name_key = dct['_name_key'] - elif 'name' in dct and isinstance(dct['name'], property) and '_docstring_key' in dct: - doc_key = dct['_docstring_key'] - if doc_key.startswith('CheckDescription_'): - name_key = doc_key.replace('CheckDescription_', 'CheckName_', 1) - - if name_key: - translated_name = get_check_translation(name_key) - if translated_name != name_key: - cls.name = translated_name diff --git a/extensions/pyRevitTools.extension/checks/grids_check.py b/extensions/pyRevitTools.extension/checks/grids_check.py index 61dd2d46ea..7ea6b346a8 100644 --- a/extensions/pyRevitTools.extension/checks/grids_check.py +++ b/extensions/pyRevitTools.extension/checks/grids_check.py @@ -1,14 +1,16 @@ # -*- coding: UTF-8 -*- -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) -from pyrevit import script, revit, DB, DOCS +from pyrevit import script, DB, DOCS +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta + +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + doc = DOCS.doc @@ -64,40 +66,34 @@ def grids_scoped(document=doc): def checkModel(doc, output): - from check_translations import get_check_translation output = script.get_output() output.close_others() - output.print_md("# {}".format(get_check_translation("GridsDataLister"))) + output.print_md("# {}".format(_t("GridsDataLister"))) count = grids_count() - output.print_md("## {0}: {1}".format(get_check_translation("NumberOfGrids"), count)) - names = grids_names() # [1,2,3,4] - types = grids_types() # [bubble, bubble, bubble, bubble] - pinned = grids_pinned() # [True, False, True, False] - scoper = grids_scoped() # [Name of scope, Name of scope, Name of scope, Name of scope] - output.print_table( - table_data=zip(names, types, pinned, scoper), - title=get_check_translation("Grids"), - columns=[ - get_check_translation("Name"), - get_check_translation("Type"), - get_check_translation("Pinned"), - get_check_translation("ScopeBox") - ] - ) - + output.print_md("## {0}: {1}".format(_t("NumberOfGrids"), count)) + names = grids_names() + types = grids_types() + pinned = grids_pinned() + scoper = grids_scoped() + if count > 0: + output.print_table( + table_data=zip(names, types, pinned, scoper), + title=_t("Grids"), + columns=[ + _t("Name"), + _t("Type"), + _t("Pinned"), + _t("ScopeBox"), + ] + ) class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_GridsDataLister" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_GridsDataLister") - + name = _t("CheckName_GridsDataLister") author = "Jean-Marc Couffin" - def startTest(self, doc, output): checkModel(doc, output) + + +ModelChecker.__doc__ = _t("CheckDescription_GridsDataLister") diff --git a/extensions/pyRevitTools.extension/checks/levels_check.py b/extensions/pyRevitTools.extension/checks/levels_check.py index ac55bdc37b..9aebe11585 100644 --- a/extensions/pyRevitTools.extension/checks/levels_check.py +++ b/extensions/pyRevitTools.extension/checks/levels_check.py @@ -1,14 +1,16 @@ # -*- coding: UTF-8 -*- -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) -from pyrevit import script, revit, DB, DOCS +from pyrevit import script, DB, DOCS +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta + +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + doc = DOCS.doc @@ -32,7 +34,7 @@ def levels_names(document=doc): return levels_names -def levels_elevation(document=doc): +def levels_types(document=doc): levels = levels_collector(document) levels_types_names = [] for level in levels: @@ -71,42 +73,35 @@ def levels_scoped(document=doc): def checkModel(doc, output): - from check_translations import get_check_translation output = script.get_output() output.close_others() - output.print_md("# {}".format(get_check_translation("LevelsDataLister"))) + output.print_md("# {}".format(_t("LevelsDataLister"))) count = levels_count() - output.print_md("## {0}: {1}".format(get_check_translation("NumberOfLevels"), count)) - names = levels_names() # [1,2,3,4] - types = levels_elevation() # [bubble, bubble, bubble, bubble] - pinned = levels_pinned() # [True, False, True, False] - scoper = levels_scoped() # [Name of scope, Name of scope, Name of scope, Name of scope] - elevation = levels_elevation() # [1.0, 2.0, 3.0, 4.0] + output.print_md("## {0}: {1}".format(_t("NumberOfLevels"), count)) + names = levels_names() + types = levels_types() + pinned = levels_pinned() + scoper = levels_scoped() + elevation = levels_elevation() output.print_table( table_data=zip(names, types, pinned, scoper, elevation), - title=get_check_translation("Levels"), + title=_t("Levels"), columns=[ - get_check_translation("Name"), - get_check_translation("Type"), - get_check_translation("Pinned"), - get_check_translation("ScopeBox"), - get_check_translation("Elevation") + _t("Name"), + _t("Type"), + _t("Pinned"), + _t("ScopeBox"), + _t("Elevation"), ] ) - class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_LevelsDataLister" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_LevelsDataLister") - + name = _t("CheckName_LevelsDataLister") author = "Jean-Marc Couffin" - def startTest(self, doc, output): checkModel(doc, output) + + +ModelChecker.__doc__ = _t("CheckDescription_LevelsDataLister") diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.chinese_s.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.chinese_s.xaml new file mode 100644 index 0000000000..3bf25b5d0b --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.chinese_s.xaml @@ -0,0 +1,291 @@ + + + 网格数据列表 + 标高数据列表 + 参照平面列表 + 未放置在图纸上的明细表列表 + 工作集元素检查 + 10英里雷达 + 模型检查器 + RVT链接警告 + 全面审核(包括链接) + CAD审核 + 命名约定 + + + 列出网格,如果它们被固定、在范围框内或已命名 + +此质量控制工具返回以下数据: + 网格数量、名称、类型、固定状态 + 列出标高,如果它们被固定、在范围框内或已命名及其高程。 + +此质量控制工具返回以下数据: + 标高数量、名称、类型、固定状态、范围框和高程。 + 列出模型中的所有参照平面 +此质量控制工具返回以下数据: + 参照平面数量、链接到、名称 + 列出所有未放置在图纸上的明细表 +此质量控制工具返回以下数据: + 类型、Id + 链接和明细表名称,能够单击链接打开明细表 + Revit模型质量检查 +质量控制工具返回以下数据: + - 按工作集列出的所有元素表,包括类别名称、元素名称和元素ID + - 每个工作集的元素数量环形图 + 检查模型中所有元素的范围。 +此模型检查器快速验证Revit模型的范围。 +将模型范围放置在距离项目内部原点超过10英里(16公里)的位置 +可能导致精度、容差、性能和视口显示问题。此检查确保 +模型保持在内部原点的10英里半径内。 + +测试用例检查以下内容,报告与项目内部原点相关的范围。 +脚本根据大多数模型范围问题与以下内容相关的假设进行优先级排序: + + - 项目基点和内部原点之间的距离 + - 测量点和内部原点之间的距离 + - 3D视图的边界框 + - 设计选项对象的边界框 + - CAD和RVT链接的边界框 + - 模型中所有元素的边界框 + Revit模型质量检查 +质量控制工具返回以下数据: + Revit文件: 名称和项目信息 + Revit链接: 列表、数量和固定状态 + 视图: 数量、复制的视图数量、不在图纸上的视图数量 + 明细表: 数量和不在图纸上的数量 + 图纸: 数量 + 警告: 总数、基于预定义关键警告列表的关键警告列表 + 材料数量 + 线型图案数量 + DWG: 导入数量、链接数量、3D中的dwg数量 + 可载入族: 数量、就地族数量、非参数族数量 + 文字注释: 因子更改的数量、全大写文字注释数量 + 系统族: 坡道数量、建筑柱数量、启用分析模型选项的元素 + 组: 详图组类型数量、详图组实例数量、模型组类型数量、模型组实例数量 + 参照平面: 未命名数量、参照平面数量 + 元素数量 + 阶段: 当前文档和链接文件的阶段列表 + Revit链接质量控制 - 警告 + 链接文件中的警告: + - 描述, + - ID, + - 数量 + + !! 仅限 Revit 2018 + !! + !!使用前请加载链接!! + 所有模型的预检审核,包括链接模型。 +!!必须加载链接。!! +此质量控制工具返回以下数据: +- 项目名称、编号、客户、阶段、工作集 +- 元素数量 +- 可清除元素数量 +- 所有警告数量 +- 关键警告数量 +- rvt链接数量 +- 激活的分析模型元素数量 +- 房间数量 +- 未放置房间数量 +- 未边界房间数量 +- 图纸数量 +- 每个视图类型的视图数量 +- 不在图纸上的视图 +- 未放置在图纸上的明细表数量 +- 复制的视图数量 +- 视图模板数量 +- 未使用的视图模板数量 +- 过滤器数量 +- 未使用的视图过滤器数量 +- 材料数量 +- 线型图案数量 +- dwg数量 +- 链接的dwg数量 +- 导入的dwg数量 +- 就地族数量 +- 非参数族数量 +- 族数量 +- 导入子类别数量 +- 常规模型类型数量 +- 详图构件数量 +- 文字注释类型数量 +- 宽度因子 != 1的文字注释类型数量 +- 文字注释数量 +- 应用全大写的文字注释 +- 实心背景的文字注释 +- 详图组数量 +- 详图组类型数量 +- 模型组数量 +- 模型组类型数量 +- 参照平面数量 +- 未命名参照平面数量 +- 详图线数量 +- 尺寸标注类型数量 +- 尺寸标注数量 +- 尺寸标注替代数量 +- 修订云线数量 + 导入和链接CAD的预检审核 +此质量控制工具返回以下数据: + CAD链接实例和类型信息 + + 质量控制包括以下信息和警报: + 链接状态(已加载、未找到、已卸载...) + CAD是否在模型工作平面上或仅在单个视图上 + CAD是链接还是导入 + CAD是否已重复 + CAD的共享位置名称 + + 功能: 输出允许导航到找到的CAD + 验证族类型名称是否符合指定列表, +如Revit中的墙类型列表所定义。 + + + 网格数据列表 + 标高数据列表 + 网格数量 + 标高数量 + 网格 + 标高 + 名称 + 类型 + 已固定 + 范围框 + 高程 + 参照平面 + 参照平面: + 未放置在图纸上的明细表 + 事务耗时 + 名称: + ID: + 类型: + 工作集名称 + 元素类别 + 元素名称 + 元素ID + 按工作集的元素数量 + + + 检查模型位置和坐标 + 基点超过 + 测量点超过 + 测量点小于 + 项目基点坐标到内部原点 + 测量点坐标到内部原点 + 项目基点到测量点增量X + 项目基点到测量点增量Y + 基点和测量点之间的平面距离 + 基点和测量点之间的总距离 + 项目高程(基点垂直距离) + 项目坐标和距离 + + 检查3D视图边界框的范围 + 3D视图边界框延伸超过 + 3D视图边界框位于小于 + 检查设计选项对象的范围 + 设计选项对象位于超过 + 显示前10个对象 + 需要手动调查 + 所有对象位于小于 + 检查CAD和RVT链接的范围 + 所有CAD和RVT链接位于小于 + 仍在检测到 distant 对象! + 需要进一步分析。 + 检查所有内容,这需要一些时间。 + 请耐心等待。 + 以下元素位于超过 + 所有测试完成,请查看上面的结果。 + 距离内部原点10英里(16公里)。 + 任何设计选项中的对象都不超过 + 属于 + XYZ坐标 + 距离 + 角度(°) + + + 模型检查器 + RVT文件 + RVT链接 + 无链接 + 实例文件名 + 实例名称 + 固定状态 + 视图 + 视图模板 + 明细表 + 图纸 + 警告 + 无警告,做得好! + 材质 + 线型图案 + DWG + 可载入族 + 文字注释 + 系统族 + + 参照平面 + 阶段 + 元素数量 + 未保存的文件 + + + RVTV链接 - 警告检查器 + 警告数量 + 警告详情 + 文件名 + 警告数量 + 警告 + ID + 加载所有链接,此工具适用于具有已加载链接的模型 + 至少加载一个链接,此工具适用于具有已加载链接的模型 + + + 主文件信息 + 链接文件信息 + 项目名称 + 项目编号 + 客户名称 + 项目阶段 + 工作集 + 链接文件名 + 加载状态 + 链接 + 未固定的链接 + + + 审核CAD实例: + 在此项目中 + 仅在活动视图中 + 取消 + 确定 + 当前项目中的CAD实例审核 + 未找到CAD实例 + 选择 + 导入和链接CAD的预检审核 + 编号 + 选择/缩放 + DWG实例 + 加载状态 + 工作平面或单一视图 + 重复 + 创建者用户 + 位置站点名称 + 个CAD实例。 + 检查运行于 + 活动视图 + 整个模型 + 警告说明 + 加载状态...........:如果CAD是导入的而不是链接的,则发出警报 + 工作平面或单一视图:如果CAD放置在单一视图上,选项为"仅活动视图",而不是模型工作平面上,则发出警报 + 重复...............:如果CAD被放置多次(无论是链接还是导入),以防意外,则发出警报 + 检查持续时间 + 显示视图 + + + 模型命名约定报告 + 命名约定墙检查 + 墙类型 + 数量 + 状态 + 错误名称 + 发现命名错误的墙类型: + 未选择JSON文件。 + diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.de_de.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.de_de.xaml new file mode 100644 index 0000000000..d0e8f6f6ce --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.de_de.xaml @@ -0,0 +1,294 @@ + + + Raster-Datenliste + Ebenen-Datenliste + Referenzebenen-Liste + Nicht platzierte Tabellen + Elemente pro Arbeitsgruppen-Prüfung + 10 Meilen Radar + Modell-Prüfer + RVT-Link-Warnungen + Vollständige Prüfung (einschließlich Links) + CAD-Prüfung + Namenskonvention + + + Listet Raster auf, ob sie fixiert, in einem Sichtbereich oder benannt sind + +Dieses QC-Tool liefert Ihnen die folgenden Daten: + Rasteranzahl, Name, Typ, Fixierstatus + Listet Ebenen auf, ob sie fixiert, in einem Sichtbereich oder benannt sind und ihre Höhe. + +Dieses QC-Tool liefert Ihnen die folgenden Daten: + Ebenenanzahl, Name, Typ, Fixierstatus, Sichtbereich und Höhe. + Listet alle Referenzebenen im Modell auf +Dieses QC-Tool liefert Ihnen die folgenden Daten: + Anzahl der Referenzebenen, Link zu, Name + Listet alle Tabellen auf, die nicht auf einem Blatt platziert sind +Dieses QC-Tool liefert Ihnen die folgenden Daten: + Typ, Id + Link und Tabellenname mit der Möglichkeit, auf den Link zu klicken, um die Tabelle zu öffnen + Revit-Modellqualitätsprüfung +Das QC-Tool liefert Ihnen die folgenden Daten: + - Tabelle aller Elemente nach Arbeitsgruppe einschließlich Kategoriename, Elementname und Element-ID + - Donut-Diagramm der Elementanzahl pro Arbeitsgruppe + Prüft die Ausdehnung aller Elemente im Modell. +Dieser Modellprüfer überprüft schnell die Ausdehnung des Revit-Modells. +Das Platzieren von Modellausdehnungen mehr als 10 Meilen (16 km) vom internen +Ursprung des Projekts entfernt kann zu Problemen mit Genauigkeit, Toleranz, +Leistung und Ansichtsfenstern führen. Diese Prüfung stellt sicher, dass das +Modell innerhalb eines 10-Meilen-Radius vom internen Ursprung bleibt. + +Der Testfall untersucht Folgendes und meldet Ausdehnungen +bezüglich des internen Ursprungs des Projekts. Das Skript priorisiert +basierend auf der Annahme, dass die meisten Modellausdehnungsprobleme +mit Folgendem zusammenhängen: + + - Der Abstand zwischen Projektbasispunkt und internem Ursprung + - Der Abstand zwischen Vermessungspunkt und internem Ursprung + - Die Begrenzungsbox der 3D-Ansicht + - Die Begrenzungsbox der Entwurfsoptionsobjekte + - Die Begrenzungsbox der CAD- und RVT-Links + - Die Begrenzungsbox aller Elemente im Modell + Revit-Modellqualitätsprüfung +Das QC-Tool liefert Ihnen die folgenden Daten: + Revit-Datei: Name und Projektinformationen + Revit-Links: Liste, Anzahl und Fixierstatus + Ansichten: Anzahl, Anzahl kopierter Ansichten, Anzahl von Ansichten nicht auf Blatt + Tabellen: Anzahl und Anzahl nicht auf Blatt + Blätter: Anzahl + Warnungen: Gesamtzahl, Liste kritischer Warnungen basierend auf vordefinierter Liste kritischer Warnungen + Materialanzahl + Linienmusteranzahl + DWGs: Importierte Anzahl, verlinkte Anzahl, DWGs in 3D Anzahl + Ladbare Familien: Anzahl, Anzahl Familien vor Ort, Anzahl nicht parametrischer Familien + Textnotizen: Anzahl mit geändertem Faktor, Anzahl Textnotizen in Großbuchstaben + Systemfamilien: Rampenanzahl, Architekturspaltenanzahl, Elemente mit aktivierter analytischer Modelloption + Gruppen: Anzahl Detailgruppentypen, Anzahl Detailgruppeninstanzen, Anzahl Modellgruppentypen, Anzahl Modellgruppeninstanzen + Referenzebenen: nicht benannte Anzahl, Anzahl Referenzebenen + Elementanzahl + Phasen: Liste der Phasen für aktuelles Dokument und verlinkte Dateien + Revit-Links Qualitätskontrolle - Warnungen + Warnungen in verlinkten Dateien: + - Beschreibung, + - IDs, + - Anzahl + + !! Nur Revit 2018 + !! + !!Laden Sie Links vor der Verwendung!! + Preflight-Prüfung aller Modelle, einschließlich verlinkter Modelle. +!!Links müssen geladen sein.!! +Dieses QC-Tool liefert die folgenden Daten: +- Projektname, Nummer, Client, Phasen, Arbeitsgruppen +- Elementanzahl +- Anzahl löschbarer Elemente +- Gesamtzahl der Warnungen +- Anzahl kritischer Warnungen +- Anzahl RVT-Links +- Anzahl aktivierter analytischer Modellelemente +- Anzahl Räume +- Anzahl nicht platzierter Räume +- Anzahl nicht begrenzter Räume +- Anzahl Blätter +- Anzahl Ansichten pro Ansichtstyp +- Ansichten nicht auf Blättern +- Anzahl Tabellen nicht auf Blättern +- Anzahl kopierter Ansichten +- Anzahl Ansichtsvorlagen +- Anzahl ungenutzter Ansichtsvorlagen +- Anzahl Filter +- Anzahl ungenutzter Ansichtsfilter +- Anzahl Materialien +- Anzahl Linienmuster +- Anzahl DWGs +- Anzahl verlinkter DWGs +- Anzahl importierter DWGs +- Anzahl Familien vor Ort +- Anzahl nicht parametrischer Familien +- Anzahl Familien +- Anzahl Importsubkategorien +- Anzahl generischer Modelltypen +- Anzahl Detailkomponenten +- Anzahl Textnotiztypen +- Anzahl Textnotiztypen mit Breitenfaktor != 1 +- Anzahl Textnotizen +- Textnotizen mit Großbuchstaben angewendet +- Textnotizen mit festem Hintergrund +- Anzahl Detailgruppen +- Anzahl Detailgruppentypen +- Anzahl Modellgruppen +- Anzahl Modellgruppentypen +- Anzahl Referenzebenen +- Anzahl unbenannter Referenzebenen +- Anzahl Detaillinien +- Anzahl Bemaßungstypen +- Anzahl Bemaßungen +- Anzahl Bemaßungsüberschreibungen +- Anzahl Revisionswolken + Preflight-Prüfung importierter und verlinkter CAD +Dieses QC-Tool liefert die folgenden Daten: + CAD-Link-Instanz- und Typinformationen + + Die Qualitätskontrolle umfasst Informationen und Warnungen für: + Den Status der Links (Geladen, Nicht gefunden, Entladen...) + Ob ein CAD auf einer Modellarbeitsebene oder nur einer einzelnen Ansicht liegt + Ob ein CAD verlinkt oder importiert ist + Ob CADs dupliziert wurden + Den Namen des gemeinsamen Standorts des CAD + + Funktion: Die Ausgabe ermöglicht die Navigation zu den gefundenen CADs + Überprüft, ob Familientypnamen einer angegebenen Liste entsprechen, +wie durch eine Wandtypliste in Revit definiert. + + + Raster-Datenliste + Ebenen-Datenliste + Anzahl der Raster + Anzahl der Ebenen + Raster + Ebenen + Name + Typ + Fixiert + Sichtbereichsbox + Höhe + Referenzebenen + Referenzebenen: + TABELLEN NICHT AUF BLÄTTERN + Transaktion dauerte + NAME: + ID: + TYP: + Arbeitsgruppen-Name + Element-Kategorie + Element-Name + Element-Id + Elementanzahl nach Arbeitsgruppe + + + Prüfung der Modellplatzierung und Koordinaten + Basispunkt ist mehr als + Vermessungspunkt ist mehr als + Vermessungspunkt ist weniger als + Projekt-Basispunkt-Koordinaten zum internen Ursprung + Vermessungspunkt-Koordinaten zum internen Ursprung + Projekt-Basispunkt zu Vermessung Delta X + Projekt-Basispunkt zu Vermessung Delta Y + Planare Entfernung zwischen Basispunkt und Vermessungspunkt + Gesamtentfernung zwischen Basispunkt und Vermessungspunkt + Projekthöhe (vertikale Entfernung des Basispunkts) + Projekt-Koordinaten und Entfernungen + Punkte + Prüfung der Ausdehnung der 3D-Ansicht-Begrenzungsbox + 3D-Ansicht-Begrenzungsbox erstreckt sich über + 3D-Ansicht-Begrenzungsbox befindet sich weniger als + Prüfung der Ausdehnung der Entwurfsoptionen-Objekte + Entwurfsoptionen-Objekte befinden sich mehr als + Zeige die ersten 10 Objekte + Manuelle Untersuchung erforderlich + Alle Objekte befinden sich weniger als + Prüfung der Ausdehnung der CAD- und RVT-Links + Alle CAD- und RVT-Links befinden sich weniger als + Entfernte Objekte werden noch erkannt! + Weitere Analyse erforderlich. + Alles prüfen, das wird eine Weile dauern. + Bitte haben Sie Geduld. + Elemente unten befinden sich mehr als + Alle Tests abgeschlossen, überprüfen Sie die Ergebnisse oben. + 10 Meilen (16 km) vom internen Ursprung entfernt. + Kein Objekt in einer Entwurfsoption befindet sich mehr als + Ist Teil von + XYZ-Koordinaten + Entfernung + WINKEL (°) + + + MODELL-PRÜFER + RVT-Datei + RVT-Links + Keine Links + Instanz-Dateiname + Instanzname + Fixiert-Status + Ansichten + Ansichtsvorlagen + Tabellen + Blätter + Warnungen + Keine Warnungen, gute Arbeit! + Materialien + Linienmuster + DWGs + Ladbare Familien + Textnotizen + Systemfamilien + Gruppen + Referenzebenen + Phasen + Elementanzahl + Nicht gespeicherte Datei + + + RVTV-Links - Warnungsprüfer + Warnungsanzahl + Warnungsdetails + Dateiname + Warnungsanzahl + Warnungen + Ids + Laden Sie alle Links, das Tool ist für Modelle mit geladenen Links gedacht + Laden Sie mindestens einen Link, das Tool ist für Modelle mit geladenen Links gedacht + + + Hauptdatei-Informationen + Verknüpfte Datei-Informationen + Projektname + Projektnummer + Kundenname + Projektphasen + Arbeitsgruppen + Verknüpfter Dateiname + Geladener Status + Links + Nicht fixierte Links + + + CAD-Instanzen prüfen: + in diesem Projekt + nur in der aktiven Ansicht + ABBRECHEN + OK + Prüfung der CAD-Instanzen im aktuellen Projekt + Keine CAD-Instanzen gefunden + Auswählen + Preflight-Prüfung importierter und verknüpfter CAD + Nr. + Auswählen/Zoomen + DWG-Instanz + Geladener Status + Arbeitsebene oder Einzelansicht + Duplikat + Ersteller-Benutzer + Standort-Site-Name + CAD-Instanzen gefunden. + Die Prüfung wurde ausgeführt auf + die aktive Ansicht + das gesamte Modell + Erklärungen für Warnungen + Geladener Status...........: Warnung, wenn ein CAD importiert statt verknüpft ist + Arbeitsebene oder Einzelansicht: Warnung, wenn ein CAD auf einer Einzelansicht mit der Option 'nur aktive Ansicht' platziert ist, anstatt auf einer Modell-Arbeitsebene + Duplikat...............: Warnung, wenn ein CAD mehr als einmal platziert ist (ob verknüpft oder importiert), falls es unbeabsichtigt ist + Prüfdauer + Ansicht anzeigen + + + Modell-Namenskonventions-Bericht + Namenskonventions-Prüfung für Wände + Wandtyp + Anzahl + Status + Falscher Name + Falsch benannte Wandtypen gefunden: + Keine JSON-Datei ausgewählt. + diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.en_us.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.en_us.xaml new file mode 100644 index 0000000000..b12833ea46 --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.en_us.xaml @@ -0,0 +1,294 @@ + + + Grids Data Lister + Levels Data Lister + Reference Plan Lister + Schedules not on sheet lister + Elements per Worksets check + 10 Mile Radar + Model Checker + RVTLinks warnings + Audit All (Including Links) + CAD Audit + Naming Convention + + + List grids, if they are pinned, scoped boxed, or named + +This QC tools returns you with the following data: + Grids count, name, type, pinned status + List levels, if they are pinned, scoped boxed, or named and its elevation. + +This QC tools returns you with the following data: + Levels count, name, type, pinned status, scope box, and elevation. + List all reference planes in the model +This QC tools returns you with the following data: + Reference planes count, link to, name + List all schedules not placed on a sheet +This QC tools returns you with the following data: + Type, Id + link and Schedule name with the ability to click on the link to open the schedule + Revit model quality check +The QC tools returns you with the following data: + - Table of all elements by workset including category name, element name and element id + - Element count per workset donut chart + Checks the extents of all elements in the model. +This Model Checker swiftly verifies the extents of the Revit model. +Placing model extents more than 10 Mi (16KM) from the project's +internal origin can lead to issues with accuracy, tolerance, +performance, and viewport display. This check ensures that the +model remains within a 10-mile radius of the internal origin. + +The test case examines the following, reporting extents +concerning the project's internal origin. The script prioritizes +based on the assumption that most model extent issues are +related to the following: + + - The distance between project basepoint and internal origin + - The distance between survey point and internal origin + - The bounding box of the 3D view + - The bounding box of the design option objects + - The bounding box of the CAD and RVT links + - The bounding box of all elements in the model + Revit model quality check +The QC tools returns you with the following data: + Revit file: Name and Project Information + Revit links: list, count and pinned status + Views: number, number of copied views, number of views not on sheet + Schedules: number and not on sheet number + Sheets: number + Warnings: Total number, Critical warnings list based on predefined list of critical warnings + Materials count + Line patterns count + DWGs: Imported count, linked count, dwgs in 3D count + Loadable families: count, in place family count, non parametric families count + Text notes: with factor changed count, all caps text notes count + System families: ramps count, architectural columns count, elements with analytical model option enabled + Groups: detail group types count, detail group instances count, model group types count, model groups instances count + Reference planes: not named count, ref planes count + Elements count + Phases: list of phases for current document and linked files + Revit links Quality control - Warnings + Warnings in linked files: + - Description, + - Ids, + - Count + + !! Revit 2018 + only !! + !!Load links before using!! + Preflight audit of all models, including linked models. +!!Links must be loaded.!! +This QC tools returns the following data: +- project name, number, client, phases, worksets +- element count +- purgeable elements count +- all warnings count +- critical warnings count +- rvtlinks count +- activated analytical model elements count +- rooms count +- unplaced rooms count +- unbounded rooms count +- sheets count +- views count per ViewType +- views not on sheets +- schedules not sheeted count +- copied views count +- view templates count +- unused view templates count +- filters count +- unused view filters count +- materials count +- line patterns count +- dwgs count +- linked dwg count +- imported dwg count +- inplace family count +- not parametric families count +- family count +- imports subcats count +- generic models types count +- detail components count +- text notes types count +- text notes types with width factor != 1 +- text notes count +- text notes with allCaps applied +- text notes with solid background +- detail groups count +- detail groups types count +- model group count +- model group type count +- reference planes count +- unnamed reference planes count +- detail lines count +- dimension types count +- dimension count +- dimension overrides count +- revision clouds count + Preflight audit of imported and linked CAD +This QC tools returns the following data: + CAD link instance and type information + + Quality control includes information and alerts for: + The status of links (Loaded, Not found, Unloaded...) + Whether a CAD is on a model workplane or just a single view + Whether a CAD is linked or imported + Whether CADs have been duplicated + The CAD's shared location name + + Feature: The output allows navigating to the found CADs + Verifies whether family type names conform to a specified list, +as defined by a wall type list within Revit. + + + Grids Data Lister + Levels Data Lister + Number of grids + Number of levels + Grids + Levels + Name + Type + Pinned + Scope Box + Elevation + Reference planes + Reference planes: + SCHEDULES NOT ON ANY SHEETS + Transaction took + NAME: + ID: + TYPE: + Workset Name + Element Category + Element Name + Element Id + Element Count by Workset + + + Checking model placement and coordinates + Base Point is more than + Survey Point is more than + Survey Point is less than + Project Base Point Coordinates to Internal Origin + Survey Point Coordinates to Internal Origin + Project Base Point to Survey Delta X + Project Base Point to Survey Delta Y + Planar Distance between Base Point and Survey Point + Total Distance between Base Point and Survey Point + Project Elevation (Base Point Vertical Distance) + Project Coordinates and Distances + Points + Checking the extents of the 3D view bounding box + 3D View Bounding Box extends more than + 3D View Bounding Box is located less than + Checking the extents of the design option objects + Design Option Objects are located more than + Showing the first 10 objects + Manual investigation is required + All Objects are located less than + Checking the extents of the CAD and RVT links + All CAD and RVT Links are located less than + Distant objects are still being detected! + Further Analysis Required. + Checking everything, It is going to take a while. + Please be patient. + Elements below are located more than + All tests completed, Review the results above. + 10 Mi (16KM) away from the Internal Origin. + No object in any design option is located more than + Is part of + XYZ Coordinates + Distance + ANGLE (°) + + + MODEL CHECKER + RVT File + RVT Links + No links + Instance File Name + Instance Name + Pinned status + Views + View Templates + Schedules + Sheets + Warnings + No warnings, good job! + Materials + Line patterns + DWGs + Loadable Families + Text Notes + System Families + Groups + Reference Planes + Phases + Elements count + Not saved file + + + RVTV Links - Warning checker + Warnings count + Warnings details + File Name + Warnings count + Warnings + Ids + Load all the links, the tool is meant for models with loaded links + Load at least one link, the tool is meant for models with loaded links + + + Main File Infos + Linked Files Infos + Project Name + Project Number + Client Name + Project Phases + Worksets + Linked File Name + Loaded Status + Links + Links not pinned + + + Audit CAD instances: + in this project + in only the active view + CANCEL + OK + Audit of CAD instances in the current project + No CAD instances found + Select + Preflight audit of imported and linked CAD + No + Select/Zoom + DWG instance + Loaded status + Workplane or single view + Duplicate + Creator user + Location site name + CAD instances found. + The check was run on + the active view + the whole model + Explanations for warnings + Loaded status...........: alert if a CAD is imported, rather than linked + Workplane or single view: alert if a CAD is placed on a single view with the option 'active view only' rather than on a model workplane + Duplicate...............: alert if a CAD is placed more than once (whether linked or imported) in case it is unintentinal + Check duration + Show the view + + + Model Naming Convention Report + Naming Convention Wall Check + Wall Type + Count + Status + Wrong Name + Incorrectly Named Wall Types Found: + No JSON file selected. + diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.es_es.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.es_es.xaml new file mode 100644 index 0000000000..856c30ea7b --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.es_es.xaml @@ -0,0 +1,294 @@ + + + Lista de datos de cuadrículas + Lista de datos de niveles + Lista de planos de referencia + Lista de tablas no colocadas + Verificación de elementos por grupos de trabajo + Radar de 10 millas + Verificador de modelo + Advertencias de enlaces RVT + Auditoría completa (incluyendo enlaces) + Auditoría CAD + Convención de nomenclatura + + + Lista las cuadrículas, si están fijadas, en una caja de alcance o nombradas + +Esta herramienta de control de calidad le devuelve los siguientes datos: + Cantidad de cuadrículas, nombre, tipo, estado de fijación + Lista los niveles, si están fijados, en una caja de alcance o nombrados y su elevación. + +Esta herramienta de control de calidad le devuelve los siguientes datos: + Cantidad de niveles, nombre, tipo, estado de fijación, caja de alcance y elevación. + Lista todos los planos de referencia en el modelo +Esta herramienta de control de calidad le devuelve los siguientes datos: + Cantidad de planos de referencia, enlace a, nombre + Lista todas las tablas no colocadas en una hoja +Esta herramienta de control de calidad le devuelve los siguientes datos: + Tipo, Id + enlace y nombre de la tabla con la capacidad de hacer clic en el enlace para abrir la tabla + Verificación de calidad del modelo Revit +La herramienta de control de calidad le devuelve los siguientes datos: + - Tabla de todos los elementos por grupo de trabajo incluyendo nombre de categoría, nombre de elemento e id de elemento + - Gráfico de dona de cantidad de elementos por grupo de trabajo + Verifica la extensión de todos los elementos en el modelo. +Este verificador de modelo verifica rápidamente la extensión del modelo Revit. +Colocar extensiones del modelo a más de 10 millas (16 km) del origen +interno del proyecto puede llevar a problemas con precisión, tolerancia, +rendimiento y visualización de ventanas. Esta verificación asegura que el +modelo permanezca dentro de un radio de 10 millas del origen interno. + +El caso de prueba examina lo siguiente, reportando extensiones +relativas al origen interno del proyecto. El script prioriza +basándose en la suposición de que la mayoría de los problemas de extensión del modelo están +relacionados con lo siguiente: + + - La distancia entre el punto base del proyecto y el origen interno + - La distancia entre el punto de levantamiento y el origen interno + - La caja delimitadora de la vista 3D + - La caja delimitadora de los objetos de opción de diseño + - La caja delimitadora de los enlaces CAD y RVT + - La caja delimitadora de todos los elementos en el modelo + Verificación de calidad del modelo Revit +La herramienta de control de calidad le devuelve los siguientes datos: + Archivo Revit: Nombre e información del proyecto + Enlaces Revit: lista, cantidad y estado de fijación + Vistas: número, número de vistas copiadas, número de vistas no en hoja + Tablas: número y número no en hoja + Hojas: número + Advertencias: Número total, lista de advertencias críticas basada en lista predefinida de advertencias críticas + Cantidad de materiales + Cantidad de patrones de línea + DWGs: Cantidad importada, cantidad vinculada, cantidad de dwgs en 3D + Familias cargables: cantidad, cantidad de familias in situ, cantidad de familias no paramétricas + Notas de texto: cantidad con factor cambiado, cantidad de notas de texto en mayúsculas + Familias del sistema: cantidad de rampas, cantidad de columnas arquitectónicas, elementos con opción de modelo analítico habilitada + Grupos: cantidad de tipos de grupos de detalles, cantidad de instancias de grupos de detalles, cantidad de tipos de grupos de modelos, cantidad de instancias de grupos de modelos + Planos de referencia: cantidad no nombrada, cantidad de planos de referencia + Cantidad de elementos + Fases: lista de fases para documento actual y archivos vinculados + Control de calidad de enlaces Revit - Advertencias + Advertencias en archivos vinculados: + - Descripción, + - IDs, + - Cantidad + + !! Solo Revit 2018 + !! + !!¡Cargue los enlaces antes de usar!! + Auditoría previa de todos los modelos, incluyendo modelos vinculados. +!!¡Los enlaces deben estar cargados.!! +Esta herramienta de control de calidad devuelve los siguientes datos: +- nombre del proyecto, número, cliente, fases, grupos de trabajo +- cantidad de elementos +- cantidad de elementos purgables +- cantidad total de advertencias +- cantidad de advertencias críticas +- cantidad de enlaces rvt +- cantidad de elementos de modelo analítico activados +- cantidad de habitaciones +- cantidad de habitaciones no colocadas +- cantidad de habitaciones no delimitadas +- cantidad de hojas +- cantidad de vistas por TipoVista +- vistas no en hojas +- cantidad de tablas no en hojas +- cantidad de vistas copiadas +- cantidad de plantillas de vista +- cantidad de plantillas de vista no utilizadas +- cantidad de filtros +- cantidad de filtros de vista no utilizados +- cantidad de materiales +- cantidad de patrones de línea +- cantidad de dwg +- cantidad de dwg vinculados +- cantidad de dwg importados +- cantidad de familias in situ +- cantidad de familias no paramétricas +- cantidad de familias +- cantidad de subcategorías de importaciones +- cantidad de tipos de modelos genéricos +- cantidad de componentes de detalles +- cantidad de tipos de notas de texto +- cantidad de tipos de notas de texto con factor de ancho != 1 +- cantidad de notas de texto +- notas de texto con todas mayúsculas aplicadas +- notas de texto con fondo sólido +- cantidad de grupos de detalles +- cantidad de tipos de grupos de detalles +- cantidad de grupos de modelos +- cantidad de tipos de grupos de modelos +- cantidad de planos de referencia +- cantidad de planos de referencia sin nombre +- cantidad de líneas de detalles +- cantidad de tipos de cotas +- cantidad de cotas +- cantidad de sobrescrituras de cotas +- cantidad de nubes de revisión + Auditoría previa de CAD importados y vinculados +Esta herramienta de control de calidad devuelve los siguientes datos: + Información de instancia y tipo de enlace CAD + + El control de calidad incluye información y alertas para: + El estado de los enlaces (Cargado, No encontrado, Descargado...) + Si un CAD está en un plano de trabajo del modelo o solo en una vista única + Si un CAD está vinculado o importado + Si los CAD han sido duplicados + El nombre de la ubicación compartida del CAD + + Característica: La salida permite navegar a los CAD encontrados + Verifica si los nombres de tipos de familias se ajustan a una lista especificada, +según lo definido por una lista de tipos de muros en Revit. + + + Lista de datos de cuadrículas + Lista de datos de niveles + Número de cuadrículas + Número de niveles + Cuadrículas + Niveles + Nombre + Tipo + Fijado + Caja de alcance + Elevación + Planos de referencia + Planos de referencia: + TABLAS NO COLOCADAS EN HOJAS + La transacción tomó + NOMBRE: + ID: + TIPO: + Nombre del grupo de trabajo + Categoría de elemento + Nombre de elemento + Id de elemento + Cantidad de elementos por grupo de trabajo + + + Verificando la ubicación y coordenadas del modelo + El punto base está a más de + El punto de levantamiento está a más de + El punto de levantamiento está a menos de + Coordenadas del punto base del proyecto al origen interno + Coordenadas del punto de levantamiento al origen interno + Delta X del punto base del proyecto al punto de levantamiento + Delta Y del punto base del proyecto al punto de levantamiento + Distancia plana entre el punto base y el punto de levantamiento + Distancia total entre el punto base y el punto de levantamiento + Elevación del proyecto (distancia vertical del punto base) + Coordenadas y distancias del proyecto + Puntos + Verificando los límites de la caja delimitadora de la vista 3D + La caja delimitadora de la vista 3D se extiende más de + La caja delimitadora de la vista 3D está ubicada a menos de + Verificando los límites de los objetos de opción de diseño + Los objetos de opción de diseño están ubicados a más de + Mostrando los primeros 10 objetos + Se requiere investigación manual + Todos los objetos están ubicados a menos de + Verificando los límites de los enlaces CAD y RVT + Todos los enlaces CAD y RVT están ubicados a menos de + ¡Todavía se detectan objetos distantes! + Se requiere análisis adicional. + Verificando todo, va a tardar un rato. + Por favor tenga paciencia. + Los elementos a continuación están ubicados a más de + Todas las pruebas completadas, revise los resultados arriba. + 10 millas (16 km) del origen interno. + Ningún objeto en ninguna opción de diseño está ubicado a más de + Es parte de + Coordenadas XYZ + Distancia + ÁNGULO (°) + + + VERIFICADOR DE MODELO + Archivo RVT + Enlaces RVT + Sin enlaces + Nombre de archivo de instancia + Nombre de instancia + Estado fijado + Vistas + Plantillas de vista + Tablas + Hojas + Advertencias + ¡Sin advertencias, buen trabajo! + Materiales + Patrones de línea + DWGs + Familias cargables + Notas de texto + Familias del sistema + Grupos + Planos de referencia + Fases + Cantidad de elementos + Archivo no guardado + + + Enlaces RVTV - Verificador de advertencias + Cantidad de advertencias + Detalles de advertencias + Nombre de archivo + Cantidad de advertencias + Advertencias + Ids + Cargue todos los enlaces, la herramienta está destinada para modelos con enlaces cargados + Cargue al menos un enlace, la herramienta está destinada para modelos con enlaces cargados + + + Información del archivo principal + Información de archivos vinculados + Nombre del proyecto + Número de proyecto + Nombre del cliente + Fases del proyecto + Grupos de trabajo + Nombre de archivo vinculado + Estado cargado + Enlaces + Enlaces no fijados + + + Verificar instancias CAD: + en este proyecto + solo en la vista activa + CANCELAR + OK + Auditoría de instancias CAD en el proyecto actual + No se encontraron instancias CAD + Seleccionar + Auditoría previa de CAD importados y vinculados + + Seleccionar/Zoom + Instancia DWG + Estado cargado + Plano de trabajo o vista única + Duplicado + Usuario creador + Nombre del sitio de ubicación + instancias CAD encontradas. + La verificación se ejecutó en + la vista activa + todo el modelo + Explicaciones para advertencias + Estado cargado...........: alerta si un CAD está importado en lugar de vinculado + Plano de trabajo o vista única: alerta si un CAD está colocado en una vista única con la opción 'solo vista activa' en lugar de en un plano de trabajo del modelo + Duplicado...............: alerta si un CAD está colocado más de una vez (ya sea vinculado o importado) en caso de que sea involuntario + Duración de la verificación + Mostrar la vista + + + Informe de convención de nomenclatura del modelo + Verificación de convención de nomenclatura de muros + Tipo de muro + Cantidad + Estado + Nombre incorrecto + Tipos de muro con nombre incorrecto encontrados: + No se seleccionó ningún archivo JSON. + diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.fr_fr.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.fr_fr.xaml new file mode 100644 index 0000000000..6cd6eab4c2 --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.fr_fr.xaml @@ -0,0 +1,294 @@ + + + Liste des données de grilles + Liste des données de niveaux + Liste des plans de référence + Liste des nomenclatures non placées + Vérification des éléments par jeux de travail + Radar 10 milles + Vérificateur de modèle + Avertissements des liens RVT + Audit complet (y compris les liens) + Audit CAD + Convention de nommage + + + Liste les grilles, si elles sont épinglées, dans une zone de visibilité ou nommées + +Cet outil de contrôle qualité vous renvoie les données suivantes: + Nombre de grilles, nom, type, statut d'épinglage + Liste les niveaux, s'ils sont épinglés, dans une zone de visibilité ou nommés et leur élévation. + +Cet outil de contrôle qualité vous renvoie les données suivantes: + Nombre de niveaux, nom, type, statut d'épinglage, zone de visibilité et élévation. + Liste tous les plans de référence du modèle +Cet outil de contrôle qualité vous renvoie les données suivantes: + Nombre de plans de référence, lien vers, nom + Liste toutes les nomenclatures non placées sur une feuille +Cet outil de contrôle qualité vous renvoie les données suivantes: + Type, Id + lien et nom de la nomenclature avec la possibilité de cliquer sur le lien pour ouvrir la nomenclature + Vérification de la qualité du modèle Revit +L'outil de contrôle qualité vous renvoie les données suivantes: + - Tableau de tous les éléments par jeu de travail incluant le nom de la catégorie, le nom de l'élément et l'id de l'élément + - Graphique en donut du nombre d'éléments par jeu de travail + Vérifie l'étendue de tous les éléments du modèle. +Ce vérificateur de modèle vérifie rapidement l'étendue du modèle Revit. +Placer l'étendue du modèle à plus de 10 milles (16 km) de l'origine +interne du projet peut entraîner des problèmes de précision, de tolérance, +de performance et d'affichage de la fenêtre. Cette vérification garantit que le +modèle reste dans un rayon de 10 milles de l'origine interne. + +Le cas de test examine les éléments suivants, en rapportant les étendues +concernant l'origine interne du projet. Le script priorise +sur la base de l'hypothèse que la plupart des problèmes d'étendue du modèle sont +liés aux éléments suivants: + + - La distance entre le point de base du projet et l'origine interne + - La distance entre le point de levé et l'origine interne + - La boîte englobante de la vue 3D + - La boîte englobante des objets d'option de conception + - La boîte englobante des liens CAD et RVT + - La boîte englobante de tous les éléments du modèle + Vérification de la qualité du modèle Revit +L'outil de contrôle qualité vous renvoie les données suivantes: + Fichier Revit: Nom et informations du projet + Liens Revit: liste, nombre et statut d'épinglage + Vues: nombre, nombre de vues copiées, nombre de vues non sur feuille + Nomenclatures: nombre et nombre non sur feuille + Feuilles: nombre + Avertissements: Nombre total, liste des avertissements critiques basée sur une liste prédéfinie d'avertissements critiques + Nombre de matériaux + Nombre de types de lignes + DWG: Nombre importé, nombre lié, nombre de dwg en 3D + Familles chargeables: nombre, nombre de familles sur place, nombre de familles non paramétriques + Notes de texte: nombre avec facteur modifié, nombre de notes de texte en majuscules + Familles système: nombre de rampes, nombre de colonnes architecturales, éléments avec option de modèle analytique activée + Groupes: nombre de types de groupes de détails, nombre d'instances de groupes de détails, nombre de types de groupes de modèles, nombre d'instances de groupes de modèles + Plans de référence: nombre non nommé, nombre de plans de référence + Nombre d'éléments + Phases: liste des phases pour le document actuel et les fichiers liés + Contrôle qualité des liens Revit - Avertissements + Avertissements dans les fichiers liés: + - Description, + - Ids, + - Nombre + + !! Revit 2018 + uniquement !! + !!Chargez les liens avant d'utiliser!! + Audit préalable de tous les modèles, y compris les modèles liés. +!!Les liens doivent être chargés.!! +Cet outil de contrôle qualité renvoie les données suivantes: +- nom du projet, numéro, client, phases, jeux de travail +- nombre d'éléments +- nombre d'éléments purgeables +- nombre total d'avertissements +- nombre d'avertissements critiques +- nombre de liens rvt +- nombre d'éléments de modèle analytique activés +- nombre de pièces +- nombre de pièces non placées +- nombre de pièces non délimitées +- nombre de feuilles +- nombre de vues par TypeVue +- vues non sur feuilles +- nombre de nomenclatures non sur feuilles +- nombre de vues copiées +- nombre de modèles de vue +- nombre de modèles de vue non utilisés +- nombre de filtres +- nombre de filtres de vue non utilisés +- nombre de matériaux +- nombre de types de lignes +- nombre de dwg +- nombre de dwg liés +- nombre de dwg importés +- nombre de familles sur place +- nombre de familles non paramétriques +- nombre de familles +- nombre de sous-catégories d'imports +- nombre de types de modèles génériques +- nombre de composants de détails +- nombre de types de notes de texte +- nombre de types de notes de texte avec facteur de largeur != 1 +- nombre de notes de texte +- notes de texte avec toutes majuscules appliquées +- notes de texte avec arrière-plan solide +- nombre de groupes de détails +- nombre de types de groupes de détails +- nombre de groupes de modèles +- nombre de types de groupes de modèles +- nombre de plans de référence +- nombre de plans de référence sans nom +- nombre de lignes de détails +- nombre de types de cotes +- nombre de cotes +- nombre de remplacements de cotes +- nombre de nuages de révision + Audit préalable des CAD importés et liés +Cet outil de contrôle qualité renvoie les données suivantes: + Informations sur l'instance et le type de lien CAD + + Le contrôle qualité inclut des informations et des alertes pour: + Le statut des liens (Chargé, Introuvable, Déchargé...) + Si un CAD est sur un plan de travail de modèle ou juste une vue unique + Si un CAD est lié ou importé + Si les CAD ont été dupliqués + Le nom de l'emplacement partagé du CAD + + Fonctionnalité: La sortie permet de naviguer vers les CAD trouvés + Vérifie si les noms de types de familles sont conformes à une liste spécifiée, +telle que définie par une liste de types de murs dans Revit. + + + Liste des données de grilles + Liste des données de niveaux + Nombre de grilles + Nombre de niveaux + Grilles + Niveaux + Nom + Type + Épinglé + Boîte de portée + Élévation + Plans de référence + Plans de référence: + NOMENCLATURES NON PLACÉES SUR DES FEUILLES + La transaction a pris + NOM: + ID: + TYPE: + Nom du jeu de travail + Catégorie d'élément + Nom d'élément + Id d'élément + Nombre d'éléments par jeu de travail + + + Vérification du placement et des coordonnées du modèle + Le point de base est à plus de + Le point de relevé est à plus de + Le point de relevé est à moins de + Coordonnées du point de base du projet vers l'origine interne + Coordonnées du point de relevé vers l'origine interne + Delta X du point de base du projet au point de relevé + Delta Y du point de base du projet au point de relevé + Distance planaire entre le point de base et le point de relevé + Distance totale entre le point de base et le point de relevé + Élévation du projet (distance verticale du point de base) + Coordonnées et distances du projet + Points + Vérification des limites de la boîte englobante de la vue 3D + La boîte englobante de la vue 3D s'étend à plus de + La boîte englobante de la vue 3D est située à moins de + Vérification des limites des objets d'option de conception + Les objets d'option de conception sont situés à plus de + Affichage des 10 premiers objets + Une investigation manuelle est requise + Tous les objets sont situés à moins de + Vérification des limites des liens CAD et RVT + Tous les liens CAD et RVT sont situés à moins de + Des objets distants sont encore détectés! + Analyse supplémentaire requise. + Vérification de tout, cela va prendre un certain temps. + Veuillez patienter. + Les éléments ci-dessous sont situés à plus de + Tous les tests terminés, examinez les résultats ci-dessus. + 10 milles (16 km) de l'origine interne. + Aucun objet dans une option de conception n'est situé à plus de + Fait partie de + Coordonnées XYZ + Distance + ANGLE (°) + + + VÉRIFICATEUR DE MODÈLE + Fichier RVT + Liens RVT + Aucun lien + Nom de fichier d'instance + Nom d'instance + Statut épinglé + Vues + Modèles de vue + Nomenclatures + Feuilles + Avertissements + Aucun avertissement, bon travail! + Matériaux + Motifs de ligne + DWGs + Familles chargeables + Notes de texte + Familles système + Groupes + Plans de référence + Phases + Nombre d'éléments + Fichier non enregistré + + + Liens RVTV - Vérificateur d'avertissements + Nombre d'avertissements + Détails des avertissements + Nom de fichier + Nombre d'avertissements + Avertissements + Ids + Chargez tous les liens, l'outil est destiné aux modèles avec des liens chargés + Chargez au moins un lien, l'outil est destiné aux modèles avec des liens chargés + + + Informations du fichier principal + Informations des fichiers liés + Nom du projet + Numéro de projet + Nom du client + Phases du projet + Jeux de travail + Nom de fichier lié + Statut chargé + Liens + Liens non épinglés + + + Vérifier les instances CAD: + dans ce projet + uniquement dans la vue active + ANNULER + OK + Audit des instances CAD dans le projet actuel + Aucune instance CAD trouvée + Sélectionner + Audit préalable des CAD importés et liés + + Sélectionner/Zoomer + Instance DWG + Statut chargé + Plan de travail ou vue unique + Dupliqué + Utilisateur créateur + Nom du site d'emplacement + instances CAD trouvées. + La vérification a été exécutée sur + la vue active + tout le modèle + Explications pour les avertissements + Statut chargé...........: alerte si un CAD est importé plutôt que lié + Plan de travail ou vue unique: alerte si un CAD est placé sur une vue unique avec l'option 'vue active uniquement' plutôt que sur un plan de travail du modèle + Dupliqué...............: alerte si un CAD est placé plus d'une fois (qu'il soit lié ou importé) au cas où ce serait involontaire + Durée de la vérification + Afficher la vue + + + Rapport de convention de nommage du modèle + Vérification de convention de nommage des murs + Type de mur + Nombre + Statut + Nom incorrect + Types de murs nommés incorrectement trouvés: + Aucun fichier JSON sélectionné. + diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.pt_br.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.pt_br.xaml new file mode 100644 index 0000000000..85e793988a --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.pt_br.xaml @@ -0,0 +1,294 @@ + + + Listar dados de eixos + Listar dados de níveis + Listar planos de referência + Listar tabelas não inseridas em folhas + Verificar elementos por worksets + Radar de 10 milhas + Verificador de modelo + Avisos de vínculos RVT + Auditar tudo (incluindo vínculos) + Auditoria CAD + Convenção de nomenclatura + + + Lista eixos, se estão fixados, com caixa de escopo ou nomeados + +Esta ferramenta de CQ retorna os seguintes dados: + Contagem de eixos, nome, tipo, status de fixação + Lista níveis, se estão fixados, com caixa de escopo ou nomeados e sua elevação. + +Esta ferramenta de CQ retorna os seguintes dados: + Contagem de níveis, nome, tipo, status de fixação, caixa de escopo e elevação. + Lista todos os planos de referência no modelo +Esta ferramenta de CQ retorna os seguintes dados: + Contagem de planos de referência, vínculo para, nome + Lista todas as tabelas não colocadas em uma folha +Esta ferramenta de CQ retorna os seguintes dados: + Tipo, Id + link e nome da Tabela com a capacidade de clicar no link para abrir a tabela + Verificação de qualidade do modelo Revit +A ferramenta de CQ retorna os seguintes dados: + - Tabela de todos os elementos por workset incluindo nome da categoria, nome do elemento e id do elemento + - Gráfico de rosca da contagem de elementos por workset + Verifica as extensões de todos os elementos no modelo. +Este Verificador de modelo verifica rapidamente as extensões do modelo Revit. +Colocar extensões de modelo a mais de 10 Mi (16KM) da origem interna +do projeto pode levar a problemas de precisão, tolerância, +desempenho e exibição da viewport. Esta verificação garante que o +modelo permaneça dentro de um raio de 10 milhas da origem interna. + +O caso de teste examina o seguinte, relatando extensões +em relação à origem interna do projeto. O script prioriza +com base na suposição de que a maioria dos problemas de extensão do modelo está +relacionada ao seguinte: + + - A distância entre o ponto base do projeto e a origem interna + - A distância entre o ponto de pesquisa e a origem interna + - A caixa de delimitação da vista 3D + - A caixa de delimitação dos objetos da opção de projeto + - A caixa de delimitação dos vínculos CAD e RVT + - A caixa de delimitação de todos os elementos no modelo + Verificação de qualidade do modelo Revit +A ferramenta de CQ retorna os seguintes dados: + Arquivo Revit: Nome e Informações do projeto + Vínculos Revit: lista, contagem e status de fixação + Vistas: número, número de vistas copiadas, número de vistas não na folha + Tabelas: número e número não na folha + Folhas: número + Avisos: Número total, Lista de avisos críticos com base em lista predefinida de avisos críticos + Contagem de materiais + Contagem de padrões de linha + DWGs: Contagem importada, contagem vinculada, contagem de dwgs em 3D + Famílias carregáveis: contagem, contagem de famílias no local, contagem de famílias não paramétricas + Notas de texto: com contagem de fator alterado, contagem de notas de texto em maiúsculas + Famílias de sistema: contagem de rampas, contagem de colunas arquitetônicas, elementos com opção de modelo analítico ativada + Grupos: contagem de tipos de grupo de detalhes, contagem de instâncias de grupo de detalhes, contagem de tipos de grupo de modelo, contagem de instâncias de grupos de modelo + Planos de referência: contagem não nomeada, contagem de planos de ref + Contagem de elementos + Fases: lista de fases para o documento atual e arquivos vinculados + Controle de qualidade de vínculos Revit - Avisos + Avisos em arquivos vinculados: + - Descrição, + - Ids, + - Contagem + + !! Revit 2018 + apenas !! + !!Carregue vínculos antes de usar!! + Auditoria preliminar de todos os modelos, incluindo modelos vinculados. +!!Os vínculos devem estar carregados.!! +Esta ferramenta de CQ retorna os seguintes dados: +- nome do projeto, número, cliente, fases, worksets +- contagem de elementos +- contagem de elementos purgar +- contagem de todos os avisos +- contagem de avisos críticos +- contagem de vínculos rvt +- contagem de elementos de modelo analítico ativados +- contagem de ambientes +- contagem de ambientes não colocados +- contagem de ambientes não delimitados +- contagem de folhas +- contagem de vistas por Tipo de Vista +- vistas não em folhas +- contagem de tabelas não em folhas +- contagem de vistas copiadas +- contagem de modelos de vista +- contagem de modelos de vista não utilizados +- contagem de filtros +- contagem de filtros de vista não utilizados +- contagem de materiais +- contagem de padrões de linha +- contagem de dwgs +- contagem de dwg vinculados +- contagem de dwg importados +- contagem de família no local +- contagem de famílias não paramétricas +- contagem de família +- contagem de subcategorias de importações +- contagem de tipos de modelos genéricos +- contagem de componentes de detalhe +- contagem de tipos de notas de texto +- tipos de notas de texto com fator de largura != 1 +- contagem de notas de texto +- notas de texto com maiúsculas aplicadas +- notas de texto com fundo sólido +- contagem de grupos de detalhes +- contagem de tipos de grupos de detalhes +- contagem de grupo de modelo +- contagem de tipo de grupo de modelo +- contagem de planos de referência +- contagem de planos de referência sem nome +- contagem de linhas de detalhe +- contagem de tipos de cota +- contagem de cota +- contagem de sobreposições de cota +- contagem de nuvens de revisão + Auditoria preliminar de CAD importado e vinculado +Esta ferramenta de CQ retorna os seguintes dados: + Instância de vínculo CAD e informações de tipo + + O controle de qualidade inclui informações e alertas para: + O status dos vínculos (Carregado, Não encontrado, Descarregado...) + Se um CAD está em um plano de trabalho do modelo ou apenas em uma única vista + Se um CAD está vinculado ou importado + Se CADs foram duplicados + O nome do local compartilhado do CAD + + Recurso: A saída permite navegar para os CADs encontrados + Verifica se os nomes de tipo de família estão em conformidade com uma lista especificada, +conforme definido por uma lista de tipos de parede no Revit. + + + Lista de dados de eixos + Lista de dados de níveis + Número de eixos + Número de níveis + Eixos + Níveis + Nome + Tipo + Fixado + Caixa de escopo + Elevação + Planos de referência + Planos de referência: + TABELAS NÃO EM NENHUMA FOLHA + A transação demorou + NOME: + ID: + TIPO: + Nome do workset + Categoria do elemento + Nome do elemento + Id do elemento + Contagem de elementos por workset + + + Verificando posicionamento e coordenadas do modelo + Ponto base é mais de + Ponto de pesquisa é mais de + Ponto de pesquisa é menos de + Coordenadas do ponto base do projeto para origem interna + Coordenadas do ponto de pesquisa para origem interna + Delta X do ponto base do projeto para pesquisa + Delta Y do ponto base do projeto para pesquisa + Distância planar entre ponto base e ponto de pesquisa + Distância total entre ponto base e ponto de pesquisa + Elevação do projeto (Distância vertical do ponto base) + Coordenadas e distâncias do projeto + Pontos + Verificando as extensões da caixa de delimitação da vista 3D + Caixa de delimitação da vista 3D se estende mais de + Caixa de delimitação da vista 3D está localizada a menos de + Verificando as extensões dos objetos da opção de projeto + Objetos da opção de projeto estão localizados a mais de + Mostrando os primeiros 10 objetos + Investigação manual é necessária + Todos os objetos estão localizados a menos de + Verificando as extensões dos vínculos CAD e RVT + Todos os vínculos CAD e RVT estão localizados a menos de + Objetos distantes ainda estão sendo detectados! + Análise adicional necessária. + Verificando tudo, vai demorar um pouco. + Por favor, seja paciente. + Elementos abaixo estão localizados a mais de + Todos os testes concluídos, revise os resultados acima. + 10 Mi (16KM) de distância da Origem Interna. + Nenhum objeto em qualquer opção de projeto está localizado a mais de + Faz parte de + Coordenadas XYZ + Distância + ÂNGULO (°) + + + VERIFICADOR DE MODELO + Arquivo RVT + Vínculos RVT + Sem vínculos + Nome do arquivo de instância + Nome da instância + Status de fixação + Vistas + Modelos de vista + Tabelas + Folhas + Avisos + Sem avisos, bom trabalho! + Materiais + Padrões de linha + DWGs + Famílias carregáveis + Notas de texto + Famílias de sistema + Grupos + Planos de referência + Fases + Contagem de elementos + Arquivo não salvo + + + Vínculos RVT - Verificador de avisos + Contagem de avisos + Detalhes dos avisos + Nome do arquivo + Contagem de avisos + Avisos + Ids + Carregue todos os vínculos, a ferramenta destina-se a modelos com vínculos carregados + Carregue pelo menos um vínculo, a ferramenta destina-se a modelos com vínculos carregados + + + Informações do arquivo principal + Informações dos arquivos vinculados + Nome do projeto + Número do projeto + Nome do cliente + Fases do projeto + Worksets + Nome do arquivo vinculado + Status carregado + Vínculos + Vínculos não fixados + + + Auditar instâncias CAD: + neste projeto + apenas na vista ativa + CANCELAR + OK + Auditoria de instâncias CAD no projeto atual + Nenhuma instância CAD encontrada + Selecionar + Auditoria preliminar de CAD importado e vinculado + Não + Selecionar/Zoom + Instância DWG + Status carregado + Plano de trabalho ou vista única + Duplicar + Usuário criador + Nome do local do terreno + Instâncias CAD encontradas. + A verificação foi executada em + a vista ativa + o modelo inteiro + Explicações para avisos + Status carregado...........: alerta se um CAD for importado, em vez de vinculado + Plano de trabalho ou vista única: alerta se um CAD for colocado em uma única vista com a opção 'apenas vista ativa' em vez de em um plano de trabalho do modelo + Duplicar...............: alerta se um CAD for colocado mais de uma vez (vinculado ou importado) caso não seja intencional + Duração da verificação + Mostrar a vista + + + Relatório de convenção de nomenclatura do modelo + Verificação de convenção de nomenclatura de parede + Tipo de parede + Contagem + Status + Nome errado + Tipos de parede nomeados incorretamente encontrados: + Nenhum arquivo JSON selecionado. + \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.ru.xaml b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.ru.xaml new file mode 100644 index 0000000000..109d9b0c10 --- /dev/null +++ b/extensions/pyRevitTools.extension/checks/locale/Checks.ResourceDictionary.ru.xaml @@ -0,0 +1,294 @@ + + + Список данных сетки + Список данных уровней + Список опорных плоскостей + Список спецификаций не на листах + Проверка элементов по рабочим наборам + Радар 10 миль + Проверка модели + Предупреждения RVT-связей + Полная проверка (включая связи) + Проверка CAD + Соглашение об именовании + + + Список сеток, если они закреплены, в области видимости или названы + +Этот инструмент контроля качества возвращает следующие данные: + Количество сеток, имя, тип, статус закрепления + Список уровней, если они закреплены, в области видимости или названы и их отметка. + +Этот инструмент контроля качества возвращает следующие данные: + Количество уровней, имя, тип, статус закрепления, область видимости и отметка. + Список всех опорных плоскостей в модели +Этот инструмент контроля качества возвращает следующие данные: + Количество опорных плоскостей, ссылка на, имя + Список всех спецификаций, не размещенных на листе +Этот инструмент контроля качества возвращает следующие данные: + Тип, Id + ссылка и имя спецификации с возможностью нажать на ссылку для открытия спецификации + Проверка качества модели Revit +Инструмент контроля качества возвращает следующие данные: + - Таблица всех элементов по рабочему набору, включая имя категории, имя элемента и id элемента + - Круговая диаграмма количества элементов по рабочему набору + Проверяет границы всех элементов в модели. +Этот проверщик модели быстро проверяет границы модели Revit. +Размещение границ модели более чем в 10 милях (16 км) от внутреннего +начала координат проекта может привести к проблемам с точностью, допусками, +производительностью и отображением видов. Эта проверка гарантирует, что +модель остается в радиусе 10 миль от внутреннего начала координат. + +Тестовый случай исследует следующее, сообщая о границах +относительно внутреннего начала координат проекта. Скрипт приоритизирует +на основе предположения, что большинство проблем с границами модели +связаны со следующим: + + - Расстояние между базовой точкой проекта и внутренним началом координат + - Расстояние между точкой съемки и внутренним началом координат + - Ограничивающий параллелепипед 3D-вида + - Ограничивающий параллелепипед объектов вариантов проектирования + - Ограничивающий параллелепипед связей CAD и RVT + - Ограничивающий параллелепипед всех элементов в модели + Проверка качества модели Revit +Инструмент контроля качества возвращает следующие данные: + Файл Revit: Имя и информация о проекте + Связи Revit: список, количество и статус закрепления + Виды: количество, количество скопированных видов, количество видов не на листе + Спецификации: количество и количество не на листе + Листы: количество + Предупреждения: Общее количество, список критических предупреждений на основе предопределенного списка критических предупреждений + Количество материалов + Количество типов линий + DWG: Количество импортированных, количество связанных, количество dwg в 3D + Загружаемые семейства: количество, количество семейств на месте, количество непараметрических семейств + Текстовые заметки: количество с измененным коэффициентом, количество текстовых заметок заглавными буквами + Системные семейства: количество пандусов, количество архитектурных колонн, элементы с включенной опцией аналитической модели + Группы: количество типов групп деталей, количество экземпляров групп деталей, количество типов групп моделей, количество экземпляров групп моделей + Опорные плоскости: количество неназванных, количество опорных плоскостей + Количество элементов + Фазы: список фаз для текущего документа и связанных файлов + Контроль качества связей Revit - Предупреждения + Предупреждения в связанных файлах: + - Описание, + - ID, + - Количество + + !! Только Revit 2018 + !! + !!Загрузите связи перед использованием!! + Предварительная проверка всех моделей, включая связанные модели. +!!Связи должны быть загружены.!! +Этот инструмент контроля качества возвращает следующие данные: +- имя проекта, номер, клиент, фазы, рабочие наборы +- количество элементов +- количество элементов, подлежащих очистке +- общее количество предупреждений +- количество критических предупреждений +- количество связей rvt +- количество активированных элементов аналитической модели +- количество помещений +- количество неразмещенных помещений +- количество неограниченных помещений +- количество листов +- количество видов по типу вида +- виды не на листах +- количество спецификаций не на листах +- количество скопированных видов +- количество шаблонов видов +- количество неиспользуемых шаблонов видов +- количество фильтров +- количество неиспользуемых фильтров видов +- количество материалов +- количество типов линий +- количество dwg +- количество связанных dwg +- количество импортированных dwg +- количество семейств на месте +- количество непараметрических семейств +- количество семейств +- количество подкатегорий импорта +- количество типов общих моделей +- количество компонентов деталей +- количество типов текстовых заметок +- количество типов текстовых заметок с коэффициентом ширины != 1 +- количество текстовых заметок +- текстовые заметки с примененными заглавными буквами +- текстовые заметки с сплошным фоном +- количество групп деталей +- количество типов групп деталей +- количество групп моделей +- количество типов групп моделей +- количество опорных плоскостей +- количество неназванных опорных плоскостей +- количество линий деталей +- количество типов размеров +- количество размеров +- количество переопределений размеров +- количество облаков пересмотра + Предварительная проверка импортированных и связанных CAD +Этот инструмент контроля качества возвращает следующие данные: + Информация об экземпляре и типе связи CAD + + Контроль качества включает информацию и предупреждения для: + Статус связей (Загружено, Не найдено, Выгружено...) + Находится ли CAD на рабочей плоскости модели или только на одном виде + Является ли CAD связанным или импортированным + Были ли CAD дублированы + Имя общего местоположения CAD + + Функция: Вывод позволяет переходить к найденным CAD + Проверяет, соответствуют ли имена типов семейств указанному списку, +как определено списком типов стен в Revit. + + + Список данных сетки + Список данных уровней + Количество сеток + Количество уровней + Сетки + Уровни + Имя + Тип + Закреплено + Область видимости + Отметка + Опорные плоскости + Опорные плоскости: + СПЕЦИФИКАЦИИ НЕ НА ЛИСТАХ + Транзакция заняла + ИМЯ: + ID: + ТИП: + Имя рабочего набора + Категория элемента + Имя элемента + ID элемента + Количество элементов по рабочему набору + + + Проверка размещения модели и координат + Базовая точка находится более чем + Точка съемки находится более чем + Точка съемки находится менее чем + Координаты базовой точки проекта относительно внутреннего начала координат + Координаты точки съемки относительно внутреннего начала координат + Дельта X от базовой точки проекта до точки съемки + Дельта Y от базовой точки проекта до точки съемки + Плоскостное расстояние между базовой точкой и точкой съемки + Общее расстояние между базовой точкой и точкой съемки + Отметка проекта (вертикальное расстояние базовой точки) + Координаты и расстояния проекта + Точки + Проверка границ ограничивающего параллелепипеда 3D-вида + Ограничивающий параллелепипед 3D-вида простирается более чем + Ограничивающий параллелепипед 3D-вида расположен менее чем + Проверка границ объектов вариантов проектирования + Объекты вариантов проектирования расположены более чем + Показаны первые 10 объектов + Требуется ручное исследование + Все объекты расположены менее чем + Проверка границ связей CAD и RVT + Все связи CAD и RVT расположены менее чем + Удаленные объекты все еще обнаруживаются! + Требуется дальнейший анализ. + Проверка всего, это займет некоторое время. + Пожалуйста, будьте терпеливы. + Элементы ниже расположены более чем + Все тесты завершены, просмотрите результаты выше. + 10 миль (16 км) от внутреннего начала координат. + Ни один объект в вариантах проектирования не расположен более чем + Является частью + Координаты XYZ + Расстояние + УГОЛ (°) + + + ПРОВЕРКА МОДЕЛИ + Файл RVT + Связи RVT + Нет связей + Имя файла экземпляра + Имя экземпляра + Статус закрепления + Виды + Шаблоны видов + Спецификации + Листы + Предупреждения + Нет предупреждений, отлично! + Материалы + Типы линий + DWG + Загружаемые семейства + Текстовые заметки + Системные семейства + Группы + Опорные плоскости + Фазы + Количество элементов + Файл не сохранен + + + Связи RVT - Проверка предупреждений + Количество предупреждений + Детали предупреждений + Имя файла + Количество предупреждений + Предупреждения + ID + Загрузите все связи, инструмент предназначен для моделей с загруженными связями + Загрузите хотя бы одну связь, инструмент предназначен для моделей с загруженными связями + + + Информация об основном файле + Информация о связанных файлах + Имя проекта + Номер проекта + Имя клиента + Фазы проекта + Рабочие наборы + Имя связанного файла + Статус загрузки + Связи + Связи не закреплены + + + Проверка экземпляров CAD: + в этом проекте + только в активном виде + ОТМЕНА + ОК + Проверка экземпляров CAD в текущем проекте + Экземпляры CAD не найдены + Выбрать + Предварительная проверка импортированных и связанных CAD + Нет + Выбрать/Масштабировать + Экземпляр DWG + Статус загрузки + Рабочая плоскость или один вид + Дубликат + Пользователь-создатель + Имя участка расположения + Найдены экземпляры CAD. + Проверка была запущена на + активном виде + всей модели + Объяснения предупреждений + Статус загрузки...........: предупреждение, если CAD импортирован, а не связан + Рабочая плоскость или один вид: предупреждение, если CAD размещен на одном виде с опцией 'только активный вид', а не на рабочей плоскости модели + Дубликат...............: предупреждение, если CAD размещен более одного раза (связан или импортирован) в случае непреднамеренного размещения + Длительность проверки + Показать вид + + + Отчет о соглашении об именовании модели + Проверка соглашения об именовании стен + Тип стены + Количество + Статус + Неправильное имя + Найдены неправильно названные типы стен: + JSON файл не выбран. + diff --git a/extensions/pyRevitTools.extension/checks/modelchecker_Warnings_check.py b/extensions/pyRevitTools.extension/checks/modelchecker_Warnings_check.py index 70a444d406..abe94a12c9 100644 --- a/extensions/pyRevitTools.extension/checks/modelchecker_Warnings_check.py +++ b/extensions/pyRevitTools.extension/checks/modelchecker_Warnings_check.py @@ -2,19 +2,19 @@ import datetime from pyrevit import coreutils -from pyrevit import script -from pyrevit import revit, DB +from pyrevit import DB -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from pyrevit.compat import safe_strtype -from check_translations import DocstringMeta + +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + WIKI_ARTICLE = "" @@ -266,14 +266,14 @@ def dashboardCenterMaker(value): """dashboard HTMl maker - div for center aligning""" content = str(value) html_code = "
" + content + "
" - print (coreutils.prepare_html_str(html_code)) + print(coreutils.prepare_html_str(html_code)) def dashboardLeftMaker(value): """dashboard HTMl maker - div for left aligning""" content = str(value) html_code = "
" + content + "
" - print (coreutils.prepare_html_str(html_code)) + print(coreutils.prepare_html_str(html_code)) def path2fileName(file_path, divider): @@ -287,8 +287,7 @@ def path2fileName(file_path, divider): def checkModel(doc, output): """Check given model""" - from check_translations import get_check_translation - output.print_md("# **{}**".format(get_check_translation("RVTLinksWarningChecker"))) + output.print_md("# **{}**".format(_t("RVTLinksWarningChecker"))) output.print_md("---") # first JS to avoid error in IE output window when at first run @@ -372,7 +371,7 @@ def GetWarns(docs): ## Warnings file dashboard section # output.print_md(str(fileWarnings)) - output.print_md("# {}
".format(get_check_translation("RVTLinksWarningsCount"))) + output.print_md("# {}
".format(_t("RVTLinksWarningsCount"))) # Doughnut pie chartWarnings = output.make_doughnut_chart() @@ -394,53 +393,40 @@ def GetWarns(docs): # tables output.print_table( links_warnings_count, - columns=[ - get_check_translation("RVTLinksFileName"), - get_check_translation("RVTLinksWarningsCountLabel") - ], + columns=[_t("RVTLinksFileName"), _t("RVTLinksWarningsCountLabel")], formats=None, title="", last_line_style="", ) - output.print_md("# {}
".format(get_check_translation("RVTLinksWarningsDetails"))) + output.print_md("# {}
".format(_t("RVTLinksWarningsDetails"))) output.print_table( zip(*fileWarnings), columns=[ - get_check_translation("RVTLinksFileName"), - get_check_translation("RVTLinksWarningsLabel"), - get_check_translation("RVTLinksIds") + _t("RVTLinksFileName"), + _t("RVTLinksWarningsLabel"), + _t("RVTLinksIds"), ], formats=None, title="", last_line_style="", ) else: - output.print_md( - "{}".format(get_check_translation("RVTLinksLoadAllLinks")) - ) + output.print_md("{}".format(_t("RVTLinksLoadAllLinks"))) else: - output.print_md( - "{}".format(get_check_translation("RVTLinksLoadAtLeastOne")) - ) + output.print_md("{}".format(_t("RVTLinksLoadAtLeastOne"))) class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_RVTLinksWarnings" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_RVTLinksWarnings") - + name = _t("CheckName_RVTLinksWarnings") author = "Jean-Marc Couffin" - def startTest(self, doc, output): timer = coreutils.Timer() checkModel(doc, output) endtime = timer.get_time() endtime_hms = str(datetime.timedelta(seconds=endtime)) - from check_translations import get_check_translation - endtime_hms_claim = "{} {}".format(get_check_translation("TransactionTook"), endtime_hms) - print (endtime_hms_claim) + endtime_hms_claim = "{} {}".format(_t("TransactionTook"), endtime_hms) + print(endtime_hms_claim) + + +ModelChecker.__doc__ = _t("CheckDescription_RVTLinksWarnings") diff --git a/extensions/pyRevitTools.extension/checks/modelchecker_check.py b/extensions/pyRevitTools.extension/checks/modelchecker_check.py index d61d175fd1..399cacc9ef 100644 --- a/extensions/pyRevitTools.extension/checks/modelchecker_check.py +++ b/extensions/pyRevitTools.extension/checks/modelchecker_check.py @@ -5,15 +5,19 @@ from pyrevit import revit, DB from pyrevit.compat import get_elementid_value_func -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta + +_XAML = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml" +) + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + # webpage with explanations of bad practices in revit maybe it could be configurable in the future? WIKI_ARTICLE = "https://www.modelical.com/en/gdocs/revit-arc-best-practices/" @@ -242,12 +246,14 @@ def dashboardCenterMaker(value): html_code = "
" + content + "
" print(coreutils.prepare_html_str(html_code)) + def dashboardLeftMaker(value): """dashboard HTMl maker - div for left aligning""" content = str(value) html_code = "
" + content + "
" print(coreutils.prepare_html_str(html_code)) + def path2fileName(file_path, divider): """returns file name - everything in path from "\\" or "/" to the end""" lastDivider = file_path.rindex(divider) + 1 @@ -267,9 +273,8 @@ def checkModel(doc, output): projectClient = project_info_collector.ClientName get_elementid_value = get_elementid_value_func() if len(name) == 0: - from check_translations import get_check_translation # name = "Not saved file" - printedName = get_check_translation("ModelCheckerNotSavedFile") + printedName = _t("ModelCheckerNotSavedFile") else: try: central_path = revit.query.get_central_path(doc) @@ -287,8 +292,7 @@ def checkModel(doc, output): except: # detached file printedName = file_path - from check_translations import get_check_translation - output.print_md("# **{}**".format(get_check_translation("ModelCheckerTitle"))) + output.print_md("# **{}**".format(_t("ModelCheckerTitle"))) output.print_md("---") # first JS to avoid error in IE output window when at first run @@ -314,13 +318,16 @@ def checkModel(doc, output): .WhereElementIsNotElementType() .ToElements() ) - rvtlinkdocs = [i.GetLinkDocument() for i in DB.FilteredElementCollector(doc).OfClass(DB.RevitLinkInstance)] + rvtlinkdocs = [ + i.GetLinkDocument() + for i in DB.FilteredElementCollector(doc).OfClass(DB.RevitLinkInstance) + ] - rvtlinkdocsName, rvtlink_instance_name = [], [] + rvtlinkdocsName, rvtlink_instance_name = [], [] if len(rvtlinks_id_collector): for i in rvtlinks_id_collector: - rvtlinkdocsName.append(revit.query.get_name(i).split(' : ')[0]) - rvtlink_instance_name.append(revit.query.get_name(i).split(' : ')[1]) + rvtlinkdocsName.append(revit.query.get_name(i).split(" : ")[0]) + rvtlink_instance_name.append(revit.query.get_name(i).split(" : ")[1]) rvtlinksCount = len(rvtlinks_id_collector) # output.print_md(str(rvtlinksCount) +" Revit Links") @@ -331,17 +338,17 @@ def checkModel(doc, output): for x in rvtlinks_id_collector: rvtlinkspinnedCount.append(x.Pinned) for i in rvtlinkspinnedCount: - if i==True: - rvtlink_instance_pinned.append('Pinned') + if i == True: + rvtlink_instance_pinned.append("Pinned") else: - rvtlink_instance_pinned.append('UnPinned') + rvtlink_instance_pinned.append("UnPinned") rvtlinkspinnedCountTrue = sum(rvtlinkspinnedCount) # print(str(rvtlinkspinnedCountTrue) +" Revit Links pinned") else: pass ### View collectors - + # views views_id_collector = ( DB.FilteredElementCollector(doc) @@ -363,7 +370,6 @@ def checkModel(doc, output): or viewNameString[-7:-2] == "Copie" or viewNameString[-5:] == "Copie" or viewNameString[-5:] == "Coupe" - ): copiedView += 1 except: @@ -407,8 +413,7 @@ def checkModel(doc, output): for v in viewTemplates: if v.Id not in appliedTemplates: unusedViewTemplates.append(v.Name) - unusedViewTemplatesCount = (len(unusedViewTemplates)) - + unusedViewTemplatesCount = len(unusedViewTemplates) # schedules schedules_id_collector = ( @@ -420,7 +425,7 @@ def checkModel(doc, output): scheduleCount = 0 ### scheduleNames = [] for schedule in schedules_id_collector: - if not(schedule.IsTitleblockRevisionSchedule): + if not (schedule.IsTitleblockRevisionSchedule): scheduleCount += 1 ### scheduleNames.append((schedule.Name)) ### output.print_md("
".join(scheduleNames)) @@ -441,9 +446,11 @@ def checkModel(doc, output): # it is something with schedules on more sheets maybe... for schedule in scheduleCollector: schedName = schedule.Name - if (schedName[:19] != "" + if ( + schedName[:19] != "" # to support french files - or schedName[:28] != ""): + or schedName[:28] != "" + ): if schedName not in schedulesOnSheet: if get_elementid_value(schedule.OwnerViewId) != -1: # print schedName @@ -453,9 +460,11 @@ def checkModel(doc, output): # there is need to iterate class and category filter to get all schedule - UnionWith didn't work for schedule in ScheduleCollectorInstances: schedName = schedule.Name - if (schedName[:19] != "" + if ( + schedName[:19] != "" # to support french files - or schedName[:28] != ""): + or schedName[:28] != "" + ): if schedName not in schedulesOnSheet: if get_elementid_value(schedule.OwnerViewId) != -1: # print schedName @@ -520,7 +529,6 @@ def checkModel(doc, output): dwgCount = len(dwg_collector) linkedDwg = dwgCount - importedDwg - # families graphFCatHeadings = [] graphFCatData = [] @@ -541,9 +549,7 @@ def checkModel(doc, output): # Text notes width factor != 1 textNoteType_collector = ( - DB.FilteredElementCollector(doc) - .OfClass(DB.TextNoteType) - .ToElements() + DB.FilteredElementCollector(doc).OfClass(DB.TextNoteType).ToElements() ) textnoteWFcount = 0 for textnote in textNoteType_collector: @@ -583,12 +589,14 @@ def checkModel(doc, output): activated_analytical_model_elements_count = 0 param = DB.BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL - provider = DB.ParameterValueProvider( DB.ElementId( param ) ) + provider = DB.ParameterValueProvider(DB.ElementId(param)) evaluator = DB.FilterNumericEquals() - rule = DB.FilterIntegerRule( provider, evaluator, 1 ) - filter = DB.ElementParameterFilter( rule ) + rule = DB.FilterIntegerRule(provider, evaluator, 1) + filter = DB.ElementParameterFilter(rule) - analyticalCollector = DB.FilteredElementCollector( doc ).WherePasses( filter ).ToElements() + analyticalCollector = ( + DB.FilteredElementCollector(doc).WherePasses(filter).ToElements() + ) activated_analytical_model_elements_count = str(len(analyticalCollector)) @@ -610,7 +618,7 @@ def checkModel(doc, output): modelGroup = ( DB.FilteredElementCollector(doc) .OfCategory(DB.BuiltInCategory.OST_IOSModelGroups) - .WhereElementIsNotElementType() + .WhereElementIsNotElementType() ) modelGroupCount = 0 for element in modelGroup: @@ -626,14 +634,14 @@ def checkModel(doc, output): # reference plane without name refPlaneCollector = ( - DB.FilteredElementCollector(doc) - .OfClass(DB.ReferencePlane) - .ToElements() + DB.FilteredElementCollector(doc).OfClass(DB.ReferencePlane).ToElements() ) RefPCount = len(refPlaneCollector) noNameRefPCount = 0 for refPlane in refPlaneCollector: - if (refPlane.Name == "Reference Plane" or refPlane.Name == "Plan de référence"): # for french compatibility + if ( + refPlane.Name == "Reference Plane" or refPlane.Name == "Plan de référence" + ): # for french compatibility noNameRefPCount += 1 # Element Count @@ -648,18 +656,19 @@ def inner_lists(lst): return [x for inner in lst for x in inner_lists(inner)] else: return [lst] - #Get list of phases in Doc and RVT Links - #Get current document + + # Get list of phases in Doc and RVT Links + # Get current document linkdocPhasesName = [] - def DocPhases(doc, links = []): - #Get document phases + def DocPhases(doc, links=[]): + # Get document phases docPhases = doc.Phases - #Get document phases names + # Get document phases names docPhasesName = [] for i in docPhases: docPhasesName.append(i.Name) - #Get links phases + # Get links phases for x in links: linkdocPhases = [] try: @@ -667,23 +676,23 @@ def DocPhases(doc, links = []): linkdocPhases.append(y.Name) linkdocPhasesName.append(linkdocPhases) except: - linkdocPhasesName.append(['Link Unloaded']) + linkdocPhasesName.append(["Link Unloaded"]) return docPhasesName, linkdocPhasesName - #Call for phases definition - phase = inner_lists(DocPhases(doc,rvtlinkdocs)) + # Call for phases definition + phase = inner_lists(DocPhases(doc, rvtlinkdocs)) ### tresholds ### # RVT links rvtlinksTres = 100 - rvtlinksPinnedTres = -1 # The logic for threshold sometimes needs to be reverted + rvtlinksPinnedTres = -1 # The logic for threshold sometimes needs to be reverted if not len(rvtlinks_id_collector): pass else: - if rvtlinksCount == rvtlinkspinnedCountTrue : + if rvtlinksCount == rvtlinkspinnedCountTrue: rvtlinksPinnedTres = rvtlinksCount - else : + else: pass # Views viewTres = 500 @@ -716,11 +725,11 @@ def DocPhases(doc, links = []): else: inPlaceFamilyTres = familiesTres * 0.2 genericModelTres = familiesTres * 0.2 - notParamFamiliesTres = familyCount * 0.3 - #TextNotes + notParamFamiliesTres = familyCount * 0.3 + # TextNotes textnoteWFtres = 0 textnoteCaps = 0 - # Ramps + # Ramps rampTres = 0 # Architectural columns archTres = 0 @@ -737,55 +746,71 @@ def DocPhases(doc, links = []): # Elements count elementsTres = 1000000 - ### Dashaboard starts here ### ## RVT file dashboard section - from check_translations import get_check_translation - output.print_md("# {}
".format(get_check_translation("ModelCheckerRVTFile"))) - projectInfo = "Current file name: "+ printedName + "
Project Name: " + projectName + "
Project Number: " + str(projectNumber) + "
Client Name: " + projectClient + output.print_md("# {}
".format(_t("ModelCheckerRVTFile"))) + projectInfo = ( + "Current file name: " + + printedName + + "
Project Name: " + + projectName + + "
Project Number: " + + str(projectNumber) + + "
Client Name: " + + projectClient + ) output.print_md(projectInfo) ## RVT Links dashboard section # print RVT links names output.print_md("---") - output.print_md("# {}".format(get_check_translation("ModelCheckerRVTLinks"))) + output.print_md("# {}".format(_t("ModelCheckerRVTLinks"))) if not len(rvtlinks_id_collector): - output.print_md(get_check_translation("ModelCheckerNoLinks")) + output.print_md(_t("ModelCheckerNoLinks")) else: rvtlinkdocsNameFormated, rvtlink_instance_name_formated = [], [] for i, j in zip(rvtlinkdocsName, rvtlink_instance_name): rvtlinkdocsNameFormated.append(i) rvtlink_instance_name_formated.append(j) - rvtlinks_data = zip(*[rvtlinkdocsNameFormated, rvtlink_instance_name_formated, rvtlink_instance_pinned]) + rvtlinks_data = zip( + *[ + rvtlinkdocsNameFormated, + rvtlink_instance_name_formated, + rvtlink_instance_pinned, + ] + ) - output.print_table(rvtlinks_data, columns=[ - get_check_translation("ModelCheckerInstanceFileName"), - get_check_translation("ModelCheckerInstanceName"), - get_check_translation("ModelCheckerPinnedStatus") - ], formats=None, title='', last_line_style='') + output.print_table( + rvtlinks_data, + columns=[ + _t("ModelCheckerInstanceFileName"), + _t("ModelCheckerInstanceName"), + _t("ModelCheckerPinnedStatus"), + ], + formats=None, + title="", + last_line_style="", + ) # Make row - htmlRowRVTlinks = ( - dashboardRectMaker(rvtlinksCount, "RVTLinks", rvtlinksTres) + - dashboardRectMaker(rvtlinkspinnedCountTrue, "RVTLinks
pinned", rvtlinksPinnedTres) + htmlRowRVTlinks = dashboardRectMaker( + rvtlinksCount, "RVTLinks", rvtlinksTres + ) + dashboardRectMaker( + rvtlinkspinnedCountTrue, "RVTLinks
pinned", rvtlinksPinnedTres ) dashboardLeftMaker(htmlRowRVTlinks) output.print_md("---") ## Views dashboard section # print Views section header - output.print_md("# {}".format(get_check_translation("ModelCheckerViews"))) + output.print_md("# {}".format(_t("ModelCheckerViews"))) # Make row htmlRowViews = ( dashboardRectMaker(viewCount, "Views", viewTres) + + dashboardRectMaker(copiedView, "Copied Views", copiedViewTres) + dashboardRectMaker( - copiedView, "Copied Views", copiedViewTres - ) - + dashboardRectMaker( - viewsNotOnSheet, - "Views
not on Sheet", - viewNotOnSheetTres + viewsNotOnSheet, "Views
not on Sheet", viewNotOnSheetTres ) ) dashboardLeftMaker(htmlRowViews) @@ -795,27 +820,22 @@ def DocPhases(doc, links = []): output.print_md("# View Templates") # Make row - htmlRowViews = ( - dashboardRectMaker(len(viewTemplates), "View Templates", viewTemplatesTres) - + dashboardRectMaker(unusedViewTemplatesCount, "Unused View Templates", unusedViewTemplateTres) - + htmlRowViews = dashboardRectMaker( + len(viewTemplates), "View Templates", viewTemplatesTres + ) + dashboardRectMaker( + unusedViewTemplatesCount, "Unused View Templates", unusedViewTemplateTres ) dashboardLeftMaker(htmlRowViews) ## Schedule dashboard section # print Schedules section header - output.print_md("# {}".format(get_check_translation("ModelCheckerSchedules"))) + output.print_md("# {}".format(_t("ModelCheckerSchedules"))) # Make row - htmlRowSchedules = ( - dashboardRectMaker( - scheduleCount, "Schedules", scheduleTres - ) - + dashboardRectMaker( - scheduleNotOnSheet, - "Schedules
not on Sheet", - schedulesNotOnSheetTres - ) + htmlRowSchedules = dashboardRectMaker( + scheduleCount, "Schedules", scheduleTres + ) + dashboardRectMaker( + scheduleNotOnSheet, "Schedules
not on Sheet", schedulesNotOnSheetTres ) dashboardLeftMaker(htmlRowSchedules) @@ -824,25 +844,18 @@ def DocPhases(doc, links = []): output.print_md("# Sheets") # Make row - htmlRowSheets = ( - dashboardRectMaker(sheetCount, "Sheets", sheetsTres) - ) + htmlRowSheets = dashboardRectMaker(sheetCount, "Sheets", sheetsTres) dashboardLeftMaker(htmlRowSheets) ## Warnings dashboard section # print Warnings section header - output.print_md("# {}".format(get_check_translation("ModelCheckerWarnings"))) + output.print_md("# {}".format(_t("ModelCheckerWarnings"))) # Make row if allWarningsCount != 0: - htmlRowWarnings = ( - dashboardRectMaker( - allWarningsCount, "Warnings", warningsTres - ) - + dashboardRectMaker( - criticalWarningCount, - "Critical
Warnings", - criticalWarningsTres - ) + htmlRowWarnings = dashboardRectMaker( + allWarningsCount, "Warnings", warningsTres + ) + dashboardRectMaker( + criticalWarningCount, "Critical
Warnings", criticalWarningsTres ) dashboardLeftMaker(htmlRowWarnings) # warnings count per type doughnut @@ -853,54 +866,44 @@ def DocPhases(doc, links = []): "fontSize": 25, "fontColor": "#000", "fontStyle": "bold", - "position": "left" + "position": "left", } chartWarnings.options.legend = {"position": "top", "fullWidth": False} - chartWarnings.data.labels = [x.encode('UTF-8') for x in warnDescriptionHeadings] + chartWarnings.data.labels = [x.encode("UTF-8") for x in warnDescriptionHeadings] set_w = chartWarnings.data.new_dataset("Not Standard") set_w.data = warnSet set_w.backgroundColor = COLORS chartWarnings.draw() else: - output.print_md(get_check_translation("ModelCheckerNoWarnings")) + output.print_md(_t("ModelCheckerNoWarnings")) ## Materials dashboard section # print Materials section header - output.print_md("# {}".format(get_check_translation("ModelCheckerMaterials"))) + output.print_md("# {}".format(_t("ModelCheckerMaterials"))) # Make row - htmlRowMaterials = ( - dashboardRectMaker( - materialCount, "Materials", materialsTres - ) - ) + htmlRowMaterials = dashboardRectMaker(materialCount, "Materials", materialsTres) dashboardLeftMaker(htmlRowMaterials) ## Line patterns dashboard section # print Line patterns section header - output.print_md("# {}".format(get_check_translation("ModelCheckerLinePatterns"))) + output.print_md("# {}".format(_t("ModelCheckerLinePatterns"))) # Make row - htmlRowLinePatterns = (dashboardRectMaker( - linePatternCount, "Line Patterns", linePatternsTres - ) + htmlRowLinePatterns = dashboardRectMaker( + linePatternCount, "Line Patterns", linePatternsTres ) dashboardLeftMaker(htmlRowLinePatterns) ## DWGs dashboard section # print DWGs section header - output.print_md("# {}".format(get_check_translation("ModelCheckerDWGs"))) + output.print_md("# {}".format(_t("ModelCheckerDWGs"))) # Make row - htmlRowDWGs = (dashboardRectMaker( - importedDwg, "Imported DWGs", importedDwgTres - ) - + dashboardRectMaker( - linkedDwg, "Linked DWGs", linkedDwgTres - ) - + dashboardRectMaker( - dwgNotCurrentView, "DWGs in 3D", dwgNotCurrentViewTres - ) + htmlRowDWGs = ( + dashboardRectMaker(importedDwg, "Imported DWGs", importedDwgTres) + + dashboardRectMaker(linkedDwg, "Linked DWGs", linkedDwgTres) + + dashboardRectMaker(dwgNotCurrentView, "DWGs in 3D", dwgNotCurrentViewTres) ) dashboardLeftMaker(htmlRowDWGs) @@ -912,9 +915,7 @@ def DocPhases(doc, links = []): graphCatHeadings = [] graphCatData = [] elements = ( - DB.FilteredElementCollector(doc) - .WhereElementIsNotElementType() - .ToElements() + DB.FilteredElementCollector(doc).WhereElementIsNotElementType().ToElements() ) catBanlist = [ @@ -962,7 +963,6 @@ def DocPhases(doc, links = []): for i in graphCatHeadings: count = graphCatData.count(i) catSet.append(count) - graphCatHeadings = [x.encode("UTF8") for x in graphCatHeadings] @@ -970,26 +970,19 @@ def DocPhases(doc, links = []): htmlRowLoadableFamilies = ( dashboardRectMaker(familyCount, "Families", familiesTres) + dashboardRectMaker( - inPlaceFamilyCount, - "In Place
Families", - inPlaceFamilyTres + inPlaceFamilyCount, "In Place
Families", inPlaceFamilyTres ) + dashboardRectMaker( - NotParamFamiliesCount, - "Families
not parametric", - notParamFamiliesTres + NotParamFamiliesCount, "Families
not parametric", notParamFamiliesTres ) + dashboardRectMaker( - generic_model_elements_count, - "Generic models", - genericModelTres + generic_model_elements_count, "Generic models", genericModelTres ) ) dashboardLeftMaker(htmlRowLoadableFamilies) - if inPlaceFamilyCount != 0: - # INPLACE CATEGORY GRAPH + # INPLACE CATEGORY GRAPH fCatSet = [] # sorting results in chart legend graphFCatHeadings.sort() @@ -1008,7 +1001,7 @@ def DocPhases(doc, links = []): "fontSize": 25, "fontColor": "#000", "fontStyle": "bold", - "position": "left" + "position": "left", } chartFCategories.data.labels = graphFCatHeadings set_a = chartFCategories.data.new_dataset("Not Standard") @@ -1032,105 +1025,74 @@ def DocPhases(doc, links = []): ## Text Notes dashboard section # print Text Notes section header - output.print_md("# {}".format(get_check_translation("ModelCheckerTextNotes"))) + output.print_md("# {}".format(_t("ModelCheckerTextNotes"))) # Make row - htmlRowTextNotes = (dashboardRectMaker( - textnoteWFcount, - "Text - Width
Factor changed", - textnoteWFtres - ) - + dashboardRectMaker( - capsCount, "Text - AllCaps", textnoteCaps - ) - ) + htmlRowTextNotes = dashboardRectMaker( + textnoteWFcount, "Text - Width
Factor changed", textnoteWFtres + ) + dashboardRectMaker(capsCount, "Text - AllCaps", textnoteCaps) dashboardLeftMaker(htmlRowTextNotes) ## System families dashboard section # print System families section header - output.print_md("# {}".format(get_check_translation("ModelCheckerSystemFamilies"))) + output.print_md("# {}".format(_t("ModelCheckerSystemFamilies"))) # Make row - htmlRowTextNotes = (dashboardRectMaker( - ramp_collector, "Ramps", rampTres) - + dashboardRectMaker( - archColumn_collector, - "Architecural
Columns", - archTres - ) + htmlRowTextNotes = ( + dashboardRectMaker(ramp_collector, "Ramps", rampTres) + + dashboardRectMaker(archColumn_collector, "Architecural
Columns", archTres) + dashboardRectMaker( - activated_analytical_model_elements_count, - "elements with analytical model activated", - activated_analytical_model_elements_count_tres + activated_analytical_model_elements_count, + "elements with analytical model activated", + activated_analytical_model_elements_count_tres, ) ) dashboardLeftMaker(htmlRowTextNotes) - ## Groups dashboard section # print Groups section header - output.print_md("# {}".format(get_check_translation("ModelCheckerGroups"))) + output.print_md("# {}".format(_t("ModelCheckerGroups"))) # Make row - htmlRowGroupsTypes = ( - dashboardRectMaker( - detailGroupTypeCount, - "Detail Group
Types", - detailGroupTypeTres - ) - + dashboardRectMaker( - modelGroupTypeCount, - "Model Group
Types", - modelGroupTypeTres - ) + htmlRowGroupsTypes = dashboardRectMaker( + detailGroupTypeCount, "Detail Group
Types", detailGroupTypeTres + ) + dashboardRectMaker( + modelGroupTypeCount, "Model Group
Types", modelGroupTypeTres ) dashboardLeftMaker(htmlRowGroupsTypes) - htmlRowGroups = (dashboardRectMaker( - detailGroupCount, "Detail Groups", detailGroupTres - ) - + dashboardRectMaker( - modelGroupCount, "Model Groups", modelGroupTres - ) - ) + htmlRowGroups = dashboardRectMaker( + detailGroupCount, "Detail Groups", detailGroupTres + ) + dashboardRectMaker(modelGroupCount, "Model Groups", modelGroupTres) dashboardLeftMaker(htmlRowGroups) ## Reference Planes dashboard section # print Reference Planes section header - output.print_md("# {}".format(get_check_translation("ModelCheckerReferencePlanes"))) + output.print_md("# {}".format(_t("ModelCheckerReferencePlanes"))) # Make row - htmlRowRefPlanes = ( - dashboardRectMaker( - noNameRefPCount, - "NoName
Reference Planes", - noNameRefPTres - ) - + dashboardRectMaker( - RefPCount, - "Reference Planes", - RefPTres - ) - ) + htmlRowRefPlanes = dashboardRectMaker( + noNameRefPCount, "NoName
Reference Planes", noNameRefPTres + ) + dashboardRectMaker(RefPCount, "Reference Planes", RefPTres) dashboardLeftMaker(htmlRowRefPlanes) ## Phases dashboard section # print Phases section header - output.print_md("# {}\n".format(get_check_translation("ModelCheckerPhases"))) - rvtlinkdocsName.insert(0,printedName) - filePhases = rvtlinkdocsName,[','.join(i) for i in phase] - output.print_table(zip(*filePhases), columns=[ - get_check_translation("ModelCheckerInstanceFileName"), - get_check_translation("ModelCheckerPhases") - ], formats=None, title='', last_line_style='') + output.print_md("# {}\n".format(_t("ModelCheckerPhases"))) + rvtlinkdocsName.insert(0, printedName) + filePhases = rvtlinkdocsName, [",".join(i) for i in phase] + output.print_table( + zip(*filePhases), + columns=[_t("ModelCheckerInstanceFileName"), _t("ModelCheckerPhases")], + formats=None, + title="", + last_line_style="", + ) ## Elements count dashboard section # print Elements count section header - output.print_md("# {}".format(get_check_translation("ModelCheckerElementsCount"))) + output.print_md("# {}".format(_t("ModelCheckerElementsCount"))) # Make row - htmlRowElementsCount = (dashboardRectMaker( - elementCount, "Elements", elementsTres - ) - ) + htmlRowElementsCount = dashboardRectMaker(elementCount, "Elements", elementsTres) dashboardLeftMaker(htmlRowElementsCount) # divider @@ -1173,9 +1135,7 @@ def DocPhases(doc, links = []): graphWorksetsData = [] elcollector = ( - DB.FilteredElementCollector(doc) - .WhereElementIsNotElementType() - .ToElements() + DB.FilteredElementCollector(doc).WhereElementIsNotElementType().ToElements() ) if doc.IsWorkshared: worksetTable = doc.GetWorksetTable() @@ -1184,8 +1144,16 @@ def DocPhases(doc, links = []): worksetKind = str(worksetTable.GetWorkset(worksetId).Kind) if worksetKind == "UserWorkset": worksetName = worksetTable.GetWorkset(worksetId).Name - if hasattr(element, "Name") and hasattr(element, "Category") and hasattr(element.Category, "Name"): - if element.Name not in ('DefaultLocation', '', None) or element.Category.Name not in ('', None): + if ( + hasattr(element, "Name") + and hasattr(element, "Category") + and hasattr(element.Category, "Name") + ): + if element.Name not in ( + "DefaultLocation", + "", + None, + ) or element.Category.Name not in ("", None): # Removes the location objects from the list as well as empty elements or proxies if worksetName not in worksetNames: worksetNames.append(worksetName) @@ -1227,23 +1195,18 @@ def DocPhases(doc, links = []): chartWorksets.set_height(200) chartWorksets.draw() + class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_ModelChecker" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_ModelChecker") - + name = _t("CheckName_ModelChecker") author = "David Vadkerti, Jean-Marc Couffin" - def startTest(self, doc, output): timer = coreutils.Timer() checkModel(doc, output) endtime = timer.get_time() endtime_hms = str(datetime.timedelta(seconds=endtime)) - from check_translations import get_check_translation - endtime_hms_claim = "{} {}".format(get_check_translation("TransactionTook"), endtime_hms) + endtime_hms_claim = "{} {}".format(_t("TransactionTook"), endtime_hms) print(endtime_hms_claim) + + +ModelChecker.__doc__ = _t("CheckDescription_ModelChecker") diff --git a/extensions/pyRevitTools.extension/checks/radar_check.py b/extensions/pyRevitTools.extension/checks/radar_check.py index a9dab66a7f..c236d547ec 100644 --- a/extensions/pyRevitTools.extension/checks/radar_check.py +++ b/extensions/pyRevitTools.extension/checks/radar_check.py @@ -3,25 +3,27 @@ import math from pyrevit import revit, DB, DOCS, HOST_APP from pyrevit import script -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta + +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + doc = DOCS.doc # Current Document output = script.get_output() divider = "_" * 120 INTERNAL_ORIGIN = (0, 0, 0) EXTENT_DISTANCE = 52800 # Linear Feet -BAD_STRG = '### :thumbs_down_medium_skin_tone: ............' -GOOD_STRG = '### :OK_hand_medium_skin_tone: ............' -WARN_STRG = '### :warning: ............' -CRITERIA_STRG = '10 Mi (16KM) away from the Internal Origin.' +BAD_STRG = "### :thumbs_down_medium_skin_tone: ............" +GOOD_STRG = "### :OK_hand_medium_skin_tone: ............" +WARN_STRG = "### :warning: ............" +CRITERIA_STRG = "10 Mi (16KM) away from the Internal Origin." def class_collectors(document=doc, class_type=None): @@ -35,14 +37,17 @@ def class_collectors(document=doc, class_type=None): elements (list): A list of elements of the specified class type. """ if class_type: - return (DB.FilteredElementCollector(document). - WhereElementIsNotElementType(). - OfClass(class_type). - ToElementIds()) + return ( + DB.FilteredElementCollector(document) + .WhereElementIsNotElementType() + .OfClass(class_type) + .ToElementIds() + ) else: - return (DB.FilteredElementCollector(document). - WhereElementIsNotElementType. - ToElementIds()) + return DB.FilteredElementCollector( + document + ).WhereElementIsNotElementType.ToElementIds() + def make_temp_view(document=doc): """ @@ -53,25 +58,29 @@ def make_temp_view(document=doc): Returns: view (View3D): The temporary 3D view. """ - view_3D_types = (DB.FilteredElementCollector(document) - .OfClass(DB.ViewFamilyType) - .WhereElementIsElementType() - .ToElements()) + view_3D_types = ( + DB.FilteredElementCollector(document) + .OfClass(DB.ViewFamilyType) + .WhereElementIsElementType() + .ToElements() + ) three_d_view_type = next( - v for v in view_3D_types - if v.ViewFamily == DB.ViewFamily.ThreeDimensional - ) - + v for v in view_3D_types if v.ViewFamily == DB.ViewFamily.ThreeDimensional + ) + view = DB.View3D.CreateIsometric(document, three_d_view_type.Id) - worksets = (DB.FilteredWorksetCollector(document). - OfKind(DB.WorksetKind.UserWorkset). - ToWorksets()) + worksets = ( + DB.FilteredWorksetCollector(document) + .OfKind(DB.WorksetKind.UserWorkset) + .ToWorksets() + ) for ws in worksets: view.SetWorksetVisibility(ws.Id, DB.WorksetVisibility.Visible) view.IsSectionBoxActive = False view.IsSectionBoxActive = True return view + def get_temp_view_bbox(document=doc, element=None): """ Gets the bounding box of the 3D view. @@ -89,13 +98,11 @@ def get_temp_view_bbox(document=doc, element=None): return bbox -def hide_linked_elements(document=doc, - view=None, - hide_cads=True, - hide_rvts=True): + +def hide_linked_elements(document=doc, view=None, hide_cads=True, hide_rvts=True): """ Hides all Revit Links and CAD Links in the 3D view - + Args: doc (Document): The current document. view (View3D): The 3D view to hide the elements in. @@ -111,7 +118,8 @@ def hide_linked_elements(document=doc, view.HideElements(revit_link_types) if cads_link_types and hide_cads: (view.HideElements(cads_link_types)) - + + def get_all_cads(document=doc): """ Gets all CAD Links in the model. @@ -119,10 +127,11 @@ def get_all_cads(document=doc): doc (Document): The current document. Returns: cads (list): A list of CAD Links in the model. - """ + """ cads = class_collectors(document, DB.ImportInstance) return cads + def get_all_rvts(document=doc): """ Gets all Revit Links in the model. @@ -130,10 +139,11 @@ def get_all_rvts(document=doc): doc (Document): The current document. Returns: rvts (list): A list of Revit Links in the model. - """ + """ rvts = class_collectors(document, DB.RevitLinkInstance) return rvts + def get_far_elements(document=doc, cad=False, rvt=False): """ Gets all elements that are more than 10 miles from the internal origin. @@ -145,46 +155,46 @@ def get_far_elements(document=doc, cad=False, rvt=False): Returns: bad_elements (list): A list of elements that are more than 10 miles from the internal origin. - """ + """ # region determine elements to check bad_elements = [] temp_view = make_temp_view(document) if cad: - elementsids = (get_all_cads(document)) + elementsids = get_all_cads(document) elif rvt: - elementsids = (get_all_rvts(document)) + elementsids = get_all_rvts(document) elif not cad and not rvt: - hide_linked_elements(document, - temp_view, - hide_cads=True, - hide_rvts=True) + hide_linked_elements(document, temp_view, hide_cads=True, hide_rvts=True) temp_view.IsSectionBoxActive = True temp_view.IsSectionBoxActive = False - elementsids = (DB.FilteredElementCollector(document, temp_view.Id). - WhereElementIsNotElementType(). - ToElementIds()) + elementsids = ( + DB.FilteredElementCollector(document, temp_view.Id) + .WhereElementIsNotElementType() + .ToElementIds() + ) # endregion # region Check Bounding Box and report bad elements for elementid in elementsids: element = document.GetElement(elementid) - if ((element.get_BoundingBox(temp_view)) - and (hasattr(element, 'Name') - and hasattr(element, 'Category')) - and ("Section Box" not in element.Name) + if ( + (element.get_BoundingBox(temp_view)) + and (hasattr(element, "Name") and hasattr(element, "Category")) + and ("Section Box" not in element.Name) and ("3D View" not in element.Name) - and (element.Category.Name != "Cameras") - and (element.Category.Name != "Levels") - and (element.Category.Name != "Grids")): + and (element.Category.Name != "Cameras") + and (element.Category.Name != "Levels") + and (element.Category.Name != "Grids") + ): bbox = element.get_BoundingBox(temp_view) - if (check_bounding_box(bbox, INTERNAL_ORIGIN, EXTENT_DISTANCE) - == 0): + if check_bounding_box(bbox, INTERNAL_ORIGIN, EXTENT_DISTANCE) == 0: bad_elements.append(element) # endregion return bad_elements + def report_point(message, point, distance, document=doc, distance_only=False): """ - Reports the coordinates, distance and angle between a point and the + Reports the coordinates, distance and angle between a point and the internal origin. Args: message (str): The message to display. @@ -195,8 +205,13 @@ def report_point(message, point, distance, document=doc, distance_only=False): tuple: The message, the point coordinates, the distance, and the angle. """ angle = calculate_angle(point, INTERNAL_ORIGIN) - return (message, " " if distance_only else convert_values(document, point), - convert_units(distance, document), " " if distance_only else angle) + return ( + message, + " " if distance_only else convert_values(document, point), + convert_units(distance, document), + " " if distance_only else angle, + ) + def convert_values(document=doc, *values): """ @@ -209,18 +224,21 @@ def convert_values(document=doc, *values): """ if HOST_APP.is_newer_than(2021): - ui_units = (document.GetUnits().GetFormatOptions(DB.SpecTypeId.Length) - .GetUnitTypeId()) + ui_units = ( + document.GetUnits().GetFormatOptions(DB.SpecTypeId.Length).GetUnitTypeId() + ) else: - ui_units = (document.GetUnits().GetFormatOptions(DB.UnitType.UT_Length) - .DisplayUnits) + ui_units = ( + document.GetUnits().GetFormatOptions(DB.UnitType.UT_Length).DisplayUnits + ) return [ "{:.2f}".format(DB.UnitUtils.ConvertFromInternalUnits(val, ui_units)) - for value in values for val in ( - value if isinstance(value, tuple) else (value,)) + for value in values + for val in (value if isinstance(value, tuple) else (value,)) ] - + + def convert_units(distance, document=doc): """ Converts internal units to display units. @@ -229,20 +247,26 @@ def convert_units(distance, document=doc): document (Document): The document object containing unit settings. Returns: str: The distance converted to display units. - """ + """ if HOST_APP.is_newer_than(2021): - ui_units = DB.UnitFormatUtils.Format(units=document.GetUnits(), - specTypeId=DB.SpecTypeId.Length, - value=distance, - forEditing=True) + ui_units = DB.UnitFormatUtils.Format( + units=document.GetUnits(), + specTypeId=DB.SpecTypeId.Length, + value=distance, + forEditing=True, + ) else: - ui_units = DB.UnitFormatUtils.Format(units=document.GetUnits(), - unitType=DB.UnitType.UT_Length, - value=distance, maxAccuracy=False, - forEditing=True) + ui_units = DB.UnitFormatUtils.Format( + units=document.GetUnits(), + unitType=DB.UnitType.UT_Length, + value=distance, + maxAccuracy=False, + forEditing=True, + ) return ui_units + def calculate_distance(point1, point2): """ Calculates the distance between two points. @@ -253,10 +277,12 @@ def calculate_distance(point1, point2): distance (float): The distance between the two points.""" x1, y1, z1 = point1 x2, y2, z2 = point2 - distance =( #rounded to the nearest inch - math.sqrt((x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2)) + distance = math.sqrt( # rounded to the nearest inch + (x2 - x1) ** 2 + (y2 - y1) ** 2 + (z2 - z1) ** 2 + ) return distance + def calculate_horizontal_distance(point1, point2): """Calculates the horizontal distance between two points. Args: @@ -266,10 +292,11 @@ def calculate_horizontal_distance(point1, point2): distance (float): The horizontal distance between the two points.""" x1, y1, z1 = point1 x2, y2, z2 = point2 - distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2) + distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) return distance -def calculate_delta(point1, point2, delta='x'): + +def calculate_delta(point1, point2, delta="x"): """Calculates the delta X, Y or Z between two points. Args: point1 (tuple): The coordinates of the first point. @@ -279,14 +306,15 @@ def calculate_delta(point1, point2, delta='x'): delta (float): The delta between the two points.""" x1, y1, z1 = point1 x2, y2, z2 = point2 - if delta == 'x': + if delta == "x": delta = abs(x2 - x1) - elif delta == 'y': + elif delta == "y": delta = abs(y2 - y1) - elif delta == 'z': + elif delta == "z": delta = abs(z2 - z1) return delta + def calculate_angle(point1, point2): """ Calculates the angle between two points. @@ -302,6 +330,7 @@ def calculate_angle(point1, point2): angle = round(math.degrees(math.atan2(y2 - y1, x2 - x1)), 2) return angle + def points_distances_angles(point): """ Calculates the distances and angles between the internal origin and a point. @@ -322,6 +351,7 @@ def points_distances_angles(point): angles = convert_units(calculate_angle(point, INTERNAL_ORIGIN)) return x, y, z, distances, angles + def check_bounding_box(bbox, intorig, extentdistance): """ Checks if the domain of the bounding box is more than 10 @@ -334,13 +364,16 @@ def check_bounding_box(bbox, intorig, extentdistance): Status (int): The status of the bounding box.""" min = (bbox.Min.X, bbox.Min.Y, bbox.Min.Z) max = (bbox.Max.X, bbox.Max.Y, bbox.Max.Z) - if (calculate_distance(min, intorig) > extentdistance or - calculate_distance(max, intorig) > extentdistance): + if ( + calculate_distance(min, intorig) > extentdistance + or calculate_distance(max, intorig) > extentdistance + ): Status = 0 else: Status = 1 return Status + def get_project_base_and_survey_pts(document=doc): """ Gets the coordinates of the project base and survey points. @@ -351,17 +384,12 @@ def get_project_base_and_survey_pts(document=doc): survey_point_coordinates (tuple): The coordinates of the survey point. """ base_point = DB.BasePoint.GetProjectBasePoint(document).Position - base_point_coordinates = ( - base_point.X, - base_point.Y, - base_point.Z) + base_point_coordinates = (base_point.X, base_point.Y, base_point.Z) survey_point = DB.BasePoint.GetSurveyPoint(document).Position - survey_point_coordinates = ( - survey_point.X, - survey_point.Y, - survey_point.Z) + survey_point_coordinates = (survey_point.X, survey_point.Y, survey_point.Z) return base_point_coordinates, survey_point_coordinates + def get_model_units_type(document=doc): """ Gets the display unit system of the model. @@ -373,6 +401,7 @@ def get_model_units_type(document=doc): unitsystem = document.DisplayUnitSystem return unitsystem + def get_design_options_elements(document=doc): """ Gets the elements in each design option. @@ -385,21 +414,24 @@ def get_design_options_elements(document=doc): """ design_option_elements = [] design_option_sets = [] - design_options = (DB.FilteredElementCollector(document). - OfClass(DB.DesignOption). - ToElements()) + design_options = ( + DB.FilteredElementCollector(document).OfClass(DB.DesignOption).ToElements() + ) for do in design_options: option_set_param = DB.BuiltInParameter.OPTION_SET_ID option_set_id = do.get_Parameter(option_set_param).AsElementId() design_option_sets.append(option_set_id) design_option_filter = DB.ElementDesignOptionFilter(do.Id) - x = (DB.FilteredElementCollector(document). - WherePasses(design_option_filter). - ToElements()) + x = ( + DB.FilteredElementCollector(document) + .WherePasses(design_option_filter) + .ToElements() + ) design_option_elements.append(x) return design_options, design_option_elements, design_option_sets + def check_model_coordinates(document=doc): """ Checks and reports the coordinates of the project base and survey points. @@ -411,16 +443,16 @@ def check_model_coordinates(document=doc): unit_system = get_model_units_type(document=doc) # region HTML Styling output = script.get_output() - output.add_style('cover {color:black; font-size:24pt; font-weight:bold;}') - output.add_style('header {color:black; font-size:15pt;}') + output.add_style("cover {color:black; font-size:24pt; font-weight:bold;}") + output.add_style("header {color:black; font-size:15pt;}") # endregion # region Print Header output.print_html( - ('__________:satellite_antenna:__10-Mile Radar___________')) + ("__________:satellite_antenna:__10-Mile Radar___________") + ) print(divider) print("") - from check_translations import get_check_translation - output.print_md('# {}'.format(get_check_translation("RadarCheckingModelPlacement"))) + output.print_md("# {}".format(_t("RadarCheckingModelPlacement"))) print(divider) # endregion # region Check the distances of base and survey points @@ -428,48 +460,74 @@ def check_model_coordinates(document=doc): basptdistance = abs(calculate_distance(baspt, INTERNAL_ORIGIN)) surveydistance = abs(calculate_distance(survpt, INTERNAL_ORIGIN)) if abs(basptdistance > EXTENT_DISTANCE): - output.print_md('{} {} {}'. - format(BAD_STRG, get_check_translation("RadarBasePointMoreThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + BAD_STRG, _t("RadarBasePointMoreThan"), _t("Radar10MilesAway") + ) + ) if abs(surveydistance > EXTENT_DISTANCE): - output.print_md('{} {} {}'. - format(BAD_STRG, get_check_translation("RadarSurveyPointMoreThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + BAD_STRG, _t("RadarSurveyPointMoreThan"), _t("Radar10MilesAway") + ) + ) else: - output.print_md('{} {} {}'. - format(GOOD_STRG, get_check_translation("RadarSurveyPointLessThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + GOOD_STRG, _t("RadarSurveyPointLessThan"), _t("Radar10MilesAway") + ) + ) basptdistance = calculate_distance(baspt, INTERNAL_ORIGIN) # endregion # region Print Table tbdata = [ - report_point(get_check_translation("RadarProjectBasePointCoords"), - baspt, basptdistance), - report_point(get_check_translation("RadarSurveyPointCoords"), - survpt, surveydistance), - report_point(get_check_translation("RadarBaseToSurveyDeltaX"), - baspt, calculate_delta(baspt, survpt, delta = 'x'), - distance_only=True), - report_point(get_check_translation("RadarBaseToSurveyDeltaY"), - baspt, calculate_delta(baspt, survpt, delta = 'y'), - distance_only=True), - report_point(get_check_translation("RadarPlanarDistance"), - baspt, calculate_horizontal_distance(baspt, survpt), - distance_only=True), - report_point(get_check_translation("RadarTotalDistance"), - baspt, calculate_distance(baspt, survpt), - distance_only=True), - report_point(get_check_translation("RadarProjectElevation"), - baspt, calculate_delta(baspt, survpt, delta = 'z'), - distance_only=True) + report_point(_t("RadarProjectBasePointCoords"), baspt, basptdistance), + report_point(_t("RadarSurveyPointCoords"), survpt, surveydistance), + report_point( + _t("RadarBaseToSurveyDeltaX"), + baspt, + calculate_delta(baspt, survpt, delta="x"), + distance_only=True, + ), + report_point( + _t("RadarBaseToSurveyDeltaY"), + baspt, + calculate_delta(baspt, survpt, delta="y"), + distance_only=True, + ), + report_point( + _t("RadarPlanarDistance"), + baspt, + calculate_horizontal_distance(baspt, survpt), + distance_only=True, + ), + report_point( + _t("RadarTotalDistance"), + baspt, + calculate_distance(baspt, survpt), + distance_only=True, + ), + report_point( + _t("RadarProjectElevation"), + baspt, + calculate_delta(baspt, survpt, delta="z"), + distance_only=True, + ), ] - output.print_table(table_data=tbdata, - title=get_check_translation("RadarProjectCoordinates"), - columns= - [get_check_translation("RadarPoints"), - ' ' + get_check_translation("RadarXYZCoordinates"), - ' {} ({} ) '.format(get_check_translation("RadarDistance"), str(unit_system)), - ' {} '.format(get_check_translation("RadarAngle"))], - formats=['', '' , '', '', '', '']) + output.print_table( + table_data=tbdata, + title=_t("RadarProjectCoordinates"), + columns=[ + _t("RadarPoints"), + " " + _t("RadarXYZCoordinates"), + " {} ({} ) ".format(_t("RadarDistance"), str(unit_system)), + " {} ".format(_t("RadarAngle")), + ], + formats=["", "", "", "", "", ""], + ) # endregion + def check_model_extents(document=doc): """ Checks the extents of all elements in the model. @@ -478,25 +536,33 @@ def check_model_extents(document=doc): Returns: Test Score (int): The score of the test. """ - from check_translations import get_check_translation print("") - output.print_md('# {}'.format(get_check_translation("RadarChecking3DViewBBox"))) + output.print_md("# {}".format(_t("RadarChecking3DViewBBox"))) bbox = get_temp_view_bbox(document) min = (bbox.Min.X, bbox.Min.Y, bbox.Min.Z) max = (bbox.Max.X, bbox.Max.Y, bbox.Max.Z) print("") print(divider) print("") - if (calculate_distance(min, INTERNAL_ORIGIN) > EXTENT_DISTANCE or - calculate_distance(max, INTERNAL_ORIGIN) > EXTENT_DISTANCE): - output.print_md('{} {} {}'. - format(BAD_STRG, get_check_translation("Radar3DViewBBoxMoreThan"), get_check_translation("Radar10MilesAway"))) + if ( + calculate_distance(min, INTERNAL_ORIGIN) > EXTENT_DISTANCE + or calculate_distance(max, INTERNAL_ORIGIN) > EXTENT_DISTANCE + ): + output.print_md( + "{} {} {}".format( + BAD_STRG, _t("Radar3DViewBBoxMoreThan"), _t("Radar10MilesAway") + ) + ) return 0 else: - output.print_md('{} {} {}'. - format(GOOD_STRG, get_check_translation("Radar3DViewBBoxLessThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + GOOD_STRG, _t("Radar3DViewBBoxLessThan"), _t("Radar10MilesAway") + ) + ) return 1 + def check_design_options(document=doc): """ Checks the extents of the design options in the model. @@ -505,17 +571,16 @@ def check_design_options(document=doc): Returns: Test Score (int): The score of the test. """ - from check_translations import get_check_translation print("") print(divider) - output.print_md('# {}'.format(get_check_translation("RadarCheckingDesignOptions"))) + output.print_md("# {}".format(_t("RadarCheckingDesignOptions"))) print(divider) design_option_objects = get_design_options_elements(document) violating_design_option_objects = [] violating_options = [] violating_option_sets = [] option_set_param = DB.BuiltInParameter.OPTION_SET_ID - + for x in design_option_objects[1]: for y in x: dbbox = y.get_BoundingBox(None) @@ -524,45 +589,50 @@ def check_design_options(document=doc): else: dbmin = (dbbox.Min.X, dbbox.Min.Y, dbbox.Min.Z) dbmax = (dbbox.Max.X, dbbox.Max.Y, dbbox.Max.Z) - if (calculate_distance(dbmin, INTERNAL_ORIGIN) > EXTENT_DISTANCE - or - calculate_distance(dbmax, INTERNAL_ORIGIN) > EXTENT_DISTANCE): + if ( + calculate_distance(dbmin, INTERNAL_ORIGIN) > EXTENT_DISTANCE + or calculate_distance(dbmax, INTERNAL_ORIGIN) > EXTENT_DISTANCE + ): violating_design_option_objects.append(y) if y.DesignOption.Name not in violating_options: violating_options.append(y.DesignOption) violating_option_sets.append( - y.DesignOption. - get_Parameter(option_set_param). - AsElementId()) + y.DesignOption.get_Parameter(option_set_param).AsElementId() + ) if len(violating_design_option_objects) > 0: - output.print_md('{} {} {}'. - format(BAD_STRG, get_check_translation("RadarDesignOptionsMoreThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + BAD_STRG, _t("RadarDesignOptionsMoreThan"), _t("Radar10MilesAway") + ) + ) if len(violating_design_option_objects) > 10: - output.print_md('{} {}'. - format(WARN_STRG, get_check_translation("RadarShowingFirst10"))) - output.print_md('{} {}'. - format(WARN_STRG, get_check_translation("RadarManualInvestigation"))) + output.print_md("{} {}".format(WARN_STRG, _t("RadarShowingFirst10"))) + output.print_md("{} {}".format(WARN_STRG, _t("RadarManualInvestigation"))) counter = 0 limit = 10 violating_design_option_objects = violating_design_option_objects[:limit] for x in violating_design_option_objects: setid = violating_option_sets[counter] - print(output.linkify(x.Id) + - " " + - str(x.Name) + - " - {} ".format(get_check_translation("RadarIsPartOf")) + - str(doc.GetElement(setid).Name) + - " - " + - str(x.DesignOption.Name) - ) + print( + output.linkify(x.Id) + + " " + + str(x.Name) + + " - {} ".format(_t("RadarIsPartOf")) + + str(doc.GetElement(setid).Name) + + " - " + + str(x.DesignOption.Name) + ) counter += 1 return 0 else: output.print_md( - '{} {} {}'. - format(GOOD_STRG, get_check_translation("RadarNoObjectInDesignOption"), get_check_translation("Radar10MilesAway"))) + "{} {} {}".format( + GOOD_STRG, _t("RadarNoObjectInDesignOption"), _t("Radar10MilesAway") + ) + ) return 1 + def check_linked_elements(document=doc): """ Checks the extents of the CAD and RVT links in the model. @@ -573,9 +643,8 @@ def check_linked_elements(document=doc): """ # region collect bad cads and rvts limit = 5 - from check_translations import get_check_translation print(divider) - output.print_md('# {}'.format(get_check_translation("RadarCheckingCADRVT"))) + output.print_md("# {}".format(_t("RadarCheckingCADRVT"))) print(divider) badcads = get_far_elements(doc, cad=True, rvt=False) badcads = badcads[:limit] @@ -585,17 +654,22 @@ def check_linked_elements(document=doc): # region Print Results if badcads: for x in badcads: - print(output.linkify(x.Id)+"__" + - str(x.Name) + ' ' + str(x.Category.Name)) + print( + output.linkify(x.Id) + "__" + str(x.Name) + " " + str(x.Category.Name) + ) if badrvts: for x in badrvts: - print(output.linkify(x.Id)+"__" + - str(x.Name) + ' ' + str(x.Category.Name)) + print( + output.linkify(x.Id) + "__" + str(x.Name) + " " + str(x.Category.Name) + ) else: - output.print_md('{} {} {}'. - format(GOOD_STRG, get_check_translation("RadarAllCADRVTLessThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + GOOD_STRG, _t("RadarAllCADRVTLessThan"), _t("Radar10MilesAway") + ) + ) test_score = 2 print(divider) # endregion @@ -603,59 +677,58 @@ def check_linked_elements(document=doc): hide_linked_elements(document, make_temp_view(document), True, True) cleanbbox = get_temp_view_bbox(doc) if check_bounding_box(cleanbbox, INTERNAL_ORIGIN, EXTENT_DISTANCE) == 0: - output.print_md('{} {}'. - format(BAD_STRG, get_check_translation("RadarDistantObjectsDetected"))) - output.print_md('{} {}'.format(WARN_STRG, get_check_translation("RadarFurtherAnalysis"))) + output.print_md("{} {}".format(BAD_STRG, _t("RadarDistantObjectsDetected"))) + output.print_md("{} {}".format(WARN_STRG, _t("RadarFurtherAnalysis"))) else: - output.print_md('{} {} {}'. - format(GOOD_STRG, get_check_translation("RadarAllObjectsLessThan"), get_check_translation("Radar10MilesAway"))) + output.print_md( + "{} {} {}".format( + GOOD_STRG, _t("RadarAllObjectsLessThan"), _t("Radar10MilesAway") + ) + ) script.exit() # endregion - from check_translations import get_check_translation print(divider) - output.print_md('# {}'.format(get_check_translation("RadarCheckingEverything"))) - output.print_md('# {}'.format(get_check_translation("RadarPleaseBePatient"))) + output.print_md("# {}".format(_t("RadarCheckingEverything"))) + output.print_md("# {}".format(_t("RadarPleaseBePatient"))) -def check_all_elements(document=doc): + +def check_all_elements(document=doc): """ Checks the extents of all elements in the model. Args: doc (Document): The current document. Returns: None - """ + """ print(divider) - badelements = get_far_elements(document,False, False) + badelements = get_far_elements(document, False, False) limit = 10 badelements = badelements[:limit] if badelements: - from check_translations import get_check_translation if len(badelements) > limit: - output.print_md('{} {}'. - format(WARN_STRG, get_check_translation("RadarShowingFirst10"))) - output.print_md('{} {}'. - format(WARN_STRG, get_check_translation("RadarManualInvestigation"))) - output.print_md('{} {} {}'. - format(BAD_STRG, get_check_translation("RadarElementsMoreThan"), get_check_translation("Radar10MilesAway"))) + output.print_md("{} {}".format(WARN_STRG, _t("RadarShowingFirst10"))) + output.print_md("{} {}".format(WARN_STRG, _t("RadarManualInvestigation"))) + output.print_md( + "{} {} {}".format( + BAD_STRG, _t("RadarElementsMoreThan"), _t("Radar10MilesAway") + ) + ) for x in badelements: - print(output.linkify(x.Id)+ ' ' + - str(x.Name) + ' ' + str(x.Category.Name)) + print( + output.linkify(x.Id) + " " + str(x.Name) + " " + str(x.Category.Name) + ) else: - from check_translations import get_check_translation - output.print_md('{} {} {}'. - format(GOOD_STRG, get_check_translation("RadarAllObjectsLessThan"), get_check_translation("Radar10MilesAway"))) - output.print_md('# {}'.format(get_check_translation("RadarAllTestsCompleted"))) + output.print_md( + "{} {} {}".format( + GOOD_STRG, _t("RadarAllObjectsLessThan"), _t("Radar10MilesAway") + ) + ) + output.print_md("# {}".format(_t("RadarAllTestsCompleted"))) + class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_10MileRadar" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_10MileRadar") - + name = _t("CheckName_10MileRadar") author = "Tay Othman" def setUp(self, doc, output): @@ -666,21 +739,34 @@ def startTest(self, doc, output): check_model_coordinates(doc) task_1 = check_model_extents(doc) task_2 = check_design_options(doc) - from check_translations import get_check_translation if task_1 + task_2 < 2: output.print_md( - ('{} {} {}'. - format(BAD_STRG, get_check_translation("Radar3DViewBBoxMoreThan"), get_check_translation("Radar10MilesAway")))) + ( + "{} {} {}".format( + BAD_STRG, + _t("Radar3DViewBBoxMoreThan"), + _t("Radar10MilesAway"), + ) + ) + ) check_linked_elements(doc) check_all_elements(doc) else: output.print_md( - ('{} {} {}'. - format(GOOD_STRG, get_check_translation("Radar3DViewBBoxLessThan"), get_check_translation("Radar10MilesAway")))) - + ( + "{} {} {}".format( + GOOD_STRG, + _t("Radar3DViewBBoxLessThan"), + _t("Radar10MilesAway"), + ) + ) + ) def tearDown(self, doc, output): pass def doCleanups(self, doc, output): pass + + +ModelChecker.__doc__ = _t("CheckDescription_10MileRadar") diff --git a/extensions/pyRevitTools.extension/checks/refplanes_check.py b/extensions/pyRevitTools.extension/checks/refplanes_check.py index 42e0c8de73..03facfd639 100644 --- a/extensions/pyRevitTools.extension/checks/refplanes_check.py +++ b/extensions/pyRevitTools.extension/checks/refplanes_check.py @@ -1,25 +1,21 @@ # -*- coding: UTF-8 -*- import datetime +import os from pyrevit import coreutils -from pyrevit import script -from pyrevit import revit, DB +from pyrevit import DB +from pyrevit.coreutils import applocales +from pyrevit.preflight import PreflightTestCase -import sys -import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) -from pyrevit.preflight import PreflightTestCase -from pyrevit.compat import safe_strtype -from check_translations import DocstringMeta def checkModel(doc, output): - from check_translations import get_check_translation - - output.print_md("### {0}
".format(get_check_translation("ReferencePlanes"))) + output.print_md("### {0}
".format(_t("ReferencePlanes"))) # reference plane without name refPlaneCollector = ( DB.FilteredElementCollector(doc) @@ -27,35 +23,30 @@ def checkModel(doc, output): .ToElements() ) RefPCount = len(refPlaneCollector) - output.print_md("\n**{0} **{1} \n\n".format(get_check_translation("ReferencePlanesCount"), RefPCount)) + output.print_md("\n**{0} **{1} \n\n".format(_t("ReferencePlanesCount"), RefPCount)) noNameRefPCount = 0 - + refPlaneList, refPlanNames = [], [] for refPlane in refPlaneCollector: refPlaneList.append(refPlane.Id) refPlanNames.append(refPlane.Name) output.print_md("{0} {1}\t\t{2} {3}" - .format(get_check_translation("NameLabel"), refPlane.Name, - get_check_translation("IdLabel"), output.linkify(refPlane.Id))) + .format(_t("NameLabel"), refPlane.Name, + _t("IdLabel"), output.linkify(refPlane.Id))) + class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_ReferencePlanLister" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_ReferencePlanLister") - + name = _t("CheckName_ReferencePlanLister") author = "Jean-Marc Couffin" - def startTest(self, doc, output): timer = coreutils.Timer() checkModel(doc, output) endtime = timer.get_time() endtime_hms = str(datetime.timedelta(seconds=endtime)) - from check_translations import get_check_translation - endtime_hms_claim = "{} {}".format(get_check_translation("TransactionTook"), endtime_hms) + endtime_hms_claim = "{} {}".format(_t("TransactionTook"), endtime_hms) print(endtime_hms_claim) + + +ModelChecker.__doc__ = _t("CheckDescription_ReferencePlanLister") diff --git a/extensions/pyRevitTools.extension/checks/schedules_not_on_sheet_check.py b/extensions/pyRevitTools.extension/checks/schedules_not_on_sheet_check.py index 9dcd3aff37..1c2507c038 100644 --- a/extensions/pyRevitTools.extension/checks/schedules_not_on_sheet_check.py +++ b/extensions/pyRevitTools.extension/checks/schedules_not_on_sheet_check.py @@ -1,89 +1,90 @@ # -*- coding: UTF-8 -*- import datetime +import os from pyrevit import coreutils -from pyrevit import script from pyrevit import revit, DB from pyrevit import framework +from pyrevit.coreutils import applocales +from pyrevit.preflight import PreflightTestCase -import sys -import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +_XAML = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml" +) + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) -from pyrevit.preflight import PreflightTestCase -from pyrevit.compat import safe_strtype -from check_translations import DocstringMeta def checkModel(doc, output): - from check_translations import get_check_translation # heavily based on Views - Query view sheet placement in pyRevit scheduleviews = [] all_sheeted_view_ids = [] # Schedules need to be collected separately - schedule_views = DB.FilteredElementCollector(revit.doc)\ - .OfClass(framework.get_type(DB.ViewSchedule))\ - .WhereElementIsNotElementType()\ - .ToElements() + schedule_views = ( + DB.FilteredElementCollector(revit.doc) + .OfClass(framework.get_type(DB.ViewSchedule)) + .WhereElementIsNotElementType() + .ToElements() + ) for sv in schedule_views: scheduleviews.append(sv) - # Now collecting all sheets and find all sheeted views - sheets = DB.FilteredElementCollector(revit.doc)\ - .OfCategory(DB.BuiltInCategory.OST_Sheets)\ - .WhereElementIsNotElementType()\ - .ToElements() + sheets = ( + DB.FilteredElementCollector(revit.doc) + .OfCategory(DB.BuiltInCategory.OST_Sheets) + .WhereElementIsNotElementType() + .ToElements() + ) for sht in sheets: vp_ids = [revit.doc.GetElement(x).ViewId for x in sht.GetAllViewports()] all_sheeted_view_ids.extend(vp_ids) - # Find all sheeted schedule views and add them to the list as well - allSheetedSchedules = DB.FilteredElementCollector(revit.doc)\ - .OfClass(DB.ScheduleSheetInstance)\ - .ToElements() + allSheetedSchedules = ( + DB.FilteredElementCollector(revit.doc) + .OfClass(DB.ScheduleSheetInstance) + .ToElements() + ) for ss in allSheetedSchedules: all_sheeted_view_ids.append(ss.ScheduleId) output.close_others() - output.print_md('### {}'.format(get_check_translation("SchedulesNotOnSheets"))) + output.print_md("### {}".format(_t("SchedulesNotOnSheets"))) for v in scheduleviews: if v.Id in all_sheeted_view_ids: continue else: - print('{0} {1}\t\t{2} {3}\t\t{4}'.format( - get_check_translation("TypeLabel"), - v.ViewType, - get_check_translation("IdLabel"), - output.linkify(v.Id), - revit.query.get_name(v))) + print( + "{0} {1}\t\t{2} {3}\t\t{4}".format( + _t("TypeLabel"), + v.ViewType, + _t("IdLabel"), + output.linkify(v.Id), + revit.query.get_name(v), + ) + ) + class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_SchedulesNotOnSheet" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_SchedulesNotOnSheet") - + name = _t("CheckName_SchedulesNotOnSheet") author = "Jean-Marc Couffin" - def startTest(self, doc, output): timer = coreutils.Timer() checkModel(doc, output) endtime = timer.get_time() endtime_hms = str(datetime.timedelta(seconds=endtime)) - from check_translations import get_check_translation - endtime_hms_claim = "{} {}".format(get_check_translation("TransactionTook"), endtime_hms) + endtime_hms_claim = "{} {}".format(_t("TransactionTook"), endtime_hms) print(endtime_hms_claim) + + +ModelChecker.__doc__ = _t("CheckDescription_SchedulesNotOnSheet") diff --git a/extensions/pyRevitTools.extension/checks/walltypes_naming_convention_check.py b/extensions/pyRevitTools.extension/checks/walltypes_naming_convention_check.py index e04c7c3e1c..3dbf3c205e 100644 --- a/extensions/pyRevitTools.extension/checks/walltypes_naming_convention_check.py +++ b/extensions/pyRevitTools.extension/checks/walltypes_naming_convention_check.py @@ -5,22 +5,21 @@ from collections import Counter # Revit-specific imports -from pyrevit import coreutils, revit, script, DOCS +from pyrevit import coreutils, script, DOCS from pyrevit.forms import pick_file from Autodesk.Revit.DB import BuiltInCategory, FilteredElementCollector -# Set up preflight for model check -import sys import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +from pyrevit.coreutils import applocales from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta -import json +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) + def pick_json(): # Set default directory @@ -31,8 +30,7 @@ def pick_json(): # Check if a file was selected if not json_file_path: - from check_translations import get_check_translation - raise FileNotFoundError(get_check_translation("NamingConventionNoFileSelected")) + raise FileNotFoundError(_t("NamingConventionNoFileSelected")) # Load JSON data with open(json_file_path, "r") as f: @@ -43,17 +41,22 @@ def pick_json(): def print_red(output, text): output.print_html('
{}
'.format(text)) + # Function to check the model's wall naming conventions def check_model(doc, output): """ Checks if wall types in the model match the allowed wall names list. Displays summary with correct and incorrect wall names. """ - from check_translations import get_check_translation - output.print_md('# {}'.format(get_check_translation("NamingConventionReport"))) + output.print_md("# {}".format(_t("NamingConventionReport"))) # Get all wall elements and their names - walls = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType().ToElements() + walls = ( + FilteredElementCollector(doc) + .OfCategory(BuiltInCategory.OST_Walls) + .WhereElementIsNotElementType() + .ToElements() + ) # Count occurrences of each wall name wall_counts = Counter((wall.Name for wall in walls)) @@ -65,37 +68,34 @@ def check_model(doc, output): # Prepare data for output table data = [ - (wall_type, count, get_check_translation("NamingConventionWrongName") if wall_type in wrong_wall_names else "") + ( + wall_type, + count, + _t("NamingConventionWrongName") if wall_type in wrong_wall_names else "", + ) for wall_type, count in wall_counts.items() ] # Print table and highlight incorrect wall names output.print_table( table_data=data, - title=get_check_translation("NamingConventionWallCheck"), + title=_t("NamingConventionWallCheck"), columns=[ - get_check_translation("NamingConventionWallType"), - get_check_translation("NamingConventionCount"), - get_check_translation("NamingConventionStatus") + _t("NamingConventionWallType"), + _t("NamingConventionCount"), + _t("NamingConventionStatus"), ], - formats=['', '{}', ''] + formats=["", "{}", ""], ) if wrong_wall_names: - output.print_md('## {}'.format(get_check_translation("NamingConventionIncorrectlyNamed"))) + output.print_md("## {}".format(_t("NamingConventionIncorrectlyNamed"))) for wrong in wrong_wall_names: print_red(output, wrong) class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_NamingConvention" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_NamingConvention") - + name = _t("CheckName_NamingConvention") author = "Andreas Draxl" def startTest(self, doc, output): @@ -103,8 +103,10 @@ def startTest(self, doc, output): check_model(doc, output) endtime = timer.get_time() endtime_hms = str(datetime.timedelta(seconds=endtime)) - from check_translations import get_check_translation - print("{} {}".format(get_check_translation("TransactionTook"), endtime_hms)) + print("{} {}".format(_t("TransactionTook"), endtime_hms)) + + +ModelChecker.__doc__ = _t("CheckDescription_NamingConvention") # Initialize variables diff --git a/extensions/pyRevitTools.extension/checks/worksets_content_check.py b/extensions/pyRevitTools.extension/checks/worksets_content_check.py index c695e9ce73..e19b6c38f3 100644 --- a/extensions/pyRevitTools.extension/checks/worksets_content_check.py +++ b/extensions/pyRevitTools.extension/checks/worksets_content_check.py @@ -1,18 +1,18 @@ # -*- coding: UTF-8 -*- import datetime +import os from pyrevit import coreutils from pyrevit import DB +from pyrevit.coreutils import applocales +from pyrevit.preflight import PreflightTestCase -import sys -import os -# Add current directory to path for local imports -_current_dir = os.path.dirname(os.path.abspath(__file__)) -if _current_dir not in sys.path: - sys.path.insert(0, _current_dir) +_XAML = os.path.join(os.path.dirname(os.path.abspath(__file__)), "locale", "Checks.xaml") + + +def _t(key): + return applocales.get_locale_string_from_xaml(_XAML, key) -from pyrevit.preflight import PreflightTestCase -from check_translations import DocstringMeta # LISTS # COLORS for chart.js graphs - chartCategories.randomize_colors() sometimes @@ -79,22 +79,6 @@ "#d9d9d9", "#9988bb", "#4d4d4d", - "#9988bb", - "#4d4d4d", - "#e97800", - "#a6c844", - "#4d4d4d", - "#fff0d9", - "#ffc299", - "#ff751a", - "#cc5200", - "#ff6666", - "#ffd480", - "#b33c00", - "#ff884d", - "#d9d9d9", - "#9988bb", - "#4d4d4d", "#e97800", "#a6c844", "#4d4d4d", @@ -155,6 +139,7 @@ "#a6c844", ] + def checkModel(doc, output): """Check given model""" @@ -182,25 +167,26 @@ def checkModel(doc, output): element_data.append(element.Category.Name) element_data.append(element.Name) element_data.append(element.Id) - # element_data.append(output.linkify(element.Id)) Does not seem to work due to massive amount of elements + # element_data.append(output.linkify(element.Id)) Does not seem to work due + # to massive amount of elements if worksetName not in worksets_names: worksets_names.append(worksetName) graph_workset_data.append(worksetName) - except: + except Exception: pass - - # make sure there is no empty data in the set of 4 data, this check allows the following lambda function to work - if len(element_data) == 4: + + # make sure there is no empty data in the set of 4 data, this check allows the following + # lambda function to work + if len(element_data) == 4: data.append(element_data) # sort by workset name - from check_translations import get_check_translation data = sorted(data, key=lambda x: x[0]) output.print_table(data, columns=[ - get_check_translation("WorksetName"), - get_check_translation("ElementCategory"), - get_check_translation("ElementName"), - get_check_translation("ElementId") + _t("WorksetName"), + _t("ElementCategory"), + _t("ElementName"), + _t("ElementId"), ]) # sorting results in chart legend @@ -217,7 +203,7 @@ def checkModel(doc, output): chartWorksets = output.make_doughnut_chart() chartWorksets.options.title = { "display": True, - "text": get_check_translation("ElementCountByWorkset"), + "text": _t("ElementCountByWorkset"), "fontSize": 25, "fontColor": "#000", "fontStyle": "bold", @@ -239,14 +225,7 @@ def checkModel(doc, output): class ModelChecker(PreflightTestCase): - __metaclass__ = DocstringMeta - _docstring_key = "CheckDescription_ElementsPerWorksets" - - @property - def name(self): - from check_translations import get_check_translation - return get_check_translation("CheckName_ElementsPerWorksets") - + name = _t("CheckName_ElementsPerWorksets") author = "Jean-Marc Couffin" def startTest(self, doc, output): @@ -254,6 +233,8 @@ def startTest(self, doc, output): checkModel(doc, output) endtime = timer.get_time() endtime_hms = str(datetime.timedelta(seconds=endtime)) - from check_translations import get_check_translation - endtime_hms_claim = "{} {}".format(get_check_translation("TransactionTook"), endtime_hms) + endtime_hms_claim = "{} {}".format(_t("TransactionTook"), endtime_hms) print(endtime_hms_claim) + + +ModelChecker.__doc__ = _t("CheckDescription_ElementsPerWorksets") diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Section Box Navigator.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Section Box Navigator.pushbutton/script.py index 9653593cb5..2dc6e853cf 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Section Box Navigator.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Modify.panel/3D.pulldown/Section Box Navigator.pushbutton/script.py @@ -6,6 +6,7 @@ from pyrevit.framework import System, Controls, Media from pyrevit.revit import events from pyrevit import DB +from pyrevit.coreutils import applocales from sectionbox_navigation import ( get_all_levels, @@ -1945,39 +1946,28 @@ def form_closed(self, sender, args): # --------- if __name__ == "__main__": + _xaml_path = script.get_bundle_file("SectionBoxNavigator.xaml") + + def _t(key): + return applocales.get_locale_string_from_xaml(_xaml_path, key) + try: initialize_globals() - # Check if section box is active if not active_view.IsSectionBoxActive: - try: - info = get_section_box_info(active_view, DATAFILENAME) - restored_bbox = info.get("box") - if not restored_bbox: - raise Exception - - # Create a temporary form instance to get locale strings for alerts - temp_form = SectionBoxNavigatorForm.__new__(SectionBoxNavigatorForm) - forms.WPFWindow.__init__( - temp_form, "SectionBoxNavigator.xaml", handle_esc=False - ) - - # Ask user if they want to restore + info = get_section_box_info(active_view, DATAFILENAME) + restored_bbox = info.get("box") if info else None + if restored_bbox: if forms.alert( - temp_form.get_locale_string("StoredSectionBoxFound"), + _t("StoredSectionBoxFound"), cancel=True, - title=temp_form.get_locale_string("RestoreSectionBox"), + title=_t("RestoreSectionBox"), ): with revit.Transaction("Restore SectionBox"): active_view.SetSectionBox(restored_bbox) - except Exception: - # Create a temporary form instance to get locale strings - temp_form = SectionBoxNavigatorForm.__new__(SectionBoxNavigatorForm) - forms.WPFWindow.__init__( - temp_form, "SectionBoxNavigator.xaml", handle_esc=False - ) + else: forms.alert( - temp_form.get_locale_string("NoSectionBoxMessage"), - title=temp_form.get_locale_string("NoSectionBoxTitle"), + _t("NoSectionBoxMessage"), + title=_t("NoSectionBoxTitle"), exitscript=True, ) @@ -1985,17 +1975,7 @@ def form_closed(self, sender, args): except Exception as ex: logger.exception("Error launching form: {}".format(ex)) - # Create a temporary form instance to get locale strings - try: - temp_form = SectionBoxNavigatorForm.__new__(SectionBoxNavigatorForm) - forms.WPFWindow.__init__( - temp_form, "SectionBoxNavigator.xaml", handle_esc=False - ) - error_title = temp_form.get_locale_string("ErrorTitle") - error_msg = temp_form.get_locale_string("AnErrorOccurredFormat").format( - str(ex) - ) - except Exception: - error_title = "Error" - error_msg = "An error occurred: {}".format(str(ex)) - forms.alert(error_msg, title=error_title) + forms.alert( + _t("AnErrorOccurredFormat").format(str(ex)), + title=_t("ErrorTitle"), + ) diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.chinese_s.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.chinese_s.xaml index bd677080bc..c014c0ca7c 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.chinese_s.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.chinese_s.xaml @@ -5,292 +5,4 @@ 扩展 选择预检检查 运行检查 - - - 网格数据列表 - 标高数据列表 - 参照平面列表 - 未放置在图纸上的明细表列表 - 工作集元素检查 - 10英里雷达 - 模型检查器 - RVT链接警告 - 全面审核(包括链接) - CAD审核 - 命名约定 - - - 列出网格,如果它们被固定、在范围框内或已命名 - -此质量控制工具返回以下数据: - 网格数量、名称、类型、固定状态 - 列出标高,如果它们被固定、在范围框内或已命名及其高程。 - -此质量控制工具返回以下数据: - 标高数量、名称、类型、固定状态、范围框和高程。 - 列出模型中的所有参照平面 -此质量控制工具返回以下数据: - 参照平面数量、链接到、名称 - 列出所有未放置在图纸上的明细表 -此质量控制工具返回以下数据: - 类型、Id + 链接和明细表名称,能够单击链接打开明细表 - Revit模型质量检查 -质量控制工具返回以下数据: - - 按工作集列出的所有元素表,包括类别名称、元素名称和元素ID - - 每个工作集的元素数量环形图 - 检查模型中所有元素的范围。 -此模型检查器快速验证Revit模型的范围。 -将模型范围放置在距离项目内部原点超过10英里(16公里)的位置 -可能导致精度、容差、性能和视口显示问题。此检查确保 -模型保持在内部原点的10英里半径内。 - -测试用例检查以下内容,报告与项目内部原点相关的范围。 -脚本根据大多数模型范围问题与以下内容相关的假设进行优先级排序: - - - 项目基点和内部原点之间的距离 - - 测量点和内部原点之间的距离 - - 3D视图的边界框 - - 设计选项对象的边界框 - - CAD和RVT链接的边界框 - - 模型中所有元素的边界框 - Revit模型质量检查 -质量控制工具返回以下数据: - Revit文件: 名称和项目信息 - Revit链接: 列表、数量和固定状态 - 视图: 数量、复制的视图数量、不在图纸上的视图数量 - 明细表: 数量和不在图纸上的数量 - 图纸: 数量 - 警告: 总数、基于预定义关键警告列表的关键警告列表 - 材料数量 - 线型图案数量 - DWG: 导入数量、链接数量、3D中的dwg数量 - 可载入族: 数量、就地族数量、非参数族数量 - 文字注释: 因子更改的数量、全大写文字注释数量 - 系统族: 坡道数量、建筑柱数量、启用分析模型选项的元素 - 组: 详图组类型数量、详图组实例数量、模型组类型数量、模型组实例数量 - 参照平面: 未命名数量、参照平面数量 - 元素数量 - 阶段: 当前文档和链接文件的阶段列表 - Revit链接质量控制 - 警告 - 链接文件中的警告: - - 描述, - - ID, - - 数量 - - !! 仅限 Revit 2018 + !! - !!使用前请加载链接!! - 所有模型的预检审核,包括链接模型。 -!!必须加载链接。!! -此质量控制工具返回以下数据: -- 项目名称、编号、客户、阶段、工作集 -- 元素数量 -- 可清除元素数量 -- 所有警告数量 -- 关键警告数量 -- rvt链接数量 -- 激活的分析模型元素数量 -- 房间数量 -- 未放置房间数量 -- 未边界房间数量 -- 图纸数量 -- 每个视图类型的视图数量 -- 不在图纸上的视图 -- 未放置在图纸上的明细表数量 -- 复制的视图数量 -- 视图模板数量 -- 未使用的视图模板数量 -- 过滤器数量 -- 未使用的视图过滤器数量 -- 材料数量 -- 线型图案数量 -- dwg数量 -- 链接的dwg数量 -- 导入的dwg数量 -- 就地族数量 -- 非参数族数量 -- 族数量 -- 导入子类别数量 -- 常规模型类型数量 -- 详图构件数量 -- 文字注释类型数量 -- 宽度因子 != 1的文字注释类型数量 -- 文字注释数量 -- 应用全大写的文字注释 -- 实心背景的文字注释 -- 详图组数量 -- 详图组类型数量 -- 模型组数量 -- 模型组类型数量 -- 参照平面数量 -- 未命名参照平面数量 -- 详图线数量 -- 尺寸标注类型数量 -- 尺寸标注数量 -- 尺寸标注替代数量 -- 修订云线数量 - 导入和链接CAD的预检审核 -此质量控制工具返回以下数据: - CAD链接实例和类型信息 - - 质量控制包括以下信息和警报: - 链接状态(已加载、未找到、已卸载...) - CAD是否在模型工作平面上或仅在单个视图上 - CAD是链接还是导入 - CAD是否已重复 - CAD的共享位置名称 - - 功能: 输出允许导航到找到的CAD - 验证族类型名称是否符合指定列表, -如Revit中的墙类型列表所定义。 - - - 网格数据列表 - 标高数据列表 - 网格数量 - 标高数量 - 网格 - 标高 - 名称 - 类型 - 已固定 - 范围框 - 高程 - 参照平面 - 参照平面: - 未放置在图纸上的明细表 - 事务耗时 - 名称: - ID: - 类型: - 工作集名称 - 元素类别 - 元素名称 - 元素ID - 按工作集的元素数量 - - - 检查模型位置和坐标 - 基点超过 - 测量点超过 - 测量点小于 - 项目基点坐标到内部原点 - 测量点坐标到内部原点 - 项目基点到测量点增量X - 项目基点到测量点增量Y - 基点和测量点之间的平面距离 - 基点和测量点之间的总距离 - 项目高程(基点垂直距离) - 项目坐标和距离 - - 检查3D视图边界框的范围 - 3D视图边界框延伸超过 - 3D视图边界框位于小于 - 检查设计选项对象的范围 - 设计选项对象位于超过 - 显示前10个对象 - 需要手动调查 - 所有对象位于小于 - 检查CAD和RVT链接的范围 - 所有CAD和RVT链接位于小于 - 仍在检测到 distant 对象! - 需要进一步分析。 - 检查所有内容,这需要一些时间。 - 请耐心等待。 - 以下元素位于超过 - 所有测试完成,请查看上面的结果。 - 距离内部原点10英里(16公里)。 - 任何设计选项中的对象都不超过 - 属于 - XYZ坐标 - 距离 - 角度(°) - - - 模型检查器 - RVT文件 - RVT链接 - 无链接 - 实例文件名 - 实例名称 - 固定状态 - 视图 - 视图模板 - 明细表 - 图纸 - 警告 - 无警告,做得好! - 材质 - 线型图案 - DWG - 可载入族 - 文字注释 - 系统族 - - 参照平面 - 阶段 - 元素数量 - 未保存的文件 - - - RVTV链接 - 警告检查器 - 警告数量 - 警告详情 - 文件名 - 警告数量 - 警告 - ID - 加载所有链接,此工具适用于具有已加载链接的模型 - 至少加载一个链接,此工具适用于具有已加载链接的模型 - - - 主文件信息 - 链接文件信息 - 项目名称 - 项目编号 - 客户名称 - 项目阶段 - 工作集 - 链接文件名 - 加载状态 - 链接 - 未固定的链接 - - - 审核CAD实例: - 在此项目中 - 仅在活动视图中 - 取消 - 确定 - 当前项目中的CAD实例审核 - 未找到CAD实例 - 选择 - 导入和链接CAD的预检审核 - 编号 - 选择/缩放 - DWG实例 - 加载状态 - 工作平面或单一视图 - 重复 - 创建者用户 - 位置站点名称 - 个CAD实例。 - 检查运行于 - 活动视图 - 整个模型 - 警告说明 - 加载状态...........:如果CAD是导入的而不是链接的,则发出警报 - 工作平面或单一视图:如果CAD放置在单一视图上,选项为"仅活动视图",而不是模型工作平面上,则发出警报 - 重复...............:如果CAD被放置多次(无论是链接还是导入),以防意外,则发出警报 - 检查持续时间 - 显示视图 - - - 模型命名约定报告 - 命名约定墙检查 - 墙类型 - 数量 - 状态 - 错误名称 - 发现命名错误的墙类型: - 未选择JSON文件。 diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.de_de.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.de_de.xaml index bd26378740..fd5e26bde0 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.de_de.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.de_de.xaml @@ -5,295 +5,4 @@ Erweiterung Preflight-Prüfung auswählen Prüfung ausführen - - - Raster-Datenliste - Ebenen-Datenliste - Referenzebenen-Liste - Nicht platzierte Tabellen - Elemente pro Arbeitsgruppen-Prüfung - 10 Meilen Radar - Modell-Prüfer - RVT-Link-Warnungen - Vollständige Prüfung (einschließlich Links) - CAD-Prüfung - Namenskonvention - - - Listet Raster auf, ob sie fixiert, in einem Sichtbereich oder benannt sind - -Dieses QC-Tool liefert Ihnen die folgenden Daten: - Rasteranzahl, Name, Typ, Fixierstatus - Listet Ebenen auf, ob sie fixiert, in einem Sichtbereich oder benannt sind und ihre Höhe. - -Dieses QC-Tool liefert Ihnen die folgenden Daten: - Ebenenanzahl, Name, Typ, Fixierstatus, Sichtbereich und Höhe. - Listet alle Referenzebenen im Modell auf -Dieses QC-Tool liefert Ihnen die folgenden Daten: - Anzahl der Referenzebenen, Link zu, Name - Listet alle Tabellen auf, die nicht auf einem Blatt platziert sind -Dieses QC-Tool liefert Ihnen die folgenden Daten: - Typ, Id + Link und Tabellenname mit der Möglichkeit, auf den Link zu klicken, um die Tabelle zu öffnen - Revit-Modellqualitätsprüfung -Das QC-Tool liefert Ihnen die folgenden Daten: - - Tabelle aller Elemente nach Arbeitsgruppe einschließlich Kategoriename, Elementname und Element-ID - - Donut-Diagramm der Elementanzahl pro Arbeitsgruppe - Prüft die Ausdehnung aller Elemente im Modell. -Dieser Modellprüfer überprüft schnell die Ausdehnung des Revit-Modells. -Das Platzieren von Modellausdehnungen mehr als 10 Meilen (16 km) vom internen -Ursprung des Projekts entfernt kann zu Problemen mit Genauigkeit, Toleranz, -Leistung und Ansichtsfenstern führen. Diese Prüfung stellt sicher, dass das -Modell innerhalb eines 10-Meilen-Radius vom internen Ursprung bleibt. - -Der Testfall untersucht Folgendes und meldet Ausdehnungen -bezüglich des internen Ursprungs des Projekts. Das Skript priorisiert -basierend auf der Annahme, dass die meisten Modellausdehnungsprobleme -mit Folgendem zusammenhängen: - - - Der Abstand zwischen Projektbasispunkt und internem Ursprung - - Der Abstand zwischen Vermessungspunkt und internem Ursprung - - Die Begrenzungsbox der 3D-Ansicht - - Die Begrenzungsbox der Entwurfsoptionsobjekte - - Die Begrenzungsbox der CAD- und RVT-Links - - Die Begrenzungsbox aller Elemente im Modell - Revit-Modellqualitätsprüfung -Das QC-Tool liefert Ihnen die folgenden Daten: - Revit-Datei: Name und Projektinformationen - Revit-Links: Liste, Anzahl und Fixierstatus - Ansichten: Anzahl, Anzahl kopierter Ansichten, Anzahl von Ansichten nicht auf Blatt - Tabellen: Anzahl und Anzahl nicht auf Blatt - Blätter: Anzahl - Warnungen: Gesamtzahl, Liste kritischer Warnungen basierend auf vordefinierter Liste kritischer Warnungen - Materialanzahl - Linienmusteranzahl - DWGs: Importierte Anzahl, verlinkte Anzahl, DWGs in 3D Anzahl - Ladbare Familien: Anzahl, Anzahl Familien vor Ort, Anzahl nicht parametrischer Familien - Textnotizen: Anzahl mit geändertem Faktor, Anzahl Textnotizen in Großbuchstaben - Systemfamilien: Rampenanzahl, Architekturspaltenanzahl, Elemente mit aktivierter analytischer Modelloption - Gruppen: Anzahl Detailgruppentypen, Anzahl Detailgruppeninstanzen, Anzahl Modellgruppentypen, Anzahl Modellgruppeninstanzen - Referenzebenen: nicht benannte Anzahl, Anzahl Referenzebenen - Elementanzahl - Phasen: Liste der Phasen für aktuelles Dokument und verlinkte Dateien - Revit-Links Qualitätskontrolle - Warnungen - Warnungen in verlinkten Dateien: - - Beschreibung, - - IDs, - - Anzahl - - !! Nur Revit 2018 + !! - !!Laden Sie Links vor der Verwendung!! - Preflight-Prüfung aller Modelle, einschließlich verlinkter Modelle. -!!Links müssen geladen sein.!! -Dieses QC-Tool liefert die folgenden Daten: -- Projektname, Nummer, Client, Phasen, Arbeitsgruppen -- Elementanzahl -- Anzahl löschbarer Elemente -- Gesamtzahl der Warnungen -- Anzahl kritischer Warnungen -- Anzahl RVT-Links -- Anzahl aktivierter analytischer Modellelemente -- Anzahl Räume -- Anzahl nicht platzierter Räume -- Anzahl nicht begrenzter Räume -- Anzahl Blätter -- Anzahl Ansichten pro Ansichtstyp -- Ansichten nicht auf Blättern -- Anzahl Tabellen nicht auf Blättern -- Anzahl kopierter Ansichten -- Anzahl Ansichtsvorlagen -- Anzahl ungenutzter Ansichtsvorlagen -- Anzahl Filter -- Anzahl ungenutzter Ansichtsfilter -- Anzahl Materialien -- Anzahl Linienmuster -- Anzahl DWGs -- Anzahl verlinkter DWGs -- Anzahl importierter DWGs -- Anzahl Familien vor Ort -- Anzahl nicht parametrischer Familien -- Anzahl Familien -- Anzahl Importsubkategorien -- Anzahl generischer Modelltypen -- Anzahl Detailkomponenten -- Anzahl Textnotiztypen -- Anzahl Textnotiztypen mit Breitenfaktor != 1 -- Anzahl Textnotizen -- Textnotizen mit Großbuchstaben angewendet -- Textnotizen mit festem Hintergrund -- Anzahl Detailgruppen -- Anzahl Detailgruppentypen -- Anzahl Modellgruppen -- Anzahl Modellgruppentypen -- Anzahl Referenzebenen -- Anzahl unbenannter Referenzebenen -- Anzahl Detaillinien -- Anzahl Bemaßungstypen -- Anzahl Bemaßungen -- Anzahl Bemaßungsüberschreibungen -- Anzahl Revisionswolken - Preflight-Prüfung importierter und verlinkter CAD -Dieses QC-Tool liefert die folgenden Daten: - CAD-Link-Instanz- und Typinformationen - - Die Qualitätskontrolle umfasst Informationen und Warnungen für: - Den Status der Links (Geladen, Nicht gefunden, Entladen...) - Ob ein CAD auf einer Modellarbeitsebene oder nur einer einzelnen Ansicht liegt - Ob ein CAD verlinkt oder importiert ist - Ob CADs dupliziert wurden - Den Namen des gemeinsamen Standorts des CAD - - Funktion: Die Ausgabe ermöglicht die Navigation zu den gefundenen CADs - Überprüft, ob Familientypnamen einer angegebenen Liste entsprechen, -wie durch eine Wandtypliste in Revit definiert. - - - Raster-Datenliste - Ebenen-Datenliste - Anzahl der Raster - Anzahl der Ebenen - Raster - Ebenen - Name - Typ - Fixiert - Sichtbereichsbox - Höhe - Referenzebenen - Referenzebenen: - TABELLEN NICHT AUF BLÄTTERN - Transaktion dauerte - NAME: - ID: - TYP: - Arbeitsgruppen-Name - Element-Kategorie - Element-Name - Element-Id - Elementanzahl nach Arbeitsgruppe - - - Prüfung der Modellplatzierung und Koordinaten - Basispunkt ist mehr als - Vermessungspunkt ist mehr als - Vermessungspunkt ist weniger als - Projekt-Basispunkt-Koordinaten zum internen Ursprung - Vermessungspunkt-Koordinaten zum internen Ursprung - Projekt-Basispunkt zu Vermessung Delta X - Projekt-Basispunkt zu Vermessung Delta Y - Planare Entfernung zwischen Basispunkt und Vermessungspunkt - Gesamtentfernung zwischen Basispunkt und Vermessungspunkt - Projekthöhe (vertikale Entfernung des Basispunkts) - Projekt-Koordinaten und Entfernungen - Punkte - Prüfung der Ausdehnung der 3D-Ansicht-Begrenzungsbox - 3D-Ansicht-Begrenzungsbox erstreckt sich über - 3D-Ansicht-Begrenzungsbox befindet sich weniger als - Prüfung der Ausdehnung der Entwurfsoptionen-Objekte - Entwurfsoptionen-Objekte befinden sich mehr als - Zeige die ersten 10 Objekte - Manuelle Untersuchung erforderlich - Alle Objekte befinden sich weniger als - Prüfung der Ausdehnung der CAD- und RVT-Links - Alle CAD- und RVT-Links befinden sich weniger als - Entfernte Objekte werden noch erkannt! - Weitere Analyse erforderlich. - Alles prüfen, das wird eine Weile dauern. - Bitte haben Sie Geduld. - Elemente unten befinden sich mehr als - Alle Tests abgeschlossen, überprüfen Sie die Ergebnisse oben. - 10 Meilen (16 km) vom internen Ursprung entfernt. - Kein Objekt in einer Entwurfsoption befindet sich mehr als - Ist Teil von - XYZ-Koordinaten - Entfernung - WINKEL (°) - - - MODELL-PRÜFER - RVT-Datei - RVT-Links - Keine Links - Instanz-Dateiname - Instanzname - Fixiert-Status - Ansichten - Ansichtsvorlagen - Tabellen - Blätter - Warnungen - Keine Warnungen, gute Arbeit! - Materialien - Linienmuster - DWGs - Ladbare Familien - Textnotizen - Systemfamilien - Gruppen - Referenzebenen - Phasen - Elementanzahl - Nicht gespeicherte Datei - - - RVTV-Links - Warnungsprüfer - Warnungsanzahl - Warnungsdetails - Dateiname - Warnungsanzahl - Warnungen - Ids - Laden Sie alle Links, das Tool ist für Modelle mit geladenen Links gedacht - Laden Sie mindestens einen Link, das Tool ist für Modelle mit geladenen Links gedacht - - - Hauptdatei-Informationen - Verknüpfte Datei-Informationen - Projektname - Projektnummer - Kundenname - Projektphasen - Arbeitsgruppen - Verknüpfter Dateiname - Geladener Status - Links - Nicht fixierte Links - - - CAD-Instanzen prüfen: - in diesem Projekt - nur in der aktiven Ansicht - ABBRECHEN - OK - Prüfung der CAD-Instanzen im aktuellen Projekt - Keine CAD-Instanzen gefunden - Auswählen - Preflight-Prüfung importierter und verknüpfter CAD - Nr. - Auswählen/Zoomen - DWG-Instanz - Geladener Status - Arbeitsebene oder Einzelansicht - Duplikat - Ersteller-Benutzer - Standort-Site-Name - CAD-Instanzen gefunden. - Die Prüfung wurde ausgeführt auf - die aktive Ansicht - das gesamte Modell - Erklärungen für Warnungen - Geladener Status...........: Warnung, wenn ein CAD importiert statt verknüpft ist - Arbeitsebene oder Einzelansicht: Warnung, wenn ein CAD auf einer Einzelansicht mit der Option 'nur aktive Ansicht' platziert ist, anstatt auf einer Modell-Arbeitsebene - Duplikat...............: Warnung, wenn ein CAD mehr als einmal platziert ist (ob verknüpft oder importiert), falls es unbeabsichtigt ist - Prüfdauer - Ansicht anzeigen - - - Modell-Namenskonventions-Bericht - Namenskonventions-Prüfung für Wände - Wandtyp - Anzahl - Status - Falscher Name - Falsch benannte Wandtypen gefunden: - Keine JSON-Datei ausgewählt. diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.en_us.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.en_us.xaml index 58e491eb04..5250949b99 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.en_us.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.en_us.xaml @@ -5,295 +5,4 @@ Extension Select Preflight Check Run Check - - - Grids Data Lister - Levels Data Lister - Reference Plan Lister - Schedules not on sheet lister - Elements per Worksets check - 10 Mile Radar - Model Checker - RVTLinks warnings - Audit All (Including Links) - CAD Audit - Naming Convention - - - List grids, if they are pinned, scoped boxed, or named - -This QC tools returns you with the following data: - Grids count, name, type, pinned status - List levels, if they are pinned, scoped boxed, or named and its elevation. - -This QC tools returns you with the following data: - Levels count, name, type, pinned status, scope box, and elevation. - List all reference planes in the model -This QC tools returns you with the following data: - Reference planes count, link to, name - List all schedules not placed on a sheet -This QC tools returns you with the following data: - Type, Id + link and Schedule name with the ability to click on the link to open the schedule - Revit model quality check -The QC tools returns you with the following data: - - Table of all elements by workset including category name, element name and element id - - Element count per workset donut chart - Checks the extents of all elements in the model. -This Model Checker swiftly verifies the extents of the Revit model. -Placing model extents more than 10 Mi (16KM) from the project's -internal origin can lead to issues with accuracy, tolerance, -performance, and viewport display. This check ensures that the -model remains within a 10-mile radius of the internal origin. - -The test case examines the following, reporting extents -concerning the project's internal origin. The script prioritizes -based on the assumption that most model extent issues are -related to the following: - - - The distance between project basepoint and internal origin - - The distance between survey point and internal origin - - The bounding box of the 3D view - - The bounding box of the design option objects - - The bounding box of the CAD and RVT links - - The bounding box of all elements in the model - Revit model quality check -The QC tools returns you with the following data: - Revit file: Name and Project Information - Revit links: list, count and pinned status - Views: number, number of copied views, number of views not on sheet - Schedules: number and not on sheet number - Sheets: number - Warnings: Total number, Critical warnings list based on predefined list of critical warnings - Materials count - Line patterns count - DWGs: Imported count, linked count, dwgs in 3D count - Loadable families: count, in place family count, non parametric families count - Text notes: with factor changed count, all caps text notes count - System families: ramps count, architectural columns count, elements with analytical model option enabled - Groups: detail group types count, detail group instances count, model group types count, model groups instances count - Reference planes: not named count, ref planes count - Elements count - Phases: list of phases for current document and linked files - Revit links Quality control - Warnings - Warnings in linked files: - - Description, - - Ids, - - Count - - !! Revit 2018 + only !! - !!Load links before using!! - Preflight audit of all models, including linked models. -!!Links must be loaded.!! -This QC tools returns the following data: -- project name, number, client, phases, worksets -- element count -- purgeable elements count -- all warnings count -- critical warnings count -- rvtlinks count -- activated analytical model elements count -- rooms count -- unplaced rooms count -- unbounded rooms count -- sheets count -- views count per ViewType -- views not on sheets -- schedules not sheeted count -- copied views count -- view templates count -- unused view templates count -- filters count -- unused view filters count -- materials count -- line patterns count -- dwgs count -- linked dwg count -- imported dwg count -- inplace family count -- not parametric families count -- family count -- imports subcats count -- generic models types count -- detail components count -- text notes types count -- text notes types with width factor != 1 -- text notes count -- text notes with allCaps applied -- text notes with solid background -- detail groups count -- detail groups types count -- model group count -- model group type count -- reference planes count -- unnamed reference planes count -- detail lines count -- dimension types count -- dimension count -- dimension overrides count -- revision clouds count - Preflight audit of imported and linked CAD -This QC tools returns the following data: - CAD link instance and type information - - Quality control includes information and alerts for: - The status of links (Loaded, Not found, Unloaded...) - Whether a CAD is on a model workplane or just a single view - Whether a CAD is linked or imported - Whether CADs have been duplicated - The CAD's shared location name - - Feature: The output allows navigating to the found CADs - Verifies whether family type names conform to a specified list, -as defined by a wall type list within Revit. - - - Grids Data Lister - Levels Data Lister - Number of grids - Number of levels - Grids - Levels - Name - Type - Pinned - Scope Box - Elevation - Reference planes - Reference planes: - SCHEDULES NOT ON ANY SHEETS - Transaction took - NAME: - ID: - TYPE: - Workset Name - Element Category - Element Name - Element Id - Element Count by Workset - - - Checking model placement and coordinates - Base Point is more than - Survey Point is more than - Survey Point is less than - Project Base Point Coordinates to Internal Origin - Survey Point Coordinates to Internal Origin - Project Base Point to Survey Delta X - Project Base Point to Survey Delta Y - Planar Distance between Base Point and Survey Point - Total Distance between Base Point and Survey Point - Project Elevation (Base Point Vertical Distance) - Project Coordinates and Distances - Points - Checking the extents of the 3D view bounding box - 3D View Bounding Box extends more than - 3D View Bounding Box is located less than - Checking the extents of the design option objects - Design Option Objects are located more than - Showing the first 10 objects - Manual investigation is required - All Objects are located less than - Checking the extents of the CAD and RVT links - All CAD and RVT Links are located less than - Distant objects are still being detected! - Further Analysis Required. - Checking everything, It is going to take a while. - Please be patient. - Elements below are located more than - All tests completed, Review the results above. - 10 Mi (16KM) away from the Internal Origin. - No object in any design option is located more than - Is part of - XYZ Coordinates - Distance - ANGLE (°) - - - MODEL CHECKER - RVT File - RVT Links - No links - Instance File Name - Instance Name - Pinned status - Views - View Templates - Schedules - Sheets - Warnings - No warnings, good job! - Materials - Line patterns - DWGs - Loadable Families - Text Notes - System Families - Groups - Reference Planes - Phases - Elements count - Not saved file - - - RVTV Links - Warning checker - Warnings count - Warnings details - File Name - Warnings count - Warnings - Ids - Load all the links, the tool is meant for models with loaded links - Load at least one link, the tool is meant for models with loaded links - - - Main File Infos - Linked Files Infos - Project Name - Project Number - Client Name - Project Phases - Worksets - Linked File Name - Loaded Status - Links - Links not pinned - - - Audit CAD instances: - in this project - in only the active view - CANCEL - OK - Audit of CAD instances in the current project - No CAD instances found - Select - Preflight audit of imported and linked CAD - No - Select/Zoom - DWG instance - Loaded status - Workplane or single view - Duplicate - Creator user - Location site name - CAD instances found. - The check was run on - the active view - the whole model - Explanations for warnings - Loaded status...........: alert if a CAD is imported, rather than linked - Workplane or single view: alert if a CAD is placed on a single view with the option 'active view only' rather than on a model workplane - Duplicate...............: alert if a CAD is placed more than once (whether linked or imported) in case it is unintentinal - Check duration - Show the view - - - Model Naming Convention Report - Naming Convention Wall Check - Wall Type - Count - Status - Wrong Name - Incorrectly Named Wall Types Found: - No JSON file selected. diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.es_es.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.es_es.xaml index 566900981c..3cce67b816 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.es_es.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.es_es.xaml @@ -5,295 +5,4 @@ Extensión Seleccionar verificación previa Ejecutar verificación - - - Lista de datos de cuadrículas - Lista de datos de niveles - Lista de planos de referencia - Lista de tablas no colocadas - Verificación de elementos por grupos de trabajo - Radar de 10 millas - Verificador de modelo - Advertencias de enlaces RVT - Auditoría completa (incluyendo enlaces) - Auditoría CAD - Convención de nomenclatura - - - Lista las cuadrículas, si están fijadas, en una caja de alcance o nombradas - -Esta herramienta de control de calidad le devuelve los siguientes datos: - Cantidad de cuadrículas, nombre, tipo, estado de fijación - Lista los niveles, si están fijados, en una caja de alcance o nombrados y su elevación. - -Esta herramienta de control de calidad le devuelve los siguientes datos: - Cantidad de niveles, nombre, tipo, estado de fijación, caja de alcance y elevación. - Lista todos los planos de referencia en el modelo -Esta herramienta de control de calidad le devuelve los siguientes datos: - Cantidad de planos de referencia, enlace a, nombre - Lista todas las tablas no colocadas en una hoja -Esta herramienta de control de calidad le devuelve los siguientes datos: - Tipo, Id + enlace y nombre de la tabla con la capacidad de hacer clic en el enlace para abrir la tabla - Verificación de calidad del modelo Revit -La herramienta de control de calidad le devuelve los siguientes datos: - - Tabla de todos los elementos por grupo de trabajo incluyendo nombre de categoría, nombre de elemento e id de elemento - - Gráfico de dona de cantidad de elementos por grupo de trabajo - Verifica la extensión de todos los elementos en el modelo. -Este verificador de modelo verifica rápidamente la extensión del modelo Revit. -Colocar extensiones del modelo a más de 10 millas (16 km) del origen -interno del proyecto puede llevar a problemas con precisión, tolerancia, -rendimiento y visualización de ventanas. Esta verificación asegura que el -modelo permanezca dentro de un radio de 10 millas del origen interno. - -El caso de prueba examina lo siguiente, reportando extensiones -relativas al origen interno del proyecto. El script prioriza -basándose en la suposición de que la mayoría de los problemas de extensión del modelo están -relacionados con lo siguiente: - - - La distancia entre el punto base del proyecto y el origen interno - - La distancia entre el punto de levantamiento y el origen interno - - La caja delimitadora de la vista 3D - - La caja delimitadora de los objetos de opción de diseño - - La caja delimitadora de los enlaces CAD y RVT - - La caja delimitadora de todos los elementos en el modelo - Verificación de calidad del modelo Revit -La herramienta de control de calidad le devuelve los siguientes datos: - Archivo Revit: Nombre e información del proyecto - Enlaces Revit: lista, cantidad y estado de fijación - Vistas: número, número de vistas copiadas, número de vistas no en hoja - Tablas: número y número no en hoja - Hojas: número - Advertencias: Número total, lista de advertencias críticas basada en lista predefinida de advertencias críticas - Cantidad de materiales - Cantidad de patrones de línea - DWGs: Cantidad importada, cantidad vinculada, cantidad de dwgs en 3D - Familias cargables: cantidad, cantidad de familias in situ, cantidad de familias no paramétricas - Notas de texto: cantidad con factor cambiado, cantidad de notas de texto en mayúsculas - Familias del sistema: cantidad de rampas, cantidad de columnas arquitectónicas, elementos con opción de modelo analítico habilitada - Grupos: cantidad de tipos de grupos de detalles, cantidad de instancias de grupos de detalles, cantidad de tipos de grupos de modelos, cantidad de instancias de grupos de modelos - Planos de referencia: cantidad no nombrada, cantidad de planos de referencia - Cantidad de elementos - Fases: lista de fases para documento actual y archivos vinculados - Control de calidad de enlaces Revit - Advertencias - Advertencias en archivos vinculados: - - Descripción, - - IDs, - - Cantidad - - !! Solo Revit 2018 + !! - !!¡Cargue los enlaces antes de usar!! - Auditoría previa de todos los modelos, incluyendo modelos vinculados. -!!¡Los enlaces deben estar cargados.!! -Esta herramienta de control de calidad devuelve los siguientes datos: -- nombre del proyecto, número, cliente, fases, grupos de trabajo -- cantidad de elementos -- cantidad de elementos purgables -- cantidad total de advertencias -- cantidad de advertencias críticas -- cantidad de enlaces rvt -- cantidad de elementos de modelo analítico activados -- cantidad de habitaciones -- cantidad de habitaciones no colocadas -- cantidad de habitaciones no delimitadas -- cantidad de hojas -- cantidad de vistas por TipoVista -- vistas no en hojas -- cantidad de tablas no en hojas -- cantidad de vistas copiadas -- cantidad de plantillas de vista -- cantidad de plantillas de vista no utilizadas -- cantidad de filtros -- cantidad de filtros de vista no utilizados -- cantidad de materiales -- cantidad de patrones de línea -- cantidad de dwg -- cantidad de dwg vinculados -- cantidad de dwg importados -- cantidad de familias in situ -- cantidad de familias no paramétricas -- cantidad de familias -- cantidad de subcategorías de importaciones -- cantidad de tipos de modelos genéricos -- cantidad de componentes de detalles -- cantidad de tipos de notas de texto -- cantidad de tipos de notas de texto con factor de ancho != 1 -- cantidad de notas de texto -- notas de texto con todas mayúsculas aplicadas -- notas de texto con fondo sólido -- cantidad de grupos de detalles -- cantidad de tipos de grupos de detalles -- cantidad de grupos de modelos -- cantidad de tipos de grupos de modelos -- cantidad de planos de referencia -- cantidad de planos de referencia sin nombre -- cantidad de líneas de detalles -- cantidad de tipos de cotas -- cantidad de cotas -- cantidad de sobrescrituras de cotas -- cantidad de nubes de revisión - Auditoría previa de CAD importados y vinculados -Esta herramienta de control de calidad devuelve los siguientes datos: - Información de instancia y tipo de enlace CAD - - El control de calidad incluye información y alertas para: - El estado de los enlaces (Cargado, No encontrado, Descargado...) - Si un CAD está en un plano de trabajo del modelo o solo en una vista única - Si un CAD está vinculado o importado - Si los CAD han sido duplicados - El nombre de la ubicación compartida del CAD - - Característica: La salida permite navegar a los CAD encontrados - Verifica si los nombres de tipos de familias se ajustan a una lista especificada, -según lo definido por una lista de tipos de muros en Revit. - - - Lista de datos de cuadrículas - Lista de datos de niveles - Número de cuadrículas - Número de niveles - Cuadrículas - Niveles - Nombre - Tipo - Fijado - Caja de alcance - Elevación - Planos de referencia - Planos de referencia: - TABLAS NO COLOCADAS EN HOJAS - La transacción tomó - NOMBRE: - ID: - TIPO: - Nombre del grupo de trabajo - Categoría de elemento - Nombre de elemento - Id de elemento - Cantidad de elementos por grupo de trabajo - - - Verificando la ubicación y coordenadas del modelo - El punto base está a más de - El punto de levantamiento está a más de - El punto de levantamiento está a menos de - Coordenadas del punto base del proyecto al origen interno - Coordenadas del punto de levantamiento al origen interno - Delta X del punto base del proyecto al punto de levantamiento - Delta Y del punto base del proyecto al punto de levantamiento - Distancia plana entre el punto base y el punto de levantamiento - Distancia total entre el punto base y el punto de levantamiento - Elevación del proyecto (distancia vertical del punto base) - Coordenadas y distancias del proyecto - Puntos - Verificando los límites de la caja delimitadora de la vista 3D - La caja delimitadora de la vista 3D se extiende más de - La caja delimitadora de la vista 3D está ubicada a menos de - Verificando los límites de los objetos de opción de diseño - Los objetos de opción de diseño están ubicados a más de - Mostrando los primeros 10 objetos - Se requiere investigación manual - Todos los objetos están ubicados a menos de - Verificando los límites de los enlaces CAD y RVT - Todos los enlaces CAD y RVT están ubicados a menos de - ¡Todavía se detectan objetos distantes! - Se requiere análisis adicional. - Verificando todo, va a tardar un rato. - Por favor tenga paciencia. - Los elementos a continuación están ubicados a más de - Todas las pruebas completadas, revise los resultados arriba. - 10 millas (16 km) del origen interno. - Ningún objeto en ninguna opción de diseño está ubicado a más de - Es parte de - Coordenadas XYZ - Distancia - ÁNGULO (°) - - - VERIFICADOR DE MODELO - Archivo RVT - Enlaces RVT - Sin enlaces - Nombre de archivo de instancia - Nombre de instancia - Estado fijado - Vistas - Plantillas de vista - Tablas - Hojas - Advertencias - ¡Sin advertencias, buen trabajo! - Materiales - Patrones de línea - DWGs - Familias cargables - Notas de texto - Familias del sistema - Grupos - Planos de referencia - Fases - Cantidad de elementos - Archivo no guardado - - - Enlaces RVTV - Verificador de advertencias - Cantidad de advertencias - Detalles de advertencias - Nombre de archivo - Cantidad de advertencias - Advertencias - Ids - Cargue todos los enlaces, la herramienta está destinada para modelos con enlaces cargados - Cargue al menos un enlace, la herramienta está destinada para modelos con enlaces cargados - - - Información del archivo principal - Información de archivos vinculados - Nombre del proyecto - Número de proyecto - Nombre del cliente - Fases del proyecto - Grupos de trabajo - Nombre de archivo vinculado - Estado cargado - Enlaces - Enlaces no fijados - - - Verificar instancias CAD: - en este proyecto - solo en la vista activa - CANCELAR - OK - Auditoría de instancias CAD en el proyecto actual - No se encontraron instancias CAD - Seleccionar - Auditoría previa de CAD importados y vinculados - - Seleccionar/Zoom - Instancia DWG - Estado cargado - Plano de trabajo o vista única - Duplicado - Usuario creador - Nombre del sitio de ubicación - instancias CAD encontradas. - La verificación se ejecutó en - la vista activa - todo el modelo - Explicaciones para advertencias - Estado cargado...........: alerta si un CAD está importado en lugar de vinculado - Plano de trabajo o vista única: alerta si un CAD está colocado en una vista única con la opción 'solo vista activa' en lugar de en un plano de trabajo del modelo - Duplicado...............: alerta si un CAD está colocado más de una vez (ya sea vinculado o importado) en caso de que sea involuntario - Duración de la verificación - Mostrar la vista - - - Informe de convención de nomenclatura del modelo - Verificación de convención de nomenclatura de muros - Tipo de muro - Cantidad - Estado - Nombre incorrecto - Tipos de muro con nombre incorrecto encontrados: - No se seleccionó ningún archivo JSON. diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.fr_fr.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.fr_fr.xaml index 52d07d712e..77f90d5625 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.fr_fr.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.fr_fr.xaml @@ -5,295 +5,4 @@ Extension Sélectionner une vérification préalable Exécuter la vérification - - - Liste des données de grilles - Liste des données de niveaux - Liste des plans de référence - Liste des nomenclatures non placées - Vérification des éléments par jeux de travail - Radar 10 milles - Vérificateur de modèle - Avertissements des liens RVT - Audit complet (y compris les liens) - Audit CAD - Convention de nommage - - - Liste les grilles, si elles sont épinglées, dans une zone de visibilité ou nommées - -Cet outil de contrôle qualité vous renvoie les données suivantes: - Nombre de grilles, nom, type, statut d'épinglage - Liste les niveaux, s'ils sont épinglés, dans une zone de visibilité ou nommés et leur élévation. - -Cet outil de contrôle qualité vous renvoie les données suivantes: - Nombre de niveaux, nom, type, statut d'épinglage, zone de visibilité et élévation. - Liste tous les plans de référence du modèle -Cet outil de contrôle qualité vous renvoie les données suivantes: - Nombre de plans de référence, lien vers, nom - Liste toutes les nomenclatures non placées sur une feuille -Cet outil de contrôle qualité vous renvoie les données suivantes: - Type, Id + lien et nom de la nomenclature avec la possibilité de cliquer sur le lien pour ouvrir la nomenclature - Vérification de la qualité du modèle Revit -L'outil de contrôle qualité vous renvoie les données suivantes: - - Tableau de tous les éléments par jeu de travail incluant le nom de la catégorie, le nom de l'élément et l'id de l'élément - - Graphique en donut du nombre d'éléments par jeu de travail - Vérifie l'étendue de tous les éléments du modèle. -Ce vérificateur de modèle vérifie rapidement l'étendue du modèle Revit. -Placer l'étendue du modèle à plus de 10 milles (16 km) de l'origine -interne du projet peut entraîner des problèmes de précision, de tolérance, -de performance et d'affichage de la fenêtre. Cette vérification garantit que le -modèle reste dans un rayon de 10 milles de l'origine interne. - -Le cas de test examine les éléments suivants, en rapportant les étendues -concernant l'origine interne du projet. Le script priorise -sur la base de l'hypothèse que la plupart des problèmes d'étendue du modèle sont -liés aux éléments suivants: - - - La distance entre le point de base du projet et l'origine interne - - La distance entre le point de levé et l'origine interne - - La boîte englobante de la vue 3D - - La boîte englobante des objets d'option de conception - - La boîte englobante des liens CAD et RVT - - La boîte englobante de tous les éléments du modèle - Vérification de la qualité du modèle Revit -L'outil de contrôle qualité vous renvoie les données suivantes: - Fichier Revit: Nom et informations du projet - Liens Revit: liste, nombre et statut d'épinglage - Vues: nombre, nombre de vues copiées, nombre de vues non sur feuille - Nomenclatures: nombre et nombre non sur feuille - Feuilles: nombre - Avertissements: Nombre total, liste des avertissements critiques basée sur une liste prédéfinie d'avertissements critiques - Nombre de matériaux - Nombre de types de lignes - DWG: Nombre importé, nombre lié, nombre de dwg en 3D - Familles chargeables: nombre, nombre de familles sur place, nombre de familles non paramétriques - Notes de texte: nombre avec facteur modifié, nombre de notes de texte en majuscules - Familles système: nombre de rampes, nombre de colonnes architecturales, éléments avec option de modèle analytique activée - Groupes: nombre de types de groupes de détails, nombre d'instances de groupes de détails, nombre de types de groupes de modèles, nombre d'instances de groupes de modèles - Plans de référence: nombre non nommé, nombre de plans de référence - Nombre d'éléments - Phases: liste des phases pour le document actuel et les fichiers liés - Contrôle qualité des liens Revit - Avertissements - Avertissements dans les fichiers liés: - - Description, - - Ids, - - Nombre - - !! Revit 2018 + uniquement !! - !!Chargez les liens avant d'utiliser!! - Audit préalable de tous les modèles, y compris les modèles liés. -!!Les liens doivent être chargés.!! -Cet outil de contrôle qualité renvoie les données suivantes: -- nom du projet, numéro, client, phases, jeux de travail -- nombre d'éléments -- nombre d'éléments purgeables -- nombre total d'avertissements -- nombre d'avertissements critiques -- nombre de liens rvt -- nombre d'éléments de modèle analytique activés -- nombre de pièces -- nombre de pièces non placées -- nombre de pièces non délimitées -- nombre de feuilles -- nombre de vues par TypeVue -- vues non sur feuilles -- nombre de nomenclatures non sur feuilles -- nombre de vues copiées -- nombre de modèles de vue -- nombre de modèles de vue non utilisés -- nombre de filtres -- nombre de filtres de vue non utilisés -- nombre de matériaux -- nombre de types de lignes -- nombre de dwg -- nombre de dwg liés -- nombre de dwg importés -- nombre de familles sur place -- nombre de familles non paramétriques -- nombre de familles -- nombre de sous-catégories d'imports -- nombre de types de modèles génériques -- nombre de composants de détails -- nombre de types de notes de texte -- nombre de types de notes de texte avec facteur de largeur != 1 -- nombre de notes de texte -- notes de texte avec toutes majuscules appliquées -- notes de texte avec arrière-plan solide -- nombre de groupes de détails -- nombre de types de groupes de détails -- nombre de groupes de modèles -- nombre de types de groupes de modèles -- nombre de plans de référence -- nombre de plans de référence sans nom -- nombre de lignes de détails -- nombre de types de cotes -- nombre de cotes -- nombre de remplacements de cotes -- nombre de nuages de révision - Audit préalable des CAD importés et liés -Cet outil de contrôle qualité renvoie les données suivantes: - Informations sur l'instance et le type de lien CAD - - Le contrôle qualité inclut des informations et des alertes pour: - Le statut des liens (Chargé, Introuvable, Déchargé...) - Si un CAD est sur un plan de travail de modèle ou juste une vue unique - Si un CAD est lié ou importé - Si les CAD ont été dupliqués - Le nom de l'emplacement partagé du CAD - - Fonctionnalité: La sortie permet de naviguer vers les CAD trouvés - Vérifie si les noms de types de familles sont conformes à une liste spécifiée, -telle que définie par une liste de types de murs dans Revit. - - - Liste des données de grilles - Liste des données de niveaux - Nombre de grilles - Nombre de niveaux - Grilles - Niveaux - Nom - Type - Épinglé - Boîte de portée - Élévation - Plans de référence - Plans de référence: - NOMENCLATURES NON PLACÉES SUR DES FEUILLES - La transaction a pris - NOM: - ID: - TYPE: - Nom du jeu de travail - Catégorie d'élément - Nom d'élément - Id d'élément - Nombre d'éléments par jeu de travail - - - Vérification du placement et des coordonnées du modèle - Le point de base est à plus de - Le point de relevé est à plus de - Le point de relevé est à moins de - Coordonnées du point de base du projet vers l'origine interne - Coordonnées du point de relevé vers l'origine interne - Delta X du point de base du projet au point de relevé - Delta Y du point de base du projet au point de relevé - Distance planaire entre le point de base et le point de relevé - Distance totale entre le point de base et le point de relevé - Élévation du projet (distance verticale du point de base) - Coordonnées et distances du projet - Points - Vérification des limites de la boîte englobante de la vue 3D - La boîte englobante de la vue 3D s'étend à plus de - La boîte englobante de la vue 3D est située à moins de - Vérification des limites des objets d'option de conception - Les objets d'option de conception sont situés à plus de - Affichage des 10 premiers objets - Une investigation manuelle est requise - Tous les objets sont situés à moins de - Vérification des limites des liens CAD et RVT - Tous les liens CAD et RVT sont situés à moins de - Des objets distants sont encore détectés! - Analyse supplémentaire requise. - Vérification de tout, cela va prendre un certain temps. - Veuillez patienter. - Les éléments ci-dessous sont situés à plus de - Tous les tests terminés, examinez les résultats ci-dessus. - 10 milles (16 km) de l'origine interne. - Aucun objet dans une option de conception n'est situé à plus de - Fait partie de - Coordonnées XYZ - Distance - ANGLE (°) - - - VÉRIFICATEUR DE MODÈLE - Fichier RVT - Liens RVT - Aucun lien - Nom de fichier d'instance - Nom d'instance - Statut épinglé - Vues - Modèles de vue - Nomenclatures - Feuilles - Avertissements - Aucun avertissement, bon travail! - Matériaux - Motifs de ligne - DWGs - Familles chargeables - Notes de texte - Familles système - Groupes - Plans de référence - Phases - Nombre d'éléments - Fichier non enregistré - - - Liens RVTV - Vérificateur d'avertissements - Nombre d'avertissements - Détails des avertissements - Nom de fichier - Nombre d'avertissements - Avertissements - Ids - Chargez tous les liens, l'outil est destiné aux modèles avec des liens chargés - Chargez au moins un lien, l'outil est destiné aux modèles avec des liens chargés - - - Informations du fichier principal - Informations des fichiers liés - Nom du projet - Numéro de projet - Nom du client - Phases du projet - Jeux de travail - Nom de fichier lié - Statut chargé - Liens - Liens non épinglés - - - Vérifier les instances CAD: - dans ce projet - uniquement dans la vue active - ANNULER - OK - Audit des instances CAD dans le projet actuel - Aucune instance CAD trouvée - Sélectionner - Audit préalable des CAD importés et liés - - Sélectionner/Zoomer - Instance DWG - Statut chargé - Plan de travail ou vue unique - Dupliqué - Utilisateur créateur - Nom du site d'emplacement - instances CAD trouvées. - La vérification a été exécutée sur - la vue active - tout le modèle - Explications pour les avertissements - Statut chargé...........: alerte si un CAD est importé plutôt que lié - Plan de travail ou vue unique: alerte si un CAD est placé sur une vue unique avec l'option 'vue active uniquement' plutôt que sur un plan de travail du modèle - Dupliqué...............: alerte si un CAD est placé plus d'une fois (qu'il soit lié ou importé) au cas où ce serait involontaire - Durée de la vérification - Afficher la vue - - - Rapport de convention de nommage du modèle - Vérification de convention de nommage des murs - Type de mur - Nombre - Statut - Nom incorrect - Types de murs nommés incorrectement trouvés: - Aucun fichier JSON sélectionné. diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.pt_br.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.pt_br.xaml index 61ef2b8081..2990410e69 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.pt_br.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.pt_br.xaml @@ -5,295 +5,4 @@ Extensão Selecionar verificação preliminar Executar verificação - - - Listar dados de eixos - Listar dados de níveis - Listar planos de referência - Listar tabelas não inseridas em folhas - Verificar elementos por worksets - Radar de 10 milhas - Verificador de modelo - Avisos de vínculos RVT - Auditar tudo (incluindo vínculos) - Auditoria CAD - Convenção de nomenclatura - - - Lista eixos, se estão fixados, com caixa de escopo ou nomeados - -Esta ferramenta de CQ retorna os seguintes dados: - Contagem de eixos, nome, tipo, status de fixação - Lista níveis, se estão fixados, com caixa de escopo ou nomeados e sua elevação. - -Esta ferramenta de CQ retorna os seguintes dados: - Contagem de níveis, nome, tipo, status de fixação, caixa de escopo e elevação. - Lista todos os planos de referência no modelo -Esta ferramenta de CQ retorna os seguintes dados: - Contagem de planos de referência, vínculo para, nome - Lista todas as tabelas não colocadas em uma folha -Esta ferramenta de CQ retorna os seguintes dados: - Tipo, Id + link e nome da Tabela com a capacidade de clicar no link para abrir a tabela - Verificação de qualidade do modelo Revit -A ferramenta de CQ retorna os seguintes dados: - - Tabela de todos os elementos por workset incluindo nome da categoria, nome do elemento e id do elemento - - Gráfico de rosca da contagem de elementos por workset - Verifica as extensões de todos os elementos no modelo. -Este Verificador de modelo verifica rapidamente as extensões do modelo Revit. -Colocar extensões de modelo a mais de 10 Mi (16KM) da origem interna -do projeto pode levar a problemas de precisão, tolerância, -desempenho e exibição da viewport. Esta verificação garante que o -modelo permaneça dentro de um raio de 10 milhas da origem interna. - -O caso de teste examina o seguinte, relatando extensões -em relação à origem interna do projeto. O script prioriza -com base na suposição de que a maioria dos problemas de extensão do modelo está -relacionada ao seguinte: - - - A distância entre o ponto base do projeto e a origem interna - - A distância entre o ponto de pesquisa e a origem interna - - A caixa de delimitação da vista 3D - - A caixa de delimitação dos objetos da opção de projeto - - A caixa de delimitação dos vínculos CAD e RVT - - A caixa de delimitação de todos os elementos no modelo - Verificação de qualidade do modelo Revit -A ferramenta de CQ retorna os seguintes dados: - Arquivo Revit: Nome e Informações do projeto - Vínculos Revit: lista, contagem e status de fixação - Vistas: número, número de vistas copiadas, número de vistas não na folha - Tabelas: número e número não na folha - Folhas: número - Avisos: Número total, Lista de avisos críticos com base em lista predefinida de avisos críticos - Contagem de materiais - Contagem de padrões de linha - DWGs: Contagem importada, contagem vinculada, contagem de dwgs em 3D - Famílias carregáveis: contagem, contagem de famílias no local, contagem de famílias não paramétricas - Notas de texto: com contagem de fator alterado, contagem de notas de texto em maiúsculas - Famílias de sistema: contagem de rampas, contagem de colunas arquitetônicas, elementos com opção de modelo analítico ativada - Grupos: contagem de tipos de grupo de detalhes, contagem de instâncias de grupo de detalhes, contagem de tipos de grupo de modelo, contagem de instâncias de grupos de modelo - Planos de referência: contagem não nomeada, contagem de planos de ref - Contagem de elementos - Fases: lista de fases para o documento atual e arquivos vinculados - Controle de qualidade de vínculos Revit - Avisos - Avisos em arquivos vinculados: - - Descrição, - - Ids, - - Contagem - - !! Revit 2018 + apenas !! - !!Carregue vínculos antes de usar!! - Auditoria preliminar de todos os modelos, incluindo modelos vinculados. -!!Os vínculos devem estar carregados.!! -Esta ferramenta de CQ retorna os seguintes dados: -- nome do projeto, número, cliente, fases, worksets -- contagem de elementos -- contagem de elementos purgar -- contagem de todos os avisos -- contagem de avisos críticos -- contagem de vínculos rvt -- contagem de elementos de modelo analítico ativados -- contagem de ambientes -- contagem de ambientes não colocados -- contagem de ambientes não delimitados -- contagem de folhas -- contagem de vistas por Tipo de Vista -- vistas não em folhas -- contagem de tabelas não em folhas -- contagem de vistas copiadas -- contagem de modelos de vista -- contagem de modelos de vista não utilizados -- contagem de filtros -- contagem de filtros de vista não utilizados -- contagem de materiais -- contagem de padrões de linha -- contagem de dwgs -- contagem de dwg vinculados -- contagem de dwg importados -- contagem de família no local -- contagem de famílias não paramétricas -- contagem de família -- contagem de subcategorias de importações -- contagem de tipos de modelos genéricos -- contagem de componentes de detalhe -- contagem de tipos de notas de texto -- tipos de notas de texto com fator de largura != 1 -- contagem de notas de texto -- notas de texto com maiúsculas aplicadas -- notas de texto com fundo sólido -- contagem de grupos de detalhes -- contagem de tipos de grupos de detalhes -- contagem de grupo de modelo -- contagem de tipo de grupo de modelo -- contagem de planos de referência -- contagem de planos de referência sem nome -- contagem de linhas de detalhe -- contagem de tipos de cota -- contagem de cota -- contagem de sobreposições de cota -- contagem de nuvens de revisão - Auditoria preliminar de CAD importado e vinculado -Esta ferramenta de CQ retorna os seguintes dados: - Instância de vínculo CAD e informações de tipo - - O controle de qualidade inclui informações e alertas para: - O status dos vínculos (Carregado, Não encontrado, Descarregado...) - Se um CAD está em um plano de trabalho do modelo ou apenas em uma única vista - Se um CAD está vinculado ou importado - Se CADs foram duplicados - O nome do local compartilhado do CAD - - Recurso: A saída permite navegar para os CADs encontrados - Verifica se os nomes de tipo de família estão em conformidade com uma lista especificada, -conforme definido por uma lista de tipos de parede no Revit. - - - Lista de dados de eixos - Lista de dados de níveis - Número de eixos - Número de níveis - Eixos - Níveis - Nome - Tipo - Fixado - Caixa de escopo - Elevação - Planos de referência - Planos de referência: - TABELAS NÃO EM NENHUMA FOLHA - A transação demorou - NOME: - ID: - TIPO: - Nome do workset - Categoria do elemento - Nome do elemento - Id do elemento - Contagem de elementos por workset - - - Verificando posicionamento e coordenadas do modelo - Ponto base é mais de - Ponto de pesquisa é mais de - Ponto de pesquisa é menos de - Coordenadas do ponto base do projeto para origem interna - Coordenadas do ponto de pesquisa para origem interna - Delta X do ponto base do projeto para pesquisa - Delta Y do ponto base do projeto para pesquisa - Distância planar entre ponto base e ponto de pesquisa - Distância total entre ponto base e ponto de pesquisa - Elevação do projeto (Distância vertical do ponto base) - Coordenadas e distâncias do projeto - Pontos - Verificando as extensões da caixa de delimitação da vista 3D - Caixa de delimitação da vista 3D se estende mais de - Caixa de delimitação da vista 3D está localizada a menos de - Verificando as extensões dos objetos da opção de projeto - Objetos da opção de projeto estão localizados a mais de - Mostrando os primeiros 10 objetos - Investigação manual é necessária - Todos os objetos estão localizados a menos de - Verificando as extensões dos vínculos CAD e RVT - Todos os vínculos CAD e RVT estão localizados a menos de - Objetos distantes ainda estão sendo detectados! - Análise adicional necessária. - Verificando tudo, vai demorar um pouco. - Por favor, seja paciente. - Elementos abaixo estão localizados a mais de - Todos os testes concluídos, revise os resultados acima. - 10 Mi (16KM) de distância da Origem Interna. - Nenhum objeto em qualquer opção de projeto está localizado a mais de - Faz parte de - Coordenadas XYZ - Distância - ÂNGULO (°) - - - VERIFICADOR DE MODELO - Arquivo RVT - Vínculos RVT - Sem vínculos - Nome do arquivo de instância - Nome da instância - Status de fixação - Vistas - Modelos de vista - Tabelas - Folhas - Avisos - Sem avisos, bom trabalho! - Materiais - Padrões de linha - DWGs - Famílias carregáveis - Notas de texto - Famílias de sistema - Grupos - Planos de referência - Fases - Contagem de elementos - Arquivo não salvo - - - Vínculos RVT - Verificador de avisos - Contagem de avisos - Detalhes dos avisos - Nome do arquivo - Contagem de avisos - Avisos - Ids - Carregue todos os vínculos, a ferramenta destina-se a modelos com vínculos carregados - Carregue pelo menos um vínculo, a ferramenta destina-se a modelos com vínculos carregados - - - Informações do arquivo principal - Informações dos arquivos vinculados - Nome do projeto - Número do projeto - Nome do cliente - Fases do projeto - Worksets - Nome do arquivo vinculado - Status carregado - Vínculos - Vínculos não fixados - - - Auditar instâncias CAD: - neste projeto - apenas na vista ativa - CANCELAR - OK - Auditoria de instâncias CAD no projeto atual - Nenhuma instância CAD encontrada - Selecionar - Auditoria preliminar de CAD importado e vinculado - Não - Selecionar/Zoom - Instância DWG - Status carregado - Plano de trabalho ou vista única - Duplicar - Usuário criador - Nome do local do terreno - Instâncias CAD encontradas. - A verificação foi executada em - a vista ativa - o modelo inteiro - Explicações para avisos - Status carregado...........: alerta se um CAD for importado, em vez de vinculado - Plano de trabalho ou vista única: alerta se um CAD for colocado em uma única vista com a opção 'apenas vista ativa' em vez de em um plano de trabalho do modelo - Duplicar...............: alerta se um CAD for colocado mais de uma vez (vinculado ou importado) caso não seja intencional - Duração da verificação - Mostrar a vista - - - Relatório de convenção de nomenclatura do modelo - Verificação de convenção de nomenclatura de parede - Tipo de parede - Contagem - Status - Nome errado - Tipos de parede nomeados incorretamente encontrados: - Nenhum arquivo JSON selecionado. \ No newline at end of file diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.ru.xaml b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.ru.xaml index e1d380d325..9fa880ac6a 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.ru.xaml +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/PreflightCheckTemplate.ResourceDictionary.ru.xaml @@ -5,295 +5,4 @@ Расширение Выбрать предварительную проверку Запустить проверку - - - Список данных сетки - Список данных уровней - Список опорных плоскостей - Список спецификаций не на листах - Проверка элементов по рабочим наборам - Радар 10 миль - Проверка модели - Предупреждения RVT-связей - Полная проверка (включая связи) - Проверка CAD - Соглашение об именовании - - - Список сеток, если они закреплены, в области видимости или названы - -Этот инструмент контроля качества возвращает следующие данные: - Количество сеток, имя, тип, статус закрепления - Список уровней, если они закреплены, в области видимости или названы и их отметка. - -Этот инструмент контроля качества возвращает следующие данные: - Количество уровней, имя, тип, статус закрепления, область видимости и отметка. - Список всех опорных плоскостей в модели -Этот инструмент контроля качества возвращает следующие данные: - Количество опорных плоскостей, ссылка на, имя - Список всех спецификаций, не размещенных на листе -Этот инструмент контроля качества возвращает следующие данные: - Тип, Id + ссылка и имя спецификации с возможностью нажать на ссылку для открытия спецификации - Проверка качества модели Revit -Инструмент контроля качества возвращает следующие данные: - - Таблица всех элементов по рабочему набору, включая имя категории, имя элемента и id элемента - - Круговая диаграмма количества элементов по рабочему набору - Проверяет границы всех элементов в модели. -Этот проверщик модели быстро проверяет границы модели Revit. -Размещение границ модели более чем в 10 милях (16 км) от внутреннего -начала координат проекта может привести к проблемам с точностью, допусками, -производительностью и отображением видов. Эта проверка гарантирует, что -модель остается в радиусе 10 миль от внутреннего начала координат. - -Тестовый случай исследует следующее, сообщая о границах -относительно внутреннего начала координат проекта. Скрипт приоритизирует -на основе предположения, что большинство проблем с границами модели -связаны со следующим: - - - Расстояние между базовой точкой проекта и внутренним началом координат - - Расстояние между точкой съемки и внутренним началом координат - - Ограничивающий параллелепипед 3D-вида - - Ограничивающий параллелепипед объектов вариантов проектирования - - Ограничивающий параллелепипед связей CAD и RVT - - Ограничивающий параллелепипед всех элементов в модели - Проверка качества модели Revit -Инструмент контроля качества возвращает следующие данные: - Файл Revit: Имя и информация о проекте - Связи Revit: список, количество и статус закрепления - Виды: количество, количество скопированных видов, количество видов не на листе - Спецификации: количество и количество не на листе - Листы: количество - Предупреждения: Общее количество, список критических предупреждений на основе предопределенного списка критических предупреждений - Количество материалов - Количество типов линий - DWG: Количество импортированных, количество связанных, количество dwg в 3D - Загружаемые семейства: количество, количество семейств на месте, количество непараметрических семейств - Текстовые заметки: количество с измененным коэффициентом, количество текстовых заметок заглавными буквами - Системные семейства: количество пандусов, количество архитектурных колонн, элементы с включенной опцией аналитической модели - Группы: количество типов групп деталей, количество экземпляров групп деталей, количество типов групп моделей, количество экземпляров групп моделей - Опорные плоскости: количество неназванных, количество опорных плоскостей - Количество элементов - Фазы: список фаз для текущего документа и связанных файлов - Контроль качества связей Revit - Предупреждения - Предупреждения в связанных файлах: - - Описание, - - ID, - - Количество - - !! Только Revit 2018 + !! - !!Загрузите связи перед использованием!! - Предварительная проверка всех моделей, включая связанные модели. -!!Связи должны быть загружены.!! -Этот инструмент контроля качества возвращает следующие данные: -- имя проекта, номер, клиент, фазы, рабочие наборы -- количество элементов -- количество элементов, подлежащих очистке -- общее количество предупреждений -- количество критических предупреждений -- количество связей rvt -- количество активированных элементов аналитической модели -- количество помещений -- количество неразмещенных помещений -- количество неограниченных помещений -- количество листов -- количество видов по типу вида -- виды не на листах -- количество спецификаций не на листах -- количество скопированных видов -- количество шаблонов видов -- количество неиспользуемых шаблонов видов -- количество фильтров -- количество неиспользуемых фильтров видов -- количество материалов -- количество типов линий -- количество dwg -- количество связанных dwg -- количество импортированных dwg -- количество семейств на месте -- количество непараметрических семейств -- количество семейств -- количество подкатегорий импорта -- количество типов общих моделей -- количество компонентов деталей -- количество типов текстовых заметок -- количество типов текстовых заметок с коэффициентом ширины != 1 -- количество текстовых заметок -- текстовые заметки с примененными заглавными буквами -- текстовые заметки с сплошным фоном -- количество групп деталей -- количество типов групп деталей -- количество групп моделей -- количество типов групп моделей -- количество опорных плоскостей -- количество неназванных опорных плоскостей -- количество линий деталей -- количество типов размеров -- количество размеров -- количество переопределений размеров -- количество облаков пересмотра - Предварительная проверка импортированных и связанных CAD -Этот инструмент контроля качества возвращает следующие данные: - Информация об экземпляре и типе связи CAD - - Контроль качества включает информацию и предупреждения для: - Статус связей (Загружено, Не найдено, Выгружено...) - Находится ли CAD на рабочей плоскости модели или только на одном виде - Является ли CAD связанным или импортированным - Были ли CAD дублированы - Имя общего местоположения CAD - - Функция: Вывод позволяет переходить к найденным CAD - Проверяет, соответствуют ли имена типов семейств указанному списку, -как определено списком типов стен в Revit. - - - Список данных сетки - Список данных уровней - Количество сеток - Количество уровней - Сетки - Уровни - Имя - Тип - Закреплено - Область видимости - Отметка - Опорные плоскости - Опорные плоскости: - СПЕЦИФИКАЦИИ НЕ НА ЛИСТАХ - Транзакция заняла - ИМЯ: - ID: - ТИП: - Имя рабочего набора - Категория элемента - Имя элемента - ID элемента - Количество элементов по рабочему набору - - - Проверка размещения модели и координат - Базовая точка находится более чем - Точка съемки находится более чем - Точка съемки находится менее чем - Координаты базовой точки проекта относительно внутреннего начала координат - Координаты точки съемки относительно внутреннего начала координат - Дельта X от базовой точки проекта до точки съемки - Дельта Y от базовой точки проекта до точки съемки - Плоскостное расстояние между базовой точкой и точкой съемки - Общее расстояние между базовой точкой и точкой съемки - Отметка проекта (вертикальное расстояние базовой точки) - Координаты и расстояния проекта - Точки - Проверка границ ограничивающего параллелепипеда 3D-вида - Ограничивающий параллелепипед 3D-вида простирается более чем - Ограничивающий параллелепипед 3D-вида расположен менее чем - Проверка границ объектов вариантов проектирования - Объекты вариантов проектирования расположены более чем - Показаны первые 10 объектов - Требуется ручное исследование - Все объекты расположены менее чем - Проверка границ связей CAD и RVT - Все связи CAD и RVT расположены менее чем - Удаленные объекты все еще обнаруживаются! - Требуется дальнейший анализ. - Проверка всего, это займет некоторое время. - Пожалуйста, будьте терпеливы. - Элементы ниже расположены более чем - Все тесты завершены, просмотрите результаты выше. - 10 миль (16 км) от внутреннего начала координат. - Ни один объект в вариантах проектирования не расположен более чем - Является частью - Координаты XYZ - Расстояние - УГОЛ (°) - - - ПРОВЕРКА МОДЕЛИ - Файл RVT - Связи RVT - Нет связей - Имя файла экземпляра - Имя экземпляра - Статус закрепления - Виды - Шаблоны видов - Спецификации - Листы - Предупреждения - Нет предупреждений, отлично! - Материалы - Типы линий - DWG - Загружаемые семейства - Текстовые заметки - Системные семейства - Группы - Опорные плоскости - Фазы - Количество элементов - Файл не сохранен - - - Связи RVT - Проверка предупреждений - Количество предупреждений - Детали предупреждений - Имя файла - Количество предупреждений - Предупреждения - ID - Загрузите все связи, инструмент предназначен для моделей с загруженными связями - Загрузите хотя бы одну связь, инструмент предназначен для моделей с загруженными связями - - - Информация об основном файле - Информация о связанных файлах - Имя проекта - Номер проекта - Имя клиента - Фазы проекта - Рабочие наборы - Имя связанного файла - Статус загрузки - Связи - Связи не закреплены - - - Проверка экземпляров CAD: - в этом проекте - только в активном виде - ОТМЕНА - ОК - Проверка экземпляров CAD в текущем проекте - Экземпляры CAD не найдены - Выбрать - Предварительная проверка импортированных и связанных CAD - Нет - Выбрать/Масштабировать - Экземпляр DWG - Статус загрузки - Рабочая плоскость или один вид - Дубликат - Пользователь-создатель - Имя участка расположения - Найдены экземпляры CAD. - Проверка была запущена на - активном виде - всей модели - Объяснения предупреждений - Статус загрузки...........: предупреждение, если CAD импортирован, а не связан - Рабочая плоскость или один вид: предупреждение, если CAD размещен на одном виде с опцией 'только активный вид', а не на рабочей плоскости модели - Дубликат...............: предупреждение, если CAD размещен более одного раза (связан или импортирован) в случае непреднамеренного размещения - Длительность проверки - Показать вид - - - Отчет о соглашении об именовании модели - Проверка соглашения об именовании стен - Тип стены - Количество - Статус - Неправильное имя - Найдены неправильно названные типы стен: - JSON файл не выбран. diff --git a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/script.py b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/script.py index b3dcfbf3a1..4592dc2385 100644 --- a/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/script.py +++ b/extensions/pyRevitTools.extension/pyRevit.tab/Project.panel/Preflight Checks.pushbutton/script.py @@ -1,7 +1,7 @@ -"""Run perflight checks on current model""" +# -*- coding: UTF-8 -*- +"""Run preflight checks on current model""" # pylint: disable=import-error,invalid-name,broad-except,superfluous-parens import os -import xml.etree.ElementTree as ET from pyrevit import preflight from pyrevit import forms from pyrevit import script @@ -13,70 +13,10 @@ output = script.get_output() -def load_resource_string(resource_file, key): - """Load a string from a XAML resource dictionary file. - - Args: - resource_file (str): Path to resource dictionary XAML file - key (str): Resource key to retrieve - - Returns: - (str): Resource string value or None if not found - """ - try: - tree = ET.parse(resource_file) - root = tree.getroot() - # XAML namespace - ns = {"xaml": "http://schemas.microsoft.com/winfx/2006/xaml/presentation", - "x": "http://schemas.microsoft.com/winfx/2006/xaml", - "system": "clr-namespace:System;assembly=mscorlib"} - # Find the string resource - string_elem = root.find(".//system:String[@x:Key='{}']".format(key), ns) - if string_elem is not None: - return string_elem.text - except: - pass - return None - - -def get_translated_ui_string(key): - """Get translated UI string from resource dictionaries. - - Args: - key (str): Resource key - - Returns: - (str): Translated string or English fallback - """ - template_xaml = script.get_bundle_file("PreflightCheckTemplate.xaml") - template_resfile = template_xaml.replace( - ".xaml", ".ResourceDictionary.{}.xaml".format(user_config.user_locale) - ) - template_resfile_en = template_xaml.replace( - ".xaml", ".ResourceDictionary.en_us.xaml" - ) - - # Try localized version first - if os.path.isfile(template_resfile): - result = load_resource_string(template_resfile, key) - if result: - return result - - # Fallback to English - if os.path.isfile(template_resfile_en): - result = load_resource_string(template_resfile_en, key) - if result: - return result - - # Final fallback - return key - - class PreflightSelectFromList(forms.SelectFromList): """Custom SelectFromList that merges PreflightCheckTemplate resource dictionaries.""" - + def _setup(self, **kwargs): - # Merge PreflightCheckTemplate resource dictionaries template_xaml = script.get_bundle_file("PreflightCheckTemplate.xaml") template_resfile = template_xaml.replace( ".xaml", ".ResourceDictionary.{}.xaml".format(user_config.user_locale) @@ -84,24 +24,23 @@ def _setup(self, **kwargs): template_resfile_en = template_xaml.replace( ".xaml", ".ResourceDictionary.en_us.xaml" ) - + if os.path.isfile(template_resfile): self.merge_resource_dict(template_resfile) elif os.path.isfile(template_resfile_en): self.merge_resource_dict(template_resfile_en) - - # Call parent _setup + super(PreflightSelectFromList, self)._setup(**kwargs) def ask_for_preflight_checks(): """Ask user for preflight tests and run one by one""" - # Get translated strings - title = get_translated_ui_string("SelectPreflightCheckTitle") - button_name = get_translated_ui_string("RunCheckButton") - template_xaml = script.get_bundle_file("PreflightCheckTemplate.xaml") - + title = applocales.get_locale_string_from_xaml( + template_xaml, "SelectPreflightCheckTitle" + ) + button_name = applocales.get_locale_string_from_xaml(template_xaml, "RunCheckButton") + # ask user for test case selected_check = PreflightSelectFromList.show( preflight.get_all_preflight_checks(), diff --git a/pyrevitlib/pyrevit/coreutils/applocales.py b/pyrevitlib/pyrevit/coreutils/applocales.py index 92ace7b7da..44586a05e8 100644 --- a/pyrevitlib/pyrevit/coreutils/applocales.py +++ b/pyrevitlib/pyrevit/coreutils/applocales.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- """Provide conversion services between python.locale and host languages.""" # https://www.science.co.il/language/Locale-codes.php +import os +import xml.etree.ElementTree as ET + from pyrevit import HOST_APP from pyrevit.api import ApplicationServices from pyrevit.userconfig import user_config @@ -44,64 +47,76 @@ def __repr__(self): APP_LOCALES = [ DEFAULT_LOCALE, - AppLocale( lang_type=ApplicationServices.LanguageType.German, lang_name="Deutsch", - locale_codes=["de_de", "german"]), + locale_codes=["de_de", "german"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Spanish, lang_name="español", - locale_codes=["es_es", "spanish"]), + locale_codes=["es_es", "spanish"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.French, lang_name="français", - locale_codes=["fr_fr", "french"]), + locale_codes=["fr_fr", "french"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Italian, lang_name="italiano", - locale_codes=["it_it", "italian"]), + locale_codes=["it_it", "italian"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Dutch, lang_name="Nederlands", - locale_codes=["nl_nl", "nl_be", "dutch"]), + locale_codes=["nl_nl", "nl_be", "dutch"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Chinese_Simplified, lang_name="简体中文", - locale_codes=["chinese_s", "chinese"]), + locale_codes=["chinese_s", "chinese"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Chinese_Traditional, lang_name="繁體中文", - locale_codes=["chinese_t", "chinese"]), + locale_codes=["chinese_t", "chinese"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Japanese, lang_name="日本語", - locale_codes=["ja", "japanese"]), + locale_codes=["ja", "japanese"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Korean, lang_name="한국어", - locale_codes=["ko", "korean"]), + locale_codes=["ko", "korean"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Russian, lang_name="Русский", - locale_codes=["ru", "russian"]), + locale_codes=["ru", "russian"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Czech, lang_name="Čeština", - locale_codes=["cs", "czech"]), + locale_codes=["cs", "czech"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Polish, lang_name="Polski", - locale_codes=["pl", "polish"]), + locale_codes=["pl", "polish"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Hungarian, lang_name="Magyar", - locale_codes=["hu", "hungarian"]), + locale_codes=["hu", "hungarian"], + ), AppLocale( lang_type=ApplicationServices.LanguageType.Brazilian_Portuguese, lang_name="Português do Brasil", - locale_codes=["pt_br", "portuguese_brazil", "brazilian", - "portuguese", "pt_pt"]), + locale_codes=["pt_br", "portuguese_brazil", "brazilian", "portuguese", "pt_pt"], + ), ] # add version specific languages @@ -142,7 +157,6 @@ def __repr__(self): )) - def get_applocale_by_local_code(locale_code): """Return application locale by locale code. @@ -187,7 +201,7 @@ def get_applocale_by_lang_name(lang_name): def get_current_applocale(): """Return the current locale. - + This is the user locale, if set, or the host application locale otherwise. Returns: @@ -233,3 +247,63 @@ def get_locale_string(string_dict): for locale_code in local_codes: if locale_code in string_dict: return string_dict[locale_code] + + +def get_locale_string_from_xaml(xaml_base_path, key): + """Get a localized string from a XAML resource dictionary file. + + Derives the resource dictionary path from ``xaml_base_path`` by replacing + the ``.xaml`` extension with ``.ResourceDictionary.{locale}.xaml``. + Tries all locale codes of the current locale, then falls back to the + default (English) locale. Returns ``key`` unchanged when no match is found. + + Args: + xaml_base_path (str): Path to the base XAML file, e.g. from + ``script.get_bundle_file("MyForm.xaml")``. + key (str): Resource key to look up. + + Returns: + (str): Localized string, or ``key`` as the final fallback. + + Examples: + ```python + from pyrevit import script + from pyrevit.coreutils import applocales + xaml = script.get_bundle_file("MyForm.xaml") + title = applocales.get_locale_string_from_xaml(xaml, "WindowTitle") + ``` + """ + + def _read_key(filepath): + try: + root = ET.parse(filepath).getroot() + x_ns = "http://schemas.microsoft.com/winfx/2006/xaml" + sys_ns = "clr-namespace:System;assembly=mscorlib" + for elem in root.iter("{%s}String" % sys_ns): + if elem.get("{%s}Key" % x_ns) == key: + return elem.text + except Exception: + pass + return None + + base = os.path.splitext(xaml_base_path)[0] + locale = get_current_applocale() or DEFAULT_LOCALE + + for code in locale.locale_codes: + path = "{}.ResourceDictionary.{}.xaml".format(base, code) + if os.path.isfile(path): + result = _read_key(path) + if result is not None: + return result + break # right locale file found but key missing — fall to English + + if locale is not DEFAULT_LOCALE: + for code in DEFAULT_LOCALE.locale_codes: + path = "{}.ResourceDictionary.{}.xaml".format(base, code) + if os.path.isfile(path): + result = _read_key(path) + if result is not None: + return result + break + + return key diff --git a/pyrevitlib/pyrevit/extensions/components.py b/pyrevitlib/pyrevit/extensions/components.py index 09cc11de6e..4cd01a14e3 100644 --- a/pyrevitlib/pyrevit/extensions/components.py +++ b/pyrevitlib/pyrevit/extensions/components.py @@ -607,7 +607,8 @@ def get_hooks(self): def get_checks(self): check_scripts = os.listdir(self.checks_path) if self.checks_path else [] - return [op.join(self.checks_path, x) for x in check_scripts] + return [op.join(self.checks_path, x) for x in check_scripts + if x.endswith('.py')] class LibraryExtension(GenericComponent):