diff --git a/CHANGELOG.md b/CHANGELOG.md index ec555d3f..a464b95a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 0.6.9 + +* added the following document types that can be created with Document.add(): + 'Analysis', 'CatalogDocument', 'CATMaterial', 'CATProcess', 'cgm' + 'FeatureDictionary', 'gl', 'gl2', 'hpgl', 'FunctionalSystem', 'ProcessLibrary' +* Rewrote how document types are detected and tested for. This makes adding + additional document types easier. +* fixed HybridShapeExtrapol.support. @HyberCa +* fixed HybridShapeAxisLine.element. + + ## 0.6.8 * added option to initialise the Application object with pythoncom.CoInitialize(). diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 407deb3a..8087be92 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -6,6 +6,8 @@ deloarts hitman061 +HyberCa + hoangminhq5310 Luanee diff --git a/docs/conf.py b/docs/conf.py index 01681d3a..12dcdaf8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -36,7 +36,7 @@ def __getattr__(cls, name): author = 'Paul Bourne' # The short X.Y version -version = '0.6.8' +version = '0.6.9' # The full version, including alpha/beta/rc tags release = version diff --git a/pycatia/dnb_human_modeling_interfaces/swk_hmi_workbench.py b/pycatia/dnb_human_modeling_interfaces/swk_hmi_workbench.py index 49a31802..78c535c5 100644 --- a/pycatia/dnb_human_modeling_interfaces/swk_hmi_workbench.py +++ b/pycatia/dnb_human_modeling_interfaces/swk_hmi_workbench.py @@ -153,7 +153,8 @@ def create_right_forearm( def new_human_catalog(self) -> SWKHumanCatalog: """ - .. note:: + + .. note:: :class: toggle Microsoft Visual Basic Object Browser diff --git a/pycatia/hybrid_shape_interfaces/hybrid_shape_axis_line.py b/pycatia/hybrid_shape_interfaces/hybrid_shape_axis_line.py index 5db4b036..8022139e 100644 --- a/pycatia/hybrid_shape_interfaces/hybrid_shape_axis_line.py +++ b/pycatia/hybrid_shape_interfaces/hybrid_shape_axis_line.py @@ -158,7 +158,7 @@ def element(self, value: Reference): :param Reference value: """ - self.hybrid_shape_axis_line.Element = value + self.hybrid_shape_axis_line.Element = value.com_object def __repr__(self): return f'HybridShapeAxisLine(name="{ self.name }")' diff --git a/pycatia/hybrid_shape_interfaces/hybrid_shape_extrapol.py b/pycatia/hybrid_shape_interfaces/hybrid_shape_extrapol.py index 2ebbaf74..7e11daa3 100644 --- a/pycatia/hybrid_shape_interfaces/hybrid_shape_extrapol.py +++ b/pycatia/hybrid_shape_interfaces/hybrid_shape_extrapol.py @@ -372,7 +372,7 @@ def support(self, value: Reference): :param Reference value: """ - self.hybrid_shape_extrapol.Support = value + self.hybrid_shape_extrapol.Support = value.com_object def get_boundary(self, i_pos: int) -> Reference: """ diff --git a/pycatia/in_interfaces/application.py b/pycatia/in_interfaces/application.py index dc075760..ad9d0b6f 100644 --- a/pycatia/in_interfaces/application.py +++ b/pycatia/in_interfaces/application.py @@ -19,7 +19,7 @@ from pycatia.system_interfaces.any_object import AnyObject from pycatia.system_interfaces.system_service import SystemService from pycatia.in_interfaces.setting_controllers import SettingControllers -from pycatia.types.document_types import document_type +from pycatia.types.document import document_types class Application(AnyObject): @@ -92,8 +92,12 @@ def active_document(self) -> Document: """ try: active_doc_com = self.com_object.ActiveDocument - doc_suffix = active_doc_com.Name.split('.')[-1] - return document_type[doc_suffix](active_doc_com) + extension = active_doc_com.Name.split('.')[-1] + types = [document_types[k]['type'] for k in (document_types) if document_types[k]['extension'] == extension] + if len(types) > 1: + raise CATIAApplicationException('There was a problem determining the document type.') + document_type = types[0] + return document_type(active_doc_com) except com_error: raise CATIAApplicationException('Is there an active document?') diff --git a/pycatia/in_interfaces/documents.py b/pycatia/in_interfaces/documents.py index 4bc7f973..1044240b 100644 --- a/pycatia/in_interfaces/documents.py +++ b/pycatia/in_interfaces/documents.py @@ -8,9 +8,8 @@ from pycatia.exception_handling import CATIAApplicationException from pycatia.in_interfaces.document import Document from pycatia.system_interfaces.collection import Collection -from pycatia.types.document_types import document_type +from pycatia.types.document import document_types from pycatia.types.general import cat_variant, list_str -from pycatia.scripts.document_types import get_document_type class Documents(Collection): @@ -87,14 +86,14 @@ def add(self, document_type) -> Document: :rtype: Document """ - # document_types string must be one of these types: - # 'Part', 'Product', 'Drawing', 'FunctionalSystem', 'CATMaterial', 'CatalogDocument' + # see pycatia.types.docs for supported Documents. - dt = get_document_type(document_type) + if document_type.lower() not in [t.lower() for t in document_types]: + raise CATIAApplicationException(f'Document type {document_type} not supported. Allowed types are {[t for t in document_types]}.') - self.logger.info(f'Creating a new "{dt}".') + document = document_types[document_type]['type'] - return Document(self.documents.Add(dt)) + return document(self.documents.Add(document_type)) def count_types(self, file_type_list: list_str) -> int: """ @@ -307,7 +306,7 @@ def read(self, file_name: str) -> Document: read_doc_com = self.documents.Read(file_name) doc_suffix = file_name.split('.')[-1] - return document_type[doc_suffix](read_doc_com) + return document_types[doc_suffix](read_doc_com) def __getitem__(self, n: int) -> Document: if (n + 1) > self.count: diff --git a/pycatia/scripts/document_types.py b/pycatia/scripts/document_types.py deleted file mode 100644 index acf6b10a..00000000 --- a/pycatia/scripts/document_types.py +++ /dev/null @@ -1,38 +0,0 @@ -from pycatia.exception_handling import CATIAApplicationException - -allowed_document_types = { - 'part': 'Part', - 'product': 'Product', - 'drawing': 'Drawing', - 'functionalsystem': 'FunctionalSystem', - 'catmaterial': 'CATMaterial', - 'catalogdocument': 'CatalogDocument' -} - - -def get_document_type(dt: str) -> str: - """ - - This allows some flexibility regarding use of case. - - :Example - Add new document: - - >>> from pycatia import catia - >>> caa = catia() - >>> new_part = caa.documents.add('part') - - # this would be the same as - - :Example - Add new document: - - >>> from pycatia import catia - >>> caa = catia() - >>> new_part = caa.documents.add('Part') - - :param str dt: - :return: str - """ - if dt.lower() not in allowed_document_types: - raise CATIAApplicationException(f'"{dt}" is not currently supported.') - - return allowed_document_types[dt.lower()] diff --git a/pycatia/types/document.py b/pycatia/types/document.py new file mode 100644 index 00000000..452d6091 --- /dev/null +++ b/pycatia/types/document.py @@ -0,0 +1,69 @@ +from pycatia.analysis_interfaces.analysis_document import AnalysisDocument +from pycatia.components_catalogs_interfaces.catalog_document import CatalogDocument +from pycatia.cat_mat_interfaces.material_document import MaterialDocument +from pycatia.dmaps_interfaces.process_document import ProcessDocument +from pycatia.drafting_interfaces.drawing_document import DrawingDocument +from pycatia.in_interfaces.document import Document +from pycatia.mec_mod_interfaces.part_document import PartDocument +from pycatia.product_structure_interfaces.product_document import ProductDocument +from pycatia.funct_system_interfaces.functional_document import FunctionalDocument + + +document_types = { + 'Analysis': { + 'extension': 'CATAnalysis', + 'type': AnalysisDocument, + }, + 'CatalogDocument': { + 'extension': 'catalog', + 'type': CatalogDocument, + }, + 'CATMaterial': { + 'extension': 'CATMaterial', + 'type': MaterialDocument, + }, + 'CATProcess': { + 'extension': 'CATProcess', + 'type': ProcessDocument, + }, + 'cgm': { + 'extension': 'cgm', + 'type': Document, + }, + 'Drawing': { + 'extension': 'CATDrawing', + 'type': DrawingDocument, + }, + 'FeatureDictionary': { + 'extension': 'CATfct', + 'type': Document + }, + 'gl': { + 'extension': 'gl', + 'type': Document, + }, + 'gl2': { + 'extension': 'gl2', + 'type': Document, + }, + 'hpgl': { + 'extension': 'hpgl', + 'type': Document + }, + 'FunctionalSystem': { + 'extension': 'CATSystem', + 'type': FunctionalDocument, + }, + 'Part': { + 'extension': 'CATPart', + 'type': PartDocument, + }, + 'Product': { + 'extension': 'CATProduct', + 'type': ProductDocument + }, + 'ProcessLibrary': { + 'extension': 'act', + 'type': ProcessDocument, + } +} diff --git a/pycatia/types/document_types.py b/pycatia/types/document_types.py deleted file mode 100644 index 284bd76f..00000000 --- a/pycatia/types/document_types.py +++ /dev/null @@ -1,13 +0,0 @@ -from pycatia.cat_mat_interfaces.material_document import MaterialDocument -from pycatia.drafting_interfaces.drawing_document import DrawingDocument -from pycatia.mec_mod_interfaces.part_document import PartDocument -from pycatia.product_structure_interfaces.product_document import ProductDocument -from pycatia.funct_system_interfaces.functional_document import FunctionalDocument - -document_type = { - "CATPart": PartDocument, - "CATProduct": ProductDocument, - "CATDrawing": DrawingDocument, - "CATMaterial": MaterialDocument, - "CATSystem": FunctionalDocument -} diff --git a/pycatia/version.py b/pycatia/version.py index 1c981c93..ed41a80f 100644 --- a/pycatia/version.py +++ b/pycatia/version.py @@ -1 +1 @@ -version = "0.6.8" +version = "0.6.9" diff --git a/tests/in/test_document.py b/tests/in/test_document.py index 209018a6..9325be31 100644 --- a/tests/in/test_document.py +++ b/tests/in/test_document.py @@ -9,6 +9,7 @@ from pycatia.base_interfaces.context import CATIADocHandler from pycatia.mec_mod_interfaces.part_document import PartDocument from pycatia.product_structure_interfaces.product_document import ProductDocument +from pycatia.types.document import document_types from tests.common_vars import caa from tests.source_files import cat_part_measurable from tests.source_files import cat_product @@ -37,27 +38,42 @@ def test_activate_document(): document_product.close() -def test_add_documents(): - with CATIADocHandler(new_document="Part") as caa: +def test_add_document(): + + with CATIADocHandler(new_document='Analysis') as caa: + document = caa.document + assert document is not None + assert document_types['Analysis']['extension'] in document.name + + with CATIADocHandler(new_document='CatalogDocument') as caa: document = caa.document assert document is not None - assert "CATPart" in document.name + assert document_types['CatalogDocument']['extension'] in document.name - with CATIADocHandler(new_document="Part") as caa: + with CATIADocHandler(new_document='Drawing') as caa: + document = caa.document + assert document is not None + assert document_types['Drawing']['extension'] in document.name + + with CATIADocHandler(new_document='CATProcess') as caa: document = caa.document assert document is not None - assert "CATPart" in document.name + assert document_types['CATProcess']['extension'] in document.name - with CATIADocHandler(new_document="Part") as caa: + with CATIADocHandler(new_document='FeatureDictionary') as caa: document = caa.document assert document is not None - assert "CATPart" in document.name + assert document_types['FeatureDictionary']['extension'] in document.name - # commented out due to failing tests and I can't remember why this was added - # in the first place ... - # with pytest.raises(ValueError): - # with CATIADocHandler(new_document='lala'): - # pass + with CATIADocHandler(new_document='Part') as caa: + document = caa.document + assert document is not None + assert document_types['Part']['extension'] in document.name + + with CATIADocHandler(new_document='Product') as caa: + document = caa.document + assert document is not None + assert document_types['Product']['extension'] in document.name def test_count_types(): diff --git a/user_scripts/drawing_template_support/logo/pycatia-logo.jpg b/user_scripts/drawing_template_support/logo/pycatia-logo.jpg new file mode 100644 index 00000000..e365f101 Binary files /dev/null and b/user_scripts/drawing_template_support/logo/pycatia-logo.jpg differ