diff --git a/.github/workflows/build_documentation.yml b/.github/workflows/build_documentation.yml index 1b2f2b88d8a..a35b6f62d80 100644 --- a/.github/workflows/build_documentation.yml +++ b/.github/workflows/build_documentation.yml @@ -19,22 +19,15 @@ concurrency: jobs: docs-style: - name: Documentation Style Check + name: "Check documentation style" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - - name: Running Vale - uses: errata-ai/vale-action@reviewdog - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - name: "Check documentation style" + uses: ansys/actions/doc-style@v4 with: - files: doc - reporter: github-pr-check - level: error - filter_mode: nofilter - fail_on_error: true - vale_flags: "--config=doc/.vale.ini" + token: ${{ secrets.GITHUB_TOKEN }} + vale-config: "doc/.vale.ini" + vale-version: "2.29.6" docs_build: runs-on: ubuntu-20.04 diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 17f0b6580c6..8242a8d8749 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -133,7 +133,7 @@ jobs: with: max_attempts: 3 retry_on: error - timeout_minutes: 40 + timeout_minutes: 50 command: | testenv\Scripts\Activate.ps1 Set-Item -Path env:PYTHONMALLOC -Value "malloc" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b7e229b5eeb..3b7ba2393c4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,7 +53,7 @@ repos: # validate GitHub workflow files - repo: https://github.com/python-jsonschema/check-jsonschema - rev: 0.27.0 + rev: 0.27.1 hooks: - id: check-github-workflows diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..1cf484f16e6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,65 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our +project and our community a harassment-free experience for everyone, +regardless of age, body size, disability, ethnicity, sex +characteristics, gender identity and expression, level of experience, +education, socio-economic status, nationality, personal appearance, +race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual + attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..8ca4529e4ec --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,14 @@ +# Contributing + +We absolutely welcome any code contributions and we hope that this +guide will facilitate an understanding of the PyAEDT code +repository. It is important to note that while the PyAEDT software +package is maintained by ANSYS and any submissions will be reviewed +thoroughly before merging, we still seek to foster a community that can +support user questions and develop new features to make this software +a useful tool for all users. As such, we welcome and encourage any +questions or submissions to this repository. + +For contributing to this project, please refer to the [PyAnsys Developer's Guide]. + +[PyAnsys Developer's Guide]: https://dev.docs.pyansys.com/index.html diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md new file mode 100644 index 00000000000..f3aafe1e2e8 --- /dev/null +++ b/CONTRIBUTORS.md @@ -0,0 +1,20 @@ +# Contributors + +## Project Lead + +* [Massimo Capodiferro](https://github.com/maxcapodi78) + +## Individual Contributors + +* [Samuel Lopez](https://github.com/Samuelopez-ansys) +* [Simon Vandenbrouck](https://github.com/svandenb-dev) +* [Alberto Di Maria](https://github.com/Alberto-DM) +* [Giulia Malinverno](https://github.com/gmalinve) +* [Hui Zhou](https://github.com/ring630) +* [Devin Crawford](https://github.com/dcrawforAtAnsys) +* [Kathy Pippert](https://github.com/PipKat) +* [Lorenzo Vecchietti](https://github.com/lorenzovecchietti) +* [Maxime Rey](https://github.com/MaxJPRey) +* [Sébastien Morais](https://github.com/SMoraisAnsys) +* [Matthew Young](https://github.com/myoung301) +* [Josh Salant](https://github.com/jsalant22) \ No newline at end of file diff --git a/_unittest/example_models/T20/Array_232.aedt b/_unittest/example_models/T20/Array_232.aedt new file mode 100644 index 00000000000..d7fc1f55740 --- /dev/null +++ b/_unittest/example_models/T20/Array_232.aedt @@ -0,0 +1,15602 @@ +$begin 'AnsoftProject' + Created='Tue Mar 8 10:35:21 2022' + Product='ElectronicsDesktop' + FileOwnedByWorkbench=false + $begin 'Desktop' + Version(2023, 2) + InfrastructureVersion(1, 0) + $begin 'FactoryHeader' + $begin 'geometry3deditor' + KernelVersion(2, 0) + ProjectContainsGeometry3D='1' + $end 'geometry3deditor' + $end 'FactoryHeader' + $end 'Desktop' + UsesAdvancedFeatures=true + NextUniqueID=0 + MoveBackwards=false + $begin 'HFSSEnvironment' + Version(1, 0) + $end 'HFSSEnvironment' + $begin 'PlanarEMEnvironment' + Version(1, 0) + $end 'PlanarEMEnvironment' + $begin 'Q3DEnvironment' + Version(1, 0) + $end 'Q3DEnvironment' + $begin '2DExtractorEnvironment' + Version(1, 0) + $end '2DExtractorEnvironment' + $begin 'NexximEnvironment' + Version(1, 0) + $end 'NexximEnvironment' + $begin 'NexximNetlistEnvironment' + Version(1, 0) + $end 'NexximNetlistEnvironment' + $begin 'EmitEnvironment' + Version(1, 0) + $end 'EmitEnvironment' + $begin 'Maxwell3DEnvironment' + Version(1, 0) + $end 'Maxwell3DEnvironment' + $begin 'Maxwell2DEnvironment' + Version(1, 0) + $end 'Maxwell2DEnvironment' + $begin 'RMxprtEnvironment' + Version(1, 0) + $end 'RMxprtEnvironment' + $begin 'MaxCirEnvironment' + Version(1, 0) + $end 'MaxCirEnvironment' + $begin 'SimplorerEnvironment' + Version(1, 0) + $end 'SimplorerEnvironment' + $begin 'IcepakEnvironment' + Version(1, 0) + $end 'IcepakEnvironment' + $begin 'MechanicalEnvironment' + Version(1, 0) + $end 'MechanicalEnvironment' + $begin 'SchematicEnvironment' + Version(1, 0) + $end 'SchematicEnvironment' + $begin 'geometry3deditor' + Version(1, 0) + $end 'geometry3deditor' + ReadVersion=11 + $begin 'DesignMgrEnvironment' + CompInstCounter=5781 + GPortCounter=0 + NetCounter=0 + Alias('Ieee;Simplorer Elements\\Ieee', 'Std;Simplorer Elements\\Std', 'Basic_VHDLAMS;Simplorer Elements\\Basic Elements VHDLAMS\\Basic Elements VHDLAMS', 'Digital_Elements;Simplorer Elements\\Digital Elements\\Digital Elements', 'Transformations;Simplorer Elements\\Tools\\Transformations\\Transformations', 'HEV_VHDLAMS;Simplorer Elements\\HEV VHDLAMS\\HEV VHDLAMS', 'automotive_vda;Simplorer Elements\\VDALibs VHDLAMS\\automotive_vda', 'example_boardnet;Simplorer Elements\\VDALibs VHDLAMS\\example_boardnet', 'example_ecar;Simplorer Elements\\VDALibs VHDLAMS\\example_ecar', 'fundamentals_vda;Simplorer Elements\\VDALibs VHDLAMS\\fundamentals_vda', 'hybrid_emc_vda;Simplorer Elements\\VDALibs VHDLAMS\\hybrid_emc_vda', 'megma;Simplorer Elements\\VDALibs VHDLAMS\\megma', 'modelica_rotational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_rotational', 'modelica_thermal;Simplorer Elements\\VDALibs VHDLAMS\\modelica_thermal', 'modelica_translational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_translational', 'spice2vhd;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd', 'spice2vhd_devices;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd_devices', 'aircraft_electrical_vhdlams;Simplorer Elements\\Aircraft Electrical VHDLAMS\\Aircraft Electrical VHDLAMS', 'power_system_vhdlams;Simplorer Elements\\Power System VHDLAMS') + $end 'DesignMgrEnvironment' + $begin 'ProjectDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='ProjectDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'ProjectDatasets' + VariableOrders[0:] + $begin 'Definitions' + $begin 'Materials' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.949999988079071 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='Project' + ModSinceLib=true + $end 'vacuum' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'pec' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=247 + Green=242 + Blue=232 + $end 'MatAppearanceData' + $end 'AttachedData' + conductivity='1e+30' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'pec' + $begin 'aluminum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + permeability='1.000021' + conductivity='38000000' + thermal_conductivity='237.5' + mass_density='2689' + specific_heat='951' + youngs_modulus='69000000000' + poissons_ratio='0.31' + thermal_expansion_coefficient='2.33e-05' + ModTime=1154373020 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'aluminum' + $begin 'glass' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal') + $end 'PhysicsTypes' + permittivity='5.5' + thermal_conductivity='1.4' + mass_density='2500' + specific_heat='750' + ModTime=1151073980 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'glass' + $begin 'gold' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + permeability='0.99996' + conductivity='41000000' + thermal_conductivity='315' + mass_density='19300' + specific_heat='129' + youngs_modulus='80000000000' + poissons_ratio='0.4' + thermal_expansion_coefficient='1.4e-05' + ModTime=1132068239 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'gold' + $begin 'titanium' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + permeability='1.00018' + conductivity='1820000' + thermal_conductivity='21' + mass_density='4500' + specific_heat='522' + youngs_modulus='115000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='8.3e-06' + ModTime=1132068239 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'titanium' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $begin 'Scripts' + $end 'Scripts' + $begin 'Padstacks' + $begin 'NoPad SMT East' + $begin 'NoPad SMT East' + ModTime=1017696647 + Library='Padstacks' + ModSinceLib=false + LibLocation='SysLibrary' + $begin 'psd' + nam='NoPad SMT East' + lib='Padstacks' + mat='' + plt='0' + $begin 'pds' + $begin 'lgm' + lay='Default' + id=0 + pad(shp='No', Szs(), X='0mm', Y='0mm', R='0') + ant(shp='No', Szs(), X='0mm', Y='0mm', R='0') + thm(shp='No', Szs(), X='0mm', Y='0mm', R='0') + X='0mm' + Y='0mm' + dir='0' + $end 'lgm' + $end 'pds' + hle(shp='No', Szs(), X='0mm', Y='0mm', R='0') + hRg='UTL' + sbsh='None' + sbpl='abv' + sbr='0mm' + sb2='0mm' + sbn='' + $end 'psd' + ppl() + $end 'NoPad SMT East' + $end 'NoPad SMT East' + $end 'Padstacks' + $begin 'Symbols' + $begin '00_Array2' + ModTime=1646775495 + CE=0 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=false + InitialLevels(0, 1) + $begin 'PinDef' + Pin('Array[3,3]02_Patch1_1', -0.01524, 0.01016, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'Array[3,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.0112674400000001, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[3,4]02_Patch1_1', -0.01524, 0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'Array[3,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00872744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[3,5]02_Patch1_1', -0.01524, 0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'Array[3,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00618744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[3,6]02_Patch1_1', -0.01524, 0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[3,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'Array[3,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00364744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,3]02_Patch1_1', -0.01524, 0, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'Array[4,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00110744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,4]02_Patch1_1', -0.01524, -0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'Array[4,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00143255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,5]02_Patch1_1', -0.01524, -0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'Array[4,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00397255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[4,6]02_Patch1_1', -0.01524, -0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[4,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'Array[4,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00651255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,3]02_Patch1_1', 0.01524, 0.01016, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'Array[5,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.0112674400000001, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,4]02_Patch1_1', 0.01524, 0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'Array[5,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00872744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,5]02_Patch1_1', 0.01524, 0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'Array[5,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00618744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[5,6]02_Patch1_1', 0.01524, 0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[5,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'Array[5,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00364744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,3]02_Patch1_1', 0.01524, 0, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,3]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'Array[6,3]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00110744000000006, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,4]02_Patch1_1', 0.01524, -0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,4]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'Array[6,4]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00143255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,5]02_Patch1_1', 0.01524, -0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,5]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'Array[6,5]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00397255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('Array[6,6]02_Patch1_1', 0.01524, -0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'Array[6,6]02_Patch1_1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'Array[6,6]02_Patch1_1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00651255999999994, 0.0179527200000023, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'Graphics' + Image(Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 8192), ImageData('D:/Array_Lunch&Learn/Finite_Array_w_Radome.aedtresults/5262493081646775493386.gif', 1, 'hI2g1--E++U+6+8RZLpSr6hJofls++CNl0k+8++++R4pkOKpb9a7hQCrRnPamhHc84QLcx0LE+90O00K-KP4Nd40sa3B7kpGi0AM07cDRbU+92PujsID3rLnFLhhLypnjCetQDxwb9yyrzyvrzz6qjsfzdzzpbzvxzz0DzvFzPDxjNzRTxxn-w+h++++++++++++++++++++++++++0kLLP3LtPx5QfizqNtgk2+jdf1wKzLfySvhTPDCvodz8U1kzQhvqGvdFPD0prg+k1M6NeOtsBbF5kM+P4JhrrTJrRcC+-jVhq7PqjDp9pPoz1U1MF4ZjHTiVuUOeCk-wCxpTd9NpjJbSzLIe++++++++++++h+7nHzBgZ+60p5E-UPEQ+KBg-+BAKxbPnfp6-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-FQwlsrcNornvh-aD5ttlsWj6hsBjLxer9nGCOZynX4LwkMlwCzXqplrah9CCcxXL9KAMTnAWrUqzLA4LQLYOy5LmvVWbXxX9mvS1PBIkNyLOy5LmvVWYXhrkvkvFeaX5kvfCpwilMh6xwCjdpjZp34jVpwisMd6xzChsBjpn-ZtBg-jZr1hZ73j-uvLRd\ +jBxXYPk9Rfa19mvE1TnYL9m9S1PyTPhKUNyLNwRqxrTfgK9ODnhqw4rwyommgWrUqzLA4LYqzZqwCoOdclwCw0rOtUmwio+rut3mwWrUqzbqvJch4TZqwCoOdclwCxwCjZr1Z73jtxilLRyS3Thq8zh-x1WqTKJ3ZSJZhmKBcnBCha4gorLcNIpv5RHBCTAzIMvsRTDiWjXr9awJtJpJdyz+VXKdTrIdGJOQDKgksh95qF4QioiEvVgT2BQof4sOTxt6nputvwbaZbrDDhsBgLxSrVEvefuUxRzLYzhlcvvrVtpd3-Cwf3RmMlfoQYSC933HwXss94TYv3yrNDTAroZsBj-hmzcqyTdhvQYBwpX3XfjSbh0WsySOdoJ5nXjdG44hX1DoRfsRTDj0jfpdIwRFgscNdzbqhGKRi7Dbqx-ORTo49LXxXSBrHrXDhqsNj-xzChzDhT1jT1fuRPyTPyLOy5Lkvhrwurwyo+rwurwypwCw0rwypwCxwCjdpjtxjtRfsRT1jTnfTnvLkvy5OybKzbhqzZqwCrjxCqbWpaBxciuuBgn9ibPJwtsDJROFfsRsBiHLLGzy6miKDVUD2S9hTbKiA3srsml50V3zbaQnwio+rvugPvzbe-RmoEwQxPMnVWw9jVrUqqRroL5Lh6Nz1FQRRzrnf4TZqU4xTm2LDZ94QTavtBX9SCwi6PkTsxfTvxUKD34vttoLDhPvyNQR2nQqP7m9Q1T9jnqtrTnfS1PyTPbRziz5Oy5LmvuwasbcnfmT1hsBhRhHwPpN3lDVaw5rwurwypwCw0rwypwCxwCjdpjtxjtRfsRT1jTnfTnvLkvy5OyhbKzbqzZqwCpwCxzChkBwCxzChzDh+BzChzDhT1jsxbJwSrj-eAFxKgCwxxhzhLhabhSV7AwdstsVjoXi5PkTTjeFjLqUQpPta4QjsUlbtRj1h0FtmmXUtMz7MhlVzAm9S1PxQkNRlSFfsRT9i48SDqAj9hsB\ +gpH-btRfsRT9i48GDT1j1h4eOAhT1igvLmv3WoXrkuybKyLIIOy5LmvVWYXrwurUqzLA4LYqs5dOvjBNjiQ1S1PhBIkNyLO+PySWNSHPkPTnvJeoX5kvjfirCvxRWtPFySrUqzZq4KLYqw4rOtUmhwipwCzVq1JB4jVrUqnJA4TZqU4zLcaLYqw4rwypOh6lwCzVq1JB4jdpj-xyihMQf6hzDhq8tjnsdxitLx65cQqvumcgfmghiGlh2N7wkpaauxX0ajslgmdfxbhuX5T1ftxIRyStQrWj8ieh5rsY2OpfqsZeOfH-mpa57Oym6lZqZm5wBXsVXYZhsz1HTb94ybJDTgyoAyvtRj1hWzfqw05RJTK5fjuw5qD5TKyDCZ6c7zbMfaH4hhSVY1tnMcWRYTD1MnwZMjyv7vtay2j1hsBgLxCrnxDPYVbagMgRRPoxcoT3nhnRCW6ySRR8GkJgMNSXjT1ftxMRzSh8bXe3b3XBBwyuEnBt7wSre9nfyUFOyThAPniOSyNxar1hsBjtxjtRfuRPkTTnfTnvLkvrkuybKzbqzZqU4zbqzZqjVrUhqzZqjdpj-xzChzDhT1jT1fuRPyTPyLOy5LkvrwurwypwCzXqRzfqowKgnjT9hiSWPAmveqqzDi8FjbmIXrkvkvQYiiZxwFZQgj1CSeoKzAZQMTqb43yRuad3jh-zXqSLrvDISxY6hys8WrbH3wKT1h+ByyXayzqruLQR4DfdSyuMmDXlHsRc-jhbxqrrnHkmvbc7nByJQMLtreOYKw5yDPNLTFmFkcrzTCWtvTTn9XcaHanNCHPh+PvRySrCPyTPkPTnvQtjRrsvrkuyrTJYL2z4xKHsRj1hfWTXSX8i7wCrUqzbhqzZqjVrUqzZqjdpj-xzChzDhT1jT1fuRPyTPyLOy5LkvrwurwypwCzVqjdpjhtxg-jdpjtxjtRc-jtxjtRfsRTDgujfqxM3HuDe3VFZqBQ7PTUXFdleEKzE\ +ANh7vpny5PkvMjuxcL4ISpfbiiBmzVv4TZqwCo75b98C1ZXwZX45wn6hsBjpn-Zhr3t4jVpwisMdszMmwirUqnJA4TZqjVpwisMd6xwCwCoOdclwCunhT9gK9GDTh1fuRPtRFFfsRT9i48GDTnfS1PxQkNSHP+PtRktGFPkSiprOPnTMt4w0rOtUmhwio+rwt3mwWrUqzbqvJc4TZqTCzOvjlq9Jd4tvS1PyTPNNGFPkTTfa58m9TnhvS1PBIkNyLO+PxQkNSHP+PtRktGFPkTTnfRfoH9mvS1PBIkNyLOy5LnvS7kJhyrMfyo5QC83xNIKJtKKrlMxHAePC3EMmrgaMy7s7MvsRTDiWjXr9azJtJpJdhyz+VXKdTrIdGJOQDKgks95qF4QioiEvVgT2BQof4sOTxt6nputvwbaZbrDDhhsBgLxSrVEvefuUxRzLYzlct5pTrp6sJmYczhGaNQWovqk6YhSY94-szxb6nphutvwbiYf+RwCjbp-rntDPoxiaAQeRhnpxcEK5HzLD0ouQht7FkdfNNmVhzDhhsBgLxipBaneCaZLAiCzh8nLAIKyDQx5d9HfzUVOxTgPkieSxNxer1RwCjdpjhtxjtRfsRT1jTnfTnvLkvy5OybKzbqk4ybKzbqzZqU4zbqzZqjVpwCxzChzDhhT1jsRfuRPyTPyLPkvLkvrwurwyrUqxzdqowLgnfT9ySWPwuse4yzDSCGjbqKhX5kvk9QbiyWcxXh9WsvmtByMwRtF1xwCwCqfyTNvjTrqTUsLbH9XRXDmvE1Thjddjjrixx4JQx8DfdKwuMrV0jVrUqpTnvNBOR9m9HazFgqOQlPR5d-jDm9Q1hTDig9fdRN2Oz6KXVQvwjtYfz9IWTaj3uffGAT1j+hnizrTbhT1jsRfvRySrChPyTPkPSvbcnfmPWS1BwCjhrpN3lDljJYy5PkvLkvrwur+rkvrwurwyrUqzZqhjdpjtxj-hzDhT1jTnfS1P\ +yTPyLOybKw5rwurwypwCw0rwypwCxwCwCpwCxzChhsBjLwSrhlSAGhwbBAmcel5Szfp9YGpumcld9LfGX2Z50ahabDWSsRj-hmzhhqlQOFvKjSOsr9iDjNSHPkPQbSAUdsyGAmKANTn+XrkuyLQCIQLgNyLPkvFeahXBj9m9S1PxQkNSHPyLPkvFeaX5kvk9Rfa19mvP0qPwOrNySwq9v0bOyDGeuThtw5hrNx7TziEwQvD2rSYcoLnvQ+jyzNV0PoOznrwSQ6xLraSqyC9tkYfRxFXhhKWybKw5rzt8+nwTznphyoyPz6DPftwbn5XztrboD3corkvkvTQOyDbszfJKhndn7qTBQzuTfVbyzvTwxz5YSDMwKnPQ1TDg1rrvFciwRTHnqsTT4nssOzd8ThFsjaqs3NpbOPnTMt4w0rrqjCdlvShuxRYFzqlQKyixjJiBuDyznsIHRjnqvkhBntntifbiTpnOh3wivIRTDg1rrvZntipjRbqSHRclwAGTH2SvbD6nyvzS5luhVaPAFTDhT1jsxjZxyoLvWirhMJyjvMSWiDbMNwyaFTDhT1jSj9PzlDJYlarwhhL4ng6Qhzf3OhDDPbRwCjbq3xjJWxnvPhkjvLp2YD3O9thjtRj1h8vGj3trthS5nevLboMvJcjdpj-xyyEji8vRuVgEzvlBuiFTDhT1jsxczmvTZJPyTP5GbkhvS1PjxmrLzPqDCTP5GbkvS1Pjxer1rJxKBWPhNpjRuH+hsBjzqPTDavgkttjhRuH+hsBjzqfTTh5MnvIAryt6UKw5rlvLjf7wblLZZ5qoPkxzHlfyzKZyhf-ThvsTvXCwTuxinjAm88baTo10bndXmCeuOQS7vdhvnvS1P3zLhxERhJpKvuZVjhVqMTBwu8TN7j9w80j4j2Gn2yDONPqAzCZWbCvlzhqyjZ8vZ7DbXgcqjIBpxthWErqkKAz7qDxiWSzNydlKYOy5LlvHABg3iTustOqvrdvZ\ +4zDbtkVQxbP9tuVhWDPhRGwB5zzF6TafsyEKbH-LhvWZ5WagaH3IUiFrHhDPyLPkvIjuxZ1+kcSihOpMlsvurFzXqcPe5BbvNq6jWvxmxbnLwzJX9jCfPyrIjeILbLx0WpwwMLjSohxonvhWbtRj1hGzjq4Ldvd4xzSfPAUzBVobnvuIBRJJ5XGGouQeskbi36MTaAhAzFqjVpwyyNxSnwSqjiJMyTPyLOy5LnvZzbqeBvChzDhT1jsxgzrvFTiDTXqh4soxfzVqjdpj-xyyARySBKhvlPTnvLkvyDMhyTNRQKmKxvlexbkvrwurUqzzhDBxywNhGVpxdzOmrRvxliltTzxPISgOfrxZushcnLxxywzvxzyLPyLO+PrzWhqzj3j9XsZRODT5hl5BPqoBv1QzODnQDODWn9xwPx5oVrmxDvLnyKPyTP+PvxhEKyzs2ZjPxPqju4rblFBzxW9X8SyTQh3Rzxpv7nvyxwPwypwCw0rBqhvQCArhxwAGrRsmPiCRPvxyJD3rQX9hbLT3uP41YyYvxj3gTBK2vnLtxX7KtTJsCRzShLv0f53qwOo5TTXpL4DDh+BzycazDwhOWrBhrmrijKTfPqvx6jL5zNhiTZjSihhtwgnRX7h9b4smgLDKvastvT9LfrlVTvCLlvr1IPtz1hfwz6hkBwyrLvOVF8hgmnzVSpWr0zFTwDUwTqPVHpgvLfSfTP3s4GeBBxygwZTXwALkRbhrIcvjqxzhpD0LwSrr4XvT1j1hhrlvhlETxfT56xByifqxCBXhyrTvYrIDfPsuCozavzNth9lSBzTmIaAszbxouBBWVhpzQzYe9TgppFzTqOPsxdPTnvE1TTXezjTstXkzqhsvJxi9ozjzrezjr0TeZZwWfVzDNvNvzAse9tRfsRTDiDLoxaT7Pvgyj75+RFhAntP7ipuAhSyrTJYbBwCwCpji7tAwRSRsdurBHsziduAwxjtRj1hrrwxaO4rh5mzyLOff\ +mHWzbKw5rzupptAt9Smi7yBuAbkvyDNhL9yxDwjRxRjtRfsRTDiKhfhxyRDpqjdpj-xzixuLmvLkvrkuyrSx9tRjtRc-jxzhGyLOy5S1P7tzTLj1hhT1jT1fuRPyTPyLOy5Lkvrwurwyr+ZblvSw4cx5q8PmxuhL6yDjLqyzR7wyoFhppewqeSpu2Yn7Vodf7Zlsbi4PkTTjfFjLqXwk9Qz46xwSzFXrtBlfPbSyHdyhQ2Oy5LlvUcSQAbvIqshdtwbgWpXTjZn4pSNusyjsmFbtRj1huvSjVvvxxbXYhquATeoLzM2Oy5LnvyirfDPpRWzuZX5kvy5OyLMjaqzZqwCpwilPBhkBwCxyihFTDhg9PnvLmv6kKy5LkvrwurCp9Uqw4rwypOBBzChsBjtxipO9sRsBjtRWqOhPkSiprOPnTMt4n1PqZtKiv7exhIlMdlZVwMzpDiqfgFoqcEaD4KjMQf6hyA5hpzNRipN5PzIviKWLxvlRraBQR7GvbXvacaLYqz5HjHpebrxPPxQkNSHPwKCxhDFgJwZT5cPTjHvrxxLCzcwsJbnvKA4JoTXjsRftRWtOFPkTTnfRfoH9mvS1PhyLMhaazbqw4rwypOBBwCwCpwislwCw0rOx2mwirUqzZq9Jd4jVpwCxyiFTDhhT1hyrPS5Ms3kKRqoQOFjnz7xJdFHxf2BQy8A0Epnucnl9LfZX-BTkPGAT1jshxUXTrbtNRDhxkXXOhxQTvTfPuZ+RRpLnhFIvncdxPABgNomNetqiH4WMIn8qhAlszD4Dx8eHBBGIXrkuyDOOrVqKtJHrxoVolThnPvnHAtUWueh9qLKyDPB57hAmOru2Yn7Vodf7YlT7Kgb73j-xwSuRjH4biKthjD4iPl41jiSrhIWxubnRJyhZSmbhiX6SJCD33PB4-umQYOy5Llvb4xDOylVbCHPNyXhKjFPAwvEqzZqwCpwhCxzChzDhsBjtRfuRPyTPkPTnvLkvrkvk\ +vLkvrwur+rkvrwurwyrUqzZqjdpjhtxj-hzDhT1jTnfS1PyTPyLOybKw5rwurwypwCw0rwypwCxwCjdpjtxjtRfsRhT1jTnfTnvLkvy5OybKzbqzZqwCpwCxzChkBwCxzChzDh+BzChzDhT1jsRfuRhPyTPyLPkvLkvrwurwyrUqzZqjdpjhvO1PyTP5GbkvE1TnfTnvLkvy5OybKzbhqzZqwCpwCxzChzDhsBjtRfuRPyTPkPTnvLkvrkvkvLkvrwurUqzz6BwyOIjkhvLLfuvTcQNe9Hdgf1B7Oh6mnNyHPkPR5xDNZxZ5hOtNlZ8SRNGnXqnDmvS1Phbxtbrb3IytdZ5CJdNlb9yDOAT1jsxjToRUpHlWInwirUqtzSNxulVWbX0VbthRj1hT9gKnPTnvS1PyLMhaaw5y5OyLIOy5RNqjZq9Zd3j-xzChqjFAj9hsBjthRWqOPyTPkPTnvJcorkvAg9PPP9ODqM1jxSoOdclwCxyCvTZqbZN4jdpjlzNwhisMd6xzChqC3rfvmySoOdcnCPrRyCzVq1JB4jVrUqnJA4TZqKBjtRWpOFfsRhT1jTfYL9m9S1PyTPNSHPyLPkvFeaX5kvk9Rfa19mvE1Tfa58m9S1PyTPhKUNhyLPkvLmv3gqrwyrUqnJA4TZqjVpwisMd6xwCwCoOdclwCzVqjZq9Zd3j-xzShxTO0PxSWyLOy5LmvVWYXrwurUqzLA4LYqs3ryDMwsxipu7zB4-cvrssByjPFh6jxsrwmMVo4vLrvQn9XKL42gsuxZz1ghuLkvBiPPftPuCqABIwOhNiHPgErThfa588CDX7gyrsqhxSt+hLHAz3Az5typfXPoNnPXCX5kvhi1PyyLx74RSqtyRhvP18rclaL4T4c484gqLsRbmZPmyvTsVrqceLlgqA3kxQS1CX4JSSAQelwyrsh9BySCbNSh6kmwirsLBySidqTSv14NYMnTh4AkDhxSx9yf+ihgXSX4Pxc\ +Fi1xhjXphr5SVN0SNsX1LaWiANNGFPkTTnhD880DT1fuRdnIXrkvkvKMo6xwCjdpjhtu7ZtBj-hzDhL9GAT1jsRdvKX4PYqw4rwvFatBg-jdq9Zd3j-zVq9Zd4jVpwhCxxiFXDmvS1PyLMnad3j-xzCowf6hkBwCowf6xwCwCpaB0DTzYMCJPIfWbefh-tNTjdqbBGDTjWKOtLqzPqEIy5OSJYOyTHDhjGlJRvuRdtKFPzy6dbqy4UxqhtO85XwRV1QzmDBlsSfPxzi8KSzQ2rwvHad3jLvldZyKBKsv5os7QXxhpizaehOVTzw71li9hzy3s6Lk5rvUaybOQp6xyyzBy-VZsxrcQarknehTqehtwSixzLhxyxKv8deliohTyROtj8SsBhtKVbtxeKpH3z6aoLsceiDFAfNrRdirqr1shzShcJAuzOBirVBwCowf6xyyEbJj4bJcqjLLo8VRrzPhUrgNfRK564rO7LpwnwmehnfTnh4PYqxxsObdMZYDr1ihkjsMDXXrQtyPxCtrSTY2ANwiAXk84JaxlthhthKXDmvOiSZxtOwL04nDXqQ4DRk+S9jViTzR8Kz9CnOANT-8BvYipwCowf6xyyhzhYmLPKq+bx3RPTNP-ykTHXXgqJc2k1M1BTzv+U+++++++++++++++++++++h+++++++++++++++++++++5kLzkxEGk209E+I++6+0+0bNJxLhm9JR8wS++1ahQEg+0U+++++++++++0++h62+++++R4pkOKpb9a7hQ3-9-EM++++++E+-+1U+6++1L5U++++++*'), false, false) + Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 0) + $end 'Graphics' + $end '00_Array2' + $begin 'Array' + ModTime=1646764268 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'Graphics' + Rect(0, 0, 0, 0, 0.00254, 0.00254, 0.00508, 0.00508, 0, 0, 0) + Rect(0, 1, 0, 0, 0.000423333333333333, 0.00254, 0.000423333333333333, 0.000423333333333334, 0, 0, 0) + $end 'Graphics' + $end 'Array' + $begin 'HFSSDesign5' + ModTime=1631310487 + CE=0 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=false + InitialLevels(0, 1) + $begin 'PinDef' + Pin('A[3,3]02_Patch1_1:1', -0.01524, 0.01016, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'A[3,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.0112674400000001, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[3,4]02_Patch1_1:1', -0.01524, 0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'A[3,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00872744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[3,5]02_Patch1_1:1', -0.01524, 0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'A[3,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00618744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[3,6]02_Patch1_1:1', -0.01524, 0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[3,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'A[3,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00364744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,3]02_Patch1_1:1', -0.01524, 0, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'A[4,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, 0.00110744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,4]02_Patch1_1:1', -0.01524, -0.00254, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'A[4,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00143255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,5]02_Patch1_1:1', -0.01524, -0.00508, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'A[4,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00397255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[4,6]02_Patch1_1:1', -0.01524, -0.00762, 0, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[4,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(-0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'A[4,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, -0.01524, -0.00651255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,3]02_Patch1_1:1', 0.01524, 0.01016, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.010795, 0, 4, 5, false, 'Arial', 0, 'A[5,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.0112674400000001, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,4]02_Patch1_1:1', 0.01524, 0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.008255, 0, 4, 5, false, 'Arial', 0, 'A[5,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00872744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,5]02_Patch1_1:1', 0.01524, 0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.005715, 0, 4, 5, false, 'Arial', 0, 'A[5,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00618744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[5,6]02_Patch1_1:1', 0.01524, 0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[5,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.003175, 0, 4, 5, false, 'Arial', 0, 'A[5,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00364744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,3]02_Patch1_1:1', 0.01524, 0, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,3]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, 0.000635, 0, 4, 5, false, 'Arial', 0, 'A[6,3]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, 0.00110744000000006, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,4]02_Patch1_1:1', 0.01524, -0.00254, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,4]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.001905, 0, 4, 5, false, 'Arial', 0, 'A[6,4]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00143255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,5]02_Patch1_1:1', 0.01524, -0.00508, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,5]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.004445, 0, 4, 5, false, 'Arial', 0, 'A[6,5]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00397255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'PinDef' + Pin('A[6,6]02_Patch1_1:1', 0.01524, -0.00762, 3.14159265358979, 'N', 0, 0.00254, false, 0, true, '', true, false, 'A[6,6]02_Patch1_1:1', true) + $begin 'PropDisplayMap' + PinName(2, 5, 1, Text(0.01524, -0.006985, 0, 4, 5, false, 'Arial', 0, 'A[6,6]02_Patch1_1:1', false, false, ExtentRect(0, 0, 0, 0, 0.01524, -0.00651255999999994, 0.0165354000000021, 0.00188976000000024, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'PinDef' + $begin 'Graphics' + Image(Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 8192), ImageData('D:/Lunch_&_Learn/Finite_Array_w_Radome_Practice1.aedtresults/382441681631310486462.gif', 1, 'hI2g1--E++U+6+8RZLpReFKpD9oo++CNl0k+8++++R4pkOKpb9a7hQCqRjLbXhr98ZQSp7s+N+Mm8M+AO0AuP0c14V6+pOpo6k14+Wi1t4lDufjvo7Gidi0LfThFoQDXtdWvqNzLGcgf3fpjzzDzzizzqBuw9zSzzQzrzzrrzyFzjQTorziLzyjhzCiG1E++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++s5LStaqOhhiGzyxoSLk++A0DtbPTrYcxTvgyujnPkfg0h+D1nmzimZzHtIS5TDkA+k1Z6mgnvlrPbnE++C2hhjyPKbRcC+5+GvbjHThZjheZttCk++Hh4ovofvPQoDOBo-+5suyIPereszmXirIk2+++++++++zV3jr323h+1URhyJFrV5S+E-CJhhHSPyFDk++Q8uybT6C+51CpbpyT1kjvzRpixzPNk++hy7MwxDPfBiqprRxOjSpZz9PibrAljyTDuSg++D+hyzMI0zbsiCFWbXfnqvUnhTznegyQ++A1TNmzUhoTTTYyeiyXAbnqyZsyzRxdpKePPbFg1++0XkWvzrpgKhrUzLufpjztjZzTOcvNSr3JAy+A0cJ6diz3vRAhBwZpzjTbvoz5TlCbzXdl3xhCk1+Grrv7WqFQrdwDxGrPrz7AvDrvFBxCk1+e3EeZogisrjwvprsriz04-bdhvRhTuxvjPygwLOSrtQ6BL+0+srrvkmcX7ZLTlZCfeazzsufvSviS-7ZRQWRxh5U0UovQPjzeKirEteJczaqR8jPppvuyLxzQyz9pW5zYtJBKMVn7nbKXR+E+ChxiqpaCRVpIIwjbPvxjSeaofoyyRLmzjXircTuyCXBCrnp8GMLNktx-A-+C1rhxSpOPlRGn9o7AiyDppnSEvr\ +R3iHfwt9voAnLWuXVZpn7oyBpSfhT8Bo++3zGhhwiCDSXPZvVj1zdhJxvf9np8ybdtewLQTXlyZPwK+6-DxSq-rfuxefSzaOtPhZzSrytlOwTeQFoyypz1uzDofHLs-+6+jvBhxxmsTFxwiyjMpxyGpFKwja6ithzPfgujaf++1sgfsxwfRLHrjJqzpnOhyyZPsxWmrrocpT8RQ++Dy+FvTwGIRuhuhiZt97Cjaw5+60zKRixrbvwwxjpSZiKlyTfBRw43LcvPmw+k1wdv7zdqpBVhHlxjmt6uxWn6IBg-+DtJPRx5XI8xzSbXFxtv8infaXvjLdTaVy5h-E1s+Lqvhqt3OazPo6JriTrJJ-k++aBeyRjHqh2fDvYWpjCoRypievLwp1F6++2PZTGh7hLr75ueijQoidAhjx9yxU+U0+i0mjutSIsenPdytxdKw5+DWbD0jghyiw9JTthwTV8y1drybM+U-xErbBVRtxvtFqx5E1UitRrpv2TvRvdqk2+jU3ldtqux5KlhVTrx8ubgluy1rUs+w5pOxvLPhzjmbXtufoDT1U1kPPjr79kggxDPtpWEmPLxhXhsC+D0RKjRvo9fLXzKOurnuSCZp++1UatJrOMDAbPnjpSg28sIR+C1PpTOChb09PRNAhEn25+DXqS7T9YKkN++1sviJRxCGtaBQPeE++Q-eiQwzH1U++DvKHhnrovhFo+s3Fxysqy5E1Ub5ovSXg+k8buRjFq+60HxirIRU0+IzLhuCo++0Thhqx5P+E-CJxX50N+++D01G6KRquY++4TeqyT9Yoqd++1kst-BCpMN+61HIDQih+E1+KPUVhUA+b+zwvE++NunhiPk1+A17mXg++7m+samzJOjAij0i++1wO4v9hghTnlpcx--Y+UDCIxyjSihzjj-I++CQevvh1Vj6C+5+avigBdFo+s5kgmmBJhtfvmHU++b8iwdu+kZ-Y+U-zCiXsAYCwRywA4iLxSORo-+++\ ++++++++++++++h++++++0y6xBZaKMgLU++NubewvcLxaaOBgcv+A-7GjdZSjxwiuyDqbuNS4Q+h+5tYJLyIx9qeDofujLvgTHip5E1UltLoBLLdSrzyLgxLyNay5E1UdpLpGHPehaqXLBx4rjnyaREQ+yBMZLGXeiHyzWpvRDLujvMzDp5M+U-zGe-ztq4gvTHg+hk1QguKjpjLV3TTmtxirjfwCP0E1k9IduORGHrKKUeszpRZdr+6-zLBKZcZvohwp9PpmAOixTP5vRHQQg++Dn1YVsduf7jTyYXuSrovE++Tvie5p1IIqrTBTCDhuCrtASIR+C+jZDFX5bJdRzakrYvf1U1kNujuWlvpp9QLnTm1SXhxCk1+bmbdhmwQwueNjztXSbfvxzEnwFE++T2pJfsfu6xrZNQowxyrPTRTYpz+tPswLbxszh1zHqx+fwRE++T2379sru7iki9qbapiuWbzBSnzSGrVvox5MYRk0+nwYj6djlhvZANLxDAexuSBDDgJxyvRCK-rqjvB2oxjNqy5E1UcmJx4QXdLq7H3zrtafuMhjZ6zSbcvfHg+kCjmmzEoxGLpvHrBT8mrdmvRRCNJMuxuioZlBrcvPVY+U2AZhrHLe+zqwdH8ycfTjRLh9LPddoPTGjNiyjOSrYyIC+D-ATdZSweX9JAN14fjchofCzjOylpusyxT+xjNpAG+0+e8EjMoLxGqneHXNTYmMHGija8yNvXRtSRufmhJkY+60R7Gy9iyi2oxS7L4LfIvyIfiHDTt5BGtqwuRhCxumi3FIv0HdFq+DXZhJJpsp8iCbSkifrfIBqpr0HreFXyjHdXIhrRORCiKGMxnZtt0lhnt+E-yPoaDhDCdW-CYpXvfhqsxtpDBnYYx4RybmxSjfpCTIGJVzbbHRkRwm+Dl4yOKjWbzGhdjuqzwU6DSd4QexBS0fFwcjdVsjgw2ozbovczSrhiUA+sDSIx+CPGKiumkTohxhdR4wpwo6\ +5LjhpAdAfiDGbekRSRjvqakTCL1U+bZpxSwOW5RdTlwpgjLPdchqPfLYasuQBbAJrxvzK7imrKqd5T9S5xvvRiFNE1Ub0LxElvpvGvuxaASRRKrhCnS9x8IPlsjAYv3uSpLIlJK4Rwjox5OmNE1URD99dnnegaxzTtq-ERpsp2LThjcMSRRalpmtRuCrNc3vvRbry63hac9QH9+A+NmbdJZ5zN7duan-p5bLjM73Rhx-3Tib5Fv0d8wuXbjZpeuS2oerZCQ9w++C-5mmzKsyrh9gTxuebjrMHYvf7Qh+cyui0JuvrbIdTNSEbrrYZtguh6DLsBzrFbmBI9u4Bkj65k++5taGFS8R9F9hx6VarhCfQnO9RfYADCdSPqyNY8v1rpx5HQ98AyHdpDrwlaaHjpvoSNbx5duThzos+s0T79kTKYbv4dWtgt8h7Miltp4jTvaneegDT6pxKTTVJmCNf5HjJDTxOh4zKbYfjOsUE+wDp9iYVBCNXiwhHB5WbeawhvSH6ZKXjh80h4ShGvYv-SVlRihyOqygYa1Z3YosTo0N-Y+yCsZzFKDSjJypqwtu34jLPHLq9p5rHn5T4ClinHThXhHDtKAtZmdRBuKerkT7Y195lhkjc5I5UCxMpMqWzi6Soe-jDy-Frsca2zf7hXTj3twbI9foaCXsxTwiHiJnr5kFLIRI1Nsv7RPTHeSMe+9QA+5mXYhsOxR10hzNdBTJuDSBHpSCYeFoEv0Sdfx6p7IJzAJM1lhCjLrsjtP2iu53+prygxAvoZhejHh+D0Bt-SVe9RIlex6IlzftvodITwQst1NCyGZv2ghCScuaxprrOZ9jlJ3hzKrRPvNeporc+bewuDpiRLubhqQDDC21+D0j4jKCFxrMLJv8J8zSPqpKiMTuhiQdmWR9IdItixdYqFJrdrahxhHfTqVfpyNfHppCXjXNnnbvUuop6Ey6x0ONHhdJj4uyqovU1kXyGLYIQxuBhTpBh1PRlcvD\ +6thRAKrTLiBb2RjdkYfNCkkSGdhi+d6rzLSbvSPdChOLH4dPrxP5ueCGdKAwb-A9cpqqeUf-Kcv+DnJYbv+cmtHh1HxaItQRSoxXBvsLxsqqkkwxuY9cLgrfJwqwSRFLoLijSnrTizTwKDHhtRg1hfJtyJVevLO78PES+DpnJLzGcTm-BLTf1bqkv2VtpuIWFYttpkfFAYbOrBQZIhFihvbmTjIOxRSifSIw3DXlw3CPhZx5lfZ4DXrH8-slqr1+1woN9ycYTRd8YThwOVjccgqDb0TbSsxueZ6yWJ5HnreayeoZxdvtsz96ZvhKgdszgVGH0jjxqGPhYTChzjThNPYvjLqVRES+Dm0zR3ABXnnC6oXx1DNSma9MFTidoYX5rhcYOR5AhbrjIwqpHRNCoBxaueyuhGoyDWk7zfrqvxAa5PVbtNl3zrYpiOwdtBE++LpDGhJMVuKh1whKbelg3W35Iz7Lf2crufWPhnrNqoDjKNNyi9YBATnPZEvspabZfrhFlZTKzSSRTUgiGzmz9ogxl6yc2DU7tiBKS8C+E+y6vxALZ5DfcyjG3Azt35DhAzj8-rv6cnujdYgDCySWkxh7oilvmPzLhEcpFXBDPVadhkhNdXpKJlaLoLFehjWCEvXivWE+qe+9+llhpjSr6uC5JdjuGFxqY4Vvre5ixLLPCgIRRHw7iRbdohAdftEp3TuxXFrc3b8qDHn8JRFqfauNSArZveSLiwmHzCD5aRrxsIGBQsKayjhLWDy8kK+3yKLOSlFhrrvWrevu2uLbgPiDCd-zbYuMQyXrjC5Vtet1D8ebPDLhnCLtLSRzBLevRAhIjRrcuaCrH9srsGRVeSo+w277Lsyj7QpmEKQ1OSx1mgXVhZCUUan5wFipFbvl5jOMmyixhezfm9M0ge+woQyauANdtjdoejXRT-EWDXH57hZrSjzIU8-pFvWSuIRk-sIh6XFTo9oxHxlCJUqt5rYwjToTfAXor0yhSrqM\ +mFhFprovKr0JCXhIxjTSexxSybMYquzDxzbsRHf1byJN3l+SR2S4pE-s4-J3lvphJnLnHPOCzSQM1HkQ9loYaFghiiOleBPraIRRC3gKuLvlit+COSPCdevww1ZMhtdcuT5DJ6DSZmjCDgqJervvFhkD+YN7SBriyfdbPjfqX4wRt8Lc9oitXaEMthuWMRAQYLOdDFq8CSrCb0cqumNMtftfYP3pQ-tgyMGbdspJ1iI0ldKtCNh-qshNJHTvaM2m6E2+CxFfovd1xjIPq6FYZ59bKixvF9hRSnSvpqzK2dovLLLLXO9hgPuw0Sh9HLptJHCLrjKCHLrpTbKtCpKSLkNIpjqhzjmaPqS18U0sYhtJp9wehHHqQ7DISRP4HeChFBxpvCryMmiVTrrbIdHDb7QowbX+JbTzUmYJBYeMQS53yhuTnlHW5HgMwreD7TCA-jfCd1XrdnGbxIPuxfX9l5rLiqVIxaBR2iIdzDfuyrhBFaxCZmWZ1Jntp4j5dibabbeqsrSPhomtTnpXlxboQUEyq7H5tlTujDaXY-DhPuRj-zXBWjdMDqxxyyhuSotN9-CODMyupN1ZxZ8F+nDqeAhIFXCd8VkagITxhJQqwttNdjVSZtyifZLnJc8uGwdq0vjZLSTtkfujxLdpgmLzn+9x+TdaCSxFBh8iB-UvdqauyWRSxup8IXFSsPJHvnSMbCjzdaBEVpf8gluazRpwlHrxvHn3Dbhfvurv1yJyfbqienaz3tvZv8trQQeTWHpQb9Mc+fkWrjpuED8yT2oRSBUwJCWhDXixBk5exTOb5jJudJ+JRPYOcndbDeyNmoH5dBiv9DRBtx8o9jr7hWZlzYqihxdWbA1wbn56DBuXmrnz+SKjvFnHng4wzsZ5jXtQywOVLjHq9qwoiwgGXLduqhe5X4O99p7QowzPaANisxudiIiDrtbIQxoBJn4JyePuRrzWfsm4H6aiISxipYhEU8QhfNfDTPssxf-xXM-x\ +FkgTYeoZqpidZ-nWGuxvjvpynXDr4QntZQEaskChOiPpwI+n5zXtmzZLQzvCSmhwCx8ogocbXBfTujzgwTMcwFWr1A0tOzjSNru-hHLqMwR7oQbZ9p1TeLMzuNOY-YaN0oriwnGGdKIjeBd0CBDCq-OYwnZCcKXDjhSRFJV6ssjvni04t7vCRLXLfpvOV6mHKwjn0ErBaU0j09OjiboxFv5bLTULixhzM-5DNu2ZNpnupHrLXTtKqezbPdQgwacnLUKhoZj0t78NQkz0dKHtsZ5TEtGh4KiSjB5AHOxyinRLHAqZISxVB3rfYX0rI4ybPkQsSxwyTIljxxespxWxcivHhp4IQijRsVuaAKmQBAanIkop4+wrQvn0hrmtw9zS-NetxCuh6InxoTXY7Or7dhnDZvKSuFAQbqvFiGCw1NyrOjaMwTmqskdObrr-dVnYbcuCVtj5jSPBDtJsxrhrKrOpQnZ-h96NltiEH6SRH5BCaaDyVewNdoGxJYr8R4lyLOiQV7qQ5uHFHz6hQXSOjxLbQQg+b9GqPxhqo8PiJBnFheD6Pfq4qojrzbPYwNPyQ9bVhBZ6VVtphctbvO-SdaGirHD8cZsqZDMyxbsEBDTPaGYSbjcVf57R9MnLzofQTqRxe7DQUhMENN-i1YhTo3XrfR6VFqWPZXjkRNAKrjYhPAbrfIFNuAGboFGjhoI1BDXriOhSSfPuyzWghkrtoVNkeiAm4BT7rxLbpQnDfzNsWHDrrA8tNuwNAt5zjOZL0KFh0EZkwfuxdv5vPflaZSHz8nHno8BiNmcTXOulWkkxuaL4oun4A5OLZ6LiDSdGhAtTL1X9OFSskxNtneNbjVqzPXYnSGtWdrWGXBaSuVddtS5ttjw-QywVQbJuKhSth5e4yyW8mVREQsQKqLeMOxPD+m4VBDWQdCCDnSr0haVLyGySfSPK6wui6yhMx8QJH9YEQpQDitdtYzwz7COt-LbvzbAZxmfplx7evnGq\ +Pla5bfgkzA9Rwr6h9RDiFxGss6jCoe4q+tmohXyJr5pDvhDIXITRT32O+axFea5cINQSPzYv7Yyyhgub5abbHqALXOaLI4oVXXrdip8QhxhU9ft5me3yKavn7en6YqzYTjzrftyxphzfRyWeNswyruKjsV+7mqhUxRvWNRg+cFcfgCIVlBBeAk-8vSPO9G0tp5jLP6h7dJlc7YD7YmH6oLuw5gHdifwsGMXTTuWaHR3TFBL4IrqqOyGujZTri9IAae0h4E3l9qBdPdlycXhCG61HxypXjRrrvJgb1frbINTt8diSJ8qhPwyXPXJnZOOyhSgrQvn-Brmtw9p9DpvhNPPPY8Xjkw1v069bFtgY6cGPIn2CDTLLLmzD9A5ZnhzZ-mBztqBeU0b9uqPxgcXnroYwSufj-sVnekoPfBhW0HEnvGb7DPj8CNSvR7hrLxeoV3BtxnneBTPc845j5TyL4nLJKwyPKuNI1CDvlSIDuzRLNKQA0PiC2zmhqWnrkBzSwXk-sAGpzOanTHKF9BeaDcoxuZcYjwdyKCs1DO6tapF4ctYrhoblhe8jMSO5t0rbzyTbPsLQ1cMc9hciQpX02dlHqb71HownfyIgqne6uzy1wYxVdh4vhZ-VhIYKI+nhyrDxDPulMYgSocm4PdCHTYX4TDsrp2AuydX83abXrkqeAShPX7GOjYndp+hnfRcqt3yTjddgUedN-I9l9AaDxXWJBDazKFioxj9F918-SdRhPP3-3S0rpbPNPEvoxZmaGeDcvG8llrjKEJVvFyqgU6QoQq23v4fasSAuUWEJhRK4wvyScLlMJ1V-CpofBj3p2f7oMlhLPp3wvTz1a-xYmjIl6ePRjGCs+turhhqvMBIUrhhWCl9pLgDtquCSEuFxrekAQowr+9obV0Ate8PFtvRQux7szyj+xhhz9OireCSZy6JTvvKn2KVLZRHbBjXnVOb6yTrgk0xjmwNnV1evTHh+0SjvEQYhxvddp4S4\ +GwrQSxHPWCJyYnFABSldti2CItCarggn3lvpJSt61HMQnLd1uuluhRNozbwPz3nYZOXLnmn96jNTuSNV35trTqBHLkNgjxpKpRvWXhqT7bT+-U-DrhvItjHmKidvS5PdYqwmVmmBBnXeQODdrEJ4bezEZBZGodRD81toxRxuFKQexJhAxTvK6pajVexLJV+GwxgQrIKdtYjNWSgDvxDp3ErSNpPVUqe+9yhhgjKrLWwhjSb0S9l9pgcYf0xLaIASOyOvHLrUAzQvHCLyIri4SEcxudjNUiEwxf7jBtimhxQVhANNI8uCneQg-dNtHeDfPtTq0ggF8b9ywyMDnutGSmTXknRyOamysWzQEhmFrUt9LRxcfl9gvBNQIQweWzZ4dcr17JhnROgNuELLS3TvHDpClgBL5-OfeqhctYrXrdFjoDBD7TrhSuEeWJxQDvaIMwRCz6RZcaOsjkaDpzR2t3xinY1THj+hiKivxLV5YbiHbJSNHpsvz63afZ6BUnHptX-7TPjoSBxQ8eDKb8r5Sy0lZntnhbmotpgnPxwvKve8QAAaLDezeDc78IvSOyRDnWvTu8hT0yXTTNvanEFLUxxPqhZ4cMihmRretGIu7gaQyb4VeDhxxYJ5D6erzyuLFhxNZ9vTdXafat0b07Z6jrhz7ghGDIeGLZp-iTDypujsJJGDph4RD7gI+LsbPKxbmoH1HYejTqsNWsTPzowhwz-lmo6LqteA3OHfIRT9dgqJm55Bz8NhXO3aDXVzjZvEhnD04E2x650x0RzFhPPJPOADxfHsHAhHPuRg-nhurHmBzhNkbZLfv7p6BNGfXozqh9MRwIVYsMY7nh4LjIVGkniJH4WrnBhatDuCqrJPVZl-Mbcs2TCPzjfbqWNdil3KyypCQ5Ak9phRRE7ZQuzuPAFDU-kwfsx27ZZUfekSRigZIUn5yk+9JN4ozcCDSfnN36NNRxihBvF4WffGb6iJQO0NDvCdlpbotbKOxQLR\ +9vX3WNfZXYCNt2qy6tifotwF0BomhP3+3y7qpTFDNAe3vd5P6FUAzbaccn6HLLedVuD3i4SblZ4LLcuuiAcGcsZANhjKNixDOKGmBx9m8FoaXareASbZxiYX7LGL8GBwXJuQw6x1nksENJLCs+tuzhhEd5iNQiMDO4xJABk-qXRTqf4w2rfqzCcWl2SdGT9-IB4IFzsn4hjrz4Nfw5rhZd7yixjv-JjpaQifX4DbPtezxuUDQbK4Ak9pP4J3v0fyvenSHhwCQ4NBNXeIhtKvqb6tH1Mp5DIkpB-COMsyuj3767JdSNOVxf5rBD2VHRpiQgieiDSf5nxzHhriIxWrdz6TGcDwrJSFCOTxum3CpjhPvrsbG87a2dvk+beSrmDhqKLSv9wq0NhdhOiiYZKabZCUBESRNSaParS+sxrOx3nXjfRypuCOCMhpvpAWMOOSGrdDgJFhFv6glwxTFpxBr52k0TggJwTA0DFmRI97LRxr23R7+D11OrihtvPOxnScaiZIhgw5bdJF1jMp6P+hmKffKh-StYvHa+sESyv3a5eMm4gqwtnarJgnC3IqI3PyshbOe9WnhSbqlWQXA0jGpIEKPCpaM2kdqq+5-8jLrHaN14umuRobsTe4Zx-tbYhiP+IavSliwESvxqX5esZHEKwGRN07kwpQyBIYTQ9hbPRwSnwlONSnmYm6Srthgw5y2VjgxJ8eftwF279vjJrpu1RTzfbspk3knhdy7Aixx7ZGTluY4WeDxqKFhBkqRbdxjO+cBLDKuhyGcqHjYf7y9JANo3F-etZ7vnnwRpXWJwMZ5jKkvWgxzhaPFaPfQppIfSx5yVyTy74M5SXhTsLU-i4M1nxipVaYd5QZxB3qrQ7c55KsIKh8WpOtvegAYR3uipK9Wv3guSN1qneJKxrplriz46GpYjK7fz3tCq2XPcwjkVOhbyLtjqd4k2jirhxSvYFEqk3CJRuDPZ-pyGpVei5MsmpH1OB2l2ZBkccA\ +yRVbhfZANEwrQv10hBgUhqi7IJLejGDTCfnnYwjnvJICRV9JvZ8n5TXayVIdZMrOqhI6af79LrJjLh4rovk8yevTQkKwMDe5NG1NRS1fYNsH4N7m8mNVpsp3gqmqKFhtR3fthPZQZ2dXjtyEFv+3lvpI5grtuxzz2uqN1z9jSXk-qQ2OU8YLxIb-pHBhJN6DsTTyxb6TVD+-U1DLxdta5aGt0qS9Q6AQm3T7qohhOcf96JywFro9oxFvhyphHTpun4OBIFXRVyiHwtNf0SymbudnlKSuVlruvrpqWtada-CevNAsTSSmXhemGhhsTyRb2pFCgCQ7vmTb01edDQGuPureXfhOcXXreN74pfJKzKvr3IAwyzhSq-HPqsNbvJWvVTI-M9JGT92MtxxDdpgGOqNVyyYXuMNn+Xo2WbBatx0OIlShXQyK0TBYl8hFqk5CKxj59bTVZWbxwxHw9GtnliOEdpvId8P6pvGOQumNGyzuhokbBS7BFhK7eXvprmlWDSgqKrDMyrDXPLnqzpzlTb-4crLVrFg-jakfpRX6Vh+Lt1rzsomxpbXvzdNFDX5D6qYfa52hFIlf3aTe1pLLguiLnB4Y5XAwzZDM9EhM4zXAML5Dh1AczBvXzrl4E2TRqla-CeDBeCoGv4xNgh6jNpg4M1HxyqxeQn+hQS2wwAqpYXLken22pUtHdVdikjgxaX-RFSyuuabHsMFaajEIYv1qTc5iz8rahfnreYwlmPnwgN4vwo4Ajnpxz3DOqIDLCDtUFY7ezxVrdHAVkAlFi4M0nZDRkhUufCxqsSvqUBoxqvNOn5SlKi4CrH9bqvhub90RCCDZmmKKuR0QrEcmurC6KuhR3KtSltputBLOSe9ogkj6wbRSCn3TCierblhTEZb-Bk7JzYX8Jn13BjyuRg-hHZvPKo8Ux7y22stqwj4WijfewFuZ4dPmu1LniiFCOSmvZR4Yl3WTSRyXremAhvXt0PmRgnmQjDDN9Nw9\ +IbfwyTnkX6AwTr0wkJmhH25RgLXDCsLRxyziTW5wRh+4ShvQvX5OxDpE44RimcWioa3uKKxzNsRqu5afZcTNh5jLPRaxu0JDSrmYMrhp8vZyKjtZL55nHDTpwmBNnvInDrtBvg3mQo6L7MXtpTrAisevfWyyO5qPatMhmDBghCs+NmbjMENUnyBhiYHHGIexzPJIkvpjvqbahIAqDbDLQms5rGPpTc3khm8iRd2ejviHGJ6yuwiesL-otVSfDrzDM1wsjvagcrt5TshGvJy9jBQVCbhcChQCPO5faUkxPR8x8FNfuML7GQOfWefIkxnLngBga4Fb2vECOoVrbaKSsEYuHNh7Jt5PUxftbqPSXT9rKXyQV9KfrOBxeiuBRbjJoP-aqyzpqF0xYQ4Y4I+nZnPhlpbihJSImMoWZR3ctY4ecRo-8jHVrUvE89pkYRbdIjDrLOhAQF2tubsnoLDBhjDOuhoXnTneNunrqtjmRj7p3ycu8mmXD1eHL1DSrabgWNcCeSMlP-i1QhPrqhetg717F8RKZoXEtgBTBRQXRuixo-uZfT7lvpSF6qRPIbx2qAIkp0s3IKTR5khbqfajPsxDIRetWCDicsvXaM27dJyKQ7Yuc-+TTDTahQcbV2kSbuvXm+pRfobh3pY4s+HZjJjPXQxQS8dXlsL6WXaSOaXoxj42djFsqqGJ8DT4SvmB8oNtnZgehMwi84LXgtMFdqKrlN+jJTbuPS1bifiLtwkz5zHbqeYTA0DGmu9JjTyfqvLTuhRc1HprPZwPtp-ZFBBlhfth2Co8EJJryvHHKgiooXXvTDS1QfbBHt9mfeLCSKhfxaX9h9IXKMSSilP6eLkq2Q9KBLtnLgJSinf1xNMILRNvYxb-A8QT5yzE2bihV+w+b9KqHprJTP+bJ9dBT8dVuxVH+eH66HRyyBEx1XnStacWRuHryuFjwUswhua4OSYwnZkdqKtPhDDP49NCrBLLC5uFTujD98l3zpKA\ +rAMYNUOmNXt6wqkNJhfvTXZU2sXScSJTJihclTkyFxppsnHv7AYct1KQBftaCDhvGddo7O0qOBFekShvttarXneZm-GQhBiaNevPgsgxKdzyD5tqpfJHfOYnr6TnkW2ypjZqMn9rKfjh7EGSTlc+tuXhgcTDhPrH9KizxCPr6jJqUAcQQXRJicYReRpIExi33gb38icphmCikNbtfNkUoQyZa1pANumFdauvhbpxDYidgmQvypYzC0BHTJrsqTPiOt8Koh+tl0ZUYLRjGmrAApHBvdPPHlEO7XQkAOarcl5zMwuWP6mqu4CeONuwSfb4wxhSjuYqyhhFntjFqJ9CcyxXRZwQIOUS6pKuRINN9ar1OfunKS18g+dBFbHhuhdhmWpqR5X5lRBIEub1JmiXQrFghLCK4bsRqnQ7Vrirj-fBTu0Npyg3yLXECITChYuLZtuVRgGfiS5nyuf4j7zmXAk7u2pAvDlhI+Lt1SKzWHBPAvxvf9jhA6r42heMOllrhKKtnw1Z0NPKUwuc5Tsl9MFHMvMPcOdspmrSnZJ4Xaut5nlltv2TAihnrPkz6yT-CPwwzL6X20MFKzC7jRYSLwvTHj+PuXhzOtpOhYgxNPZgkZBsp2Lhou-PPxhFnuASr7-heMlhTqik-QbhA4rNYi8el9hBUal7bQfcibHfIJSHg0P9hLOJ8jXMXI1TDXaQ2xiScXDdkFY1gh0Jw+C12hTo3mJqaAYfJRy-F1nJniNIphn04DTSP3aiUqY5NraCM6+iqlxvQASVtpsv4rSsvamNwzC5nlqBTnV7dtD0DEhrDJqFe-C-sQ7z2dmvmGuovc1b8mwewJAbEqeqWyxyGHkKZs45ixBZATGPGvGhimunlwSOiPMmxhkaWz4cenD5eMnfyDl8wlSj8SCCevvhDTNPa+MTOSNmFW-Dh-lHPtr-4M1LjUvlL2Zlru+qezBA+C4ph3uqjoRtxumvYYQLcmHqDRvAmucF1hYrwmpg\ +lfINKOjxTAQz2I5bKzWQZctaCDifHoG2JRuirXL7duzdPlfgxjRTsGhq1uM2OXtyS5tSrhIXRtCZXj+yTjq+nvhaWtM3SZStcnf5ewa9jXx8n8BLDPehMwpQDVtAO6OdX3gp-CMU9yrJuSKcqkHsfTbnCpboHnnqwfcXaV5cSSn3yGRxhzbKEtSsn6SpfsdM-C4zTrggkRz9m8Vh3YssGtt0vSAAr2I7vI1ADoxEXarorhIxrMj8Bjhqa8NV7KuirpBNxZoLTWLDGAE7V35pytRBzwC+rmHSIPg22JsDnZhrNNuqPgCgqJY-xW4UAmynX05D0TKDYwpp598uVBRv0vFcQSy7PevGJ8njpJehzafgO3rBT4tpg+gfswVX5tvzs6m+WHgCnmyjYgnaeTdsg24JTlc+duvh9gixhXBWfOIcV9xlQU6ZolNV4LTeoumOaXiOwyUtK7X3K6Q8vHMFLLDZqFClMJtSKhSbXUG72yyGewdlidftzTNx35tqyHg6ANURtCqzdpRozY9gt+7WH+PybPXQRPhHeSq1h-hEJ9iYHEyLr96Loopn6KujwDISCmxquFZGoOdX755TV6vMRDjAcIShStAeqR5AZz-yUT5ta4ZKoOK9P2Zrjm16qmbvKuITFYybHbuyE3p56Ag+b9SqhvpqWx5Vr75SpDaZpciveQwWfNviZ4etlea3jVuZAQHHmhJGhhQ3yvLbgdSPjhb0GlFnrkq6goS8CNazg37cLGrmwcComPFnrIrfq9rWjegcoDAm3v4pHtpk3khXj6SH1ANXzTKGHLQizThPfrThQDzYZH1T-JECaGN74ZQ5o6nDt+Doy80pm-PhQiWl1xDUEwqwFEGPvIvFX60Q7-qTLwERLqrQgQVgZpQZMGOYTkydvE-bfipBhmvJSRxyrxr96spH1isklT7tei7IQxK0DOjbROkutgMgADCcmSR6TzaLBL3UNhjKMSbfxeyCrwZoAn+ecz3vsXsyflKS\ +uaYuwOirZAuktkvhciyxKSLnf66IyRhjBLAjmPJo4wmAVvvdrbapOBiTWF7rztlnPkx5atl4bbgYxjzAdYN+RbVKsSGhxFrRnTb1zOpyBqjUBN9NEE1kwwhvdvNDDNSv5BuFSbIpBxNgYthABRFuixo-h4hjIyltj2FQgTmzTCTQwuYOjDeuN1qnq9hbaoDbhzE6x6m+4-8vdDcJzwyiThOt0ZDt1QzENJzaY+b9eqitHjcf4P9hoY0fuIOZUTXpABfITx2eQOaXqVHHBThJyhFjonO5x6owwRj5qba7Vzas-Mbwnv6PIS5nvywfKpguepsvBhJnr-4k0FthNarTtT198EMm6E3CLBhJjfRf9uI661LkK1ATvU-Bib4MOVVuj8gS9YIVhuddhAVtjsseFabaCbGYSxJ+nxtpk9gvZSooKzRWXPisLyDA55bIl640mrDqAUAyWh1nAVEvqRP-a+QxRqgM0jjwp5HoQSGHKIrSNSHewapP1BOHODyiExua628SVshlFsBYJHNxtYrnrljWpD5MlyaAXOTSPr8C5nyACtsmWJxzQ0AE5WjF7vNuCqshNE1CIRvXqXsRXLDrvd3EAtRiaNEhcndbwHemwlxsj4IAMxKQSvuRLWuBwOXvh95fjgOzD1wyjPSfHeyQL5dV7LwIgFqM2lfYulj2SnUUUiECQfvP9yrFPDwhRhRs+hKIKZcoGdVX85r8QOXXQNxPfE3javXXnS+wpQlELrBTDKsLRG4SKqcmBihaJP4OwfBuDlDNUHAyIqWdgzw0LDsqpJGxic+kAyivONvnvLRNfCAghmZValOhrpuKiwkVfu5cRJiEoDkv5iweYhjJ4BifabasmQVctUCDjNVIbSHtknyjwirMhiCBqTdR35wk6j6bKrQk6P07FgtSN6nJzCEavgI2Js2GeSzWJQNutnqlz8RJEhtN1b97Fds7MFKffNZ9rSd1RSC5aCOCNSDnSOyM5nfx7NJAttXwzzR-\ +9qonA0hlSgGiqLgvpJqhhdxfvXQ+ItSqkxiI3LC2xwtllvjWvRt-tpnJOFnWcgOCxeYhgOHSIVlftb3uSNZIpHPpsTZ3seuxLu+pwrdysnhGyqT9fsOOyNTA01FNNZvYhahTcHUGNY+0zcqwTNfYvzRaa4gMSvrZuYgecQaaKJVK9FnrQN3Gyxm6vNm3lhe5kMCTsjwaeuafb8ZclG4OoXlSHhm2ZMtv5zt6m+i05PgiU5zbYqe+9wqhcihR4OJ9KAm6Mry93jTUQTPd-d8DHzLE35wdTxQyieJnrlSbIrxDhtVqeFyQEPthvOqYeql7Svz+TazSuvH6i4CnfQYSEAGCSQpwA0CEdZP5Ak9pFt7riETyxj9ahwuw1s2nZrKtE5HdJScs9qHoCDCdm-2ZbXAh2get5LKKtWoHotpiQpZIZe+izhhr4PG6zu67JFti4MN+PtLVotTmxLlvVZgizcmTbhJN97Zd2SSzdqU3xIqpyEhr3IucdWFT76DovlzOOSeW1SITSNMAmzZQMaWLKGWMzCcqwszwBUj9txT8CfdhXuwaMHgPJ2JQwD7oFe0wGsiRfUpb-4OfqsR9JABv2CauUrwR+0TjqsRNvX7Rhg0vUuuIOVdqzH2p75VjjZbaeaIijXbHgG9RAY98cBLBnzYASyyeKQSTrKTE1hXvqT2N0OSNgCu7yzz6-EgKDXSlZgI+Ls7SLRPq6ONvbLw65EtiprU+ffm1L7hm1splRh3ldetTykpwoASyx9fmXzLm8Cir6l8Pkynu5iRTmRGQjrMyMITNVeQhrqStKxwygUn+eKhvDtJFiKK89zfSQtgI5TVeQgVf3YfupI4ecR5AKr3PpIOYhwMGaRMxQfa9GLxwj20sUgJBpIHhVvTaLnQMRjrNyctYzmP4rQQRfPoP+i5QahjE1FuypYEU9wUhdyG58LSfjgb3KLe5D6PrZHxWPnIUOdVZIn5xbImkWGHZBrhrP8ojWXNCSjGRLyfp\ +wlBN6pSCFfOp2TbXusvbgw6hDCvykJaSulq3eoa+NsBheU0zhfMrXLfH5iyVsw7fte55yxJIkr05OFrPnrqvHaIQSxF1Xvowzw0X5aGthmkqeUKOyyDg3tjnmeWTgz3KqNCTw+syxQQhYlNsBeU-b9yy-sroKUtzOslouh9ekNEnL4fODqKSvtQNFeiBY7InoZKYeur1Rexdz8p7GllnswjAaKvDfYWtIlhxda5xkj2XuH-X6+wjwq53yTjjTbaz42adB5PmL65C5ZhnovjOPG9IqlZAhtjhsz5yN8dVYqWeFvqcru55jiOf11neeLRpafZAr3rPGNl5jKfanOainlyvNQfnhZIibCmAkDTLMptqetWf1rzgEDjksVpzqvMED+7mqhUwre9eyTHLVt5OGJ8MOhfgxH1MpabVJjvJ4zWJH1o4ATNg9MDP-tn4flCobpyRS-lpt88u3arbsLtv4DhnuxrkjNqcNM-pOLuXYlz5aOtgo2JsDSIxsAPJ3qKilf4B-tjdtYjFp6BFlCahrX2WybMt0GgbNrjt8fbHffpiueIXXrpDAtQSyoqYAjdQ5NylMwtT3LIl6n+BhnryJ2KddatKOCsWuTLajlDPePcAeznE+HZrPvsBgaRcf8epMqoIqaKecxLOnh+vFap-XBjCTljdass5ZuKyNdiPGneGnuJKJ9OcyuuKMDOiP4eS95MpwxzxNlhmqkaKp6A0CHrItHfrjvKMUFOjSFix5PuRc-Tp9TP5OZPwvRvjTqDdFderwuphrHFw9ybfLhWLqIlcxXneEfKSH0eXqRzeBLBNbBLXTVNxRDuZjcRVRuqjMVPHhexQTEyzY5svJOxH7cZRvPwieXe-jjyCK+HVtPHQuQqWxY4sHYuyiBDCOOhXNh+NfIMnyVCT8cDmdteiqnz6UownJSemcptm-BTHKzCfOdmnHso4BjgWLxzM76h43yfXwUoujZW7tcFu4LFxmFrBeU0b98wxp7zelROi\ +OaRKwNpxKI8QdVeK8KMhqd5uJ2DhwFO8SijGGxyS-7brfyjc+uac4syuoCe1JANMArQvKCLyIxZdampIhBZhmgztnyKSjeMnu8iZOrzAq3y-a-ANNx37jvyJtsb65C5xhXv8yVLVvfzTjhX2kFOiNa-qVBU7EN8INn3UuHoeWzhyJv4QxRiiXPQoQuHmtlhyhFpvQm3qpHhppbonaBTbqzC9yRPwzZpDCBaghnR0PjX+p4Kyw2N+LAqaNbjxTOG0Ibs+A0dhOfhIp6wYCVexTN-e85D6SuaAcjBg5azJaSj5hRByipnStjSDQdBraJjzDxHAhsnHsXZiaDhBhbhcWBwuHT7Uu6y+JRHY3r9jewTQgKitxt7MlKSvVX60wGi7Th-w+7J5RNttxiIDJfa+OdVa9TOAgVBkuHtjRCanpfyuqpR8yfDwfscuFTaYRxh1XnesnHpuaCDohHJjhRScaCnMdMs3z58LMyuW1gCSbWRFTyd4M3EnrQn+bRphZIFd-nV3ulsan6kqe6cRc1KrzBJIktN1bjhbuJ4Tf7MibH+DySLmrei9YbuthLKRtBL3QAkyiCtlazjfthu5Dz0cHvBCIfbkzcmnuHwo6BCzuTUOZvRSsMD3Rhp5O+ozHhMKoDxTNc1NAh9xub5HvCVKLOd9shKxyYgPS4QmzdgZ3L6tZ3ZhazhTFtftbsmJBsjA4uHq8Ci2rQrBm5vp8CiEinbumRb-BuTgubtr5KEtNsDoq6KhpBxjzVA-k2ZfSwxbfjnGudPW8BIkm7MgxkrX1ISZzryvDcfqPNvPHJ9FdPwzhHbrvSxazLGwmZH4MABLtAAr4iRfnVqsHZspdvlT6nhZftgeXLffoddabPDYshJmSM2N-i4HAXs8S1TK8YG5K9vUJEqk5CJRszg22pr66YJ3zXIOzKYG0JwKMuhn5ZGBoZrRHqzzZvGem0HTqayy+bBedaDci1bpKxlAhqymtOAnywpQxyZ7yi9hpQnb\ +dHQXoAdvB0CEDT-vPlzRAV0uzM2BejHh+CSjvQABehIdvJB8P7NvlyBhhNYLBRWRdO0nylemxp3vxwNjCSwRSDjQaBBIK713nKVRwaDg3oarW3SbkzAN-hp8t8viox4KbaZujIz6zD03H5ILWzEpsZ4PSAvRgrpPSH0Ebk4zdqcvovmJqBhsKiPShTXLQiXL8jOcVdHGPxSedmSyzC5FBASJpb4xir9P1FnuNN75bKHmXUshToxvZtdzvNnXGRVbabbujoRa-6fjuAWAU9f8A5pvu4xj3VdORs1nxiqx72DNh+GebhB4QbvZBeVIkG1WgqteGrWt8ijnQh7ctxyqvuVuuHJPXINQRvkTCrzOEhadqkcYAyfdazfKd4k4XayTIjptfNzal4cCiKYKTfuSr38EE+7mbj5xiU8dexhr0i4aHC-lnhZcJHfG9YVKAHqT0ApTtu1wetidyNGDsKOSKy9Yl0NgrkVzCTfh82SxBAxWv4VFpn8jtCfQpXMXICRPZOgbLlRoNkGWBzzSitRFTv1qPYDEhkCQhjPNrLCvGWpuQ9G997QWQgHbYZujrSAjEqhiXH3pOrrs7ybNHrbDTbaKNmnWJhIGL1WDD9DpTbOYJtp3DL9JAKLx9AtSADn+UoBqNtjXXzsgwjwie1j00tItLmh1b1WqdvOrJuKirFQPD44cCZd1baKf2ieMGuDKMSNHBxixDMamvH56ZuafzCLhesmpqhG1wyhRgKauJjPevT+dbh5Np+StCa8Yx0sWAFSXaHwvTvCvP7ohHfr6h4XaUigLq6Kcvk2b8SvV-BTNsVss9eyhiFjQq5izaWV4dVXJJwfMLRe4rDtRZhIhyS0rhLQpPNYjtyENVtLjvIKyqodpnGUpH4UKMya11BjdRbAk94RyFb-9mihPbPOVZbikHo6OXj+WKiv2cpJj45T8PpeavQc92Zq3VtjenbfphSdvWZSsBuvhbKfQBKN0IrfIPp2ecnlzZNr55bJz\ +Ta3HLkDBLCjhROcozJ+khnDYCQqPPzPJhScxxXHsknuYBj3b13DPhvvwXznc+HhmrVltpCNoOyAAbgpYp6rD6Cua4CoZjhjptGxmttaxxzZzLxwpvAuywmrP6ZwZ9xw-Yp0RgkJlB-njY-XvfJn3COSYQnhBquNZa1johHZX6+wTrmzk4T6xrTOmibIk0oXx5Mqe+8QiqyDDCe-t0uGoZInhDAZ84qbC9hKkz+X6wuTtKpDFZiKxTZrwvBVebpxyFp2YFIbLXvDyb8kjgZ4ThNVqTy2knBuaAFXCjPdaYqtixdM55rbbIlnA0zYeYbXzQveFb2u8hIgUm+8Qchvq24cB4WEppLtdaPFZpm9BIkDvD8AeKSvqLwoP4zLorQ5yKxT9rSSupxyytphHxmZGmSxwWOi1ddXF5XIhGhaCOuNpp6NOiPJmSxroOdAbfFf8NzhDjPManp8hzjnagTH+evvRuSrovE0zc9MzRvaPMQnOTVT7CUgODQqtOBSHIayQ63DvxfR9heSrLmyqGZTOWjQjjOfQAuVb2RIHme6jnfrSHQbZEAtSDStetrkAf2mancJ5ThnUVb-Aky8JbGdRtSwz-fq28oaBJiHHJxCy21+0SivGqPlKKtVys9wOhBtHsmhcKZfymv9e9sxjyPxoPqLfqzvF4fub3LuwZouaJkcwCZvpw+xofku-nHnrVOYhrVObdltvCkhEFeWAFxpR7FbrmmEbN8LSPfHrE4DLXbRY4M+HZDRiPLTNAXt-hLLOMFhCi1LAdXxTS1h1QqxTwKr27cDLqVmlH5iSyDIh1ysVHzGZESpSXyKiDhSha9ILysW3H4baPSjpykpK+QySq-Heur5Epa-5GXrbdpyPFBxzBGxdTrELnThPbhpwLV1QUQsRqqz-8sGvtOdTO1c8djGzXnJA5TOJz2sHOQOEKPPHH8hj8TWh99drVxVnOfdQwS7P2sv84I9BrCjhpGpHdYGLwFMbungGCbws0Sgx\ +uj9pupK4hoT1BZNFzfDfqG4xDTrNY4M+HxypGIPyBpX+NrrXhZhTl1h+mvnb7PtFiaSlmhnyv59LrQ5WP7SRgzwj2iZyoFyRi2bJmUGYZwBBv0c-tfteJjnqLEyC51wtSGh9hsWisIeHw6uXvfrqCgRGNAduH6HleT54CSGqm5f3Liz+JMvrabR+QtOqvLehOv9QjJiaRc-57XFZvtqxB99VfmvrFo9vZ5omFKlz9yCdaBzO-ZJ1tBglDjCdh5ZtvvBjnVMJGbpxaswUxeWuJgSpIvKto0XjheJoreIvvcjdtaKAXCraPdOwphSLaRpGMITA6APVa+bpzSPIYj-RzvqrqqXAs1LtIUv5O+WVnmmNLoHKL3nzZXhHklPIwRSOzjayjMmovGp3LhHJO4nDIPcz3BFqXRdg0zSZK8Gjmn0lbbp5bKHhmaWrCCZg4TzMxBv-EhX93DPPvSf+yKHY+KdailTPdQTSyKHmvE1yOE0Qc9OPh-ZvIxZsOsGGaC8LHMlhAO+cBiRtmPPJxvsTLeJOVyF2jYDfn99PLqhvuRXKAhaFPkaRvPOyPB43YpwpPPlRaQqmRANFHttpStvOUr6y-xtX6TlYyGxfvLL0LJhJzCHhjtpTByi7a2vvWY+yCamXCbPlmtrAloNHaXODOeZiUeZjQn19bAev2ZshGKLQr0pBBLxfmv9Ze7HsSR5Fn4jTberdIRxSFCxqnh0jfV7rxPMXYpQX3giihhyUaePGvp-bJrjS4efjLqpr15qt8PSQDfyM+s+GmXDZ8PsCemWdlXchlee36hbd3aZKpO9ax9ox7PMRwzxlLpieioOCCehexSwlRxiz5MvxQCYxkk3LSwNOTehoi80LLRRNkGYnxkvN7fLGDXPUyvxfeuMh2xStSefBAjCxhjaqqbbTz8T-+0QhefMrnTnSmtN7hQXgwEnnn2JkfUVySTzqNSz+rnwjgynJWm0H7tVGuaACy9rKhUewpwzYeOvjLn8L\ +SPeqM8NvFOzKH59BRHPOYGKLQb4j3tCrMhOeWqPutTP9yhEgZvMvlDNWhS3zxrZrwYpQWUuQZz++-kwfuxfljfnbAn2tcuauJsj3DxLCPOhgSSyTKpOyhiwv0YlSTxpQMwonSElghHm1wjhIN4afdnqqQ5isque9W4xwKrwhGctWhKn7SEdH4PpaDYVif9RHzHtNftY5qtHOzZOplpNQKNHhhqNgGbhU-e6Qh+7msPxSOyTrKmMGISfjIVpAYiCcJZm8kp+SdPix8izes8dSXGerFDbDXaTQyhQvb1JDoU8AwLRd5JK5qYFnquRv0ND-bdMlZvpCIBo1SxLh-vp2DnX5jnfIrRhjDYjrL+-U7CJRyKN4KlERFqXv2uPwdnQ6kz7tR4Nvpqui14unBLFbMkiBx4chrqOhdJyioiIWBLCt-QbsicpPdXfSvRMVsKmF7lxvp9rDL0fepHbHxuVDxjTJhSfjIq6oCPvSRaZFqQNIlzeibhUDwnhcSuipZZQye2VFnVDXXwfytNRu9yOuZhdz6i5uhhbbB8XxbO0ZFV3qatB+wztBpYecjmTdQGR-ulR-tvisQoznXMaeB4hn6SCDSfGNrvQcytH4LIbfnfnUIRRvXxhPzuwG1bxuJwxhFrUxzPhnv9QumvChBcwdIUpflpt9ij0lLydBoZfJayjXzTYm8T3mHOYmHpANdsjquXl9NKnNX9JLhRmuUUQzQSxHHyRDfyCyJvu4T2H0PYUMSxRvtLmfFp5O+Lp9SPObj4BqBudhHhI78WLgFnyNKae6hhdo4jKyuTRXLnSNBuioxZx7ftk8BiPBsyZR5jV5reINSihZFcX3ifbhzjReCvapQM4xRmcWnTzdF6hlt0dvE0zffPrbR949NABXPJ9PquNhr5bi4E9jdLhiCgmpK-bneijImIxVDbnlSqFNdfQ3GOMmZZH1bYSxLaLMJAN7hzamu19ANdwZjDX97YpdFXtBVjBtiNkF0XzfZNGi\ +X8SbIRU1uxerqWjjZjz3dhNvh9oRJ38nuZLATKdJz3fyuZzj4JSQvNXzD3d8Z9nHmjlctqa-PTGzCN3uSrhwxXfbP1Gvf9d9XrQ0GgZTJ4Qvy4Ie5aynqNoeTXhjcOzrz3stmz8yb8khjSuhx92c-k+bvhhf7eFGd2hbLhkgOTB3uxVnpPdSqUrHOvZzacBwIuwyvpiHhjcshDnwxwzr5F4T0p9VZrfzSGqKADBtrYq1NmuWLWPhVge9lZbSbF1gSRSZdByRjhOSfhz7Dre4zDPcbqGXep5S-LZTSUGglHmm2jsfaGo0yHYgrbeGFrPRvuYeGMhjIhjbzTbZ8yYjfry6B0OSEvgfPbfmTrWDDMuZR2quYNvBtdzvOh9rD3W356nh7GdxuPtjfwYqDMzuonHpqeUDziv0qjuoeZDP+LtvPRQSxTMs1lYJmTdOIk9mhqB4huBItgnQfuVTFhpx2rtuzoXknHXBDTLj8IMzHm6paTbaykxHsnApBLdyghO1neoZ4X2X9nTCUoxeXrohEDShGr8AbnM3KbhUDwuhdSwZvSNAQiyjPPDCYphnRLBiBIqDVLqLJ2DybOhigztloGKNKOXaLiDSirMVQpPSLV0Xvfjb4IyX4mwhhQgZm5XlTPhwnhWXLXrqnPFHfd6CJZfntbyUF+x2CE+sQqpzv8HH5LhuD0ZBh7VTkscd7guJvfqvuxhbcvOJLborTLfjrgISxtN+LNsiNA+oxuYNjJzbn7JKmhZuDi5HLa8i+ZXrdkzZQevSShXBFqUBCLxvWqCuIxToXhEifhpqlZZ1uNxbYjhvyCyjSl9BN7vZ8AyewFRrpqbykI1XvfgjMqzDId2LoDJLKMzaawQVC2rrx5fhWPheHlOp5E+yIBixrdsnjdEfFjLbMUH7TDql0pLfvOJL3swTnvY6nLkRSxE5heMkymwJvp9qrr2m71XneoWoXxLON7CAxuh8rwqfWfazIDqxHztWM+k+zjayzh94\ +ymIPTHdZBep6KifjhqqPp5TLhlmyGFpNjcqxymt-vbYAgRcA6TPXLngITRhH84OwJ7dPUar8LaPyeOx9XqDyd2rDqnIlvorhFo+lUrVdhSe-auNt3SjBoz1hjfpqvCLnKrD9N2zvHNFoyHdGAlxspADRcqf0RCVFhzhShRvSoRWbrVMejmyphK-av5jIXPztlLMLO1U-D9zO9nPgXiOTKjTPhgxPPNniROhom8Jt4DjxuOLevhQ9aDDSep7sxHLx7plx0XPXOEqZNwbiFrVKh7SnPpQMXuYHTzdS7APES+ELYlhxybm9CcnhsngoZATLfjuqnlPZzhgyzZIrarT9h6aEvRAq1ZLXzrMcqtmM8EHh7jTtcXCratJgdjoazSd8INwyxSPzVRcyo6I+s-mprQz0P5IuJTjP7ypmfv8AhvxiZ1Xxsb1fqaiWSjXo52PERcBOXPWNAHP7Wt567AZtY3bphjvpDdiRFBrqvhx8VjfmHiVazy-wcvhFo+ljqSr8+OHuSKFFgrQHipxip4Zj5OiyrP9tTGhnzGhkltHelTR7oSPZPl5jLtRRBd9z9pumNqNBUobGHiNxYhCPYxL4OxooJyGi2hhh-s0DpDOlt5vdxCp7AzQiRyhsJtfASoazvMLx7WJrfNb9PIQaR1pAKHHTuvwWhLSvS7nCkeHTttNwavZ9P+S-XTLjScrHA9KDuxav5LaRLfnZP7WYnfKyDgh0ZhappCTRMgZr0HYLfyDRWad7yzOITuBDOcPtxCrDrbBjKLUaU+s2SLRvBZ9wmKhYHB8pSIGxCp0Zea8SirDoyQGLt0zIdA5rgES1RCQaoPRS3pA5jj+cmtvRKBrhqIcYcz1MlxOLTtisGqo5U6zKxetPtZOWTJCLffHrudOtediYBx4TrqHTrduThNFat5IZDXvdyLbjIJRNumu8DDSexJAYm0HjJGRWLmiBTGxmZhUD+NzfqbiFyh2mtrePrfquanuRKJievpxa0bea\ +vIXISxxidSAxSVXjSSxGKoeFzoe4zzCb5rhwnNpOXj+9urh8LkUn59LPdbKhwxtExAX7OPcujPnL3ERsMHAiSvLGzCQLvH9h7QdsgNiAr5A45bLHhyh7q7yFiDj7Ku9IRc-TIhvx-hIkmnqpvj7qOivPewPShuRjftUudhwg6RqRN4LbINRzy+MzupY9IGnPXzAAGRnxHqx3Y+5tjPSxZiGyLhh4KdmX7GPqxiaJ94dO7i517JAuzOi7kkTGXSTMyuRAiMR2TjYswxujDuclBrhDpPPeSc+xCqlt5thaN0ePtT7ABIh6quYWYNxvXHeRuyrxnneliIiTGwyZJ59huIpFzvS7itxDIrwdVMOe1j+vmriwEPJov5hJjolnwt-LKGPequwZmroC3DLWhINT7ABvxsjreNWCGrbmoqRELfP2PFLrQyVuwGTcXPCeIR+-eiuzhPuaYJthrhZ+YNyBgjvNSAcbs93dWilfLidL8nHQatr8p5zJNgueqYRukjDndlRlnnHZI5hc9NryzOGExtnmyHe9HnhBp5kxvFqupfFijRIzGd8DlSOiIxrB4uNXYRRHN6Sh9swz853rs925+4fvE43sx9q1M-YNDW+OxR0XLhrdISgSdwG25bIfcSzToVdsheOXzUgFRQrWeCU+w9GxNnSusNP8bIKcjdIgjBdWmSwVtp2ICXAdghvhBhTPihDScpHRpvp9TLPScT8x5zr8NCGES+ZqivpBVRhYlfp5JEa54zF-9uuiBQF98uhOhGB9xrduYhPiXGzY9UPJjITJBiduU1kePvRRSlqqp5NVJpbHYoecxpzt19Ghuv6Ajo2ddn7qDSdHQQIz3ol05KPvOHNpGXc+jBc2laJ54hpHMH4GiwWKOEYnhPUjGE5Kjnuxxyw0ajgjdRhjFYRfyVl7rztdBbN6C+3xQqujqshkm9Ll+yqGOhxjvAcmubGeJbleSdvsfuN1neFqfvXovQdJ25U0yjvOdFRxYmNY\ +-JxSrnpBDMhXISxqaAqcPpjcazTsrOLQHPXM79otmPiIh6-s4hfiodBGNaEbGlruNPFTTjYh7olv5jLeY33xyq4Dyb5ttITIRVdp+DXOwfthQK9hCAtRmX7jIRySBDC-FxrMhp8J5TRhSO9kzb9XvHKneZ5E+y+imXBmU4aSt9lSxeiBGNZ5nd4fEdIQSxN6YhgmFbHdXuwX3BuECxxzOD2bSduU1ktzfqi9MDgxmft5uPlOGeq5zuZdTQ1HrehZyJJ8yB4sWs+kCSYWNk74IqbHbdJVz8r0oSBxuX9GR9elXZMqvxPsit9hNp4h5E0yIqqTlxYmoeNibnNDMszuRgmaHi6i+A1LxypxhomS1opTTmzmtXYtoL2jhuN35zKZh7r2L+C0DpDPrgXn6Zea1eyLnaqjRllvpLixBsWs+k-SKxq01OgwhhIlybXfpAg1t8iYVxSTJrzwi7itygvFi7ik1k2qhvLr7LUHDdwqA-rq7GLkuqhjVxCrDoCBbJ8CU1wj9txo93bvLpvG1TH3eOyj3fJDp0WGRk3+5WtPvwgjKmNhj0Zv7b2L+C-PZzRsUuf7QVS8SZWfinwdGBk3+DV4hPpov9JFbvwmQTSPqxFdhp+5Ub9JRSBGDpySBl3o+UCxFriAGBtCs0k-kihfyvFBrjweaHYY5+4fvcDLxhE8IZQFQ+s7jIRV7r+E0yTrYbQFQ+s-TKxXyLiDhrPCeIR+0UhdiKy4a4k4RehyoPW9U1+5mjjbua87Cs0+5nbqXuyGTfxOniBCU1+i2gbQFQ+s-lxysR9x9xBhr+I+U6DZbQFR++-eyxydvNFo+60TIhgr2bQ-+Dt8SGRl3k0+qYvW9U++hPpLhqmbd++1TdvNj7Cs0+5nvwYvW9U++hLoXQFQ+s-TLRYcu+A0z8iwYvU6+IBg5hhNqG1U-kahdCcks+Q6vOHYY5+DXCtNr2LE0+rpnPORE-+AtIqmbd+++zevmHhi+g+w2heCmIR+\ +C+ohNp45E1UH9KRYUs+QC9K5E++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++h++++++++++++1b7PpvRtTjxsTw0v+E-k7VvZzLexrSyw3E++tybSZsLK5E1UhKrHOiVdLRQLosT7lei5HtN8yq3vhSXJTuHoH++1yS8Sx9A3LvjRKYBwTvrLvhzI2eziZPtCDwzDFn6To6u1oH++1yO4rTGqveeyLbpAYz5fnLRhSrhyyxLhyThbmjqiXsSvpzNh0lXbkY++5yMqd+zWf1dpMKEcduqxzPtclPzzEZNoWbT3HsHh++1yEijyu8VHdrqzmysuphifxW7exGq7Bbh7ZwyQeCc++DychhRCCzTSeEuLh4ZspxjGQwDZNHhxzE3GrX9k8e3oxPnU+kBwVRxev8dsQAj9fuMjj5LVJoRyYhyqJjwdK9FjsU2Ax2P+Q+y8ihSp93IqhB-EM+C2Rh3qsNN-A+UBDUlss+++++h++++++++++++++++++++++++++++++++++++++++++++++++++++s4Tlzk3EhGk209E+I++6+0+0bNJxLOYJhHmxB++1aQEg+0U+++++++++++0++h62+++++UR4pkOKpb9a7hQ3-9-EM++++++E+-+1U+++-LHE++++++*'), false, false) + Rect(0, 0, 0, 0, 0, 0, 0.0254, 0.0254, 0, 0, 0) + $end 'Graphics' + $end 'HFSSDesign5' + $begin 'nexx_vsin' + ModTime=1074872269 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('negative', 0, -0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'negative', true) + $end 'PinDef' + $begin 'PinDef' + Pin('positive', 0, 0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'positive', true) + $end 'PinDef' + $begin 'Graphics' + Circle(0, 0, 0, 0, 0, 0.00254, 0) + Line(0, 1, 12566272, 0, -0.00508, 0, -0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0, 0.00508, 0, 0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Arc(0, 1, 12566272, -0.000762, -0.000254, 0.000824374, 0.334541, 2.79742, 12566272, 0, 0, false, 0.000824374, 0) + Arc(0, 1, 12566272, 0.000762, 0.000254, 0.000803219, 3.46334, 5.96143, 12566272, 0, 0, false, 0.000803219, 0) + Line(0.0001016, 1, 12566272, 0, 0.002032, 0, 0.001524, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0.0001016, 1, 12566272, -0.000254, 0.001778, 0.000254, 0.001778, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0.0001016, 1, 12566272, -0.000254, -0.001778, 0.000254, -0.001778, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + $end 'Graphics' + $begin 'PropDisplayMap' + InstanceName(2, 2, 0, Text(0.00430389, -0.000440972, 0, 1, 5, false, 'Arial', 0, '***', false, false, ExtentRect(0, 0, 0, 0, 0.00527867070175829, 0.000440972444447972, 0.00194956140351657, 0.00176388888889594, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'nexx_vsin' + $begin 'psh' + ModTime=1033676651 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('n1', -0.00508, 0, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n1', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n2', 0.00508, 0, 3.14159, 'N', 0, 0, false, 0, true, '', false, false, 'n2', true) + $end 'PinDef' + $begin 'Graphics' + Rect(0, 0, 12566272, 0, 0, 0, 0.00508, 0.00508, 12566272, 0, 0) + Circle(0, 0, 12566272, 0, 0, 0.000762, 12566272) + Line(0, 1, 12566272, 0.000508, 0.001524, -0.000508, -0.001524, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00508, 0, -0.00254, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0.00254, 0, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + $end 'Graphics' + $begin 'PropDisplayMap' + P(3, 5, 0, Text(-0.000762336, -0.00532063, 0, 5, 5, false, 'Arial', 0, 'P=***', false, false, ExtentRect(0, 0, 0, 0, -0.000762336, -0.00443869, 0.00372377, 0.00176389, 0, 0, 0))) + $end 'PropDisplayMap' + $end 'psh' + $begin 'pwcmb2' + ModTime=1016034157 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('n1', -0.00762, 0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n1', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n2', -0.00762, -0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n2', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n3', 0.00762, 0, 3.14159, 'N', 0, 0, false, 0, true, '', false, false, 'n3', true) + $end 'PinDef' + $begin 'Graphics' + Rect(0, 0, 12566272, 0, 4.33681e-19, 4.33681e-19, 0.01016, 0.01016, 12566272, 0, 0) + Line(0, 1, 12566272, 0.00508, 4.33681e-19, -0.00508, 0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0.00508, 4.33681e-19, -0.00508, -0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00254, -0.00508, 0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00254, -0.00508, -0.00254, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, 0.00508, 4.33681e-19, 0.00762, 4.33681e-19, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + $end 'Graphics' + $end 'pwcmb2' + $begin 'pwcmb8' + ModTime=1016732689 + CE=0 + Library='Nexxim Circuit Elements\\Nexxim_symbols' + ModSinceLib=false + LibLocation='SysLibrary' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'PinDef' + Pin('n1', -0.00762, 0.01016, 0, 'N', 0, 0.00254, false, 0, true, '', false, false, 'n1', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n2', -0.00762, 0.00762, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n2', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n3', -0.00762, 0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n3', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n4', -0.00762, 0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n4', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n5', -0.00762, -0.00254, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n5', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n6', -0.00762, -0.00508, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n6', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n7', -0.00762, -0.00762, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n7', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n8', -0.00762, -0.01016, 0, 'N', 0, 0, false, 0, true, '', false, false, 'n8', true) + $end 'PinDef' + $begin 'PinDef' + Pin('n9', 0.00762, 0, 3.14159, 'N', 0, 0, false, 0, true, '', false, false, 'n9', true) + $end 'PinDef' + $begin 'Graphics' + Line(0, 1, 12566272, -0.00508, 0.01016, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.01016, -0.00508, 0.01016, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00762, -0.00508, 0.00762, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00508, -0.00508, 0.00508, 0.00508, 0, 0.00762, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, 0.00254, -0.00508, 0.00254, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00508, -0.00508, -0.00508, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00254, -0.00508, -0.00254, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.00762, -0.00508, -0.00762, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Line(0, 1, 12566272, -0.00762, -0.01016, -0.00508, -0.01016, 0.00508, 0, End=0, Join=0, LineStyle=0, BeginObj=0, EndObj=0) + Rect(0, 0, 12566272, 0, 0, 4.55666e-05, 0.0100261, 0.0254071, 12566272, 0, 0) + $end 'Graphics' + $end 'pwcmb8' + $end 'Symbols' + $begin 'Models' + $begin '00_Array2' + Name='00_Array2' + ModTime=1698741880 + Library='' + LibLocation='Project' + ModelType='hfss' + Description='' + ImageFile='D:/Array_Lunch&Learn/Finite_Array_w_Radome.aedtresults/5262493081646775493386.gif' + SymbolPinConfiguration=0 + $begin 'PortInfoBlk' + $end 'PortInfoBlk' + $begin 'PortOrderBlk' + $end 'PortOrderBlk' + DesignName='00_Array1' + SolutionName='Setup1 : Sweep' + NewToOldMap() + OldToNewMap() + PinNames('Array[3,3]02_Patch1_1', 'Array[3,4]02_Patch1_1', 'Array[3,5]02_Patch1_1', 'Array[3,6]02_Patch1_1', 'Array[4,3]02_Patch1_1', 'Array[4,4]02_Patch1_1', 'Array[4,5]02_Patch1_1', 'Array[4,6]02_Patch1_1', 'Array[5,3]02_Patch1_1', 'Array[5,4]02_Patch1_1', 'Array[5,5]02_Patch1_1', 'Array[5,6]02_Patch1_1', 'Array[6,3]02_Patch1_1', 'Array[6,4]02_Patch1_1', 'Array[6,5]02_Patch1_1', 'Array[6,6]02_Patch1_1') + $begin 'DesignerCustomization' + DCOption=0 + InterpOption=0 + ExtrapOption=1 + Convolution=0 + Passivity=0 + Reciprocal=false + ModelOption='' + DataType=1 + $end 'DesignerCustomization' + $begin 'NexximCustomization' + DCOption=3 + InterpOption=1 + ExtrapOption=3 + Convolution=0 + Passivity=0 + Reciprocal=false + ModelOption='' + DataType=2 + $end 'NexximCustomization' + $begin 'HSpiceCustomization' + DCOption=1 + InterpOption=2 + ExtrapOption=3 + Convolution=0 + Passivity=0 + Reciprocal=false + ModelOption='' + DataType=3 + $end 'HSpiceCustomization' + NoiseModelOption='External' + WB_SystemID='00_Array1' + IsWBModel=false + filename='' + numberofports=16 + Simulate=false + CloseProject=false + SaveProject=true + InterpY=true + InterpAlg='auto' + IgnoreDepVars=false + Renormalize=false + RenormImpedance=50 + $end '00_Array2' + $end 'Models' + $begin 'Bondwires' + $begin 'J4_LH10' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH10' + $begin 'J4_LH11' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2794mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH11' + $begin 'J4_LH12' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3048mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH12' + $begin 'J4_LH13' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3302mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH13' + $begin 'J4_LH14' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3556mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH14' + $begin 'J4_LH15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH15' + $begin 'J4_LH3' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.0762mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH3' + $begin 'J4_LH4' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1016mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH4' + $begin 'J4_LH5' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH5' + $begin 'J4_LH6' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1524mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH6' + $begin 'J4_LH7' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1778mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH7' + $begin 'J4_LH8' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2032mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH8' + $begin 'J4_LH9' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2286mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH9' + $begin 'J5_LH10_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='' + VerticalValue='0' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH10_ALPH45_BETA15' + $begin 'J5_LH15_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='' + VerticalValue='0' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH15_ALPH45_BETA15' + $begin 'J5_LH5_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='Ansoft_Wire_Profiles' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('1mil') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='' + VerticalValue='0' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH5_ALPH45_BETA15' + $begin 'J4_LH10' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH10' + $begin 'J4_LH11' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2794mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH11' + $begin 'J4_LH12' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3048mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH12' + $begin 'J4_LH13' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3302mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH13' + $begin 'J4_LH14' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.3556mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH14' + $begin 'J4_LH15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH15' + $begin 'J4_LH3' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.0762mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH3' + $begin 'J4_LH4' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1016mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH4' + $begin 'J4_LH5' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH5' + $begin 'J4_LH6' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1524mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH6' + $begin 'J4_LH7' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.1778mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH7' + $begin 'J4_LH8' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2032mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH8' + $begin 'J4_LH9' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Length' + HorizontalValue='0mm' + VerticalType='Length' + VerticalValue='0.2286mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $end 'Segments' + $end 'J4_LH9' + $begin 'J5_LH10_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.254mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH10_ALPH45_BETA15' + $begin 'J5_LH15_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.381mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH15_ALPH45_BETA15' + $begin 'J5_LH5_ALPH45_BETA15' + Type=0 + ModifiedOn=1674668973 + Library='' + FromVendor=true + IsForward=true + Material='GOLD' + Color=0 + IsVisible=true + Diameter('0mm') + $begin 'Segments' + $begin 'Segment' + HorizontalType='Angle' + HorizontalValue='44.9999906380158deg' + VerticalType='Length' + VerticalValue='0.127mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='12.500000 %' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Switch' + HorizontalValue='0' + VerticalType='Length' + VerticalValue='0mm' + $end 'Segment' + $begin 'Segment' + HorizontalType='Percent' + HorizontalValue='50.000000 %' + VerticalType='Angle' + VerticalValue='14.9999777807454deg' + $end 'Segment' + $end 'Segments' + $end 'J5_LH5_ALPH45_BETA15' + $end 'Bondwires' + $begin 'DefInfo' + Array(1002, 0, 0, 0, '', 1646764268, '', 'Array', '', '', '', '', '', 'Design.bmp', '', 'Project', '', '', 1646764268, '', 0, 0) + NXPSH(1002, 0, 0, 2, 'Ansoft built-in component', 1502913463, '', 'Nexxim Circuit Elements\\Nexxim_symbols:psh', '', '', 'Phase Shifter, Nexxim', 'NXPSH.htm', 'nexximcomponents.chm', 'psh.bmp', 'Nexxim Circuit Elements\\lumped_general', 'SysLibrary', 'psessions', '', 1218547184, '', 0, 99999) + HFSSDesign5(1002, 0, 8, 16, '', 1631310487, '', 'HFSSDesign5', '', '', '', '', '', 'hfss.bmp', '', 'Project', '', '', 1631310487, '', 0, 0) + PWCMB8_NX(1002, 0, 0, 9, 'Ansoft built-in component', 1145626606, '', 'Nexxim Circuit Elements\\Nexxim_symbols:pwcmb8', '', '', 'Power Combiner/Divider, 08-Way', 'NXPWCMB8.htm', 'nexximcomponents.chm', 'pwcmb8.bmp', 'Nexxim Circuit Elements\\Ideal Microwave', 'SysLibrary', '', '', 1145624854, '', 0, 99013) + P_SIN(1002, 0, 0, 2, 'Ansoft built-in component', 1502395610, '', 'Nexxim Circuit Elements\\Nexxim_symbols:nexx_vsin', '', '', 'Sinusoidal Power Source', 'NXPSIN.htm', 'nexximcomponents.chm', 'vdc.bmp', 'Nexxim Circuit Elements\\Independent Sources', 'SysLibrary', '', '', 1476372458, '', 0, 199024) + PWCMB2_NX(1002, 0, 0, 3, 'Ansoft built-in component', 1137175794, '', 'Nexxim Circuit Elements\\Nexxim_symbols:pwcmb2', '', '', 'Power Combiner/Divider, 02-Way', 'NXPWCMB2.htm', 'nexximcomponents.chm', 'pwcmb2.bmp', 'Nexxim Circuit Elements\\Ideal Microwave', 'SysLibrary', '', '', 1137175208, '', 0, 99013) + '00_Array2'(1002, 0, 8, 16, '', 1646775495, '', '00_Array2', '', '', '', '', '', 'hfss.bmp', '', 'Project', '', '', 1646775495, '', 0, 0) + $end 'DefInfo' + $begin 'Compdefs' + $begin 'Array' + Library='' + CircuitEnv=0 + Refbase='U' + NumParts=1 + ModSinceLib=true + $begin 'Properties' + TextProp('Representation', 'SRD', '', 'Array') + TextProp('Owner', 'SRD', '', 'HFSS') + $end 'Properties' + CompExtID=6 + $begin 'Parameters' + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data() + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'Array' + $begin 'NXPSH' + Library='Nexxim Circuit Elements\\lumped_general' + CircuitEnv=0 + Refbase='A' + NumParts=1 + ModSinceLib=false + Terminal('n1', 'n1', 'A', false, 4, 1, '', 'Electrical', '') + Terminal('n2', 'n2', 'A', false, 5, 1, '', 'Electrical', '') + CompExtID=1 + $begin 'Parameters' + VariablePropNU('P', 'D', 'Phase shift', '0deg', 'deg', AdditionalPropInfo='') + VariablePropNU('R0', 'D', 'Characteristic impedance', '50ohm', 'ohm', AdditionalPropInfo='') + TextProp('ModelName', 'SHD', '', 'PSH') + ButtonProp('CosimDefinition', 'SD', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data(Circuit='PSH:@ID %0 %1 ?P(P=@P) *R0(R0=@R0)', 'Nexxim Circuit'='A@ID %0 %1 P=@P R0=@R0 COMPONENT=phase_shifter', System='PSH:@ID %0 %1 ?P(P=@P) *R0(R0=@R0)') + GRef(Circuit='', 'Nexxim Circuit'='', System='') + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'NXPSH' + $begin 'HFSSDesign5' + Library='' + CircuitEnv=0 + Refbase='S' + NumParts=1 + ModSinceLib=true + Terminal('A[3,3]02_Patch1_1:1', 'A[3,3]02_Patch1_1:1', 'A', false, 0, 1, '', 'Electrical', '0') + Terminal('A[3,4]02_Patch1_1:1', 'A[3,4]02_Patch1_1:1', 'A', false, 1, 1, '', 'Electrical', '0') + Terminal('A[3,5]02_Patch1_1:1', 'A[3,5]02_Patch1_1:1', 'A', false, 2, 1, '', 'Electrical', '0') + Terminal('A[3,6]02_Patch1_1:1', 'A[3,6]02_Patch1_1:1', 'A', false, 3, 1, '', 'Electrical', '0') + Terminal('A[4,3]02_Patch1_1:1', 'A[4,3]02_Patch1_1:1', 'A', false, 4, 1, '', 'Electrical', '0') + Terminal('A[4,4]02_Patch1_1:1', 'A[4,4]02_Patch1_1:1', 'A', false, 5, 1, '', 'Electrical', '0') + Terminal('A[4,5]02_Patch1_1:1', 'A[4,5]02_Patch1_1:1', 'A', false, 6, 1, '', 'Electrical', '0') + Terminal('A[4,6]02_Patch1_1:1', 'A[4,6]02_Patch1_1:1', 'A', false, 7, 1, '', 'Electrical', '0') + Terminal('A[5,3]02_Patch1_1:1', 'A[5,3]02_Patch1_1:1', 'A', false, 8, 1, '', 'Electrical', '0') + Terminal('A[5,4]02_Patch1_1:1', 'A[5,4]02_Patch1_1:1', 'A', false, 9, 1, '', 'Electrical', '0') + Terminal('A[5,5]02_Patch1_1:1', 'A[5,5]02_Patch1_1:1', 'A', false, 10, 1, '', 'Electrical', '0') + Terminal('A[5,6]02_Patch1_1:1', 'A[5,6]02_Patch1_1:1', 'A', false, 11, 1, '', 'Electrical', '0') + Terminal('A[6,3]02_Patch1_1:1', 'A[6,3]02_Patch1_1:1', 'A', false, 12, 1, '', 'Electrical', '0') + Terminal('A[6,4]02_Patch1_1:1', 'A[6,4]02_Patch1_1:1', 'A', false, 13, 1, '', 'Electrical', '0') + Terminal('A[6,5]02_Patch1_1:1', 'A[6,5]02_Patch1_1:1', 'A', false, 14, 1, '', 'Electrical', '0') + Terminal('A[6,6]02_Patch1_1:1', 'A[6,6]02_Patch1_1:1', 'A', false, 15, 1, '', 'Electrical', '0') + $begin 'Properties' + TextProp('Owner', 'RD', '', 'HFSS') + $end 'Properties' + CompExtID=5 + $begin 'Parameters' + VariableProp('subX', 'D', '', '8cm') + VariableProp('subY', 'D', '', '8cm') + TextProp('ModelName', 'SRD', '', 'FieldSolver') + ButtonProp('CosimDefinition', 'SD', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data() + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'HFSSDesign5' + $begin 'PWCMB8_NX' + Library='Nexxim Circuit Elements\\Ideal Microwave' + CircuitEnv=0 + Refbase='A' + NumParts=1 + ModSinceLib=false + Terminal('n1', 'n1', 'A', false, 99, 1, '', 'Electrical', '0') + Terminal('n2', 'n2', 'A', false, 100, 1, '', 'Electrical', '0') + Terminal('n3', 'n3', 'A', false, 101, 1, '', 'Electrical', '0') + Terminal('n4', 'n4', 'A', false, 102, 1, '', 'Electrical', '0') + Terminal('n5', 'n5', 'A', false, 103, 1, '', 'Electrical', '0') + Terminal('n6', 'n6', 'A', false, 104, 1, '', 'Electrical', '0') + Terminal('n7', 'n7', 'A', false, 105, 1, '', 'Electrical', '0') + Terminal('n8', 'n8', 'A', false, 106, 1, '', 'Electrical', '0') + Terminal('n9', 'n9', 'A', false, 107, 1, '', 'Electrical', '0') + CompExtID=1 + $begin 'Parameters' + VariableProp('IL', 'D', 'Insertion loss, dB', '9.0309') + VariableProp('RO', 'D', 'Reference impedance', '50') + ButtonProp('CircuitNetList', 'HD', '', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 1, ButtonPropClientData()) + ButtonProp('SystemNetList', 'HD', '', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 'PWCMBN:@ID %0 %1 %2 [ %3 ] [ %4 ] [ %5 ] [ %6 ] [ %7 ] [ %8 ] N=8 ?IL(IL=@IL) *RO(RO=@RO)', 1, ButtonPropClientData()) + TextProp('ModelName', 'SHD', '', 'PWCMBN') + TextProp('COMPONENT', 'RD', '', 'power_combiner_n') + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data('Nexxim Circuit'='A@ID %0 %1 %2 %3 %4 %5 %6 %7 %8 ?IL(IL=@IL) *RO(RO=@RO) COMPONENT=@COMPONENT') + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'PWCMB8_NX' + $begin 'P_SIN' + Library='Nexxim Circuit Elements\\Independent Sources' + CircuitEnv=0 + Refbase='P' + NumParts=1 + ModSinceLib=false + Terminal('positive', 'positive', 'A', false, 0, 1, '', 'Electrical', '0') + Terminal('negative', 'negative', 'A', false, 1, 1, '', 'Electrical', '0') + CompExtID=1 + $begin 'Parameters' + TextProp('LabelID', 'HD', 'Property string for netlist ID', 'V@ID') + VariableProp('ACMAG', 'D', 'AC magnitude for small-signal analysis (Volts)', 'nan V') + VariablePropNU('ACPHASE', 'D', 'AC phase for small-signal analysis', '0deg', 'deg', AdditionalPropInfo='') + VariableProp('DC', 'D', 'DC voltage (Volts)', '0V') + VariablePropNU('VO', 'D', 'Power offset from zero watts', '0W', 'W', AdditionalPropInfo='') + VariableProp('POWER', 'D', 'Available power of the source above VO', '0W') + VariableProp('FREQ', 'D', 'Frequency (Hz)', '1GHz') + VariableProp('TD', 'D', 'Delay to start of sine wave (seconds)', '0s') + VariableProp('ALPHA', 'D', 'Damping factor (1/seconds)', '0') + VariablePropNU('THETA', 'D', 'Phase delay', '0deg', 'deg', AdditionalPropInfo='') + VariableProp('TONE', 'D', 'Frequency (Hz) to use for harmonic balance analysis, should be a submultiple of (or equal to) the driving frequency and should also be included in the HB analysis setup', '0Hz') + TextProp('ModelName', 'SHD', '', 'P_SIN') + ButtonProp('CosimDefinition', 'D', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data('Nexxim Circuit'='V@ID %0 %1 *DC(DC=@DC) POWER SIN(?VO(@VO) ?POWER(@POWER) ?FREQ(@FREQ) ?TD(@TD) ?ALPHA(@ALPHA) ?THETA(@THETA)) *TONE(TONE=@TONE) *ACMAG(AC @ACMAG @ACPHASE)') + GRef('Nexxim Circuit'='') + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'P_SIN' + $begin 'PWCMB2_NX' + Library='Nexxim Circuit Elements\\Ideal Microwave' + CircuitEnv=0 + Refbase='A' + NumParts=1 + ModSinceLib=false + Terminal('n1', 'n1', 'A', false, 6, 1, '', 'Electrical', '0') + Terminal('n2', 'n2', 'A', false, 7, 1, '', 'Electrical', '0') + Terminal('n3', 'n3', 'A', false, 8, 1, '', 'Electrical', '0') + CompExtID=1 + $begin 'Parameters' + VariableProp('IL13', 'D', 'Insertion loss between port 1 and port 3, dB', '3.0104') + VariablePropNU('PH13', 'D', 'Phase shift between port 1 and port 3 (Degree)', '-90deg', 'deg', AdditionalPropInfo='') + VariableProp('IL23', 'D', 'Insertion loss between port 2 and port 3, dB', '3.0104') + VariablePropNU('PH23', 'D', 'Phase shift between port 2 and port 3, Degree', '-90deg', 'deg', AdditionalPropInfo='') + VariableProp('RO', 'D', 'Reference impedance', '50') + TextProp('ModelName', 'SHD', '', 'PWCMB2') + TextProp('COMPONENT', 'RD', '', 'power_combiner2') + ButtonProp('CosimDefinition', 'D', '', '', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'DefaultNetlist', 0) + $end 'Parameters' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=4 + CosimDefName='DefaultNetlist' + IsDefinition=true + Connect=true + Data('Nexxim Circuit'='A@ID %0 %1 %2 *IL13(IL13=@IL13) *PH13(PH13=@PH13) *IL23(IL23=@IL23) *PH23(PH23=@PH23) *RO(RO=@RO) COMPONENT=@COMPONENT') + GRef() + $end 'CosimDefinition' + DefaultCosim='DefaultNetlist' + $end 'CosimDefinitions' + $end 'PWCMB2_NX' + $begin '00_Array2' + Library='' + CircuitEnv=0 + Refbase='S' + NumParts=1 + ModSinceLib=true + Terminal('Array[3,3]02_Patch1_1', 'Array[3,3]02_Patch1_1', 'A', false, 3, 1, '', 'Electrical', '0') + Terminal('Array[3,4]02_Patch1_1', 'Array[3,4]02_Patch1_1', 'A', false, 4, 1, '', 'Electrical', '0') + Terminal('Array[3,5]02_Patch1_1', 'Array[3,5]02_Patch1_1', 'A', false, 5, 1, '', 'Electrical', '0') + Terminal('Array[3,6]02_Patch1_1', 'Array[3,6]02_Patch1_1', 'A', false, 6, 1, '', 'Electrical', '0') + Terminal('Array[4,3]02_Patch1_1', 'Array[4,3]02_Patch1_1', 'A', false, 7, 1, '', 'Electrical', '0') + Terminal('Array[4,4]02_Patch1_1', 'Array[4,4]02_Patch1_1', 'A', false, 8, 1, '', 'Electrical', '0') + Terminal('Array[4,5]02_Patch1_1', 'Array[4,5]02_Patch1_1', 'A', false, 9, 1, '', 'Electrical', '0') + Terminal('Array[4,6]02_Patch1_1', 'Array[4,6]02_Patch1_1', 'A', false, 10, 1, '', 'Electrical', '0') + Terminal('Array[5,3]02_Patch1_1', 'Array[5,3]02_Patch1_1', 'A', false, 11, 1, '', 'Electrical', '0') + Terminal('Array[5,4]02_Patch1_1', 'Array[5,4]02_Patch1_1', 'A', false, 12, 1, '', 'Electrical', '0') + Terminal('Array[5,5]02_Patch1_1', 'Array[5,5]02_Patch1_1', 'A', false, 13, 1, '', 'Electrical', '0') + Terminal('Array[5,6]02_Patch1_1', 'Array[5,6]02_Patch1_1', 'A', false, 14, 1, '', 'Electrical', '0') + Terminal('Array[6,3]02_Patch1_1', 'Array[6,3]02_Patch1_1', 'A', false, 15, 1, '', 'Electrical', '0') + Terminal('Array[6,4]02_Patch1_1', 'Array[6,4]02_Patch1_1', 'A', false, 16, 1, '', 'Electrical', '0') + Terminal('Array[6,5]02_Patch1_1', 'Array[6,5]02_Patch1_1', 'A', false, 17, 1, '', 'Electrical', '0') + Terminal('Array[6,6]02_Patch1_1', 'Array[6,6]02_Patch1_1', 'A', false, 18, 1, '', 'Electrical', '0') + $begin 'Properties' + TextProp('Owner', 'RD', '', 'HFSS') + $end 'Properties' + CompExtID=5 + $begin 'Parameters' + VariableProp('subX', 'D', '', '8cm') + VariableProp('subY', 'D', '', '8cm') + TextProp('ModelName', 'SRD', '', 'FieldSolver') + ButtonProp('CosimDefinition', 'SD', '', 'Edit', 'Edit', 40501, ButtonPropClientData()) + MenuProp('CoSimulator', 'D', '', 'Default', 0) + $end 'Parameters' + ModelDefName='00_Array2' + $begin 'CosimDefinitions' + $begin 'CosimDefinition' + CosimulatorType=103 + CosimDefName='Default' + IsDefinition=true + Connect=true + ModelDefinitionName='00_Array2' + ShowRefPin2=2 + LenPropName='' + $end 'CosimDefinition' + DefaultCosim='Default' + $end 'CosimDefinitions' + $end '00_Array2' + $end 'Compdefs' + $end 'Definitions' + DesignIDServer=23 + MoveBackwards=false + $begin 'HFSSModel' + RepRewriteV2=true + Name='Array' + DesignID=0 + 'Use Advanced DC Extrapolation'=false + 'Use Power S'=false + 'Export FRTM After Simulation'=false + 'Export Rays After Simulation'=false + 'Export After Simulation'=false + 'Allow Material Override'=false + 'Calculate Lossy Dielectrics'=false + 'Perform Minimal validation'=false + $begin 'TemperatureSettings' + IncludeTemperatureDependence=false + Temperatures(610, '22cel', 637, '22cel', 647, '22cel', 673, '22cel', 683, '22cel', 710, '22cel', 747, '22cel', 774, '22cel', 784, '22cel', 794, '22cel', 821, '22cel', 858, '22cel', 885, '22cel', 895, '22cel', 922, '22cel', 949, '22cel', 992, '22cel', 1019, '22cel', 1029, '22cel', 1056, '22cel', 1107, '22cel') + $end 'TemperatureSettings' + 'Port Validation Settings'='Standard' + 'Save Adaptive support files'=false + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + MaterialDensity=1 + MassOfTissue=1 + VoxelSize=1 + TissueObjectList=-1 + AverageSarMethod=0 + UseAutoDCThickness=true + HaveZwaveSupport=true + $begin 'OutputVariable' + NextUniqueID=0 + MoveBackwards=false + $end 'OutputVariable' + $begin 'ModelSetup' + $begin 'DesignDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='DesignDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'DesignDatasets' + $begin 'Properties' + VariableProp('subX', 'UD', '', '8cm') + VariableProp('subY', 'UD', '', '8cm') + $end 'Properties' + $begin 'PostProcessingVariables' + PostProcessingVariableProp('ScanFrequency', 'UD', '', '1800000000Hz') + PostProcessingVariableProp('ScanAngleTheta', 'UD', '', '0deg') + PostProcessingVariableProp('ScanAnglePhi', 'UD', '', '0deg') + PostProcessingVariableProp('ScanPhaseShiftA', 'UD', '', '-((ScanFrequency*0.0*sin(ScanAngleTheta)*cos(ScanAnglePhi)) + (ScanFrequency*1.67667601756e-09*sin(ScanAngleTheta)*sin(ScanAnglePhi))) rad') + PostProcessingVariableProp('ScanPhaseShiftB', 'UD', '', '-((ScanFrequency*1.67667601756e-09*sin(ScanAngleTheta)*cos(ScanAnglePhi)) + (ScanFrequency*0.0*sin(ScanAngleTheta)*sin(ScanAnglePhi))) rad') + PostProcessingVariableProp('ScanMag1', 'UD', '', '1W') + PostProcessingVariableProp('ScanPhase1', 'UD', '', '0deg') + PostProcessingVariableProp('CosinePower', 'UD', '', '3') + PostProcessingVariableProp('EdgeTaperLevel_dB', 'UD', '', '-20') + $end 'PostProcessingVariables' + VariableOrders[11: 'subX', 'subY', 'ScanFrequency', 'ScanAngleTheta', 'ScanAnglePhi', 'ScanPhaseShiftA', 'ScanPhaseShiftB', 'ScanMag1', 'ScanPhase1', 'CosinePower', 'EdgeTaperLevel_dB'] + $begin 'Editor3D Doc Preferences' + 'Plane Background'=true + BackgroundColor1=16777215 + BackgroundColor2=0 + 'Need Lights'=true + 'Ambient Light'=9671571 + 'Num Lights'=4 + Light0[4: 6710886, 0, -1, -0.150000005960464] + Light1[4: 6710886, -0.600000023841858, 0.100000001490116, -0.5] + Light2[4: 6710886, 0.5, 0.100000001490116, -0.5] + Light3[4: 6710886, 0.200000002980232, 0.400000005960464, 1] + Ver=2 + $end 'Editor3D Doc Preferences' + SnapMode=31 + WorkingCS=1 + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=21 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=1244 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=143 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Euler Angle ZYZ' + OriginX='-subX' + OriginY='-subY' + OriginZ='0cm' + Psi='0deg' + Theta='0deg' + Phi='0deg' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='Metal1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=144 + $end 'Operation' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=258 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Euler Angle ZYZ' + OriginX='-subX' + OriginY='-2*subY' + OriginZ='0cm' + Psi='0deg' + Theta='0deg' + Phi='0deg' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='Side' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=259 + $end 'Operation' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=396 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Euler Angle ZYZ' + OriginX='-2*subX' + OriginY='-2*subY' + OriginZ='0cm' + Psi='0deg' + Theta='0deg' + Phi='0deg' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='Corner' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=397 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=600 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=599 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1159 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=600 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=607 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=738 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS2' + UDMId=737 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1229 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=738 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=744 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=849 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS3' + UDMId=848 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1236 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=849 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=855 + $end 'Operation' + $begin 'Operation' + OperationType='CreateExternalCoordinateSystem' + ID=983 + ReferenceCoordSystemID=1 + $begin 'ExternalCSParameters' + KernelVersion=23 + $begin 'Transformation' + AffineMatrix[9: 1, 0, 0, 0, 1, 0, 0, 0, 1] + Translation[3: 0, 0, 0.1524] + $end 'Transformation' + $end 'ExternalCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS4' + UDMId=982 + $end 'Attributes' + $begin 'Operations' + $begin 'CSOperation' + OperationType='CachedCSOperation' + ID=1243 + $begin 'CachedCSOperParameters' + $end 'CachedCSOperParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + ReferenceCSID=983 + $end 'CSOperation' + $end 'Operations' + XYPlaneID=989 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'SubModelDefinitions' + $begin 'SubModelDefinition' + SubmodelDefinitionID=599 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 599] + SubmodelDefinitionName='02_Patch' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/02_Patch.a3dcomp' + IsLocal=false + ChecksumString='d5c6ab10d27dc0bd8bbb02e8dd2e2342' + ChecksumHistory('20fc5ac219fa743afd8ca925e6eb2079', '5a214f4574db96d93ace173fc9633c0d', 'ab2260df524ce23f2a26184bbe992b40', '1f86c0d94b7d8d980b578032d3716fb9', 'ac15e7f1edaac81bfe47615ad0e764c1', 'fdb0262a95719ca1f5242cd1435323c7', '7480689c0d4583954aa27bec8a82ea72', '67276bcb604613ff2d50669fd5840c08', 'afc6f7c927ea038b13e96a3641c31d5f', '16c4cdaef0e0228e14d11c5b3700e977') + VersionHistory('1.0', '2.0', '3.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='02_Patch599.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=737 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 737] + SubmodelDefinitionName='01_Metal_Only' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/01_Metal_Only.a3dcomp' + IsLocal=false + ChecksumString='fe90c3eebdb3a22fa943fe186e9d6590' + ChecksumHistory('2eae920cded86ea339b0c2b510c2e396', '56dc97eefced4fb878670bf07bf9c0d7', '6ad251b9b60c46a887f8abe7cc95a939', '4dbebe5edc26d02a76cbe6a0375bcc2c', '1ffabeb99e557c6294a61facb790fdc1') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='01_Metal_Only737.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=848 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 848] + SubmodelDefinitionName='03_Radome_Side' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/03_Radome_Side.a3dcomp' + IsLocal=false + ChecksumString='24f9541e0f1f67904551e94d3871e1eb' + ChecksumHistory('5d45f52a9e216e50d59e73534f9b66a5', 'bd94a6df1aa6242cafd3cf31ee7b96b6', 'cc9431f9f8a1abf4a5eba7246c4d6741', '6fede82269f5c82446e7314943f933e8', '0caa2c21ba3f444a6ee19a355fd8272a', '5ae6fe5bad977199e21f2acaa1cb71db', '12ba1933b3e5096927229ff9f3ef3af3', '8ed257867c34e79cd241f53177f868db') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='03_Radome_Side848.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=982 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 982] + SubmodelDefinitionName='Radome_Corner' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='cm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/Lunch_&_Learn/03_Radome_Corner.a3dcomp' + IsLocal=false + ChecksumString='10baf2609693e33409d11202345ca665' + ChecksumHistory('48df8c28c8f90d7000ba95b58e4953ef', '9c31e8dcade8ebcf308ed8e923ed461a', 'b56f926f9c0284c44194e6b6d6a8fb4a', 'c91a15c1fe75b99ff252eea61ee6625b', '032466a2fbbe52d1f18400fbebb338eb', '565420525b544a6ef1e96fc53389da3f', '2b0acdb4ac6a1e6e1e0e62412b1a9453', 'bc45f9017b386ad363643011e17c6a68', 'b810ef987881004ea90f1548a1c23efd') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 1) + SubmodelTempFileName='03_Radome_Corner982.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $end 'SubModelDefinitions' + $begin 'Groups' + $end 'Groups' + $begin 'UserDefinedModels' + $begin 'UserDefinedModel' + ID=599 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('234'=605, '267'=606, '34'=602, '46'=603, '6'=601, '95'=604) + CSKeyVsOperIdMap('262'=600) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='02_Patch1' + GroupID=-1 + SubModelDefinitionID=599 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1152 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=599 + TranslateVectorX='-0.12' + TranslateVectorY='-0.12' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=599 + IsSuppressed=false + BaseOperIDs[6: 601, 602, 603, 604, 605, 606] + CachedBodyOperIDs[6: 1157, 1155, 1156, 1158, 1153, 1154] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 600] + CachedCSOperIDs[1: 1159] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/02_Patch.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='InsetDistance' + Value='1.46cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='FeedLength' + Value='1.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='InsetGap' + Value='0.168cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='FeedWidth' + Value='0.336cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='patchY' + Value='4.39cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=737 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('238'=741, '250'=742, '278'=743, '34'=740, '6'=739) + CSKeyVsOperIdMap('233'=738) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='01_Metal_Only1' + GroupID=-1 + SubModelDefinitionID=737 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1223 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=737 + TranslateVectorX='-0.2' + TranslateVectorY='-0.2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=737 + IsSuppressed=false + BaseOperIDs[5: 739, 740, 741, 742, 743] + CachedBodyOperIDs[5: 1228, 1227, 1224, 1225, 1226] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 738] + CachedCSOperIDs[1: 1229] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/01_Metal_Only.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='patchY' + Value='4.39cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=848 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('250'=852, '34'=851, '361'=853, '417'=854, '6'=850) + CSKeyVsOperIdMap('233'=849) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='03_Radome_Side1' + GroupID=-1 + SubModelDefinitionID=848 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1230 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=848 + TranslateVectorX='-0.2' + TranslateVectorY='-0.28' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=848 + IsSuppressed=false + BaseOperIDs[5: 850, 851, 852, 853, 854] + CachedBodyOperIDs[5: 1235, 1232, 1231, 1233, 1234] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 849] + CachedCSOperIDs[1: 1236] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/03_Radome_Side.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radius' + Value='0.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=982 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('250'=986, '34'=985, '361'=987, '417'=988, '6'=984) + CSKeyVsOperIdMap('233'=983) + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='Radome_Corner1' + GroupID=-1 + SubModelDefinitionID=982 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=1 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $begin 'UDMOperation' + OperationType='UDMMove' + ID=1237 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=23 + TargetID=982 + TranslateVectorX='-0.28' + TranslateVectorY='-0.28' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=-1 + ReferenceUDMID=982 + IsSuppressed=false + BaseOperIDs[5: 984, 985, 986, 987, 988] + CachedBodyOperIDs[5: 1242, 1239, 1238, 1240, 1241] + $begin 'UDMOperIdentity' + $end 'UDMOperIdentity' + BaseCSOperIDs[1: 983] + CachedCSOperIDs[1: 1243] + $end 'UDMOperation' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/Lunch_&_Learn/03_Radome_Corner.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $begin 'UDMParam' + Name='subX' + Value='subX' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subY' + Value='subY' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_height' + Value='1cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='subH' + Value='0.1524cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radome_thick' + Value='0.8cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $begin 'UDMParam' + Name='radius' + Value='0.5cm' + PropType2=3 + PropFlag2=4 + $end 'UDMParam' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=601 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=610 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=610 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=611, '11'=612, '12'=613, '7'=614, '8'=615, '9'=616) + EdgeKeyIDMap('13'=617, '14'=618, '15'=619, '16'=620, '17'=621, '18'=622, '19'=623, '20'=624, '21'=625, '22'=626, '23'=627, '24'=628) + VertexKeyIDMap('25'=629, '26'=630, '27'=631, '28'=632, '29'=633, '30'=634, '31'=635, '32'=636) + BodyKeyIDMap('6'=610) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1157 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=610 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=602 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=637 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=637 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=638) + EdgeKeyIDMap('35'=639, '36'=640, '37'=641, '38'=642) + VertexKeyIDMap('39'=643, '40'=644, '41'=645, '42'=646) + BodyKeyIDMap('34'=637) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1155 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=637 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=603 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=647 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=12 + NumEdges=12 + NumVertices=12 + $end 'Topology' + BodyID=647 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('56'=648) + EdgeKeyIDMap('222'=649, '223'=650, '224'=651, '225'=652, '231'=653, '232'=654, '47'=655, '48'=656, '50'=657, '82'=658, '83'=659, '84'=660) + VertexKeyIDMap('227'=661, '228'=662, '229'=663, '230'=664, '51'=665, '52'=666, '53'=667, '54'=668, '85'=669, '86'=670, '87'=671, '88'=672) + BodyKeyIDMap('46'=647) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1156 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=647 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='port1' + Flags='' + Color='(128 0 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=604 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=673 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=673 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('105'=674) + EdgeKeyIDMap('96'=675, '97'=676, '98'=677, '99'=678) + VertexKeyIDMap('100'=679, '101'=680, '102'=681, '103'=682) + BodyKeyIDMap('95'=673) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1158 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=673 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=605 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=683 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=683 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('235'=684, '236'=685, '237'=686, '238'=687, '239'=688, '240'=689) + EdgeKeyIDMap('241'=690, '242'=691, '243'=692, '244'=693, '245'=694, '246'=695, '247'=696, '248'=697, '249'=698, '250'=699, '251'=700, '252'=701) + VertexKeyIDMap('253'=702, '254'=703, '255'=704, '256'=705, '257'=706, '258'=707, '259'=708, '260'=709) + BodyKeyIDMap('234'=683) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1153 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=683 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=599 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=606 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=710 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=710 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('268'=711, '269'=712, '270'=713, '271'=714, '272'=715, '273'=716) + EdgeKeyIDMap('274'=717, '275'=718, '276'=719, '277'=720, '278'=721, '279'=722, '280'=723, '281'=724, '282'=725, '283'=726, '284'=727, '285'=728) + VertexKeyIDMap('286'=729, '287'=730, '288'=731, '289'=732, '290'=733, '291'=734, '292'=735, '293'=736) + BodyKeyIDMap('267'=710) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1154 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=710 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_1' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=739 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=747 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=747 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=748, '11'=749, '12'=750, '7'=751, '8'=752, '9'=753) + EdgeKeyIDMap('13'=754, '14'=755, '15'=756, '16'=757, '17'=758, '18'=759, '19'=760, '20'=761, '21'=762, '22'=763, '23'=764, '24'=765) + VertexKeyIDMap('25'=766, '26'=767, '27'=768, '28'=769, '29'=770, '30'=771, '31'=772, '32'=773) + BodyKeyIDMap('6'=747) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1228 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=747 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_1' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=740 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=774 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=774 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=775) + EdgeKeyIDMap('35'=776, '36'=777, '37'=778, '38'=779) + VertexKeyIDMap('39'=780, '40'=781, '41'=782, '42'=783) + BodyKeyIDMap('34'=774) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1227 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=774 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna_1' + Flags='' + Color='(255 128 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=741 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=784 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=784 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('248'=785) + EdgeKeyIDMap('239'=786, '240'=787, '241'=788, '242'=789) + VertexKeyIDMap('243'=790, '244'=791, '245'=792, '246'=793) + BodyKeyIDMap('238'=784) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1224 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=784 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=742 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=794 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=794 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=795, '252'=796, '253'=797, '254'=798, '255'=799, '256'=800) + EdgeKeyIDMap('257'=801, '258'=802, '259'=803, '260'=804, '261'=805, '262'=806, '263'=807, '264'=808, '265'=809, '266'=810, '267'=811, '268'=812) + VertexKeyIDMap('269'=813, '270'=814, '271'=815, '272'=816, '273'=817, '274'=818, '275'=819, '276'=820) + BodyKeyIDMap('250'=794) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1225 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=794 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2_1' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=737 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=743 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=821 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=821 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('279'=822, '280'=823, '281'=824, '282'=825, '283'=826, '284'=827) + EdgeKeyIDMap('285'=828, '286'=829, '287'=830, '288'=831, '289'=832, '290'=833, '291'=834, '292'=835, '293'=836, '294'=837, '295'=838, '296'=839) + VertexKeyIDMap('297'=840, '298'=841, '299'=842, '300'=843, '301'=844, '302'=845, '303'=846, '304'=847) + BodyKeyIDMap('278'=821) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1226 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=821 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_2' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=850 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=858 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=858 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=859, '11'=860, '12'=861, '7'=862, '8'=863, '9'=864) + EdgeKeyIDMap('13'=865, '14'=866, '15'=867, '16'=868, '17'=869, '18'=870, '19'=871, '20'=872, '21'=873, '22'=874, '23'=875, '24'=876) + VertexKeyIDMap('25'=877, '26'=878, '27'=879, '28'=880, '29'=881, '30'=882, '31'=883, '32'=884) + BodyKeyIDMap('6'=858) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1235 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=858 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_2' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=851 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=885 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=885 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=886) + EdgeKeyIDMap('35'=887, '36'=888, '37'=889, '38'=890) + VertexKeyIDMap('39'=891, '40'=892, '41'=893, '42'=894) + BodyKeyIDMap('34'=885) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1232 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=885 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_2' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=852 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=895 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=895 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=896, '252'=897, '253'=898, '254'=899, '255'=900, '256'=901) + EdgeKeyIDMap('257'=902, '258'=903, '259'=904, '260'=905, '261'=906, '262'=907, '263'=908, '264'=909, '265'=910, '266'=911, '267'=912, '268'=913) + VertexKeyIDMap('269'=914, '270'=915, '271'=916, '272'=917, '273'=918, '274'=919, '275'=920, '276'=921) + BodyKeyIDMap('250'=895) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1231 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=895 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2_2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=853 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=922 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=922 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('362'=923, '363'=924, '364'=925, '365'=926, '366'=927, '367'=928) + EdgeKeyIDMap('368'=929, '369'=930, '370'=931, '371'=932, '372'=933, '373'=934, '374'=935, '375'=936, '376'=937, '377'=938, '378'=939, '379'=940) + VertexKeyIDMap('380'=941, '381'=942, '382'=943, '383'=944, '384'=945, '385'=946, '386'=947, '387'=948) + BodyKeyIDMap('361'=922) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1233 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=922 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=848 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=854 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=949 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=7 + NumWires=0 + NumLoops=7 + NumCoedges=30 + NumEdges=15 + NumVertices=10 + $end 'Topology' + BodyID=949 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('418'=950, '419'=951, '420'=952, '421'=953, '422'=954, '423'=955, '668'=956) + EdgeKeyIDMap('424'=957, '425'=958, '426'=959, '428'=960, '429'=961, '430'=962, '431'=963, '432'=964, '433'=965, '434'=966, '435'=967, '669'=968, '670'=969, '671'=970, '672'=971) + VertexKeyIDMap('437'=972, '438'=973, '440'=974, '441'=975, '442'=976, '443'=977, '673'=978, '674'=979, '675'=980, '676'=981) + BodyKeyIDMap('417'=949) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1234 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=949 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub_3' + Flags='' + Color='(0 128 0)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=984 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=992 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=992 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('10'=993, '11'=994, '12'=995, '7'=996, '8'=997, '9'=998) + EdgeKeyIDMap('13'=999, '14'=1000, '15'=1001, '16'=1002, '17'=1003, '18'=1004, '19'=1005, '20'=1006, '21'=1007, '22'=1008, '23'=1009, '24'=1010) + VertexKeyIDMap('25'=1011, '26'=1012, '27'=1013, '28'=1014, '29'=1015, '30'=1016, '31'=1017, '32'=1018) + BodyKeyIDMap('6'=992) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1242 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=992 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground_3' + Flags='' + Color='(255 128 65)' + Transparency=0.3 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=985 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1019 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=1019 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('44'=1020) + EdgeKeyIDMap('35'=1021, '36'=1022, '37'=1023, '38'=1024) + VertexKeyIDMap('39'=1025, '40'=1026, '41'=1027, '42'=1028) + BodyKeyIDMap('34'=1019) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1239 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1019 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_3' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=986 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1029 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=1029 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('251'=1030, '252'=1031, '253'=1032, '254'=1033, '255'=1034, '256'=1035) + EdgeKeyIDMap('257'=1036, '258'=1037, '259'=1038, '260'=1039, '261'=1040, '262'=1041, '263'=1042, '264'=1043, '265'=1044, '266'=1045, '267'=1046, '268'=1047) + VertexKeyIDMap('269'=1048, '270'=1049, '271'=1050, '272'=1051, '273'=1052, '274'=1053, '275'=1054, '276'=1055) + BodyKeyIDMap('250'=1029) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1238 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1029 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2_3' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=987 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1056 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=1056 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('362'=1057, '363'=1058, '364'=1059, '365'=1060, '366'=1061, '367'=1062, '394'=1063, '395'=1064, '695'=1065, '705'=1066) + EdgeKeyIDMap('368'=1067, '369'=1068, '371'=1069, '372'=1070, '373'=1071, '374'=1072, '375'=1073, '377'=1074, '379'=1075, '396'=1076, '397'=1077, '398'=1078, '400'=1079, '403'=1080, '406'=1081, '407'=1082, '696'=1083, '697'=1084, '698'=1085, '699'=1086, '706'=1087, '707'=1088, '708'=1089, '709'=1090) + VertexKeyIDMap('380'=1091, '381'=1092, '384'=1093, '385'=1094, '409'=1095, '410'=1096, '412'=1097, '415'=1098, '700'=1099, '701'=1100, '702'=1101, '703'=1102, '710'=1103, '711'=1104, '712'=1105, '713'=1106) + BodyKeyIDMap('361'=1056) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1240 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1056 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4_1' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=982 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=988 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=13 + $end 'ExternalBodyParameters' + ParentPartID=1107 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=42 + NumEdges=21 + NumVertices=13 + $end 'Topology' + BodyID=1107 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('418'=1108, '419'=1109, '420'=1110, '421'=1111, '422'=1112, '423'=1113, '715'=1114, '716'=1115, '731'=1116, '732'=1117) + EdgeKeyIDMap('424'=1118, '425'=1119, '428'=1120, '429'=1121, '430'=1122, '431'=1123, '433'=1124, '434'=1125, '435'=1126, '717'=1127, '718'=1128, '720'=1129, '721'=1130, '722'=1131, '723'=1132, '733'=1133, '734'=1134, '735'=1135, '736'=1136, '737'=1137, '738'=1138) + VertexKeyIDMap('437'=1139, '440'=1140, '441'=1141, '443'=1142, '724'=1143, '725'=1144, '727'=1145, '728'=1146, '729'=1147, '739'=1148, '740'=1149, '741'=1150, '742'=1151) + BodyKeyIDMap('417'=1107) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $begin 'Operation' + OperationType='CachedBody' + ID=1241 + $begin 'CachedBodyParameters' + $end 'CachedBodyParameters' + ParentPartID=1107 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + BodyIDCache=0 + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'CachedNames' + $begin '01_metal_only' + '01_metal_only'(-1, 1) + $end '01_metal_only' + $begin '02_patch' + '02_patch'(-1, 1) + $end '02_patch' + $begin '03_radome_side' + '03_radome_side'(-1, 1) + $end '03_radome_side' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'antenna_' + antenna_(1) + $end 'antenna_' + $begin 'box' + box(1, 2, 4) + $end 'box' + $begin 'box1_' + box1_(1, 2, 3) + $end 'box1_' + $begin 'box2_' + box2_(1, 2, 3) + $end 'box2_' + $begin 'box4_' + box4_(1) + $end 'box4_' + $begin 'corner' + corner(-1) + $end 'corner' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'ground_' + ground_(1, 2, 3) + $end 'ground_' + $begin 'metal' + metal(1) + $end 'metal' + $begin 'model' + model(-1) + $end 'model' + $begin 'port' + port(1) + $end 'port' + $begin 'radome_corner' + radome_corner(-1, 1) + $end 'radome_corner' + $begin 'relativecs' + relativecs(1, 2, 3, 4) + $end 'relativecs' + $begin 'side' + side(-1) + $end 'side' + $begin 'sub' + sub(-1) + $end 'sub' + $begin 'sub_' + sub_(1, 2, 3) + $end 'sub_' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=8 + DependencyObject('GeometryOperation', 1152) + DependencyObject('GeometryBodyOperation', 605) + DependencyObject('GeometryBodyOperation', 606) + DependencyObject('GeometryBodyOperation', 602) + DependencyObject('GeometryBodyOperation', 603) + DependencyObject('GeometryBodyOperation', 601) + DependencyObject('GeometryBodyOperation', 604) + DependencyObject('CoordinateSystem', 600) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=7 + DependencyObject('GeometryOperation', 1223) + DependencyObject('GeometryBodyOperation', 741) + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryBodyOperation', 743) + DependencyObject('GeometryBodyOperation', 740) + DependencyObject('GeometryBodyOperation', 739) + DependencyObject('CoordinateSystem', 738) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=7 + DependencyObject('GeometryOperation', 1230) + DependencyObject('GeometryBodyOperation', 852) + DependencyObject('GeometryBodyOperation', 851) + DependencyObject('GeometryBodyOperation', 853) + DependencyObject('GeometryBodyOperation', 854) + DependencyObject('GeometryBodyOperation', 850) + DependencyObject('CoordinateSystem', 849) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=7 + DependencyObject('GeometryOperation', 1237) + DependencyObject('GeometryBodyOperation', 986) + DependencyObject('GeometryBodyOperation', 985) + DependencyObject('GeometryBodyOperation', 987) + DependencyObject('GeometryBodyOperation', 988) + DependencyObject('GeometryBodyOperation', 984) + DependencyObject('CoordinateSystem', 983) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 601) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1157) + DependencyObject('GeometryBodyOperation', 601) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 602) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1155) + DependencyObject('GeometryBodyOperation', 602) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 603) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1156) + DependencyObject('GeometryBodyOperation', 603) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 604) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1158) + DependencyObject('GeometryBodyOperation', 604) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 605) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1153) + DependencyObject('GeometryBodyOperation', 605) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 606) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1154) + DependencyObject('GeometryBodyOperation', 606) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 739) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1228) + DependencyObject('GeometryBodyOperation', 739) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 740) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1227) + DependencyObject('GeometryBodyOperation', 740) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 741) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1224) + DependencyObject('GeometryBodyOperation', 741) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1225) + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 743) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1226) + DependencyObject('GeometryBodyOperation', 743) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 850) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1235) + DependencyObject('GeometryBodyOperation', 850) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 851) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1232) + DependencyObject('GeometryBodyOperation', 851) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 852) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1231) + DependencyObject('GeometryBodyOperation', 852) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 853) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1233) + DependencyObject('GeometryBodyOperation', 853) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 854) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1234) + DependencyObject('GeometryBodyOperation', 854) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 984) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1242) + DependencyObject('GeometryBodyOperation', 984) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 985) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1239) + DependencyObject('GeometryBodyOperation', 985) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 986) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1238) + DependencyObject('GeometryBodyOperation', 986) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 987) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1240) + DependencyObject('GeometryBodyOperation', 987) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 988) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 1241) + DependencyObject('GeometryBodyOperation', 988) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 143) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 258) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 396) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 600) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1159) + DependencyObject('CoordinateSystem', 600) + DependencyObject('GeometryOperation', 1152) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 738) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1229) + DependencyObject('CoordinateSystem', 738) + DependencyObject('GeometryOperation', 1223) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 849) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1236) + DependencyObject('CoordinateSystem', 849) + DependencyObject('GeometryOperation', 1230) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 983) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryOperation', 1243) + DependencyObject('CoordinateSystem', 983) + DependencyObject('GeometryOperation', 1237) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[6: 637, 647, 774, 784, 885, 1019] + $begin 'AssignedFace' + kID=674 + $begin 'FaceData' + ParentObjectID=673 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.0512064 + FcUVMid(-12, -8.305, 0.0762) + $begin 'FcTolVts' + TolVt(-12.168, -8.305, 0, 5e-07) + TolVt(-12.168, -8.305, 0.1524, 5e-07) + TolVt(-11.832, -8.305, 0.1524, 5e-07) + TolVt(-11.832, -8.305, -6.17221986770266e-17, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=684 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-12, -12, 6.9524) + $begin 'FcTolVts' + TolVt(-8, -16, 6.9524, 5e-07) + TolVt(-8, -8, 6.9524, 5e-07) + TolVt(-16, -8, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=686 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-12, -16, 3.4762) + $begin 'FcTolVts' + TolVt(-8, -16, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -16, 0, 5e-07) + TolVt(-8, -16, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=687 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-16, -12, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -8, 6.9524, 5e-07) + TolVt(-16, -8, 0, 5e-07) + TolVt(-16, -16, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=688 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-12, -8, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -8, 6.9524, 5e-07) + TolVt(-8, -8, 6.9524, 5e-07) + TolVt(-8, -8, 0, 5e-07) + TolVt(-16, -8, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=689 + $begin 'FaceData' + ParentObjectID=683 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-8, -12, 3.4762) + $begin 'FcTolVts' + TolVt(-8, -8, 0, 5e-07) + TolVt(-8, -8, 6.9524, 5e-07) + TolVt(-8, -16, 6.9524, 5e-07) + TolVt(-8, -16, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=795 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-20, -20, 6.9524) + $begin 'FcTolVts' + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-24, -16, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=797 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -24, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=798 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-24, -20, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -16, 6.9524, 5e-07) + TolVt(-24, -16, -4.33680868994202e-16, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=799 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -16, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -16, 6.9524, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -16, -4.33680868994202e-16, 5e-07) + TolVt(-24, -16, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=800 + $begin 'FaceData' + ParentObjectID=794 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-16, -20, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -16, -4.33680868994202e-16, 5e-07) + TolVt(-16, -16, 6.9524, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=896 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-20, -28, 6.9524) + $begin 'FcTolVts' + TolVt(-16, -32, 6.9524, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -32, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=898 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -32, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -32, 6.9524, 5e-07) + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -32, -4.33680868994202e-16, 5e-07) + TolVt(-16, -32, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=899 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-24, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + TolVt(-24, -32, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=900 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-20, -24, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=901 + $begin 'FaceData' + ParentObjectID=895 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-16, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-16, -24, -4.33680868994202e-16, 5e-07) + TolVt(-16, -24, 6.9524, 5e-07) + TolVt(-16, -32, 6.9524, 5e-07) + TolVt(-16, -32, -4.33680868994202e-16, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1030 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(-28, -28, 6.9524) + $begin 'FcTolVts' + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-32, -24, 6.9524, 5e-07) + TolVt(-32, -32, 6.9524, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1032 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-28, -32, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-32, -32, 6.9524, 5e-07) + TolVt(-32, -32, 0, 5e-07) + TolVt(-24, -32, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1033 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-32, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-32, -32, 6.9524, 5e-07) + TolVt(-32, -24, 6.9524, 5e-07) + TolVt(-32, -24, 0, 5e-07) + TolVt(-32, -32, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1034 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-28, -24, 3.4762) + $begin 'FcTolVts' + TolVt(-32, -24, 6.9524, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -24, 0, 5e-07) + TolVt(-32, -24, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=1035 + $begin 'FaceData' + ParentObjectID=1029 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.6192 + FcUVMid(-24, -28, 3.4762) + $begin 'FcTolVts' + TolVt(-24, -24, 0, 5e-07) + TolVt(-24, -24, 6.9524, 5e-07) + TolVt(-24, -32, 6.9524, 5e-07) + TolVt(-24, -32, 0, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=676 + $begin 'EdgeData' + ParentObjectID=673 + ParentFaces[1: 674] + $begin 'EdgeGeomTopol' + EdgeFaces(674) + $begin 'EdTolVts' + TolVt(-11.832, -8.305, 0.1524, 5e-07) + TolVt(-12.168, -8.305, 0.1524, 5e-07) + $end 'EdTolVts' + EdgeMidPoint(-12, -8.305, 0.1524) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=678 + $begin 'EdgeData' + ParentObjectID=673 + ParentFaces[1: 674] + $begin 'EdgeGeomTopol' + EdgeFaces(674) + $begin 'EdTolVts' + TolVt(-11.832, -8.305, -6.17221986770266e-17, 5e-07) + TolVt(-12.168, -8.305, 0, 5e-07) + $end 'EdTolVts' + EdgeMidPoint(-12, -8.305, -3.08610993385133e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=704 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 692, 691, 700] + TolVt(-16, -8, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=705 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 693, 692, 698] + TolVt(-16, -16, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=708 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 698, 696, 695] + TolVt(-16, -16, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=709 + $begin 'VertexData' + ParentObjectID=683 + ParentEdges[3: 700, 697, 696] + TolVt(-16, -8, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=815 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 803, 802, 811] + TolVt(-24, -16, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=816 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 804, 803, 809] + TolVt(-24, -24, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=819 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 809, 807, 806] + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=820 + $begin 'VertexData' + ParentObjectID=794 + ParentEdges[3: 811, 808, 807] + TolVt(-24, -16, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=916 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 904, 903, 912] + TolVt(-24, -24, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=917 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 905, 904, 910] + TolVt(-24, -32, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=920 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 910, 908, 907] + TolVt(-24, -32, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=921 + $begin 'VertexData' + ParentObjectID=895 + ParentEdges[3: 912, 909, 908] + TolVt(-24, -24, -4.33680868994202e-16, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1050 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1038, 1037, 1046] + TolVt(-32, -24, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1051 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1039, 1038, 1044] + TolVt(-32, -32, 6.9524, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1054 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1044, 1042, 1041] + TolVt(-32, -32, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=1055 + $begin 'VertexData' + ParentObjectID=1029 + ParentEdges[3: 1046, 1043, 1042] + TolVt(-32, -24, 0, 5e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + GroupByMaterial=true + GroupSheetByMaterial=true + GroupCompByDefID=true + DoNotOrganizeUnderGroup=false + DoNotOrganizeUnderComponent=false + OrganizeLightweight=false + ShowGroup=true + $begin 'LastUserInputs' + $end 'LastUserInputs' + $end 'ModelSetup' + $begin '3DComponent' + $begin 'ComponentDefinition' + ID=599 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '599' + '3'=19 + $end '599' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $begin '1' + ID=3 + BoundType='Lumped Port' + IsComponent=false + Faces(105) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=97 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='2.16840434497101e-17' + YPosition='3.695' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=99 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='0' + YPosition='3.695' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '1' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '599' + '0'=20 + '1'=21 + '9'=22 + '10'=23 + '11'=24 + $end '599' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'antennaMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(46) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=9 + BoundType='Lattice Pair' + IsComponent=false + Faces(237, 239) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + ParentIDs(244, 243, 249) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=259 + ParentIDs(249, 247, 246) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=10 + BoundType='Lattice Pair' + IsComponent=false + Faces(238, 240) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=255 + ParentIDs(243, 242, 251) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=260 + ParentIDs(251, 248, 247) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $begin 'Rad1' + ID=11 + BoundType='Radiation' + IsComponent=false + Faces(235) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '599' + '6'=610 + '34'=637 + '46'=647 + '95'=673 + '234'=683 + '267'=710 + $end '599' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel', 95, '22cel', 234, '22cel', 267, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '599' + $end '599' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '599' + $end '599' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '599' + $end '599' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '599' + $end '599' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(599, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '599' + $end '599' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '599' + $end '599' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=737 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '737' + $end '737' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '737' + '1'=25 + '5'=26 + '6'=27 + '7'=28 + '8'=29 + $end '737' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Antenna' + ID=5 + BoundType='Perfect E' + IsComponent=false + Objects(238) + ParentBndID=-1 + InfGroundPlane=false + $end 'Antenna' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '737' + '6'=747 + '34'=774 + '238'=784 + '250'=794 + '278'=821 + $end '737' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 238, '22cel', 250, '22cel', 278, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '737' + $end '737' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '737' + $end '737' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '737' + $end '737' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '737' + $end '737' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(737, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '737' + $end '737' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '737' + $end '737' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=848 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '848' + $end '848' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '848' + '1'=30 + '6'=31 + '7'=32 + '8'=33 + $end '848' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '848' + '6'=858 + '34'=885 + '250'=895 + '361'=922 + '417'=949 + $end '848' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '848' + $end '848' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '848' + $end '848' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '848' + $end '848' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '848' + $end '848' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(848, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '848' + $end '848' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '848' + $end '848' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=982 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '982' + $end '982' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '982' + '1'=34 + '6'=35 + '7'=36 + '8'=37 + $end '982' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=-1 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '982' + '6'=992 + '34'=1019 + '250'=1029 + '361'=1056 + '417'=1107 + $end '982' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '982' + $end '982' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $begin 'DCThickness' + $begin 'DCThicknessDesc' + $end 'DCThicknessDesc' + $begin 'DCThicknessIDMap' + $begin '982' + $end '982' + $end 'DCThicknessIDMap' + $begin 'DCThicknessData' + $end 'DCThicknessData' + $begin 'DCThicknessInstData' + $end 'DCThicknessInstData' + $end 'DCThickness' + $begin 'IE Regions' + $begin 'IE RegionsDesc' + $end 'IE RegionsDesc' + $begin 'IE RegionsIDMap' + $begin '982' + $end '982' + $end 'IE RegionsIDMap' + $begin 'IE RegionsData' + $end 'IE RegionsData' + $begin 'IE RegionsInstData' + $end 'IE RegionsInstData' + $end 'IE Regions' + $begin 'Component Meshing' + $begin 'Component MeshingDesc' + Type='Volume' + $end 'Component MeshingDesc' + $begin 'Component MeshingIDMap' + $begin '982' + $end '982' + $end 'Component MeshingIDMap' + $begin 'Component MeshingData' + $end 'Component MeshingData' + $begin 'Component MeshingInstData' + DoMeshAssembly(982, true) + $begin 'MeshSetting' + $end 'MeshSetting' + MeshAssemblyBoundingVolumePadding() + PriorityComponentInstances[0:] + $end 'Component MeshingInstData' + $end 'Component Meshing' + $begin 'Circuit Elements' + $begin 'Circuit ElementsDesc' + $end 'Circuit ElementsDesc' + $begin 'Circuit ElementsIDMap' + $begin '982' + $end '982' + $end 'Circuit ElementsIDMap' + $begin 'Circuit ElementsData' + $end 'Circuit ElementsData' + $begin 'Circuit ElementsInstData' + $end 'Circuit ElementsInstData' + $end 'Circuit Elements' + $begin 'PMLGroups' + $begin 'PMLGroupsDesc' + $end 'PMLGroupsDesc' + $begin 'PMLGroupsIDMap' + $begin '982' + $end '982' + $end 'PMLGroupsIDMap' + $begin 'PMLGroupsData' + $end 'PMLGroupsData' + $begin 'PMLGroupsInstData' + $end 'PMLGroupsInstData' + $end 'PMLGroups' + $end 'ComponentDefinition' + $begin 'NativeComponentVisualization' + $end 'NativeComponentVisualization' + $end '3DComponent' + $begin 'BoundarySetup' + $begin 'GlobalBoundData' + PortImpedance='1' + GlobalMaterialEnv='vacuum' + UseTotalFieldFormulation=false + HybridRegionCouplingType='TwoWayCoupled' + 'Current Source Conformance'='Auto' + 'Thin Sources'=false + $end 'GlobalBoundData' + $begin 'Boundaries' + NextUniqueID=38 + MoveBackwards=false + $begin '02_Patch1_antennaMetal' + ID=20 + BoundType='Perfect E' + IsComponent=true + Objects(647) + ParentBndID=-1 + InfGroundPlane=false + $end '02_Patch1_antennaMetal' + $begin '02_Patch1_groundMetal' + ID=21 + BoundType='Perfect E' + IsComponent=true + Objects(637) + ParentBndID=-1 + InfGroundPlane=false + $end '02_Patch1_groundMetal' + $begin '02_Patch1_LatticePair1' + ID=22 + BoundType='Lattice Pair' + IsComponent=true + Faces(686, 688) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=705 + ParentIDs(693, 692, 698) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-16' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=708 + ParentIDs(698, 696, 695) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-16' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '02_Patch1_LatticePair1' + $begin '02_Patch1_LatticePair2' + ID=23 + BoundType='Lattice Pair' + IsComponent=true + Faces(687, 689) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=704 + ParentIDs(692, 691, 700) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-8' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=709 + ParentIDs(700, 697, 696) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-16' + YPosition='-8' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '02_Patch1_LatticePair2' + $begin '02_Patch1_Rad1' + ID=24 + BoundType='Radiation' + IsComponent=true + Faces(684) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end '02_Patch1_Rad1' + $begin '01_Metal_Only1_groundMetal' + ID=25 + BoundType='Perfect E' + IsComponent=true + Objects(774) + ParentBndID=-1 + InfGroundPlane=false + $end '01_Metal_Only1_groundMetal' + $begin '01_Metal_Only1_Antenna' + ID=26 + BoundType='Perfect E' + IsComponent=true + Objects(784) + ParentBndID=-1 + InfGroundPlane=false + $end '01_Metal_Only1_Antenna' + $begin '01_Metal_Only1_Rad1' + ID=27 + BoundType='Radiation' + IsComponent=true + Faces(795) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end '01_Metal_Only1_Rad1' + $begin '01_Metal_Only1_LatticePair1' + ID=28 + BoundType='Lattice Pair' + IsComponent=true + Faces(797, 799) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=816 + ParentIDs(804, 803, 809) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=819 + ParentIDs(809, 807, 806) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '01_Metal_Only1_LatticePair1' + $begin '01_Metal_Only1_LatticePair2' + ID=29 + BoundType='Lattice Pair' + IsComponent=true + Faces(798, 800) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=815 + ParentIDs(803, 802, 811) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-16' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=820 + ParentIDs(811, 808, 807) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-16' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '01_Metal_Only1_LatticePair2' + $begin '03_Radome_Side1_groundMetal' + ID=30 + BoundType='Perfect E' + IsComponent=true + Objects(885) + ParentBndID=-1 + InfGroundPlane=false + $end '03_Radome_Side1_groundMetal' + $begin '03_Radome_Side1_Rad1' + ID=31 + BoundType='Radiation' + IsComponent=true + Faces(896) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end '03_Radome_Side1_Rad1' + $begin '03_Radome_Side1_LatticePair1' + ID=32 + BoundType='Lattice Pair' + IsComponent=true + Faces(898, 900) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=917 + ParentIDs(905, 904, 910) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-32' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=920 + ParentIDs(910, 908, 907) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-32' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '03_Radome_Side1_LatticePair1' + $begin '03_Radome_Side1_LatticePair2' + ID=33 + BoundType='Lattice Pair' + IsComponent=true + Faces(899, 901) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=916 + ParentIDs(904, 903, 912) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=921 + ParentIDs(912, 909, 908) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-24' + YPosition='-24' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end '03_Radome_Side1_LatticePair2' + $begin 'Radome_Corner1_groundMetal' + ID=34 + BoundType='Perfect E' + IsComponent=true + Objects(1019) + ParentBndID=-1 + InfGroundPlane=false + $end 'Radome_Corner1_groundMetal' + $begin 'Radome_Corner1_Rad1' + ID=35 + BoundType='Radiation' + IsComponent=true + Faces(1030) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Radome_Corner1_Rad1' + $begin 'Radome_Corner1_LatticePair1' + ID=36 + BoundType='Lattice Pair' + IsComponent=true + Faces(1032, 1034) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1051 + ParentIDs(1039, 1038, 1044) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-32' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1054 + ParentIDs(1044, 1042, 1041) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-32' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Radome_Corner1_LatticePair1' + $begin 'Radome_Corner1_LatticePair2' + ID=37 + BoundType='Lattice Pair' + IsComponent=true + Faces(1033, 1035) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1050 + ParentIDs(1038, 1037, 1046) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-24' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=1055 + ParentIDs(1046, 1043, 1042) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-32' + YPosition='-24' + ZPosition='0' + $end 'GeometryPosition' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Radome_Corner1_LatticePair2' + $begin '02_Patch1_1' + ID=19 + BoundType='Lumped Port' + IsComponent=true + Faces(674) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=676 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-12' + YPosition='-8.305' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=678 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='-12' + YPosition='-8.305' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '02_Patch1_1' + $end 'Boundaries' + $begin 'ProductSpecificData' + $begin 'SBRWedgeSettings' + MaxWedgeAngle='135deg' + IncludeSheetEdges=true + ApplySourceDistFilter=false + ApplyBoxFilter=false + $end 'SBRWedgeSettings' + $begin 'SBRTxRxSettings' + $end 'SBRTxRxSettings' + $begin 'SBRCreepingWaveSettings' + CWRaySampleDensity=10 + CWRayCutoffDb=40 + CWCurvatureSensitivity=50 + CWAngularRayInterval=2 + $end 'SBRCreepingWaveSettings' + $begin 'SBRBlockageSettings' + $end 'SBRBlockageSettings' + $begin 'PMLData' + $begin 'PMLGroups' + $end 'PMLGroups' + $end 'PMLData' + $begin 'SortOrder' + Port[1: -1] + Terminal[1: -1] + $end 'SortOrder' + 'Phase Center Mode'='PhaseCenterPerPort' + $begin 'Phase Center Per Port' + $begin '02_Patch1_1' + Port=19 + 'Coordinate System'=1 + $end '02_Patch1_1' + $end 'Phase Center Per Port' + $end 'ProductSpecificData' + $end 'BoundarySetup' + $begin 'ArrayDefinition' + NextUniqueID=0 + MoveBackwards=false + $begin 'ArrayObject' + ID=0 + Type='3D Component' + Name='A1' + UseAirObjects=true + RowPrimaryBnd=28 + ColumnPrimaryBnd=29 + RowDimension=8 + ColumnDimension=8 + Visible=true + ShowCellNumber=true + RenderType=0 + Padding=0 + Colors() + ComponentMap('4'=982, '3'=848, '2'=737, '1'=599) + $begin 'Cells' + m=8 + n=8 + $begin 'r0' + c(4) + c(3) + c(3) + c(3) + c(3) + c(3) + c(3) + c(4) + $end 'r0' + $begin 'r1' + c(3) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(3) + $end 'r1' + $begin 'r2' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r2' + $begin 'r3' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r3' + $begin 'r4' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r4' + $begin 'r5' + c(3) + c(2) + c(1) + c(1) + c(1) + c(1) + c(2) + c(3) + $end 'r5' + $begin 'r6' + c(3) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(3) + $end 'r6' + $begin 'r7' + c(4) + c(3) + c(3) + c(3) + c(3) + c(3) + c(3) + c(4) + $end 'r7' + $end 'Cells' + $begin 'Active' + m=8 + n=8 + $begin 'r0' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(false) + $end 'r0' + $begin 'r1' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r1' + $begin 'r2' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r2' + $begin 'r3' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r3' + $begin 'r4' + c(true) + c(true) + c(false) + c(true) + c(false) + c(true) + c(true) + c(true) + $end 'r4' + $begin 'r5' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r5' + $begin 'r6' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r6' + $begin 'r7' + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + c(true) + $end 'r7' + $end 'Active' + $begin 'Rotation' + m=8 + n=8 + $begin 'r0' + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r0' + $begin 'r1' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r1' + $begin 'r2' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r2' + $begin 'r3' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r3' + $begin 'r4' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r4' + $begin 'r5' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r5' + $begin 'r6' + c(3) + c(0) + c(0) + c(0) + c(0) + c(0) + c(0) + c(1) + $end 'r6' + $begin 'r7' + c(3) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + c(2) + $end 'r7' + $end 'Rotation' + $begin 'PostProcessingCells' + OneCell(599, '4', '3') + OneCell(737, '2', '6') + OneCell(848, '3', '1') + OneCell(982, '1', '1') + $end 'PostProcessingCells' + ReferenceCSID=1 + $end 'ArrayObject' + $begin 'SizingVariable' + EnableSizingVariable=false + UseAbove=true + ForAVector='' + ForBVector='' + $end 'SizingVariable' + $end 'ArrayDefinition' + $begin 'MeshSetup' + $begin 'MeshSettings' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshSettings' + $begin 'MeshOperations' + NextUniqueID=0 + MoveBackwards=false + $end 'MeshOperations' + $end 'MeshSetup' + $begin 'AnalysisSetup' + $begin 'HfssGlobalData' + NextUniqueID=0 + MoveBackwards=false + $end 'HfssGlobalData' + $begin 'SolveSetups' + NextUniqueID=1 + MoveBackwards=false + $begin 'Setup1' + ID=0 + SetupType='HfssDriven' + SolveType='Single' + Frequency='1.8GHz' + MaxDeltaS=0.02 + UseMatrixConv=false + MaximumPasses=20 + MinimumPasses=1 + MinimumConvergedPasses=1 + PercentRefinement=30 + SkipArraySolveDuringAdaptivePasses=true + IsEnabled=true + $begin 'MeshLink' + ImportMesh=false + $end 'MeshLink' + BasisOrder=1 + DoLambdaRefine=true + DoMaterialLambda=true + SetLambdaTarget=false + Target=0.3333 + UseMaxTetIncrease=false + PortAccuracy=2 + UseABCOnPort=false + SetPortMinMaxTri=false + PortMinTri=100 + PortMaxTri=500 + DrivenSolverType='Direct Solver' + EnhancedLowFreqAccuracy=false + SaveRadFieldsOnly=true + SaveAnyFields=true + IESolverType='Auto' + LambdaTargetForIESolver=0.15 + UseDefaultLambdaTgtForIESolver=true + 'IE Solver Accuracy'='Balanced' + InfiniteSphereSetup=-1 + MaxPass=10 + MinPass=1 + MinConvPass=1 + PerError=1 + PerRefine=30 + $begin 'Sweeps' + NextUniqueID=2 + MoveBackwards=false + $begin 'Discrete_Sweep' + ID=0 + IsEnabled=true + RangeType='LinearCount' + RangeStart='0.9GHz' + RangeEnd='2.7GHz' + RangeCount=3 + Type='Discrete' + SaveFields=true + SaveRadFields=true + $end 'Discrete_Sweep' + $begin 'Interp_Sweep' + ID=1 + IsEnabled=true + RangeType='LinearCount' + RangeStart='0.9GHz' + RangeEnd='2.7GHz' + RangeCount=101 + Type='Interpolating' + SaveFields=false + SaveRadFields=false + InterpTolerance=0.5 + InterpMaxSolns=250 + InterpMinSolns=0 + InterpMinSubranges=1 + InterpUseS=true + InterpUsePortImped=false + InterpUsePropConst=true + UseDerivativeConvergence=false + InterpDerivTolerance=0.2 + UseFullBasis=true + EnforcePassivity=true + PassivityErrorTolerance=0.0001 + SMatrixOnlySolveMode='Auto' + $end 'Interp_Sweep' + $end 'Sweeps' + $end 'Setup1' + $end 'SolveSetups' + $end 'AnalysisSetup' + $begin 'Optimetrics' + $begin 'OptimetricsSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'OptimetricsSetups' + $end 'Optimetrics' + $begin 'Solutions' + FieldType='NoIncidentWave' + IncludePortPostProcessing=true + UseSpecifiedIncidentPower=false + SourceEntry(ID=19, Index=0, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=1, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=2, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=3, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (2*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=4, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=5, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=6, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=7, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (3*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=8, Terminal=false, Terminated=false, Magnitude='0W', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=9, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=10, Terminal=false, Terminated=false, Magnitude='0W', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=11, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (4*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=12, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 2*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=13, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 3*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=14, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 4*ScanPhaseShiftB)') + SourceEntry(ID=19, Index=15, Terminal=false, Terminated=false, Magnitude='ScanMag1*1', Phase='ScanPhase1 + (5*ScanPhaseShiftA + 5*ScanPhaseShiftB)') + $begin 'Contexts' + NextUniqueID=1 + MoveBackwards=false + $end 'Contexts' + $end 'Solutions' + $begin 'PortFieldDisplay' + $begin 'PortFieldDisplay' + ScaleFactor=5 + $end 'PortFieldDisplay' + $end 'PortFieldDisplay' + $begin 'FieldsReporter' + $begin 'FieldsCalculator' + Line_Discretization=1000 + $begin 'SurfaceMeshSummary' + SolutionName='' + Variation='' + $begin 'MeshRowItems' + $end 'MeshRowItems' + $end 'SurfaceMeshSummary' + $end 'FieldsCalculator' + $begin 'PlotDefaults' + Default_SolutionId=135 + Default_PlotFolder='Automatic' + $end 'PlotDefaults' + $begin 'FieldsPlotManagerID' + NextUniqueID=0 + MoveBackwards=false + NumQuantityType=0 + NumPlots=0 + $end 'FieldsPlotManagerID' + $begin 'Report3dInGeomWnd' + Report3dNum=1 + $begin 'Report3dPlot_1' + ReportID=301 + Transparency=0.400000005960464 + ScaleFactor=0.25 + Visible=false + CoordSys=-1 + $end 'Report3dPlot_1' + $end 'Report3dInGeomWnd' + $begin 'Report2dInGeomWnd' + Report2dNum=1 + $begin 'Report2dPlot_1' + DisplayType=3 + '3DOverlay'=true + ReportID=1 + Transparency=0.899999976158142 + ScaleFactor=0.200000002980232 + Visible=false + CoordSys=-1 + PlaneNormalValues(-0, 1, 0) + $end 'Report2dPlot_1' + $end 'Report2dInGeomWnd' + $begin 'AntennaParametersInGeomWnd' + AntennaParametersNum=0 + $end 'AntennaParametersInGeomWnd' + AntennaParametersPlotTablesOrder() + $end 'FieldsReporter' + $begin 'RadField' + $begin 'FarFieldSetups' + NextUniqueID=45 + MoveBackwards=false + $begin 'Infinite Sphere1' + Type='Infinite Sphere' + ID=1 + VersionID=44 + UseCustomRadiationSurface=false + CSDefinition='Theta-Phi' + Polarization='Linear' + ThetaStart='-180deg' + ThetaStop='180deg' + ThetaStep='2deg' + PhiStart='0deg' + PhiStop='360deg' + PhiStep='2deg' + UseLocalCS=false + $end 'Infinite Sphere1' + $end 'FarFieldSetups' + $begin 'ArraySetup' + UseOption='NoArray' + $begin 'RegularArray' + NumUCells='10' + NumVCells='10' + CellUDist='10cm' + CellVDist='10cm' + UDirnX='1' + UDirnY='0' + UDirnZ='0' + VDirnX='0' + VDirnY='1' + VDirnZ='0' + FirstCellPosX='0cm' + FirstCellPosY='0cm' + FirstCellPosZ='0cm' + Behavior='UseSlaveSettings' + ScanAnglePhi='45deg' + ScanAngleTheta='45deg' + UDirnPhaseShift='0deg' + VDirnPhaseShift='0deg' + $end 'RegularArray' + $begin 'CustomArray' + NumCells=0 + $begin 'Cell' + $end 'Cell' + $end 'CustomArray' + $begin 'ParametricArray' + DesignFrequency='1GHz' + LayoutType=1 + CenterCellX='0mm' + CenterCellY='0mm' + CenterCellZ='0mm' + SpecifyDesignInWavelength=true + WidthSpacing='14.9896229mm' + WidthSpacingInWavelength='0.05' + Width='119.9169832mm' + WidthInWavelength='0.4' + LengthSpacing='14.9896229mm' + LengthSpacingInWavelength='0.05' + Length='89.9377374mm' + LengthInWavelength='0.3' + SymmetryType=0 + StaggerAngle='0deg' + StaggerType=0 + UDirnX='1' + UDirnY='0' + UDirnZ='0' + VDirnX='0' + VDirnY='1' + VDirnZ='0' + WeightType=3 + EdgeTaperX_db='-200' + CosineExp='1' + DifferentialType=0 + Behavior='UseScanAngle' + ScanAnglePhi='45deg' + ScanAngleTheta='45deg' + UDirnPhaseShift='0deg' + VDirnPhaseShift='0deg' + $end 'ParametricArray' + $end 'ArraySetup' + $begin 'NearFieldSetups' + NextUniqueID=45 + MoveBackwards=false + $end 'NearFieldSetups' + RadFieldComputationVersion=1.8 + RadfieldHeaderFile='RAD5AB449308164676611131.tmp' + RadPowerMethod=0 + $end 'RadField' + $begin 'SolutionManager' + $begin 'SimSetup' + TypeName='BaseSetup' + ID=133 + Name='Setup1' + $begin 'Solution' + ID=134 + Name='AdaptivePass' + $begin 'SimDataExtractor' + $begin 'Sweeps' + $begin 'Sweep' + Variable='Pass' + Column='1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20' + Units='' + $end 'Sweep' + $begin 'Sweep' + Variable='Freq' + Column='1.8GHz' + Units='GHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=135 + Name='LastAdaptive' + $begin 'SimDataExtractor' + SimValue('GainTotal', 1, 90, true, SimValueID=611, 0, 0, 2, 0, false, false, 1, 1, 0, 1, 1, '', 0, 0) + $begin 'Sweeps' + $begin 'Sweep' + Variable='Freq' + Column='1.8GHz' + Units='GHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'Sweep' + Variable='subX' + Column='8cm' + Units='cm' + $end 'Sweep' + $begin 'Sweep' + Variable='subY' + Column='8cm' + Units='cm' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='ScanFrequency' + RegularSweep=1 + Units='Hz' + Minimum=1800000000 + Maximum=1800000000 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanAngleTheta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanAnglePhi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhaseShiftA' + RegularSweep=1 + Units='rad' + Minimum=-0 + Maximum=-0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhaseShiftB' + RegularSweep=1 + Units='rad' + Minimum=-0 + Maximum=-0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanMag1' + RegularSweep=1 + Units='W' + Minimum=1 + Maximum=1 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='ScanPhase1' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=0 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='CosinePower' + RegularSweep=1 + Units='' + Minimum=3 + Maximum=3 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='EdgeTaperLevel_dB' + RegularSweep=1 + Units='' + Minimum=-20 + Maximum=-20 + Increment=0 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=139 + Name='Discrete_Sweep' + $begin 'SimDataExtractor' + $begin 'Sweeps' + $begin 'Sweep' + Variable='Freq' + Column='0.9GHz;1.8GHz;2.7GHz' + Units='GHz' + $end 'Sweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $begin 'Solution' + ID=506 + Name='Interp_Sweep' + $begin 'SimDataExtractor' + $begin 'Sweeps' + $begin 'PostprocessSweep' + Variable='Freq' + Column='0.9GHz;0.918GHz;0.936GHz;0.954GHz;0.972GHz;0.99GHz;1.008GHz;1.026GHz;1.044GHz;1.062GHz;1.08GHz;1.098GHz;1.116GHz;1.134GHz;1.152GHz;1.17GHz;1.188GHz;1.206GHz;1.224GHz;1.242GHz;1.26GHz;1.278GHz;1.296GHz;1.314GHz;1.332GHz;1.35GHz;1.368GHz;1.386GHz;1.404GHz;1.422GHz;1.44GHz;1.458GHz;1.476GHz;1.494GHz;1.512GHz;1.53GHz;1.548GHz;1.566GHz;1.584GHz;1.602GHz;1.62GHz;1.638GHz;1.656GHz;1.674GHz;1.692GHz;1.71GHz;1.728GHz;1.746GHz;1.764GHz;1.782GHz;1.8GHz;1.818GHz;1.836GHz;1.854GHz;1.872GHz;1.89GHz;1.908GHz;1.926GHz;1.944GHz;1.962GHz;1.98GHz;1.998GHz;2.016GHz;2.034GHz;2.052GHz;2.07GHz;2.088GHz;2.106GHz;2.124GHz;2.142GHz;2.16GHz;2.178GHz;2.196GHz;2.214GHz;2.232GHz;2.25GHz;2.268GHz;2.286GHz;2.304GHz;2.322GHz;2.34GHz;2.358GHz;2.376GHz;2.394GHz;2.412GHz;2.43GHz;2.448GHz;2.466GHz;2.484GHz;2.502GHz;2.52GHz;2.538GHz;2.556GHz;2.574GHz;2.592GHz;2.61GHz;2.628GHz;2.646GHz;2.664GHz;2.682GHz;2.7GHz' + Units='GHz' + Minimum=900000000 + Maximum=2700000000 + Increment=2700000000 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='NormalizedDistance' + RegularSweep=1 + Units='' + Minimum=0 + Maximum=1 + Increment=0.01 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phi' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Theta' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $begin 'PostprocessSweep' + Variable='Phase' + RegularSweep=1 + Units='deg' + Minimum=0 + Maximum=6.28318530717959 + Increment=0.0872664625997165 + CreateIndexedSubsweepFlag=false + $end 'PostprocessSweep' + $end 'Sweeps' + IsPortOnly=false + $end 'SimDataExtractor' + $end 'Solution' + $end 'SimSetup' + $begin 'Version ID Map' + V=1039 + $begin 'Setup' + N='Setup1' + V=1039 + Soln(N='AdaptivePass', V=1039) + Soln(N='LastAdaptive', V=1039) + Soln(N='Discrete_Sweep', V=1039) + Soln(N='Interp_Sweep', V=1039) + $end 'Setup' + IQM=1040 + $end 'Version ID Map' + $begin 'ID Map' + $begin 'Setup' + N='Setup1' + I=133 + Soln(N='AdaptivePass', I=134) + Soln(N='LastAdaptive', I=135) + Soln(N='Discrete_Sweep', I=139) + Soln(N='Interp_Sweep', I=506) + $end 'Setup' + $end 'ID Map' + ValidationCacheHeader='' + $end 'SolutionManager' + $begin 'UserDefinedSolutionMgr' + NextUniqueID=1000000 + MoveBackwards=false + $end 'UserDefinedSolutionMgr' + $begin 'DatasetSolutionMgr' + NextUniqueID=2000000 + MoveBackwards=false + $end 'DatasetSolutionMgr' + Notes=$begin_cdata$ $end_cdata$ + $begin 'AnimationSetups' + $end 'AnimationSetups' + CacheHeaderFile='HDR6197466016986743998.tmp' + $end 'HFSSModel' + $begin 'DataInstances' + DesignEditor='TopLevel' + Refdes('0', 'U1') + $begin 'CompInstances' + $begin 'Compinst' + ID='0' + Status='Status' + CompName='Array' + GatesInUse() + $begin 'Properties' + TextProp('ID', 'SRID', '', '0') + $end 'Properties' + $begin 'Parameters' + MenuProp('CoSimulator', 'OHD', '', 'DefaultNetlist', 0) + ButtonProp('CosimDefinition', 'OHD', '', '', 'Edit', 40501, ButtonPropClientData()) + $end 'Parameters' + $end 'Compinst' + $end 'CompInstances' + $begin 'Instance' + DesignEditor='Array' + ID='0' + $begin 'HfssDesignInstance' + DesignInstanceID=1 + $begin 'WindowPosition' + $begin 'EditorWindow' + Circuit(Editor3d(View('View Orientation Gadget'=1, WindowPos(3, -1, -1, -11, -45, 564, 0, 1128, 659), OrientationMatrix(-3.16649675369263e-08, -0.081437736749649, 4.4703483581543e-08, 0, 0.0814376398921013, 2.98023223876953e-08, -1.44355007947183e-08, 0, -1.37370079755783e-08, -4.4703483581543e-08, 0.0814376622438431, 0, 1.11254405975342, -0.704558134078979, -5.05950880050659, 1, 0, -8.59931373596191, 9.22470283508301, -5.59401988983154, 4.66979217529297, -13.8738861083984, 23.0892066955566), Drawings[27: 'sub', 'Ground', 'antenna', 'port1', 'Box1', 'Box2', 'sub_1', 'Ground_1', 'antenna_1', 'Box1_1', 'Box2_1', 'sub_2', 'Ground_2', 'Box1_2', 'Box2_2', 'Box4', 'sub_3', 'Ground_3', 'Box1_3', 'Box2_3', 'Box4_1', '02_Patch1', '01_Metal_Only1', '03_Radome_Side1', 'Radome_Corner1', '', 'A1'], 'View Data'('Render Mode'=1, 'Show Ruler'=1, 'Coordinate Systems View Mode'=1, 'CS Triad View Mode'=0, 'Render Facets'=1, GridVisible=1, GridAutoAdjust=1, GridAutoExtents=1, GridType='Rect', GridStyle='Line', NumPixels=30, dXForGrid=5, dYForGrid=5, dZForGrid=5, dRForGrid=5, dThetaForGrid=10), ClipPlanes(ClipPlaneOptions(DisableWhenDrawingNewPlane=true, ForceOpqaueForUnclipped=false, ShowClipped=false, Transparency=0, HandleColor=16776960))))) + $end 'EditorWindow' + $end 'WindowPosition' + $begin 'ReportSetup' + $begin 'ReportManager' + $begin 'Reports' + $begin 'Gain Plot 1' + ReportID=1 + ReportName='Gain Plot 1' + $begin 'TraceDef' + TraceDefinitionType='TraceDefinition' + $begin 'DesignSolnDefn' + $begin 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + DesignID=0 + SolutionID=135 + $begin 'REPORT_TYPE_SIM_VALUE_CONTEXT' + ReportType=3 + SimValueContext(0, 0, 2, 0, false, false, 1, 1, 0, 1, 1, '', 0, 0) + $end 'REPORT_TYPE_SIM_VALUE_CONTEXT' + $end 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + $end 'DesignSolnDefn' + ID=0 + VersionID=844 + Name='dB(GainTotal)' + TieNameToExpr=true + $begin 'Components' + $begin 'TraceComponentDefinition' + Expr='Theta' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='dB(GainTotal)' + $end 'TraceComponentDefinition' + $end 'Components' + $begin 'ExtendedTraceInfo' + NumPoints=0 + TraceType=0 + Offset=0 + XLabel='' + SamplingPeriod='0' + SamplingPeriodOffset='0' + AutoDelay=true + DelayValue='0ps' + AutoCompCrossAmplitude=true + CrossingAmplitude='0mV' + YAxis=1 + AutoCompEyeMeasurementPoint=true + EyeMeasurementPoint='0ps' + EyePamLow() + EyePamVRef() + EyePamHigh() + EyePamNames() + EyePamStrictVRef=false + $end 'ExtendedTraceInfo' + $begin 'TraceFamiliesDisplayDefinition' + DisplayFamiliesType='DisplayAll' + $end 'TraceFamiliesDisplayDefinition' + $begin 'PointsetDefinition' + $begin 'SubsweepDefParamsContainer' + $begin '0' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Theta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '0' + $begin '1' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Phi' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(0) + ParameterType='DoubleParam' + Units='deg' + $end '1' + $begin '2' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Freq' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(1800000000) + ParameterType='DoubleParam' + Units='GHz' + $end '2' + $begin '3' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subX' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '3' + $begin '4' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subY' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '4' + $end 'SubsweepDefParamsContainer' + FamilyBlock() + $end 'PointsetDefinition' + DesignInstanceID=1 + $end 'TraceDef' + $end 'Gain Plot 1' + $begin 'Gain Plot 2' + ReportID=301 + ReportName='Gain Plot 2' + $begin 'TraceDef' + TraceDefinitionType='TraceDefinition' + $begin 'DesignSolnDefn' + $begin 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + DesignID=0 + SolutionID=135 + $begin 'REPORT_TYPE_SIM_VALUE_CONTEXT' + ReportType=3 + SimValueContext(0, 0, 2, 0, false, false, 1, 1, 0, 1, 1, '', 0, 0) + $end 'REPORT_TYPE_SIM_VALUE_CONTEXT' + $end 'DESIGN_SOLUTION_SIM_VALUE_CONTEXT' + $end 'DesignSolnDefn' + ID=300 + VersionID=845 + Name='dB(GainTotal)' + TieNameToExpr=true + $begin 'Components' + $begin 'TraceComponentDefinition' + Expr='Phi' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='Theta' + $end 'TraceComponentDefinition' + $begin 'TraceComponentDefinition' + Expr='dB(GainTotal)' + $end 'TraceComponentDefinition' + $end 'Components' + $begin 'ExtendedTraceInfo' + NumPoints=0 + TraceType=0 + Offset=0 + XLabel='' + SamplingPeriod='0' + SamplingPeriodOffset='0' + AutoDelay=true + DelayValue='0ps' + AutoCompCrossAmplitude=true + CrossingAmplitude='0mV' + YAxis=1 + AutoCompEyeMeasurementPoint=true + EyeMeasurementPoint='0ps' + EyePamLow() + EyePamVRef() + EyePamHigh() + EyePamNames() + EyePamStrictVRef=false + $end 'ExtendedTraceInfo' + $begin 'TraceFamiliesDisplayDefinition' + DisplayFamiliesType='DisplayAll' + $end 'TraceFamiliesDisplayDefinition' + $begin 'PointsetDefinition' + $begin 'SubsweepDefParamsContainer' + $begin '0' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Phi' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '0' + $begin '1' + SubsweepType='Regular' + SubsweepChoiceType='All' + SweepVariableName='Theta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '1' + $begin '2' + SubsweepType='Regular' + SubsweepChoiceType='Selected' + SweepVariableName='Freq' + AllowSelecteValues=true + SweepHasConsistentValues=true + ColumnValues(1800000000) + ParameterType='DoubleParam' + Units='GHz' + $end '2' + $begin '3' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subX' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '3' + $begin '4' + SubsweepType='Regular' + SubsweepChoiceType='Nominal' + SweepVariableName='subY' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '4' + $begin '5' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanFrequency' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '5' + $begin '6' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanAngleTheta' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '6' + $begin '7' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanAnglePhi' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '7' + $begin '8' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanMag1' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '8' + $begin '9' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='ScanPhase1' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '9' + $begin '10' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='CosinePower' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '10' + $begin '11' + SubsweepType='Specifiable' + SubsweepChoiceType='Nominal' + SweepVariableName='EdgeTaperLevel_dB' + AllowSelecteValues=true + SweepHasConsistentValues=true + $end '11' + $end 'SubsweepDefParamsContainer' + FamilyBlock() + $end 'PointsetDefinition' + DesignInstanceID=1 + $end 'TraceDef' + $end 'Gain Plot 2' + $end 'Reports' + NextUniqueID=302 + MoveBackwards=false + $begin 'NextVersID' + NextUniqueID=846 + MoveBackwards=false + $end 'NextVersID' + $end 'ReportManager' + $begin 'Reports' + $begin 'Gain Plot 1' + ReportID=1 + $begin 'Report2D' + name='Gain Plot 1' + ReportID=1 + ReportType=3 + DisplayType=3 + Title='' + Domain='' + $begin 'Migration' + MigVersion(1, 0, '2021R1 mig(1.0)') + $end 'Migration' + $begin 'Graph2DsV2' + $begin 'Graph2D' + TraceDefID=0 + Type='Continuous' + Axis='Y1' + $end 'Graph2D' + $end 'Graph2DsV2' + $begin 'PlotDisplayDataManager' + NextUniqueID=15 + MoveBackwards=false + $begin 'PlotHeaderDataSource' + CompanyName='' + ShowDesignName=true + ProjectFileName='' + $end 'PlotHeaderDataSource' + StockNameIDMap(CircleAxis=4, Header=0, Legend=2, PolarGrid=6) + $begin 'SourceList' + $end 'SourceList' + Version='17.0:20150830' + $begin 'DocAttributes' + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=6 + $begin 'PolarRhoAxisAttribute' + DecimalFieldWidth=3 + DecimalFieldPrecision=2 + ManualTitle='' + AxisColor(R=0, G=0, B=0) + MinScale=-40 + MaxScale=20 + TickSpacing=12 + ManualUnits=false + Units='' + AxisScale='Linear' + NumberFormat='Auto' + $begin 'TextFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TextFont' + InfMapMode=false + InfMapValue=1.79769313486232e+306 + AutoRangeMin=true + AutoRangeMax=true + AutoSpacing=true + kNumMinorDivisions=5 + ShowAxisTitle=true + ShowAxisUnits=true + vwm='FullWnd' + viewWndWd=#nan + ActivateMargins=true + MarginPercent=0 + NeverCollapse=false + AxisStripes=true + $end 'PolarRhoAxisAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + $end 'DocAttributes' + $begin 'DisplayTypeAttributes' + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=10 + $begin 'CurveCartesianAttribute' + YAxis='Y1' + $end 'CurveCartesianAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=12 + $begin 'CurveCartesianAttribute' + YAxis='Y1' + $end 'CurveCartesianAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=10 + $begin 'CurveRenderAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=3 + LineColor(R=237, G=28, B=36) + $end 'LineRenderAttribute' + TraceType='Continuous' + SymbolType='HollowHorizontalLeftTriangle' + SymbolColor(R=155, G=93, B=112) + ShowSymbols=false + SymbolFrequency=15 + ShowArrows=false + $end 'CurveRenderAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=12 + $begin 'CurveRenderAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=3 + LineColor(R=0, G=255, B=0) + $end 'LineRenderAttribute' + TraceType='Continuous' + SymbolType='Circle' + SymbolColor(R=128, G=158, B=173) + ShowSymbols=false + SymbolFrequency=15 + ShowArrows=false + $end 'CurveRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=0 + $begin 'HeaderRenderAttribute' + $begin 'TitleFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=14 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TitleFont' + $begin 'SubtitleFont' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=10 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'SubtitleFont' + $end 'HeaderRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=2 + $begin 'LegendRenderAttribute' + $begin 'LegendTableAttrib' + $begin 'TableRenderAttribute' + $begin 'TableFontAttrib' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=8 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TableFontAttrib' + $begin 'TableTitleFontAttrib' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=8 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $end 'TableTitleFontAttrib' + TableBorderLineWidth=1 + TableBorderLineColor=0 + TableGridLineWidth=1 + TableGridLineColor=12632256 + TableBackgroundColor=16777215 + TableHeaderBackgroundColor=14408667 + $end 'TableRenderAttribute' + $end 'LegendTableAttrib' + LegendName='' + ShowTraceName=true + ShowSolutionName=true + ShowVariationKey=true + FileNameDisplayModeInVariationKey=0 + DockMode='None' + $end 'LegendRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=4 + $begin 'PolarCircleAxisAttribute' + CircDecimalFieldWidth=3 + CircDecimalFieldPrecision=2 + CircleAxisMinorDivCount=6 + CircleAxisMajorDivCount=12 + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=0, G=0, B=0) + $end 'LineRenderAttribute' + $end 'PolarCircleAxisAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=6 + $begin 'PolarGridAttribute' + PlotType=3 + ShowGridLabels=true + $begin 'CircleGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=200, G=200, B=200) + $end 'LineRenderAttribute' + $end 'CircleGrid' + $begin 'AngleGrid' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=220, G=220, B=220) + $end 'LineRenderAttribute' + $end 'AngleGrid' + $begin 'ImpedanceGrid' + $begin 'ImpedanceRGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=200, G=200, B=200) + $end 'LineRenderAttribute' + $end 'ImpedanceRGrid' + $begin 'ImpedanceXGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=220, G=220, B=220) + $end 'LineRenderAttribute' + $end 'ImpedanceXGrid' + $end 'ImpedanceGrid' + $begin 'AdimittanceGrid' + $begin 'AdimittanceGGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=200, G=200, B=200) + $end 'LineRenderAttribute' + $end 'AdimittanceGGrid' + $begin 'AdimittanceBGrid' + $begin 'FontAttribute' + $begin 'Font' + HeightInPts=9 + Width=0 + Escapement=0 + Orientation=0 + Weight=400 + Italic=0 + Underline=0 + StrikeOut=0 + CharSet=0 + OutPrecision=7 + ClipPrecision=48 + Quality=6 + PitchAndFamily=0 + FaceName='Arial' + $end 'Font' + Color(R=0, G=0, B=0) + $end 'FontAttribute' + $begin 'LineRenderAttribute' + LineStyle='Solid' + LineWidth=1 + LineColor(R=220, G=220, B=220) + $end 'LineRenderAttribute' + $end 'AdimittanceBGrid' + $end 'AdimittanceGrid' + $end 'PolarGridAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=-1 + $begin 'PolarPlotRenderAttribute' + ShowCircleGrid=true + ShowAngleGrid=true + ShowImpedanceGrid=true + ShowAdmittanceGrid=false + $end 'PolarPlotRenderAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + $end 'DisplayTypeAttributes' + $begin 'DocDefaultAttributes' + $begin 'PlotAttributeStoreMap' + $end 'PlotAttributeStoreMap' + $end 'DocDefaultAttributes' + $begin 'PerViewPlotAttributeStoreMap' + $begin 'MapItem' + ItemID=-1 + $begin 'PlotAttributeStoreMap' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=1 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=8 + $begin 'BasicLayoutAttribute' + $begin 'LayoutRect' + Top=75 + Left=75 + Bottom=9925 + Right=852 + $end 'LayoutRect' + $end 'BasicLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=3 + $begin 'DockableOverlayLayoutAttribute' + $begin 'Dock_0' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=4850 + Left=952 + Bottom=9850 + Right=8452 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_0' + $begin 'Dock_1' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=5000 + Left=0 + Bottom=10000 + Right=10000 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_1' + $begin 'Dock_2' + $begin 'OverlayLayoutAttribute' + $begin 'BoundingRect' + Top=0 + Left=0 + Bottom=5000 + Right=10000 + $end 'BoundingRect' + ModifySize=false + ModifyPosition=false + $end 'OverlayLayoutAttribute' + $end 'Dock_2' + $end 'DockableOverlayLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $begin 'MainMapItem' + $begin 'SubMapItem' + DataSourceID=5 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=7 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=11 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=1008 + Left=8591 + Bottom=8992 + Right=607 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $begin 'SubMapItem' + DataSourceID=13 + $begin 'PolarLayoutAttribute' + $begin 'PolarCircleRect' + Top=683 + Left=9144 + Bottom=9316 + Right=511 + $end 'PolarCircleRect' + $begin 'AxisRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisRect' + $begin 'AxisLabelRect' + Top=0 + Left=0 + Bottom=0 + Right=0 + $end 'AxisLabelRect' + $end 'PolarLayoutAttribute' + $end 'SubMapItem' + $end 'MainMapItem' + $end 'PlotAttributeStoreMap' + PlotType=3 + $end 'MapItem' + $end 'PerViewPlotAttributeStoreMap' + IsViewAttribServer=false + ViewID=-1 + $begin 'SourceIDMap' + IDMapItem(0, 0, -1, 10) + IDMapItem(0, 1, -1, 12) + $end 'SourceIDMap' + $begin 'TraceCharacteristicsMgr' + $end 'TraceCharacteristicsMgr' + $begin 'CartesianXMarkerManager' + RefMarkerID=-1 + CurrentMarkerID=-1 + $begin 'ReferenceCurves' + $end 'ReferenceCurves' + $end 'CartesianXMarkerManager' + $begin 'CartesianYMarkerManager' + $end 'CartesianYMarkerManager' + XAxisStackID=-1 + $begin 'AllTransSrcDwg' + $begin 'PT' + ID=3 + TransSrcDwg(-1, 0, 8, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13) + $end 'PT' + $end 'AllTransSrcDwg' + $begin 'AllPtSVID' + PtID(3, -1, 1) + $end 'AllPtSVID' + $end 'PlotDisplayDataManager' + $end 'Report2D' + $end 'Gain Plot 1' + $begin 'Gain Plot 2' + ReportID=301 + $begin 'Report3D' + name='Gain Plot 2' + ReportID=301 + hasWindowBeenOpened=false + ReportType=3 + DisplayType=7 + $begin 'Graph3DsV2' + $begin 'Graph3DV2' + TraceDefID=300 + GraphName='dB(GainTotal)' + $begin 'Plot3DPolarDocument' + $begin 'Plot3DDataSources' + $begin 'Plot3DPlotDataSource' + ID=0 + Name='Plot' + $end 'Plot3DPlotDataSource' + $begin 'Plot3DBackgroundDataSource' + ID=1 + Name='Background' + $end 'Plot3DBackgroundDataSource' + $begin 'Plot3DHeaderDataSource' + ID=2 + Name='Header' + $end 'Plot3DHeaderDataSource' + $begin 'Plot3DAxisDataSource' + ID=3 + Name='Phi' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=4 + Name='Theta' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=5 + Name='Rho' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DGridDataSource' + ID=6 + Name='phi-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=7 + Name='theta-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=8 + Name='theta-rho-phi(0)' + $end 'Plot3DGridDataSource' + $begin 'Plot3DColorKeyDataSource' + ID=9 + Name='ColorKey' + $end 'Plot3DColorKeyDataSource' + $end 'Plot3DDataSources' + $begin 'Plot3DAttributesManager' + $begin 'PlotAttributeStore' + $end 'PlotAttributeStore' + $end 'Plot3DAttributesManager' + $end 'Plot3DPolarDocument' + $end 'Graph3DV2' + $end 'Graph3DsV2' + $begin 'Plot3DPolarDocument' + $begin 'Plot3DDataSources' + $begin 'Plot3DPlotDataSource' + ID=0 + Name='Plot' + $end 'Plot3DPlotDataSource' + $begin 'Plot3DBackgroundDataSource' + ID=1 + Name='Background' + $end 'Plot3DBackgroundDataSource' + $begin 'Plot3DHeaderDataSource' + ID=2 + Name='Header' + $end 'Plot3DHeaderDataSource' + $begin 'Plot3DAxisDataSource' + ID=3 + Name='Phi' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=4 + Name='Theta' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DAxisDataSource' + ID=5 + Name='Rho' + $end 'Plot3DAxisDataSource' + $begin 'Plot3DGridDataSource' + ID=6 + Name='phi-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=7 + Name='theta-rho' + $end 'Plot3DGridDataSource' + $begin 'Plot3DGridDataSource' + ID=8 + Name='theta-rho-phi(0)' + $end 'Plot3DGridDataSource' + $begin 'Plot3DColorKeyDataSource' + ID=9 + Name='ColorKey' + $end 'Plot3DColorKeyDataSource' + $end 'Plot3DDataSources' + $begin 'Plot3DAttributesManager' + $begin 'PlotAttributeStore' + $end 'PlotAttributeStore' + $end 'Plot3DAttributesManager' + $end 'Plot3DPolarDocument' + $end 'Report3D' + $end 'Gain Plot 2' + $end 'Reports' + $begin 'ReportsWindowInfoList' + $begin 'Gain Plot 1' + ReportID=1 + $begin 'WindowInfoList' + $begin 'Report2D' + $end 'Report2D' + $end 'WindowInfoList' + $end 'Gain Plot 1' + $begin 'Gain Plot 2' + ReportID=301 + $begin 'WindowInfoList' + R3DWindowPos(Report3D()) + $end 'WindowInfoList' + $end 'Gain Plot 2' + $end 'ReportsWindowInfoList' + $end 'ReportSetup' + $begin 'Properties' + $end 'Properties' + $begin 'UserDefinedDocument' + $begin 'Data' + $end 'Data' + $end 'UserDefinedDocument' + $end 'HfssDesignInstance' + $end 'Instance' + $begin 'SODInfo' + $begin 'Array' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Array' + $begin 'Nexxim Circuit Elements\\lumped_general:NXPSH' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\lumped_general:NXPSH' + $begin 'HFSSDesign5' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'HFSSDesign5' + $begin 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB8_NX' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB8_NX' + $begin 'Nexxim Circuit Elements\\Independent Sources:P_SIN' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\Independent Sources:P_SIN' + $begin 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB2_NX' + $begin 'CosimDefinition' + CosimDefName='DefaultNetlist' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end 'Nexxim Circuit Elements\\Ideal Microwave:PWCMB2_NX' + $begin '00_Array2' + $begin 'CosimDefinition' + CosimDefName='Default' + $begin 'SODInstanceMap' + $end 'SODInstanceMap' + SODComponentList() + $end 'CosimDefinition' + $end '00_Array2' + $end 'SODInfo' + $end 'DataInstances' + $begin 'WBSystemIDToDesignInstanceIDMap' + $end 'WBSystemIDToDesignInstanceIDMap' + $begin 'WBSysIDSysDetails' + $end 'WBSysIDSysDetails' + $begin 'WBConnIDConnDetails' + $end 'WBConnIDConnDetails' + $begin 'WBMaterialGuidDetails' + WBMaterialGuidMap() + $end 'WBMaterialGuidDetails' + $begin 'MinervaProjectSettingsBlk' + MinervaRemoteFilePath='' + FolderContainerString='' + $end 'MinervaProjectSettingsBlk' +$end 'AnsoftProject' +$begin 'AllReferencedFilesForProject' +$begin 'Design_0.setup/UdmDefFiles' +NumFiles= 4 +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/01_Metal_Only737.a3dcomp +BIN000000029357 +$begin 'AnsoftComponentChkSum' + ChecksumString='fe90c3eebdb3a22fa943fe186e9d6590' + ChecksumHistory('2eae920cded86ea339b0c2b510c2e396', '56dc97eefced4fb878670bf07bf9c0d7', '6ad251b9b60c46a887f8abe7cc95a939', '4dbebe5edc26d02a76cbe6a0375bcc2c', '1ffabeb99e557c6294a61facb790fdc1') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='01_Metal_Only' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='6.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:51:04 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 238, '22cel', 250, '22cel', 278, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Antenna' + ID=5 + BoundType='Perfect E' + IsComponent=false + Objects(238) + ParentBndID=-1 + InfGroundPlane=false + $end 'Antenna' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('patchX', 'UD', '', 'patchY') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('subY', 'UD', '', '8cm') + VariableProp('subX', 'UD', '', '8cm') + VariableProp('patchY', 'UD', '', '4.39cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=15 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=305 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=237 + ReferenceCoordSystemID=233 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-patchX/2' + YStart='-patchY/2' + ZStart='0cm' + Width='patchX' + Height='patchY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=238 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=238 + StartFaceID=-1 + StartEdgeID=239 + StartVertexID=243 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=247 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=238 + $end 'LocalOperationParameters' + ParentPartID=238 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=248 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=248 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=19.272099999999995 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=237 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='-0.1524cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_height+radome_thick+5cm' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=277 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='radome_height' + XSize='subX' + YSize='subY' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=278 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=278 + StartFaceID=279 + StartEdgeID=285 + StartVertexID=297 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'box' + box(1, 2) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 247) + DependencyObject('GeometryBodyOperation', 237) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 277) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 238] + $begin 'AssignedFace' + kID=251 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 238, 250, 278] + HiddenParts[0:] + IncludedCS[1: 233] + ReferenceCS=1 + IncludedParameters('patchY', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(patchY='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/02_Patch599.a3dcomp +BIN000000052902 +$begin 'AnsoftComponentChkSum' + ChecksumString='d5c6ab10d27dc0bd8bbb02e8dd2e2342' + ChecksumHistory('20fc5ac219fa743afd8ca925e6eb2079', '5a214f4574db96d93ace173fc9633c0d', 'ab2260df524ce23f2a26184bbe992b40', '1f86c0d94b7d8d980b578032d3716fb9', 'ac15e7f1edaac81bfe47615ad0e764c1', 'fdb0262a95719ca1f5242cd1435323c7', '7480689c0d4583954aa27bec8a82ea72', '67276bcb604613ff2d50669fd5840c08', 'afc6f7c927ea038b13e96a3641c31d5f', '16c4cdaef0e0228e14d11c5b3700e977') + VersionHistory('1.0', '2.0', '3.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='02_Patch' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='10.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:50:58 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 46, '22cel', 95, '22cel', 234, '22cel', 267, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'antennaMetal' + ID=0 + BoundType='Perfect E' + IsComponent=false + Objects(46) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'LatticePair1' + ID=9 + BoundType='Lattice Pair' + IsComponent=false + Faces(237, 239) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + ParentIDs(244, 243, 249) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=237 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=259 + ParentIDs(249, 247, 246) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=237 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=10 + BoundType='Lattice Pair' + IsComponent=false + Faces(238, 240) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=255 + ParentIDs(243, 242, 251) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=238 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=260 + ParentIDs(251, 248, 247) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=238 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $begin 'Rad1' + ID=11 + BoundType='Radiation' + IsComponent=false + Faces(235) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $end 'Boundaries' + $begin 'Excitations' + $begin '1' + ID=3 + BoundType='Lumped Port' + IsComponent=false + Faces(105) + LumpedPortType='Modal' + DoDeembed=false + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=97 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='2.16840434497101e-17' + YPosition='3.695' + ZPosition='0.1524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.99999999999999967 + uvpos_v=0.5 + uvpos_id=105 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=99 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='EdgeCenter' + UParam=0.5 + VParam=0 + XPosition='0' + YPosition='3.695' + ZPosition='-3.08610993385133e-17' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=2.0250065182751468e-16 + uvpos_v=0.49999999999999994 + uvpos_id=105 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + LumpedPortSheetID=-1 + Impedance='50ohm' + $end '1' + $end 'Excitations' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('patchY', 'UD', '', '4.39cm') + VariableProp('subY', 'UD', '', '8cm') + VariableProp('subX', 'UD', '', '8cm') + VariableProp('FeedLength', 'UD', '', '1.5cm') + VariableProp('InsetGap', 'UD', '', '0.168cm') + VariableProp('patchX', 'UD', '', 'patchY') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('FeedWidth', 'UD', '', '0.336cm') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('InsetDistance', 'UD', '', '1.46cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=17 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=295 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=262 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=263 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='antenna' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-patchX/2' + YStart='-patchY/2' + ZStart='subH' + Width='patchX' + Height='patchY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=51 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=55 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=56 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=56 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=19.272099999999995 + FcUVMid(0, 0, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, -2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=69 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=1 + ToolParts(58) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=222 + StartVertexID=227 + NumNewFaces=0 + NumNewEdges=5 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=222 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-0.33600000000000002, 1.4649999999999996, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=226 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=225 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.33600000000000002, 1.4649999999999996, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=224 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(1.2654999999999998, 2.1949999999999998, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=223 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-2.1949999999999998, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-1.2654999999999998, 2.1949999999999998, 0.15240000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=227 + VtPos(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=230 + VtPos(0.33600000000000002, 0.73499999999999965, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=228 + VtPos(-0.33600000000000019, 2.1949999999999998, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=229 + VtPos(0.33600000000000019, 2.1949999999999998, 0.15240000000000001) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=55 + NumToolOperations=1 + ToolOperations(67) + $end 'Operation' + $begin 'Operation' + OperationType='Unite' + ID=91 + $begin 'UniteParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=1 + ToolParts(80) + $end 'UniteParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=12 + NumEdges=12 + NumVertices=12 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=231 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=232 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-0.252, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=231 + EdgeFaces(56) + $begin 'EdTolVts' + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.25199999999999995, 0.73499999999999965, 0.15240000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=69 + NumToolOperations=1 + ToolOperations(89) + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='port1' + Flags='' + Color='(128 0 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=94 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2' + YStart='patchY/2+FeedLength' + ZStart='0cm' + Width='subH' + Height='FeedWidth' + WhichAxis='Y' + $end 'RectangleParameters' + ParentPartID=95 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=95 + StartFaceID=-1 + StartEdgeID=96 + StartVertexID=100 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=104 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=95 + $end 'LocalOperationParameters' + ParentPartID=95 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=105 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=105 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206399999999999 + FcUVMid(2.2364959181737949e-17, 3.6949999999999994, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 3.6949999999999994, 0, 4.9999999999999998e-07) + TolVt(-0.16799999999999998, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 3.6949999999999994, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=94 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=233 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_thick+radome_height+5cm' + $end 'BoxParameters' + ParentPartID=234 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=234 + StartFaceID=235 + StartEdgeID=241 + StartVertexID=253 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=266 + ReferenceCoordSystemID=262 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='radome_height' + XSize='subX' + YSize='subY' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=267 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=267 + StartFaceID=268 + StartEdgeID=274 + StartVertexID=286 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_2673H5' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=57 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2-InsetGap' + YStart='patchY/2-InsetDistance' + ZStart='subH' + Width='FeedWidth+2*InsetGap' + Height='FeedLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=58 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=58 + StartFaceID=-1 + StartEdgeID=59 + StartVertexID=63 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=67 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=58 + $end 'LocalOperationParameters' + ParentPartID=58 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=68 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=68 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1.008 + FcUVMid(0, 1.4849999999999994, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.33600000000000002, 2.2349999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.33600000000000002, 2.2349999999999994, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=57 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_OV2BLE' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=79 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-FeedWidth/2' + YStart='patchY/2-InsetDistance' + ZStart='subH' + Width='FeedWidth' + Height='FeedLength+InsetDistance' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=80 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=80 + StartFaceID=-1 + StartEdgeID=81 + StartVertexID=85 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=89 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=80 + $end 'LocalOperationParameters' + ParentPartID=80 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=90 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=90 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.99456 + FcUVMid(0, 2.2149999999999994, 0.15240000000000001) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 0.73499999999999965, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(-0.16800000000000001, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=79 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'antenna' + antenna(-1) + $end 'antenna' + $begin 'box' + box(1, 2) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'newobject_2673h' + newobject_2673h(5) + $end 'newobject_2673h' + $begin 'newobject_ov2ble' + newobject_ov2ble(-1) + $end 'newobject_ov2ble' + $begin 'objectlist' + objectlist(1) + $end 'objectlist' + $begin 'port' + port(1) + $end 'port' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 45) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 55) + DependencyObject('GeometryBodyOperation', 45) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 69) + DependencyObject('GeometryBodyOperation', 55) + DependencyObject('GeometryBodyOperation', 67) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 91) + DependencyObject('GeometryBodyOperation', 69) + DependencyObject('GeometryBodyOperation', 89) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 94) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 104) + DependencyObject('GeometryBodyOperation', 94) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 266) + DependencyObject('CoordinateSystem', 262) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 57) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 67) + DependencyObject('GeometryBodyOperation', 57) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 79) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('GeometryBodyOperation', 79) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 262) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 46] + $begin 'AssignedFace' + kID=105 + $begin 'FaceData' + ParentObjectID=95 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.051206399999999999 + FcUVMid(2.2364959181737949e-17, 3.6949999999999994, 0.076199999999999976) + $begin 'FcTolVts' + TolVt(-0.16800000000000001, 3.6949999999999994, 0, 4.9999999999999998e-07) + TolVt(-0.16799999999999998, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 3.6949999999999994, 0.15239999999999995, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=235 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=237 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4762) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=238 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=239 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4762) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=240 + $begin 'FaceData' + ParentObjectID=234 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=97 + $begin 'EdgeData' + ParentObjectID=95 + ParentFaces[1: 105] + $begin 'EdgeGeomTopol' + EdgeFaces(105) + $begin 'EdTolVts' + TolVt(-0.16799999999999998, 3.6949999999999994, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.16800000000000004, 3.6949999999999994, 0.15239999999999995, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2.1684043449710089e-17, 3.6949999999999994, 0.15239999999999998) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=99 + $begin 'EdgeData' + ParentObjectID=95 + ParentFaces[1: 105] + $begin 'EdgeGeomTopol' + EdgeFaces(105) + $begin 'EdTolVts' + TolVt(-0.16800000000000001, 3.6949999999999994, 0, 4.9999999999999998e-07) + TolVt(0.16800000000000001, 3.6949999999999994, -6.1722198677026601e-17, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 3.6949999999999994, -3.08610993385133e-17) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=255 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 243, 242, 251] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=256 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 244, 243, 249] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=259 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 249, 247, 246] + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=260 + $begin 'VertexData' + ParentObjectID=234 + ParentEdges[3: 251, 248, 247] + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[6: 6, 34, 46, 95, 234, 267] + HiddenParts[0:] + IncludedCS[1: 262] + ReferenceCS=1 + IncludedParameters('FeedLength', 'FeedWidth', 'InsetDistance', 'InsetGap', 'patchY', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(FeedLength='', FeedWidth='', InsetDistance='', InsetGap='', patchY='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/03_Radome_Corner982.a3dcomp +BIN000000053461 +$begin 'AnsoftComponentChkSum' + ChecksumString='10baf2609693e33409d11202345ca665' + ChecksumHistory('48df8c28c8f90d7000ba95b58e4953ef', '9c31e8dcade8ebcf308ed8e923ed461a', 'b56f926f9c0284c44194e6b6d6a8fb4a', 'c91a15c1fe75b99ff252eea61ee6625b', '032466a2fbbe52d1f18400fbebb338eb', '565420525b544a6ef1e96fc53389da3f', '2b0acdb4ac6a1e6e1e0e62412b1a9453', 'bc45f9017b386ad363643011e17c6a68', 'b810ef987881004ea90f1548a1c23efd') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0', '9.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='Radome_Corner' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='10.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:51:16 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='0' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('subX', 'UD', '', '8cm') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('radius', 'UD', '', '0.5cm') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('subY', 'UD', '', '8cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=27 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=743 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_thick+radome_height+5cm' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=360 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='0cm' + YPosition='0cm' + ZPosition='0cm' + XSize='subX/2' + YSize='radome_thick' + ZSize='radome_height' + $end 'BoxParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=361 + StartFaceID=362 + StartEdgeID=368 + StartVertexID=380 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Unite' + ID=690 + $begin 'UniteParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=361 + NumToolParts=1 + ToolParts(389) + $end 'UniteParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=8 + NumWires=0 + NumLoops=8 + NumCoedges=36 + NumEdges=18 + NumVertices=12 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=691 + StartVertexID=692 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=691 + EdgeFaces(366, 395) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.80000000000000004, 0.80000000000000004, 0.65239999999999998) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=692 + VtPos(0.80000000000000004, 0.80000000000000004, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=693 + VtPos(0.80000000000000004, 0.80000000000000004, 0.15240000000000001) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $begin 'Element' + RetainedID=398 + MergedIDs(370, 398) + $end 'Element' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=360 + NumToolOperations=1 + ToolOperations(388) + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=694 + $begin 'FilletParameters' + KernelVersion=13 + PartID=361 + Edges[1: 376] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=9 + NumWires=0 + NumLoops=9 + NumCoedges=42 + NumEdges=21 + NumVertices=14 + $end 'Topology' + BodyID=-1 + StartFaceID=695 + StartEdgeID=696 + StartVertexID=700 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=695 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.78539816339744828 + FcUVMid(0.14644660940672616, 0.1464466094067263, 0.65239999999999998) + $begin 'FcTolVts' + TolVt(0.50000000000000011, 0, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.5, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.5, 0.15240000000000001, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=696 + EdgeFaces(363, 695) + $begin 'EdTolVts' + TolVt(0, 0.5, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672632, 0.14644660940672616, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=697 + EdgeFaces(364, 695) + $begin 'EdTolVts' + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 0, 0.65239999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=698 + EdgeFaces(362, 695) + $begin 'EdTolVts' + TolVt(0, 0.5, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 0.1464466094067263, 1.1523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=699 + EdgeFaces(365, 695) + $begin 'EdTolVts' + TolVt(0, 0.5, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.5, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.5, 0.65239999999999998) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=701 + VtPos(0.50000000000000011, 0, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=702 + VtPos(0.50000000000000011, 0, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=700 + VtPos(0, 0.5, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=703 + VtPos(0, 0.5, 1.1523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=690 + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=704 + $begin 'FilletParameters' + KernelVersion=13 + PartID=361 + Edges[1: 691] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=48 + NumEdges=24 + NumVertices=16 + $end 'Topology' + BodyID=-1 + StartFaceID=705 + StartEdgeID=706 + StartVertexID=710 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=705 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.78539816339744828 + FcUVMid(0.9464466094067262, 0.94644660940672642, 0.65239999999999998) + $begin 'FcTolVts' + TolVt(1.3, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 1.3, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 1.3, 1.1523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=708 + EdgeFaces(362, 705) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 1.3, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.9464466094067262, 0.94644660940672642, 1.1523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=706 + EdgeFaces(363, 705) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 1.3, 0.15240000000000001, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.94644660940672642, 0.9464466094067262, 0.15240000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=709 + EdgeFaces(366, 705) + $begin 'EdTolVts' + TolVt(1.3, 0.80000000000000004, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(1.3, 0.80000000000000004, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(1.3, 0.80000000000000004, 0.65239999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=707 + EdgeFaces(395, 705) + $begin 'EdTolVts' + TolVt(0.80000000000000004, 1.3, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.80000000000000004, 1.3, 0.15240000000000001, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.80000000000000004, 1.3, 0.65239999999999998) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=710 + VtPos(1.3, 0.80000000000000004, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=713 + VtPos(1.3, 0.80000000000000004, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=711 + VtPos(0.80000000000000004, 1.3, 0.15240000000000001) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=712 + VtPos(0.80000000000000004, 1.3, 1.1523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=694 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=416 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='0cm' + YPosition='0cm' + ZPosition='radome_height' + XSize='subX/2' + YSize='subY/2' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=417 + StartFaceID=418 + StartEdgeID=424 + StartVertexID=436 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=714 + $begin 'FilletParameters' + KernelVersion=13 + PartID=417 + Edges[2: 426, 427] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=8 + NumWires=0 + NumLoops=8 + NumCoedges=34 + NumEdges=17 + NumVertices=11 + $end 'Topology' + BodyID=-1 + StartFaceID=715 + StartEdgeID=717 + StartVertexID=724 + NumNewFaces=2 + NumNewEdges=7 + NumNewVertices=6 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=716 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.9991236110428123 + FcUVMid(1.9880000000000002, 0.14644660940672616, 1.8059533905932734) + $begin 'FcTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=1 + ID=715 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=2.998900906020622 + FcUVMid(0.14644660940672616, 1.9880000000000002, 1.8059533905932734) + $begin 'FcTolVts' + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 4, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 4, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=721 + EdgeFaces(423, 716) + $begin 'EdTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(4, 0.1464466094067263, 1.8059533905932736) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=723 + EdgeFaces(420, 716) + $begin 'EdTolVts' + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2, 0, 1.4523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=720 + EdgeFaces(418, 715) + $begin 'EdTolVts' + TolVt(0.50000000000000011, 4, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 2.25, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=722 + EdgeFaces(418, 716) + $begin 'EdTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(2.25, 0.50000000000000011, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=717 + EdgeFaces(422, 715) + $begin 'EdTolVts' + TolVt(0, 4, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 4, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 4, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=718 + EdgeFaces(421, 715) + $begin 'EdTolVts' + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 4, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 2, 1.4523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=719 + EdgeFaces(715, 716) + $begin 'EdTolVts' + TolVt(0, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.1464466094067263, 0.1464466094067263, 1.8059533905932734) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=728 + VtPos(4, 0, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=727 + VtPos(0.5, 0.5, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=729 + VtPos(4, 0.50000000000000011, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=724 + VtPos(0.50000000000000011, 4, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=725 + VtPos(0, 4, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=726 + VtPos(0, 0, 1.4523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=416 + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=730 + $begin 'FilletParameters' + KernelVersion=13 + PartID=417 + Edges[2: 719, 432] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=10 + NumWires=0 + NumLoops=10 + NumCoedges=42 + NumEdges=21 + NumVertices=13 + $end 'Topology' + BodyID=-1 + StartFaceID=731 + StartEdgeID=733 + StartVertexID=739 + NumNewFaces=2 + NumNewEdges=6 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=732 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=0.23561944901923443 + FcUVMid(0.14644660940672616, 0.14644660940672638, 1.3023999999999998) + $begin 'FcTolVts' + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.1523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $begin 'Face' + NormalizedSerialNum=1 + ID=731 + $begin 'FaceGeomTopol' + FaceTopol(1, 3, 3, 3) + $begin 'FaceGeometry' + Area=0.39269908169872397 + FcUVMid(0.25000000000000006, 0.25000000000000011, 1.8059533905932736) + $begin 'FcTolVts' + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=736 + EdgeFaces(419, 732) + $begin 'EdTolVts' + TolVt(0, 0.50000000000000011, 1.1523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672632, 0.14644660940672624, 1.1523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=737 + EdgeFaces(420, 732) + $begin 'EdTolVts' + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 0, 1.3023999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=738 + EdgeFaces(421, 732) + $begin 'EdTolVts' + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.1523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.50000000000000011, 1.3023999999999998) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=734 + EdgeFaces(716, 731) + $begin 'EdTolVts' + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.50000000000000011, 0.14644660940672616, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=735 + EdgeFaces(715, 731) + $begin 'EdTolVts' + TolVt(0.5, 0.5, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 0.50000000000000011, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=733 + EdgeFaces(731, 732) + $begin 'EdTolVts' + TolVt(0, 0.50000000000000011, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(0.50000000000000011, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0.14644660940672616, 0.14644660940672638, 1.4523999999999999) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=742 + VtPos(0.50000000000000011, 0, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=741 + VtPos(0, 0.50000000000000011, 1.1523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=740 + VtPos(0.50000000000000011, 0, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=739 + VtPos(0, 0.50000000000000011, 1.4523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=714 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box3' + Flags='' + Color='(0 64 128)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=388 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='0cm' + YPosition='0cm' + ZPosition='0cm' + XSize='radome_thick' + YSize='subY/2' + ZSize='radome_height' + $end 'BoxParameters' + ParentPartID=389 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=389 + StartFaceID=390 + StartEdgeID=396 + StartVertexID=408 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1, 2, 3, 4) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 360) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 690) + DependencyObject('GeometryBodyOperation', 360) + DependencyObject('GeometryBodyOperation', 388) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 694) + DependencyObject('GeometryBodyOperation', 690) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 704) + DependencyObject('GeometryBodyOperation', 694) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 416) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryBodyOperation', 416) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 730) + DependencyObject('GeometryBodyOperation', 714) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 34] + $begin 'AssignedFace' + kID=251 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4762) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4762) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4762) + $begin 'FcTolVts' + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-4, -4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 250, 361, 417] + HiddenParts[0:] + IncludedCS[1: 233] + ReferenceCS=1 + IncludedParameters('radius', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(radius='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/03_Radome_Side848.a3dcomp +BIN000000031483 +$begin 'AnsoftComponentChkSum' + ChecksumString='24f9541e0f1f67904551e94d3871e1eb' + ChecksumHistory('5d45f52a9e216e50d59e73534f9b66a5', 'bd94a6df1aa6242cafd3cf31ee7b96b6', 'cc9431f9f8a1abf4a5eba7246c4d6741', '6fede82269f5c82446e7314943f933e8', '0caa2c21ba3f444a6ee19a355fd8272a', '5ae6fe5bad977199e21f2acaa1cb71db', '12ba1933b3e5096927229ff9f3ef3af3', '8ed257867c34e79cd241f53177f868db') + VersionHistory('1.0', '2.0', '3.0', '4.0', '5.0', '6.0', '7.0', '8.0') + FormatVersion=11 + Version(2023, 1) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='03_Radome_Side' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='9.0' + Notes='' + IconType='' + Owner='Sergio Melais' + Email='sergio.melais@ansys.com' + Date='9:51:11 AM Jan 25, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 250, '22cel', 361, '22cel', 417, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'groundMetal' + ID=1 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'Rad1' + ID=6 + BoundType='Radiation' + IsComponent=false + Faces(251) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'LatticePair1' + ID=7 + BoundType='Lattice Pair' + IsComponent=false + Faces(253, 255) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=272 + ParentIDs(260, 259, 265) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=275 + ParentIDs(265, 263, 262) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='-4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=253 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair1' + $begin 'LatticePair2' + ID=8 + BoundType='Lattice Pair' + IsComponent=false + Faces(254, 256) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=271 + ParentIDs(259, 258, 267) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='6.9524' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=276 + ParentIDs(267, 264, 263) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-4' + YPosition='4' + ZPosition='-4.33680868994202e-16' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=254 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'LatticePair2' + $end 'Boundaries' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Rogers RO4003 (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='3.55' + conductivity='0' + dielectric_loss_tangent='0.0027' + ModTime=1617382295 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Rogers RO4003 (tm)' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal', 'Structural') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=26 + Green=26 + Blue=26 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='2.1' + dielectric_loss_tangent='0.001' + thermal_conductivity='0.25' + mass_density='2250' + specific_heat='1400' + youngs_modulus='496000000' + poissons_ratio='0.3' + thermal_expansion_coefficient='1.35e-06' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('radius', 'UD', '', '0.5cm') + VariableProp('radome_height', 'UD', '', '1cm') + VariableProp('subX', 'UD', '', '8cm') + VariableProp('subH', 'UD', '', '0.1524cm') + VariableProp('radome_thick', 'UD', '', '0.8cm') + VariableProp('subY', 'UD', '', '8cm') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=26 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='cm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=677 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=233 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='0cm' + OriginY='0cm' + OriginZ='0.1524cm' + XAxisXvec='1cm' + XAxisYvec='0cm' + XAxisZvec='0cm' + YAxisXvec='0cm' + YAxisYvec='1cm' + YAxisZvec='0cm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=234 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='sub' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Rogers RO4003 (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='0cm' + XSize='subX' + YSize='subY' + ZSize='subH' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subX/2' + YStart='-subY/2' + ZStart='0cm' + Width='subX' + Height='subY' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-4, -4, 0, 4.9999999999999998e-07) + TolVt(4, -4, 0, 4.9999999999999998e-07) + TolVt(4, 4, 0, 4.9999999999999998e-07) + TolVt(-4, 4, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=249 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='-subY/2' + ZPosition='-0.1524cm' + XSize='subX' + YSize='subY' + ZSize='subH+radome_height+radome_thick+5cm' + $end 'BoxParameters' + ParentPartID=250 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=250 + StartFaceID=251 + StartEdgeID=257 + StartVertexID=269 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=360 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='0cm' + ZPosition='0cm' + XSize='subX' + YSize='radome_thick' + ZSize='radome_height' + $end 'BoxParameters' + ParentPartID=361 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=361 + StartFaceID=362 + StartEdgeID=368 + StartVertexID=380 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box4' + Flags='' + Color='(0 64 128)' + Transparency=0.5 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0cm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=416 + ReferenceCoordSystemID=233 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subX/2' + YPosition='0cm' + ZPosition='radome_height' + XSize='subX' + YSize='subY/2' + ZSize='radome_thick' + $end 'BoxParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=417 + StartFaceID=418 + StartEdgeID=424 + StartVertexID=436 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Fillet' + ID=667 + $begin 'FilletParameters' + KernelVersion=13 + PartID=417 + Edges[1: 427] + Vertices[0:] + Radius='radius' + Setback='0cm' + $end 'FilletParameters' + ParentPartID=417 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=7 + NumWires=0 + NumLoops=7 + NumCoedges=30 + NumEdges=15 + NumVertices=10 + $end 'Topology' + BodyID=-1 + StartFaceID=668 + StartEdgeID=669 + StartVertexID=673 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=668 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6.2831853071795871 + FcUVMid(0, 0.14644660940672616, 1.8059533905932734) + $begin 'FcTolVts' + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=669 + EdgeFaces(423, 668) + $begin 'EdTolVts' + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(4, 0.1464466094067263, 1.8059533905932736) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=670 + EdgeFaces(418, 668) + $begin 'EdTolVts' + TolVt(-4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0.50000000000000011, 1.9523999999999999) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=671 + EdgeFaces(421, 668) + $begin 'EdTolVts' + TolVt(-4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0.50000000000000011, 1.9523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-4, 0.14644660940672616, 1.8059533905932734) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=672 + EdgeFaces(420, 668) + $begin 'EdTolVts' + TolVt(4, 0, 1.4523999999999999, 4.9999999999999998e-07) + TolVt(-4, 0, 1.4523999999999999, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 1.4523999999999999) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=674 + VtPos(4, 0.50000000000000011, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=675 + VtPos(-4, 0.50000000000000011, 1.9523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=676 + VtPos(-4, 0, 1.4523999999999999) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=673 + VtPos(4, 0, 1.4523999999999999) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + BlendBaseOperationID=416 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=107 + StartFaceID=108 + StartEdgeID=114 + StartVertexID=126 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1, 2, 4) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'sub' + sub(-1) + $end 'sub' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 249) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 360) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 416) + DependencyObject('CoordinateSystem', 233) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 667) + DependencyObject('GeometryBodyOperation', 416) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 233) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 34] + $begin 'AssignedFace' + kID=251 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=64 + FcUVMid(0, 0, 6.9523999999999999) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=253 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, -4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=254 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(-4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=255 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(0, 4, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=256 + $begin 'FaceData' + ParentObjectID=250 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=55.619200000000006 + FcUVMid(4, 0, 3.4761999999999995) + $begin 'FcTolVts' + TolVt(4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + TolVt(4, 4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, 6.9523999999999999, 4.9999999999999998e-07) + TolVt(4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedVertex' + kID=271 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 259, 258, 267] + TolVt(-4, 4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=272 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 260, 259, 265] + TolVt(-4, -4, 6.9523999999999999, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=275 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 265, 263, 262] + TolVt(-4, -4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=276 + $begin 'VertexData' + ParentObjectID=250 + ParentEdges[3: 267, 264, 263] + TolVt(-4, 4, -4.3368086899420177e-16, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[5: 6, 34, 250, 361, 417] + HiddenParts[0:] + IncludedCS[1: 233] + ReferenceCS=1 + IncludedParameters('radius', 'radome_height', 'radome_thick', 'subH', 'subX', 'subY') + IncludedDependentParameters() + ParameterDescription(radius='', radome_height='', radome_thick='', subH='', subX='', subY='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$end 'Design_0.setup/UdmDefFiles' +$end 'AllReferencedFilesForProject' +$begin 'ProjectPreview' + IsEncrypted=false + Thumbnail64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCABgAGADASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+s/8A4KKf8FFLL9gqy+EtpafCW6+Lfi74t3Xja\ +40vS7jxtF8PfDmleHPh7F4Vj8SahqHiSPwrr1zJrban478Jx2NjHpJguIH1G4uNRs5LO2ttR/LXUv8A\ +g4l8T6Xp1/qdx+xVoLwadZXV9OkP7UWoNM0NpBJcSLEr/s1KrSFI2CgsoJIyQOa/Gj/gsh/wU78a/tC\ +ftaeJPh74b0D4eN8MP2W/GfxW+Gnw312107xFNr/ib+17rwFo/j7V/Eup/wDCVmz1S0bxb8MS+jPY2d\ +gken3224N7IyXC/i5d/Fj4xeNPF3iMw+LtS8P+CFl8N2aeHrfwn4Zl0nVbS58L6L/wlVra6xqehS34t\ +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' + $begin 'DesignInfo' + DesignName='Array' + Notes='' + Factory='HFSS' + IsSolved=false + 'Nominal Setups'[1: 'Setup1'] + 'Nominal Setup Types'[1: ''] + 'Optimetrics Setups'[0:] + 'Optimetrics Experiment Types'[0:] + Image64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiv40/2hP+Cnn/AAUA8KftEftF+DvCn7TOt\ +eHvCfgj9ob47eBvCeg2nwp/Z5v7fRfC3gn4s+MPCvhvS47/AF74PXl7f+RomkWMRnu7q4uZmiMk00kj\ +Mx+C4+8Rcj8OsHgMdnmGxWJo5jVlSgsLTpVJKUY87c1VrUUo22acnfod9SjlGA4czHiviPijBcLZHlu\ +NwOXOri6WZV3UxeY0MxxOHp0qeWZfmFS3scqxcqk6kacItU4qUpTSX9llFfw7/wDD1n/go9/0dl4i/w\ +DDPfsyf/ONo/4es/8ABR7/AKOy8Rf+Ge/Zk/8AnG1+Xf8AEz/h/wD9CvN//CfCf/N58x/rt4S/9Hfyj\ +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\ +ooooAKKKKACiiigAooooA/9k=' + $end 'DesignInfo' +$end 'ProjectPreview' diff --git a/_unittest/example_models/T20/Circ_Patch_5GHz_hex.a3dcomp b/_unittest/example_models/T20/Circ_Patch_5GHz_232.a3dcomp similarity index 52% rename from _unittest/example_models/T20/Circ_Patch_5GHz_hex.a3dcomp rename to _unittest/example_models/T20/Circ_Patch_5GHz_232.a3dcomp index d46a4f6a3c3..a78e60d3e73 100644 --- a/_unittest/example_models/T20/Circ_Patch_5GHz_hex.a3dcomp +++ b/_unittest/example_models/T20/Circ_Patch_5GHz_232.a3dcomp @@ -1,25 +1,25 @@ $begin 'AnsoftComponentChkSum' - ChecksumString='f7080626955602408f5f88675d6e1add' - ChecksumHistory('67bee40a3a591b3c31eb05beb305c318') - VersionHistory('1.0') - FormatVersion=6 - Version(2022, 1) + ChecksumString='6a12cbfd15e157cadf37b8d1f78fb0a7' + ChecksumHistory('f4c81c746cee97b0fa0eca9b6026ba74', 'b76bafd4b64349f9b1bef83210e30246', '2deba8a0e7fff848e49beff26a952a82', 'b6452e22b0ea6d367603320594b474b6') + VersionHistory('1.0', '1.0', '1.0', '1.0') + FormatVersion=11 + Version(2023, 2) ComponentDefinitionType='DesignDerivedComponentDefinition' $end 'AnsoftComponentChkSum' $begin 'AnsoftComponentHeader' $begin 'Information' $begin 'ComponentInfo' - ComponentName='Circ_Patch_5GHz_hex' + ComponentName='Circ_Patch_5GHz_232' Company='' 'Company URL'='' 'Model Number'='' 'Help URL'='' - Version='1.0' + Version='2.0' Notes='' IconType='' Owner='Arien Sligar' Email='arien.sligar@ansys.com' - Date='9:39:23 AM Jun 14, 2022' + Date='9:25:10 AM Nov 06, 2023' HasLabel=false LabelImage='' $end 'ComponentInfo' @@ -27,9 +27,8 @@ $begin 'AnsoftComponentHeader' $begin 'DesignDataDescriptions' $begin 'DesignSettings' ProductName='HFSS' - SolutionType='DrivenModal' + SolutionType='HFSS Hybrid Modal Network' $begin 'DrivenOptions' - WithHybridAndArrays=true AutoOpen=false $end 'DrivenOptions' $end 'DesignSettings' @@ -48,232 +47,341 @@ LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ 3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ -Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ -gAooooAKKKKACiivPdO+Lfwp1j4h658ItJ+J3w91T4r+GNLt9c8S/DDTvGnhu9+Ifh7RLtbJ7XWNc8F\ -W2pNqWk6XKupacY7i4to4XF/CVciVNwB6FRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXyLOlt8Xvjj\ -oMfinTtI8WfBi9+HPxBuvAvhjxDo2k694Y8Sat4V134Qxy/F+yt9Tsz9o+0/8J3rejaVLLDJH/Z2gza\ -xo95NpvicvJjWq+yUbR5pTaSV7btK70bSTau7PVpdTCvW9ioWjzzqSUUr23aV27NqKbSbs9Wl1PpfxP\ -4w8I+CbCHVfGfinw54R0u4vI9Pg1LxPremaBYT38sNxcxWMN5qt1FHLeNb2l1IsSsXZLaRgpVGI4X/h\ -fnwXm/daR8TPCHivUG/499A8B6vB8QfFd/t+aX+yvCHgg6hqmr+VAJZp/stpN9ntraa6m8u3hmlTo/D\ -Hwu+Gfgm/m1XwZ8O/AvhHVLizk0+fUvDHhHw/oF/PYSzW9zLYzXmlafFJLZtcWlrI0TMUZ7aNipZFI7\ -qi1d680IeVpS/G8P8A0kdsQ9eaFPytKf8A5NzQ/wDSTyL/AIXb4N/6Avxd/wDEfvj1/wDO2o/4WT4y/\ -wCjfvi7/wCDr4C//Ptr12ijkqv4q1rfyRS+/m5/la3W99LL2daXxV+W38kUvv5/afK1ut76W8i/4SD4\ -43H+kWfwv+HNrZz/AL60tvEHxj12w163tpfngg1ux0H4OarY2erpEyLcxWWp6laRzK6W9/eQhLiQ+xf\ -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\ -FFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Z' +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' $end 'Preview' ContainsLightweightGeometry=false $end 'AnsoftComponentHeader' @@ -288,7 +396,7 @@ $begin 'ComponentBody' 'Allow Material Override'=true IncludeTemperatureDependence=false EnableFeedback=false - Temperatures(114, '22cel', 217, '22cel', 252, '22cel', 287, '22cel', 996, '22cel', 1043, '22cel', 1084, '22cel') + Temperatures(6, '22cel', 34, '22cel', 114, '22cel', 217, '22cel', 252, '22cel', 287, '22cel', 952, '22cel') ObjsEnabledForDeformation() $end 'DesignSettings' $begin 'DCThickness' @@ -302,335 +410,234 @@ $begin 'ComponentBody' ParentBndID=-1 InfGroundPlane=false $end 'antennaMetal_2' - $begin 'coax_outer_2' - ID=7 + $begin 'groundMetal' + ID=4 BoundType='Perfect E' IsComponent=false - Faces(288) + Objects(34) ParentBndID=-1 InfGroundPlane=false - $end 'coax_outer_2' - $begin 'PerfE1' - ID=27 + $end 'groundMetal' + $begin 'coax_outer_2' + ID=7 BoundType='Perfect E' IsComponent=false - Objects(1084) + Faces(288) ParentBndID=-1 InfGroundPlane=false - $end 'PerfE1' + $end 'coax_outer_2' $begin 'Rad1' - ID=28 + ID=21 BoundType='Radiation' IsComponent=false - Faces(1004) + Faces(953) ParentBndID=-1 UseAdaptiveIE=false IsFssReference=false IsForPML=false $end 'Rad1' $begin 'Primary1' - ID=29 + ID=22 BoundType='Primary' IsComponent=false - Faces(1006) + Faces(957) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1038 - ParentIDs(1020, 1024, 1019) + EntityID=975 + ParentIDs(970, 966, 963) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' + XPosition='17.645' + YPosition='17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=0 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1006 + uvpos_v=1 + uvpos_id=957 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1035 - ParentIDs(1016, 1024, 1017) + EntityID=972 + ParentIDs(960, 959, 970) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' - ZPosition='38.728' + XPosition='17.645' + YPosition='17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=1 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1006 + uvpos_v=1 + uvpos_id=957 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=false $end 'Primary1' $begin 'Secondary1' - ID=30 + ID=23 BoundType='Secondary' IsComponent=false - Faces(1009) + Faces(955) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1040 - ParentIDs(1022, 1027, 1021) + EntityID=976 + ParentIDs(968, 964, 963) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='-20.5' - YPosition='1.77635683940025e-15' + XPosition='17.645' + YPosition='-17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=1 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1009 + uvpos_v=1 + uvpos_id=955 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1033 - ParentIDs(1014, 1027, 1015) + EntityID=971 + ParentIDs(962, 959, 968) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='-20.5' - YPosition='1.77635683940025e-15' - ZPosition='38.728' + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=0 - uvpos_v=8.6651553141475598e-17 - uvpos_id=1009 + uvpos_v=1 + uvpos_id=955 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=true - primary=29 + primary=22 PhaseDelay='UseScanAngle' Phi='0deg' Theta='0deg' Phase='0deg' $end 'Secondary1' $begin 'Primary2' - ID=31 + ID=24 BoundType='Primary' IsComponent=false - Faces(1011) + Faces(958) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1037 - ParentIDs(1025, 1018, 1019) + EntityID=976 + ParentIDs(968, 964, 963) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='20.5' - YPosition='-1.77635683940025e-15' + XPosition='17.645' + YPosition='-17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0 + uvpos_u=1 uvpos_v=0 - uvpos_id=1011 + uvpos_id=958 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1030 - ParentIDs(1012, 1025, 1017) + EntityID=971 + ParentIDs(962, 959, 968) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='20.5' - YPosition='-1.77635683940025e-15' - ZPosition='38.728' + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=1 + uvpos_u=0 uvpos_v=0 - uvpos_id=1011 + uvpos_id=958 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=false $end 'Primary2' $begin 'Secondary2' - ID=32 + ID=25 BoundType='Secondary' IsComponent=false - Faces(1008) - ParentBndID=-1 - $begin 'CoordSysVector' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1039 - ParentIDs(1021, 1026, 1020) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='-10.25' - YPosition='-17.753520777581' - ZPosition='-1.272' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=1 - uvpos_v=-8.6651553141475635e-17 - uvpos_id=1008 - $end 'uv_block_name' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1034 - ParentIDs(1015, 1026, 1016) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='-10.25' - YPosition='-17.753520777581' - ZPosition='38.728' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=0 - uvpos_v=-8.6651553141475635e-17 - uvpos_id=1008 - $end 'uv_block_name' - $end 'CoordSysVector' - ReverseV=true - primary=31 - PhaseDelay='UseScanAngle' - Phi='0deg' - Theta='0deg' - Phase='0deg' - $end 'Secondary2' - $begin 'Primary3' - ID=33 - BoundType='Primary' - IsComponent=false - Faces(1010) + Faces(956) ParentBndID=-1 $begin 'CoordSysVector' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1036 - ParentIDs(1018, 1029, 1023) + EntityID=977 + ParentIDs(967, 965, 964) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='17.753520777581' + XPosition='-17.645' + YPosition='-17.645' ZPosition='-1.272' $end 'GeometryPosition' $begin 'uv_block_name' uvpos_u=0 - uvpos_v=8.6651553141475635e-17 - uvpos_id=1010 - $end 'uv_block_name' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1031 - ParentIDs(1012, 1029, 1013) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='10.25' - YPosition='17.753520777581' - ZPosition='38.728' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=1 - uvpos_v=8.6651553141475635e-17 - uvpos_id=1010 - $end 'uv_block_name' - $end 'CoordSysVector' - ReverseV=false - $end 'Primary3' - $begin 'Secondary3' - ID=34 - BoundType='Secondary' - IsComponent=false - Faces(1007) - ParentBndID=-1 - $begin 'CoordSysVector' - $begin 'GeometryPosition' - IsAttachedToEntity=true - EntityID=1038 - ParentIDs(1020, 1024, 1019) - FacetedBodyTriangleIndex=-1 - TriangleVertexIndex=-1 - hasXYZ=true - PositionType='OnVertex' - UParam=0 - VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' - ZPosition='-1.272' - $end 'GeometryPosition' - $begin 'uv_block_name' - uvpos_u=1 uvpos_v=0 - uvpos_id=1007 + uvpos_id=956 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=1035 - ParentIDs(1016, 1024, 1017) + EntityID=974 + ParentIDs(962, 961, 967) FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true PositionType='OnVertex' UParam=0 VParam=0 - XPosition='10.25' - YPosition='-17.753520777581' - ZPosition='38.728' + XPosition='-17.645' + YPosition='-17.645' + ZPosition='30' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0 + uvpos_u=1 uvpos_v=0 - uvpos_id=1007 + uvpos_id=956 $end 'uv_block_name' $end 'CoordSysVector' ReverseV=true - primary=33 + primary=24 PhaseDelay='UseScanAngle' Phi='0deg' Theta='0deg' Phase='0deg' - $end 'Secondary3' + $end 'Secondary2' $end 'Boundaries' $begin 'Excitations' $begin '1' @@ -638,13 +645,13 @@ $begin 'ComponentBody' BoundType='Wave Port' IsComponent=false Faces(289) + WavePortType='Modal' NumModes=1 PECCapPartID=-1 UseLineModeAlignment=false DoDeembed=false DeembedDist='0mm' ParentBndID=-1 - RenormalizeAllTerminals=true $begin 'Modes' $begin 'Mode1' ModeNum=1 @@ -652,12 +659,12 @@ $begin 'ComponentBody' $begin 'IntLine' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=293 - ParentIDs(291) + EntityID=291 FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true - PositionType='OnVertex' + closedU=true + PositionType='OnEdge' UParam=0 VParam=0 XPosition='-3.19117290349489' @@ -665,18 +672,18 @@ $begin 'ComponentBody' ZPosition='-3.772' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0.14644660940672569 - uvpos_v=0.5 + uvpos_u=0.0059288537549406911 + uvpos_v=0.49999999999999989 uvpos_id=289 $end 'uv_block_name' $begin 'GeometryPosition' IsAttachedToEntity=true - EntityID=258 - ParentIDs(256) + EntityID=256 FacetedBodyTriangleIndex=-1 TriangleVertexIndex=-1 hasXYZ=true - PositionType='OnVertex' + closedU=true + PositionType='OnEdge' UParam=0 VParam=0 XPosition='-2.76690883478296' @@ -684,8 +691,8 @@ $begin 'ComponentBody' ZPosition='-3.772' $end 'GeometryPosition' $begin 'uv_block_name' - uvpos_u=0.39601370864903718 - uvpos_v=0.49999999999999906 + uvpos_u=0.35468495698674718 + uvpos_v=0.5 uvpos_id=289 $end 'uv_block_name' $end 'IntLine' @@ -693,9 +700,9 @@ $begin 'ComponentBody' CharImp='Zpi' $end 'Mode1' $end 'Modes' + UseAnalyticAlignment=false ShowReporterFilter=false ReporterFilter(true) - UseAnalyticAlignment=false $end '1' $end 'Excitations' $begin 'Circuit Elements' @@ -792,34 +799,40 @@ $begin 'ComponentBody' $begin 'GeometryData' $begin 'Variables' $begin 'LocalVariables' - VariableProp('Ln', 'UD', '', '1.502mm') - VariableProp('Wn', 'UD', '', '3.004mm') - VariableProp('alpha', 'UD', '', '45deg') + VariableProp('beta2', 'UD', '', '-90deg') + VariableProp('beta4', 'UD', '', '-270deg') VariableProp('Sy', 'UD', '', '35.29mm') - VariableProp('Sf', 'UD', '', '3.663mm') - VariableProp('coax_inner_rad', 'UD', '', '0.25mm') - VariableProp('Sx', 'UD', '', '35.29mm') + VariableProp('subWidth', 'UD', '', '80mm') + VariableProp('Wn', 'UD', '', '3.004mm') VariableProp('Dp', 'UD', '', '23.53mm') + VariableProp('Ln', 'UD', '', '1.502mm') VariableProp('feedLength', 'UD', '', '2.5mm') - VariableProp('beta3', 'UD', '', '-180deg') + VariableProp('subLength', 'UD', '', '80mm') + VariableProp('coax_inner_rad', 'UD', '', '0.25mm') VariableProp('coax_outer_rad', 'UD', '', '0.85mm') + VariableProp('Sf', 'UD', '', '3.663mm') + VariableProp('Sx', 'UD', '', '35.29mm') VariableProp('H', 'UD', '', '1.272mm') + VariableProp('beta3', 'UD', '', '-180deg') + VariableProp('alpha', 'UD', '', '45deg') $end 'LocalVariables' $end 'Variables' $begin 'Datasets' $end 'Datasets' $begin 'GeometryCore' BlockVersionID=3 - DataVersion=5 - NativeKernel='ACIS' - NativeKernelVersionID=13 + DataVersion=7 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 Units='mm' + ModelExtents=10000 InstanceID=-1 $begin 'ValidationOptions' EntityCheckLevel='Strict' IgnoreUnclassifiedObjects=false SkipIntersectionChecks=false $end 'ValidationOptions' + ContainsGeomLinkUDM=false $begin 'GeometryOperations' BlockVersionID=2 $begin 'AnsoftRangedIDServerManager' @@ -827,7 +840,7 @@ $begin 'ComponentBody' IDServerObjectTypeID=0 IDServerRangeMin=0 IDServerRangeMax=2146483647 - NextUniqueID=1107 + NextUniqueID=979 MoveBackwards=false $end 'AnsoftRangedIDServer' $begin 'AnsoftRangedIDServer' @@ -877,18 +890,19 @@ $begin 'ComponentBody' $begin 'ToplevelParts' $begin 'GeometryPart' $begin 'Attributes' - Name='Circle_2' + Name='Soil' Flags='' - Color='(255 128 65)' + Color='(0 128 0)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"vacuum"' + MaterialValue='"Teflon (tm)"' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -896,226 +910,337 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='DuplicateBodyAroundAxis' - ID=113 - $begin 'CloneFromParameters' - KernelVersion=13 - SourceID=46 - WhichClone=0 - $end 'CloneFromParameters' - ParentPartID=114 - ReferenceUDMID=-1 - IsSuppressed=false - $begin 'OperationIdentity' - $begin 'Topology' - NumLumps=1 - NumShells=1 - NumFaces=1 - NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 - NumVertices=8 - $end 'Topology' - BodyID=114 - StartFaceID=115 - StartEdgeID=116 - StartVertexID=124 - NumNewFaces=1 - NumNewEdges=8 - NumNewVertices=8 - FaceNameAndIDMap() - EdgeNameAndIDMap() - VertexNameAndIDMap() - $begin 'CloneFromOperationIdentityHelper' - CloneFaces('50'='115') - CloneEdges('76'='116', '77'='117', '78'='118', '79'='119', '80'='120', '81'='121', '82'='122', '83'='123') - CloneVertices('84'='124', '85'='125', '86'='126', '87'='127', '88'='128', '89'='129', '90'='130', '91'='131') - CloneIdentityHelperKernelType=0 - $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(50) - OriginalEdgeIDs(76, 77, 78, 79, 80, 81, 82, 83) - OriginalVertexIDs(84, 85, 86, 87, 88, 89, 90, 91) - $end 'OperationIdentity' - PlaceHolderOpnId=112 - $end 'Operation' - $begin 'Operation' - OperationType='Move' - ID=154 + OperationType='Box' + ID=5 ReferenceCoordSystemID=1 - $begin 'TranslateParameters' + $begin 'BoxParameters' KernelVersion=13 - TargetID=114 - TranslateVectorX='-Sx/2' - TranslateVectorY='-Sy/2' - TranslateVectorZ='0' - $end 'TranslateParameters' - ParentPartID=114 + XPosition='-subWidth/2' + YPosition='-subLength/2' + ZPosition='0mm' + XSize='subWidth' + YSize='subLength' + ZSize='H' + $end 'BoxParameters' + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' - BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=113 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=448 + ID=428 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=449 + ID=429 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=430 + StartEdgeID=431 + StartVertexID=435 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=430 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=101.76000000000001 + FcUVMid(0, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=433 + EdgeFaces(7, 430) + $begin 'EdTolVts' + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=434 + EdgeFaces(9, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, -40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=432 + EdgeFaces(11, 430) + $begin 'EdTolVts' + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=431 + EdgeFaces(8, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=435 + VtPos(0, -40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=438 + VtPos(0, -40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=437 + VtPos(0, 40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=436 + VtPos(0, 40, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=448 - ParentOperation=154 + SplitToOperation=428 + ParentOperation=5 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=510 + ID=492 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=511 + ID=493 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=494 + StartEdgeID=495 + StartVertexID=499 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' - $end 'NewFaces' - $begin 'NewEdges' - $end 'NewEdges' - $begin 'NewVertices' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'Face' + NormalizedSerialNum=0 + ID=494 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000003 + FcUVMid(-20, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=498 + EdgeFaces(7, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=497 + EdgeFaces(10, 494) + $begin 'EdTolVts' + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-40, 0, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=496 + EdgeFaces(8, 494) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=495 + EdgeFaces(430, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0.63600000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=499 + VtPos(0, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=502 + VtPos(-40, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=501 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=500 + VtPos(0, 0, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=510 - ParentOperation=449 + SplitToOperation=492 + ParentOperation=429 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=590 + ID=588 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=114 + TargetID=6 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 @@ -1129,140 +1254,295 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=511 + TranformBaseOperationID=493 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=729 + ID=713 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=730 + ID=714 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=715 + StartEdgeID=716 + StartVertexID=720 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=715 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000038 + FcUVMid(-2.3550000000000044, -17.645, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=719 + EdgeFaces(7, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=716 + EdgeFaces(10, 715) + $begin 'EdTolVts' + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-22.355, -17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=717 + EdgeFaces(8, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000044, -17.645, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=718 + EdgeFaces(430, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(17.645, -17.645, -0.63600000000000001) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=722 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=720 + VtPos(-22.355, -17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=721 + VtPos(-22.355000000000008, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=723 + VtPos(17.645, -17.645, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=729 - ParentOperation=590 + SplitToOperation=713 + ParentOperation=588 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=757 + ID=741 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=114 + SourcePartID=6 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=758 + ID=742 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=114 + ParentPartID=6 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=6 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 + NumLoops=6 + NumCoedges=24 + NumEdges=12 NumVertices=8 $end 'Topology' BodyID=-1 - StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 - NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + StartFaceID=743 + StartEdgeID=744 + StartVertexID=748 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=743 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=44.888880000000029 + FcUVMid(-17.645, 0, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=745 + EdgeFaces(7, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=747 + EdgeFaces(8, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=746 + EdgeFaces(494, 743) + $begin 'EdTolVts' + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=744 + EdgeFaces(715, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, -17.645, -0.63600000000000045) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=748 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=750 + VtPos(-17.645, 17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=751 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=749 + VtPos(-17.645, -17.645, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=757 - ParentOperation=730 + SplitToOperation=741 + ParentOperation=714 $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='FeedPin_2' + Name='Ground' Flags='' Color='(255 128 65)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"pec"' + MaterialValue='"vacuum"' SurfaceMaterialValue='""' - SolveInside=false + SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -1270,129 +1550,229 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='DuplicateBodyAroundAxis' - ID=216 - $begin 'CloneFromParameters' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' KernelVersion=13 - SourceID=157 - WhichClone=0 - $end 'CloneFromParameters' - ParentPartID=217 + XStart='-subWidth/2' + YStart='-subLength/2' + ZStart='0mm' + Width='subWidth' + Height='subLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 - NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 $end 'Topology' - BodyID=217 - StartFaceID=218 - StartEdgeID=221 - StartVertexID=223 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'CloneFromOperationIdentityHelper' - CloneFaces('158'='218', '159'='219', '160'='220') - CloneEdges('161'='221', '162'='222') - CloneVertices('163'='223', '164'='224') - CloneIdentityHelperKernelType=0 - $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(158, 159, 160) - OriginalEdgeIDs(161, 162) - OriginalVertexIDs(163, 164) $end 'OperationIdentity' - PlaceHolderOpnId=215 $end 'Operation' $begin 'Operation' - OperationType='Move' - ID=237 - ReferenceCoordSystemID=1 - $begin 'TranslateParameters' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' KernelVersion=13 - TargetID=217 - TranslateVectorX='-Sx/2' - TranslateVectorY='-Sy/2' - TranslateVectorZ='0' - $end 'TranslateParameters' - ParentPartID=217 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 + NumLoops=1 NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumEdges=4 + NumVertices=4 $end 'Topology' BodyID=-1 - StartFaceID=-1 + StartFaceID=44 StartEdgeID=-1 StartVertexID=-1 - NumNewFaces=0 + NumNewFaces=1 NumNewEdges=0 NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $end 'OperationIdentity' - TranformBaseOperationID=216 - $end 'Operation' - $begin 'Operation' - OperationType='Split' - ID=464 + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6400.0000000000009 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-40, -40, 0, 4.9999999999999998e-07) + TolVt(40, -40, 0, 4.9999999999999998e-07) + TolVt(40, 40, 0, 4.9999999999999998e-07) + TolVt(-40, 40, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=390 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=34 + NumToolParts=4 + ToolParts(199, 370, 376, 382) + $end 'SubtractParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=5 + NumCoedges=8 + NumEdges=8 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=391 + StartVertexID=395 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=391 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(15.65590862452224, -15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=392 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-19.634091375477759, -19.634091375477759, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=393 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-15.65590862452224, 15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=394 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(19.634091375477759, 19.634091375477759, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=43 + NumToolOperations=4 + ToolOperations(386, 387, 388, 389) + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=439 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=465 + ID=440 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=3 + NumCoedges=6 + NumEdges=6 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=441 + StartVertexID=442 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1400,57 +1780,77 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=441 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=443 + VtPos(0, 40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=442 + VtPos(0, -40, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=464 - ParentOperation=237 + SplitToOperation=439 + ParentOperation=390 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=514 + ID=503 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=515 + ID=504 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=505 + StartVertexID=506 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1458,39 +1858,59 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=505 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=507 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=506 + VtPos(0, 0, 0) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=514 - ParentOperation=465 + SplitToOperation=503 + ParentOperation=440 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=591 + ID=589 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=217 + TargetID=34 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1503,50 +1923,50 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=515 + TranformBaseOperationID=504 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=731 + ID=724 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=732 + ID=725 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=726 + StartVertexID=727 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1554,57 +1974,77 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=726 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-22.355, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, -1.272) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=728 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=727 + VtPos(-22.355, -17.645, -1.272) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=731 - ParentOperation=591 + SplitToOperation=724 + ParentOperation=589 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=759 + ID=752 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=217 + SourcePartID=34 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=760 + ID=753 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=217 + ParentPartID=34 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=-1 - StartVertexID=-1 + StartEdgeID=754 + StartVertexID=755 NumNewFaces=0 - NumNewEdges=0 - NumNewVertices=0 + NumNewEdges=1 + NumNewVertices=2 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -1612,31 +2052,52 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=754 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' $end 'NewEdges' $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=755 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=756 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=759 - ParentOperation=732 + SplitToOperation=752 + ParentOperation=725 $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_pin_2' + Name='Circle_2' Flags='' Color='(255 128 65)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"pec"' + MaterialValue='"vacuum"' SurfaceMaterialValue='""' - SolveInside=false + SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -1645,72 +2106,72 @@ $begin 'ComponentBody' $begin 'Operations' $begin 'Operation' OperationType='DuplicateBodyAroundAxis' - ID=251 + ID=113 $begin 'CloneFromParameters' KernelVersion=13 - SourceID=166 + SourceID=46 WhichClone=0 $end 'CloneFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' - BodyID=252 - StartFaceID=253 - StartEdgeID=256 - StartVertexID=258 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + BodyID=114 + StartFaceID=115 + StartEdgeID=116 + StartVertexID=124 + NumNewFaces=1 + NumNewEdges=8 + NumNewVertices=8 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'CloneFromOperationIdentityHelper' - CloneFaces('167'='253', '168'='254', '169'='255') - CloneEdges('170'='256', '171'='257') - CloneVertices('172'='258', '173'='259') - CloneIdentityHelperKernelType=0 + CloneFaces('50'='115') + CloneEdges('76'='116', '77'='117', '78'='118', '79'='119', '80'='120', '81'='121', '82'='122', '83'='123') + CloneVertices('84'='124', '85'='125', '86'='126', '87'='127', '88'='128', '89'='129', '90'='130', '91'='131') + CloneIdentityHelperKernelType=0 $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(167, 168, 169) - OriginalEdgeIDs(170, 171) - OriginalVertexIDs(172, 173) + OriginalFaceIDs(50) + OriginalEdgeIDs(76, 77, 78, 79, 80, 81, 82, 83) + OriginalVertexIDs(84, 85, 86, 87, 88, 89, 90, 91) $end 'OperationIdentity' - PlaceHolderOpnId=250 + PlaceHolderOpnId=112 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=272 + ID=154 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=252 + TargetID=114 TranslateVectorX='-Sx/2' TranslateVectorY='-Sy/2' TranslateVectorZ='0' $end 'TranslateParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1723,42 +2184,42 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=251 + TranformBaseOperationID=113 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=470 + ID=448 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=471 + ID=449 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1780,43 +2241,43 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=470 - ParentOperation=272 + SplitToOperation=448 + ParentOperation=154 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=518 + ID=510 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=519 + ID=511 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1838,33 +2299,33 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=518 - ParentOperation=471 + SplitToOperation=510 + ParentOperation=449 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=592 + ID=590 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=252 + TargetID=114 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1877,42 +2338,42 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=519 + TranformBaseOperationID=511 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=733 + ID=729 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=734 + ID=730 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1934,43 +2395,43 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=733 - ParentOperation=592 + SplitToOperation=729 + ParentOperation=590 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=761 + ID=757 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=252 + SourcePartID=114 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=762 + ID=758 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=252 + ParentPartID=114 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -1992,25 +2453,26 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=761 - ParentOperation=734 + SplitToOperation=757 + ParentOperation=730 $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_2' + Name='FeedPin_2' Flags='' - Color='(128 255 255)' + Color='(255 128 65)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"Teflon (tm)"' + MaterialValue='"pec"' SurfaceMaterialValue='""' - SolveInside=true + SolveInside=false ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -2019,13 +2481,13 @@ $begin 'ComponentBody' $begin 'Operations' $begin 'Operation' OperationType='DuplicateBodyAroundAxis' - ID=286 + ID=216 $begin 'CloneFromParameters' KernelVersion=13 - SourceID=175 + SourceID=157 WhichClone=0 $end 'CloneFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2037,42 +2499,42 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' - BodyID=287 - StartFaceID=288 - StartEdgeID=291 - StartVertexID=293 + BodyID=217 + StartFaceID=218 + StartEdgeID=221 + StartVertexID=-1 NumNewFaces=3 NumNewEdges=2 - NumNewVertices=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'CloneFromOperationIdentityHelper' - CloneFaces('176'='288', '177'='289', '178'='290') - CloneEdges('179'='291', '180'='292') - CloneVertices('181'='293', '182'='294') + CloneFaces('158'='218', '159'='219', '160'='220') + CloneEdges('161'='221', '162'='222') + CloneVertices('163'='223', '164'='224') CloneIdentityHelperKernelType=0 $end 'CloneFromOperationIdentityHelper' - OriginalFaceIDs(176, 177, 178) - OriginalEdgeIDs(179, 180) - OriginalVertexIDs(181, 182) + OriginalFaceIDs(158, 159, 160) + OriginalEdgeIDs(161, 162) + OriginalVertexIDs() $end 'OperationIdentity' - PlaceHolderOpnId=285 + PlaceHolderOpnId=215 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=307 + ID=237 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=287 + TargetID=217 TranslateVectorX='-Sx/2' TranslateVectorY='-Sy/2' TranslateVectorZ='0' $end 'TranslateParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2084,7 +2546,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2097,30 +2559,30 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=286 + TranformBaseOperationID=216 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=476 + ID=464 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='YZ' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=477 + ID=465 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2132,7 +2594,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2154,31 +2616,31 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=476 - ParentOperation=307 + SplitToOperation=464 + ParentOperation=237 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=522 + ID=514 ReferenceCoordSystemID=1 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='ZX' WhichSide='NegativeOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=523 + ID=515 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2190,7 +2652,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2212,21 +2674,21 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=522 - ParentOperation=477 + SplitToOperation=514 + ParentOperation=465 $end 'Operation' $begin 'Operation' OperationType='Move' - ID=593 + ID=591 ReferenceCoordSystemID=1 $begin 'TranslateParameters' KernelVersion=13 - TargetID=287 + TargetID=217 TranslateVectorX='17.645mm' TranslateVectorY='17.645mm' TranslateVectorZ='-1.272mm' $end 'TranslateParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2238,7 +2700,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2251,30 +2713,30 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=523 + TranformBaseOperationID=515 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=735 + ID=731 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='ZX' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=736 + ID=732 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2286,7 +2748,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2308,31 +2770,31 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=735 - ParentOperation=593 + SplitToOperation=731 + ParentOperation=591 $end 'Operation' $begin 'Operation' OperationType='Split' - ID=763 + ID=759 ReferenceCoordSystemID=709 $begin 'SplitToParameters' KernelVersion=13 - SourcePartID=287 + SourcePartID=217 SplitPlane='YZ' WhichSide='PositiveOnly' ToolType='PlaneTool' ToolEntityID=-1 ToolPartID=-1 $end 'SplitToParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 $end 'Operation' $begin 'Operation' OperationType='SplitEdit' - ID=764 + ID=760 $begin 'SplitFromParameters' $end 'SplitFromParameters' - ParentPartID=287 + ParentPartID=217 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2344,7 +2806,7 @@ $begin 'ComponentBody' NumLoops=4 NumCoedges=4 NumEdges=2 - NumVertices=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -2366,36 +2828,26 @@ $begin 'ComponentBody' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' SplitFromOperation=-1 - SplitToOperation=763 - ParentOperation=736 + SplitToOperation=759 + ParentOperation=732 $end 'Operation' - $begin 'BodyFromFaceToOperation' - OperationType='BodyFromFace' - ID=1098 - $begin 'BodyFromFaceToParameters' - KernelVersion=13 - LocalOpPart=287 - FacesToDetach[1: 290] - $end 'BodyFromFaceToParameters' - ParentPartID=287 - ReferenceUDMID=-1 - $end 'BodyFromFaceToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='Cylinder1' - Flags='Wireframe#' - Color='(143 175 143)' - Transparency=0 + Name='coax_pin_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"vacuum"' + MaterialValue='"pec"' SurfaceMaterialValue='""' - SolveInside=true + SolveInside=false ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -2403,323 +2855,187 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=995 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + OperationType='DuplicateBodyAroundAxis' + ID=251 + $begin 'CloneFromParameters' KernelVersion=13 - XCenter='0mm' - YCenter='0mm' - ZCenter='-1.272mm' - Radius='20.5mm' - Height='40mm' - WhichAxis='Z' - NumSides='6' - $end 'CylinderParameters' - ParentPartID=996 + SourceID=166 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=8 + NumFaces=3 NumWires=0 - NumLoops=8 - NumCoedges=36 - NumEdges=18 - NumVertices=12 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=996 - StartFaceID=1004 - StartEdgeID=1012 - StartVertexID=1030 - NumNewFaces=8 - NumNewEdges=18 - NumNewVertices=12 + BodyID=252 + StartFaceID=253 + StartEdgeID=256 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('167'='253', '168'='254', '169'='255') + CloneEdges('170'='256', '171'='257') + CloneVertices('172'='258', '173'='259') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(167, 168, 169) + OriginalEdgeIDs(170, 171) + OriginalVertexIDs() $end 'OperationIdentity' + PlaceHolderOpnId=250 $end 'Operation' - $end 'Operations' - $end 'GeometryPart' - $begin 'GeometryPart' - $begin 'Attributes' - Name='sub' - Flags='' - Color='(143 175 143)' - Transparency=0 - PartCoordinateSystem=1 - UDMId=-1 - GroupId=-1 - MaterialValue='"Teflon (tm)"' - SurfaceMaterialValue='""' - SolveInside=true - ShellElement=false - ShellElementThickness='0mm' - IsMaterialEditable=true - UseMaterialAppearance=false - IsLightweight=false - IsAlwaysHidden=false - $end 'Attributes' - $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=1042 + OperationType='Move' + ID=272 ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + $begin 'TranslateParameters' KernelVersion=13 - XCenter='0mm' - YCenter='0mm' - ZCenter='-1.272mm' - Radius='20.5mm' - Height='H' - WhichAxis='Z' - NumSides='6' - $end 'CylinderParameters' - ParentPartID=1043 + TargetID=252 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=8 + NumFaces=3 NumWires=0 - NumLoops=8 - NumCoedges=36 - NumEdges=18 - NumVertices=12 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=1043 - StartFaceID=1044 - StartEdgeID=1052 - StartVertexID=1070 - NumNewFaces=8 - NumNewEdges=18 - NumNewVertices=12 + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' + TranformBaseOperationID=251 $end 'Operation' - $begin 'BodyFromFaceToOperation' - OperationType='BodyFromFace' - ID=1082 - $begin 'BodyFromFaceToParameters' + $begin 'Operation' + OperationType='Split' + ID=470 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' KernelVersion=13 - LocalOpPart=1043 - FacesToDetach[1: 1045] - $end 'BodyFromFaceToParameters' - ParentPartID=1043 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 ReferenceUDMID=-1 - $end 'BodyFromFaceToOperation' - $end 'Operations' - $end 'GeometryPart' - $begin 'GeometryPart' - $begin 'Attributes' - Name='sub_ObjectFromFace1' - Flags='' - Color='(143 175 143)' - Transparency=0 - PartCoordinateSystem=1 - UDMId=-1 - GroupId=-1 - MaterialValue='"Teflon (tm)"' - SurfaceMaterialValue='""' - SolveInside=true - ShellElement=false - ShellElementThickness='0mm' - IsMaterialEditable=true - UseMaterialAppearance=false - IsLightweight=false - IsAlwaysHidden=false - $end 'Attributes' - $begin 'Operations' + $end 'Operation' $begin 'Operation' - OperationType='BodyFromFaceFrom' - ID=1083 - $begin 'BodyFromFaceFromParameters' - KernelVersion=13 - WhichFace=0 - $end 'BodyFromFaceFromParameters' - ParentPartID=1084 + OperationType='SplitEdit' + ID=471 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=1 - NumCoedges=6 - NumEdges=6 - NumVertices=6 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=1084 - StartFaceID=1085 - StartEdgeID=1086 - StartVertexID=1092 - NumNewFaces=1 - NumNewEdges=6 - NumNewVertices=6 + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $begin 'GeomTopolBasedOperationIdentityHelper' $begin 'NewFaces' - $begin 'Face' - NormalizedSerialNum=0 - ID=1085 - $begin 'FaceGeomTopol' - FaceTopol(1, 6, 6, 6) - $begin 'FaceGeometry' - Area=1091.841527821231 - FcUVMid(8.8817841970012513e-16, -1.5383701491068513e-15, -1.272) - $begin 'FcTolVts' - TolVt(10.250000000000002, 17.753520777580988, -1.272, 0) - TolVt(20.5, -1.7763568394002505e-15, -1.272, 0) - TolVt(10.249999999999995, -17.753520777580999, -1.272, 0) - TolVt(-10.25, -17.753520777580992, -1.272, 0) - TolVt(-20.5, 1.7763568394002505e-15, -1.272, 0) - TolVt(-10.249999999999996, 17.753520777580995, -1.272, 0) - $end 'FcTolVts' - $end 'FaceGeometry' - $end 'FaceGeomTopol' - $end 'Face' $end 'NewFaces' $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=1086 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(10.250000000000002, 17.753520777580988, -1.272, 0) - TolVt(20.5, -1.7763568394002505e-15, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(15.375, 8.876760388790494, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=1 - ID=1087 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(20.5, -1.7763568394002505e-15, -1.272, 0) - TolVt(10.249999999999995, -17.753520777580999, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(15.374999999999996, -8.8767603887904993, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=2 - ID=1088 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(10.249999999999995, -17.753520777580999, -1.272, 0) - TolVt(-10.25, -17.753520777580992, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-2.6645352591003757e-15, -17.753520777580992, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=3 - ID=1089 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-10.25, -17.753520777580992, -1.272, 0) - TolVt(-20.5, 1.7763568394002505e-15, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-15.375, -8.876760388790494, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=4 - ID=1090 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-20.5, 1.7763568394002505e-15, -1.272, 0) - TolVt(-10.249999999999996, 17.753520777580995, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-15.375, 8.8767603887904993, -1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=5 - ID=1091 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-10.249999999999996, 17.753520777580995, -1.272, 0) - TolVt(10.250000000000002, 17.753520777580988, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(2.6645352591003757e-15, 17.753520777580992, -1.272) - $end 'Edge' $end 'NewEdges' $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=1092 - VtPos(10.250000000000002, 17.753520777580988, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=1 - ID=1093 - VtPos(20.5, -1.7763568394002505e-15, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=2 - ID=1094 - VtPos(10.249999999999995, -17.753520777580999, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=3 - ID=1095 - VtPos(-10.25, -17.753520777580992, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=4 - ID=1096 - VtPos(-20.5, 1.7763568394002505e-15, -1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=5 - ID=1097 - VtPos(-10.249999999999996, 17.753520777580995, -1.272) - $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - BodyFromFaceToOpnId=1082 - SourceOperationID=1042 + SplitFromOperation=-1 + SplitToOperation=470 + ParentOperation=272 $end 'Operation' $begin 'Operation' - OperationType='Substract' - ID=1104 - $begin 'SubtractParameters' + OperationType='Split' + ID=518 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' KernelVersion=13 - KeepOriginals=false - BlankPart=1084 - NumToolParts=1 - ToolParts(1100) - $end 'SubtractParameters' - ParentPartID=1084 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=519 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=2 - NumCoedges=7 - NumEdges=7 - NumVertices=7 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=1105 - StartVertexID=1106 + StartEdgeID=-1 + StartVertexID=-1 NumNewFaces=0 - NumNewEdges=1 - NumNewVertices=1 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -2727,51 +3043,929 @@ $begin 'ComponentBody' $begin 'NewFaces' $end 'NewFaces' $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=1105 - EdgeFaces(1085) - $begin 'EdTolVts' - TolVt(-3.1911729034948877, -3.1911729034948912, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-1.9890913754777564, -1.9890913754777597, -1.272) - $end 'Edge' $end 'NewEdges' $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=1106 - VtPos(-3.1911729034948877, -3.1911729034948912, -1.272) - $end 'Vertex' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' - $begin 'MergedFaces' - $end 'MergedFaces' - $begin 'MergedEdges' - $end 'MergedEdges' $end 'OperationIdentity' - BlankOperation=1083 - NumToolOperations=1 - ToolOperations(1099) + SplitFromOperation=-1 + SplitToOperation=518 + ParentOperation=471 $end 'Operation' - $end 'Operations' - $end 'GeometryPart' - $end 'ToplevelParts' - $begin 'OperandParts' - $begin 'GeometryPart' - $begin 'Attributes' + $begin 'Operation' + OperationType='Move' + ID=592 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=252 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=519 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=733 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=734 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=733 + ParentOperation=592 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=761 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=762 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=761 + ParentOperation=734 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_2' + Flags='' + Color='(128 255 255)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=286 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=175 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=287 + StartFaceID=288 + StartEdgeID=291 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('176'='288', '177'='289', '178'='290') + CloneEdges('179'='291', '180'='292') + CloneVertices('181'='293', '182'='294') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(176, 177, 178) + OriginalEdgeIDs(179, 180) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=285 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=307 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=286 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=476 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=477 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=476 + ParentOperation=307 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=522 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=523 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=522 + ParentOperation=477 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=593 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=523 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=735 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=736 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=735 + ParentOperation=593 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=763 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=764 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=763 + ParentOperation=736 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=951 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-17.645mm' + YPosition='17.645mm' + ZPosition='-1.272mm' + XSize='35.29mm' + YSize='-35.29mm' + ZSize='30mm+H' + $end 'BoxParameters' + ParentPartID=952 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=952 + StartFaceID=953 + StartEdgeID=959 + StartVertexID=971 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' Name='Circle_0' Flags='' - Color='(255 128 65)' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Circle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'CircleParameters' + KernelVersion=13 + XCenter='0' + YCenter='0' + ZCenter='H' + Radius='Dp/2' + WhichAxis='Z' + NumSegments='0' + $end 'CircleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=48 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=49 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=50 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=50 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=434.84425400497821 + FcUVMid(0, 0, 1.272) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=75 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=2 + ToolParts(52, 64) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=76 + StartVertexID=84 + NumNewFaces=0 + NumNewEdges=8 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=78 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=77 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=76 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=80 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=81 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=82 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=83 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(7.2039847959843046e-16, 11.765000000000001, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=7 + ID=79 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.1611954387952916e-15, -11.765000000000001, 1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=86 + VtPos(-10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=85 + VtPos(-10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=87 + VtPos(-11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=84 + VtPos(-11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=89 + VtPos(10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=90 + VtPos(10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=6 + ID=88 + VtPos(11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=7 + ID=91 + VtPos(11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=49 + NumToolOperations=2 + ToolOperations(61, 73) + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=112 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=46 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=46 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_LXHI3Y' + Flags='' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"vacuum"' + MaterialValue='""' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -2779,19 +3973,140 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Circle' - ID=45 + OperationType='Rectangle' + ID=51 ReferenceCoordSystemID=1 - $begin 'CircleParameters' + $begin 'RectangleParameters' KernelVersion=13 - XCenter='0' - YCenter='0' - ZCenter='H' - Radius='Dp/2' + XStart='Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='-Ln' + Height='Wn' WhichAxis='Z' - NumSegments='0' - $end 'CircleParameters' - ParentPartID=46 + $end 'RectangleParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=52 + StartFaceID=-1 + StartEdgeID=53 + StartVertexID=57 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=61 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=52 + $end 'LocalOperationParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=62 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=4.5120080000000016 + FcUVMid(11.013999999999999, 0, 1.272) + $begin 'FcTolVts' + TolVt(11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=51 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_0TW2OL' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=63 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='Ln' + Height='Wn' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=64 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2801,17 +4116,17 @@ $begin 'ComponentBody' NumFaces=0 NumWires=1 NumLoops=0 - NumCoedges=1 - NumEdges=1 - NumVertices=1 + NumCoedges=0 + NumEdges=4 + NumVertices=4 $end 'Topology' - BodyID=46 + BodyID=64 StartFaceID=-1 - StartEdgeID=47 - StartVertexID=48 + StartEdgeID=65 + StartVertexID=69 NumNewFaces=0 - NumNewEdges=1 - NumNewVertices=1 + NumNewEdges=4 + NumNewVertices=4 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -2819,12 +4134,12 @@ $begin 'ComponentBody' $end 'Operation' $begin 'Operation' OperationType='CoverLines' - ID=49 + ID=73 $begin 'LocalOperationParameters' KernelVersion=13 - LocalOpPart=46 + LocalOpPart=64 $end 'LocalOperationParameters' - ParentPartID=46 + ParentPartID=64 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -2834,12 +4149,12 @@ $begin 'ComponentBody' NumFaces=1 NumWires=0 NumLoops=1 - NumCoedges=1 - NumEdges=1 - NumVertices=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 $end 'Topology' BodyID=-1 - StartFaceID=50 + StartFaceID=74 StartEdgeID=-1 StartVertexID=-1 NumNewFaces=1 @@ -2852,14 +4167,17 @@ $begin 'ComponentBody' $begin 'NewFaces' $begin 'Face' NormalizedSerialNum=0 - ID=50 + ID=74 $begin 'FaceGeomTopol' - FaceTopol(1, 1, 1, 1) + FaceTopol(1, 4, 4, 4) $begin 'FaceGeometry' - Area=434.84425400497832 - FcUVMid(-8.8817841970012523e-16, -8.8817841970012523e-16, 1.272) + Area=4.5120080000000016 + FcUVMid(-11.013999999999999, 0, 1.272) $begin 'FcTolVts' - TolVt(11.765000000000001, 0, 1.272, 0) + TolVt(-11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) $end 'FcTolVts' $end 'FaceGeometry' $end 'FaceGeomTopol' @@ -2871,210 +4189,255 @@ $begin 'ComponentBody' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - ParentOperationID=45 + ParentOperationID=63 $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='FeedPin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' $begin 'Operation' - OperationType='Substract' - ID=75 - $begin 'SubtractParameters' + OperationType='Cylinder' + ID=156 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' KernelVersion=13 - KeepOriginals=false - BlankPart=46 - NumToolParts=2 - ToolParts(52, 64) - $end 'SubtractParameters' - ParentPartID=46 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='H' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=157 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=1 - NumCoedges=8 - NumEdges=8 - NumVertices=8 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=157 + StartFaceID=158 + StartEdgeID=161 + StartVertexID=163 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=204 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=157 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=157 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 - StartEdgeID=76 - StartVertexID=84 + StartEdgeID=-1 + StartVertexID=-1 NumNewFaces=0 - NumNewEdges=8 - NumNewVertices=8 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=156 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=215 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=157 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=157 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_pin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=165 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='-feedLength' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=166 + StartFaceID=167 + StartEdgeID=170 + StartVertexID=172 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'GeomTopolBasedOperationIdentityHelper' - $begin 'NewFaces' - $end 'NewFaces' - $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=76 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-11.668728336884017, 1.502, 1.272, 0) - TolVt(-10.263, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-10.965864168442009, 1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=1 - ID=77 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-10.263, 1.502, 1.272, 0) - TolVt(-10.263, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-10.263, 0, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=2 - ID=78 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-10.263, -1.502, 1.272, 0) - TolVt(-11.668728336884017, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-10.965864168442009, -1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=3 - ID=79 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(-11.668728336884017, -1.502, 1.272, 0) - TolVt(11.668728336884017, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-2.1611954387952916e-15, -11.765000000000001, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=4 - ID=80 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(11.668728336884017, -1.502, 1.272, 0) - TolVt(10.263, -1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(10.965864168442009, -1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=5 - ID=81 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(10.263, -1.502, 1.272, 0) - TolVt(10.263, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(10.263, 0, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=6 - ID=82 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(10.263, 1.502, 1.272, 0) - TolVt(11.668728336884017, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(10.965864168442009, 1.502, 1.272) - $end 'Edge' - $begin 'Edge' - NormalizedSerialNum=7 - ID=83 - EdgeFaces(50) - $begin 'EdTolVts' - TolVt(11.668728336884017, 1.502, 1.272, 0) - TolVt(-11.668728336884017, 1.502, 1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(3.3327532565414241e-15, 11.765000000000001, 1.272) - $end 'Edge' - $end 'NewEdges' - $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=84 - VtPos(-11.668728336884017, 1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=1 - ID=85 - VtPos(-10.263, 1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=2 - ID=86 - VtPos(-10.263, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=3 - ID=87 - VtPos(-11.668728336884017, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=4 - ID=88 - VtPos(11.668728336884017, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=5 - ID=89 - VtPos(10.263, -1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=6 - ID=90 - VtPos(10.263, 1.502, 1.272) - $end 'Vertex' - $begin 'Vertex' - NormalizedSerialNum=7 - ID=91 - VtPos(11.668728336884017, 1.502, 1.272) - $end 'Vertex' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' - $begin 'MergedFaces' - $end 'MergedFaces' - $begin 'MergedEdges' - $end 'MergedEdges' $end 'OperationIdentity' - BlankOperation=49 - NumToolOperations=2 - ToolOperations(61, 73) + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=239 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=166 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=165 $end 'Operation' $begin 'CloneToOperation' OperationType='DuplicateAroundAxis' - ID=112 + ID=250 ReferenceCoordSystemID=1 $begin 'DuplicateAroundAxisParameters' KernelVersion=13 - ClonedEntity=46 + ClonedEntity=166 CreateNewObjects=true WhichAxis='Z' AngleStr='beta3' NumClones='2' $end 'DuplicateAroundAxisParameters' - ParentPartID=46 + ParentPartID=166 ReferenceUDMID=-1 $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='NewObject_LXHI3Y' + Name='coax_0' Flags='' - Color='(132 132 193)' + Color='(128 255 255)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='""' + MaterialValue='"Teflon (tm)"' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3082,108 +4445,102 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Rectangle' - ID=51 + OperationType='Cylinder' + ID=174 ReferenceCoordSystemID=1 - $begin 'RectangleParameters' + $begin 'CylinderParameters' KernelVersion=13 - XStart='Dp/2' - YStart='-Wn/2' - ZStart='H' - Width='-Ln' - Height='Wn' + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' + Height='-feedLength' WhichAxis='Z' - $end 'RectangleParameters' - ParentPartID=52 + NumSides='0' + $end 'CylinderParameters' + ParentPartID=175 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=0 - NumWires=1 - NumLoops=0 + NumFaces=3 + NumWires=0 + NumLoops=4 NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumEdges=2 + NumVertices=0 $end 'Topology' - BodyID=52 - StartFaceID=-1 - StartEdgeID=53 - StartVertexID=57 - NumNewFaces=0 - NumNewEdges=4 - NumNewVertices=4 + BodyID=175 + StartFaceID=176 + StartEdgeID=179 + StartVertexID=181 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' $end 'Operation' $begin 'Operation' - OperationType='CoverLines' - ID=61 - $begin 'LocalOperationParameters' + OperationType='Rotate' + ID=274 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' KernelVersion=13 - LocalOpPart=52 - $end 'LocalOperationParameters' - ParentPartID=52 + TargetID=175 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=175 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=1 + NumFaces=3 NumWires=0 - NumLoops=1 + NumLoops=4 NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumEdges=2 + NumVertices=0 $end 'Topology' BodyID=-1 - StartFaceID=62 + StartFaceID=-1 StartEdgeID=-1 StartVertexID=-1 - NumNewFaces=1 + NumNewFaces=0 NumNewEdges=0 NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'GeomTopolBasedOperationIdentityHelper' - $begin 'NewFaces' - $begin 'Face' - NormalizedSerialNum=0 - ID=62 - $begin 'FaceGeomTopol' - FaceTopol(1, 4, 4, 4) - $begin 'FaceGeometry' - Area=4.5120080000000016 - FcUVMid(11.013999999999999, 0, 1.2720000000000002) - $begin 'FcTolVts' - TolVt(11.765000000000001, -1.502, 1.272, 0) - TolVt(10.263, -1.502, 1.272, 0) - TolVt(10.263, 1.502, 1.272, 0) - TolVt(11.765000000000001, 1.502, 1.272, 0) - $end 'FcTolVts' - $end 'FaceGeometry' - $end 'FaceGeomTopol' - $end 'Face' - $end 'NewFaces' - $begin 'NewEdges' - $end 'NewEdges' - $begin 'NewVertices' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - ParentOperationID=51 + TranformBaseOperationID=174 $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=285 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=175 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=175 + ReferenceUDMID=-1 + $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='NewObject_0TW2OL' + Name='NewObject_84DCWV' Flags='' Color='(132 132 193)' Transparency=0.29999999999999999 @@ -3195,6 +4552,7 @@ $begin 'ComponentBody' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3202,19 +4560,19 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Rectangle' - ID=63 + OperationType='Circle' + ID=198 ReferenceCoordSystemID=1 - $begin 'RectangleParameters' + $begin 'CircleParameters' KernelVersion=13 - XStart='-Dp/2' - YStart='-Wn/2' - ZStart='H' - Width='Ln' - Height='Wn' + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' WhichAxis='Z' - $end 'RectangleParameters' - ParentPartID=64 + NumSegments='0' + $end 'CircleParameters' + ParentPartID=199 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -3224,17 +4582,17 @@ $begin 'ComponentBody' NumFaces=0 NumWires=1 NumLoops=0 - NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumCoedges=0 + NumEdges=1 + NumVertices=0 $end 'Topology' - BodyID=64 + BodyID=199 StartFaceID=-1 - StartEdgeID=65 - StartVertexID=69 + StartEdgeID=200 + StartVertexID=201 NumNewFaces=0 - NumNewEdges=4 - NumNewVertices=4 + NumNewEdges=1 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() @@ -3242,12 +4600,12 @@ $begin 'ComponentBody' $end 'Operation' $begin 'Operation' OperationType='CoverLines' - ID=73 + ID=202 $begin 'LocalOperationParameters' KernelVersion=13 - LocalOpPart=64 + LocalOpPart=199 $end 'LocalOperationParameters' - ParentPartID=64 + ParentPartID=199 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -3255,14 +4613,14 @@ $begin 'ComponentBody' NumLumps=1 NumShells=1 NumFaces=1 - NumWires=0 - NumLoops=1 - NumCoedges=4 - NumEdges=4 - NumVertices=4 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 - StartFaceID=74 + StartFaceID=203 StartEdgeID=-1 StartVertexID=-1 NumNewFaces=1 @@ -3275,17 +4633,13 @@ $begin 'ComponentBody' $begin 'NewFaces' $begin 'Face' NormalizedSerialNum=0 - ID=74 + ID=203 $begin 'FaceGeomTopol' - FaceTopol(1, 4, 4, 4) + FaceTopol(1, 1, 1, 0) $begin 'FaceGeometry' - Area=4.5120080000000016 - FcUVMid(-11.013999999999999, 0, 1.2720000000000002) + Area=2.2698006922186251 + FcUVMid(3.6629999999999994, 0, 0) $begin 'FcTolVts' - TolVt(-11.765000000000001, -1.502, 1.272, 0) - TolVt(-10.263, -1.502, 1.272, 0) - TolVt(-10.263, 1.502, 1.272, 0) - TolVt(-11.765000000000001, 1.502, 1.272, 0) $end 'FcTolVts' $end 'FaceGeometry' $end 'FaceGeomTopol' @@ -3297,93 +4651,31 @@ $begin 'ComponentBody' $end 'NewVertices' $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - ParentOperationID=63 - $end 'Operation' - $end 'Operations' - $end 'GeometryPart' - $begin 'GeometryPart' - $begin 'Attributes' - Name='FeedPin_0' - Flags='' - Color='(255 128 65)' - Transparency=0.29999999999999999 - PartCoordinateSystem=1 - UDMId=-1 - GroupId=-1 - MaterialValue='"pec"' - SurfaceMaterialValue='""' - SolveInside=false - ShellElement=false - ShellElementThickness='0mm' - IsMaterialEditable=true - UseMaterialAppearance=false - IsLightweight=false - IsAlwaysHidden=false - $end 'Attributes' - $begin 'Operations' - $begin 'Operation' - OperationType='Cylinder' - ID=156 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' - KernelVersion=13 - XCenter='Sf' - YCenter='0mm' - ZCenter='0mm' - Radius='coax_inner_rad' - Height='H' - WhichAxis='Z' - NumSides='0' - $end 'CylinderParameters' - ParentPartID=157 - ReferenceUDMID=-1 - IsSuppressed=false - $begin 'OperationIdentity' - $begin 'Topology' - NumLumps=1 - NumShells=1 - NumFaces=3 - NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 - $end 'Topology' - BodyID=157 - StartFaceID=158 - StartEdgeID=161 - StartVertexID=163 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 - FaceNameAndIDMap() - EdgeNameAndIDMap() - VertexNameAndIDMap() - $end 'OperationIdentity' + ParentOperationID=198 $end 'Operation' $begin 'Operation' OperationType='Rotate' - ID=204 + ID=367 ReferenceCoordSystemID=1 $begin 'RotateParameters' KernelVersion=13 - TargetID=157 + TargetID=199 RotateAxis='Z' RotateAngle='alpha' $end 'RotateParameters' - ParentPartID=157 + ParentPartID=199 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -3396,39 +4688,108 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=156 + TranformBaseOperationID=202 $end 'Operation' $begin 'CloneToOperation' OperationType='DuplicateAroundAxis' - ID=215 + ID=368 ReferenceCoordSystemID=1 $begin 'DuplicateAroundAxisParameters' KernelVersion=13 - ClonedEntity=157 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta2' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=374 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 CreateNewObjects=true WhichAxis='Z' AngleStr='beta3' NumClones='2' $end 'DuplicateAroundAxisParameters' - ParentPartID=157 + ParentPartID=199 ReferenceUDMID=-1 $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=380 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta4' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'Operation' + OperationType='Move' + ID=386 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=199 + TranslateVectorX='Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=367 + $end 'Operation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_pin_0' + Name='NewObject_84DCWV_1' Flags='' - Color='(255 128 65)' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"pec"' + MaterialValue='""' SurfaceMaterialValue='""' - SolveInside=false + SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3436,68 +4797,73 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=165 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + OperationType='DuplicateBodyAroundAxis' + ID=369 + $begin 'CloneFromParameters' KernelVersion=13 - XCenter='Sf' - YCenter='0mm' - ZCenter='0mm' - Radius='coax_inner_rad' - Height='-feedLength' - WhichAxis='Z' - NumSides='0' - $end 'CylinderParameters' - ParentPartID=166 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=370 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' - BodyID=166 - StartFaceID=167 - StartEdgeID=170 - StartVertexID=172 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + BodyID=370 + StartFaceID=371 + StartEdgeID=372 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='371') + CloneEdges('200'='372') + CloneVertices('201'='373') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() $end 'OperationIdentity' + PlaceHolderOpnId=368 $end 'Operation' $begin 'Operation' - OperationType='Rotate' - ID=239 + OperationType='Move' + ID=387 ReferenceCoordSystemID=1 - $begin 'RotateParameters' + $begin 'TranslateParameters' KernelVersion=13 - TargetID=166 - RotateAxis='Z' - RotateAngle='alpha' - $end 'RotateParameters' - ParentPartID=166 + TargetID=370 + TranslateVectorX='-Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=370 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -3510,39 +4876,25 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=165 + TranformBaseOperationID=369 $end 'Operation' - $begin 'CloneToOperation' - OperationType='DuplicateAroundAxis' - ID=250 - ReferenceCoordSystemID=1 - $begin 'DuplicateAroundAxisParameters' - KernelVersion=13 - ClonedEntity=166 - CreateNewObjects=true - WhichAxis='Z' - AngleStr='beta3' - NumClones='2' - $end 'DuplicateAroundAxisParameters' - ParentPartID=166 - ReferenceUDMID=-1 - $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_0' + Name='NewObject_84DCWV_2' Flags='' - Color='(128 255 255)' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 GroupId=-1 - MaterialValue='"Teflon (tm)"' + MaterialValue='""' SurfaceMaterialValue='""' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3550,68 +4902,73 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='Cylinder' - ID=174 - ReferenceCoordSystemID=1 - $begin 'CylinderParameters' + OperationType='DuplicateBodyAroundAxis' + ID=375 + $begin 'CloneFromParameters' KernelVersion=13 - XCenter='Sf' - YCenter='0mm' - ZCenter='0mm' - Radius='coax_outer_rad' - Height='-feedLength' - WhichAxis='Z' - NumSides='0' - $end 'CylinderParameters' - ParentPartID=175 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=376 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 - NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 - $end 'Topology' - BodyID=175 - StartFaceID=176 - StartEdgeID=179 - StartVertexID=181 - NumNewFaces=3 - NumNewEdges=2 - NumNewVertices=2 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=376 + StartFaceID=377 + StartEdgeID=378 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='377') + CloneEdges('200'='378') + CloneVertices('201'='379') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() $end 'OperationIdentity' + PlaceHolderOpnId=374 $end 'Operation' $begin 'Operation' - OperationType='Rotate' - ID=274 + OperationType='Move' + ID=388 ReferenceCoordSystemID=1 - $begin 'RotateParameters' + $begin 'TranslateParameters' KernelVersion=13 - TargetID=175 - RotateAxis='Z' - RotateAngle='alpha' - $end 'RotateParameters' - ParentPartID=175 + TargetID=376 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=376 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' $begin 'Topology' NumLumps=1 NumShells=1 - NumFaces=3 + NumFaces=1 NumWires=0 - NumLoops=4 - NumCoedges=4 - NumEdges=2 - NumVertices=2 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 $end 'Topology' BodyID=-1 StartFaceID=-1 @@ -3624,30 +4981,15 @@ $begin 'ComponentBody' EdgeNameAndIDMap() VertexNameAndIDMap() $end 'OperationIdentity' - TranformBaseOperationID=174 + TranformBaseOperationID=375 $end 'Operation' - $begin 'CloneToOperation' - OperationType='DuplicateAroundAxis' - ID=285 - ReferenceCoordSystemID=1 - $begin 'DuplicateAroundAxisParameters' - KernelVersion=13 - ClonedEntity=175 - CreateNewObjects=true - WhichAxis='Z' - AngleStr='beta3' - NumClones='2' - $end 'DuplicateAroundAxisParameters' - ParentPartID=175 - ReferenceUDMID=-1 - $end 'CloneToOperation' $end 'Operations' $end 'GeometryPart' $begin 'GeometryPart' $begin 'Attributes' - Name='coax_2_ObjectFromFace1' + Name='NewObject_84DCWV_3' Flags='' - Color='(128 255 255)' + Color='(132 132 193)' Transparency=0.29999999999999999 PartCoordinateSystem=1 UDMId=-1 @@ -3657,6 +4999,7 @@ $begin 'ComponentBody' SolveInside=true ShellElement=false ShellElementThickness='0mm' + ReferenceTemperature='20cel' IsMaterialEditable=true UseMaterialAppearance=false IsLightweight=false @@ -3664,13 +5007,14 @@ $begin 'ComponentBody' $end 'Attributes' $begin 'Operations' $begin 'Operation' - OperationType='BodyFromFaceFrom' - ID=1099 - $begin 'BodyFromFaceFromParameters' + OperationType='DuplicateBodyAroundAxis' + ID=381 + $begin 'CloneFromParameters' KernelVersion=13 - WhichFace=0 - $end 'BodyFromFaceFromParameters' - ParentPartID=1100 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=382 ReferenceUDMID=-1 IsSuppressed=false $begin 'OperationIdentity' @@ -3682,57 +5026,67 @@ $begin 'ComponentBody' NumLoops=1 NumCoedges=1 NumEdges=1 - NumVertices=1 + NumVertices=0 $end 'Topology' - BodyID=1100 - StartFaceID=1101 - StartEdgeID=1102 - StartVertexID=1103 + BodyID=382 + StartFaceID=383 + StartEdgeID=384 + StartVertexID=-1 NumNewFaces=1 NumNewEdges=1 - NumNewVertices=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='383') + CloneEdges('200'='384') + CloneVertices('201'='385') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=380 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=389 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=382 + TranslateVectorX='Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=382 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 FaceNameAndIDMap() EdgeNameAndIDMap() VertexNameAndIDMap() - $begin 'GeomTopolBasedOperationIdentityHelper' - $begin 'NewFaces' - $begin 'Face' - NormalizedSerialNum=0 - ID=1101 - $begin 'FaceGeomTopol' - FaceTopol(1, 1, 1, 1) - $begin 'FaceGeometry' - Area=2.269800692218626 - FcUVMid(-2.5901321394863217, -2.5901321394863253, -1.272) - $begin 'FcTolVts' - TolVt(-3.1911729034948877, -3.1911729034948912, -1.272, 0) - $end 'FcTolVts' - $end 'FaceGeometry' - $end 'FaceGeomTopol' - $end 'Face' - $end 'NewFaces' - $begin 'NewEdges' - $begin 'Edge' - NormalizedSerialNum=0 - ID=1102 - EdgeFaces(1101) - $begin 'EdTolVts' - TolVt(-3.1911729034948877, -3.1911729034948912, -1.272, 0) - $end 'EdTolVts' - EdgeMidPoint(-1.9890913754777564, -1.9890913754777597, -1.272) - $end 'Edge' - $end 'NewEdges' - $begin 'NewVertices' - $begin 'Vertex' - NormalizedSerialNum=0 - ID=1103 - VtPos(-3.1911729034948877, -3.1911729034948912, -1.272) - $end 'Vertex' - $end 'NewVertices' - $end 'GeomTopolBasedOperationIdentityHelper' $end 'OperationIdentity' - BodyFromFaceToOpnId=1098 - SourceOperationID=764 + TranformBaseOperationID=381 $end 'Operation' $end 'Operations' $end 'GeometryPart' @@ -3770,6 +5124,9 @@ $begin 'ComponentBody' $begin 'allobjects' allobjects(-1) $end 'allobjects' + $begin 'box' + box(1) + $end 'box' $begin 'circle_' circle_(2) $end 'circle_' @@ -3782,18 +5139,12 @@ $begin 'ComponentBody' $begin 'coax_0' coax_0(-1) $end 'coax_0' - $begin 'coax_2_objectfromface' - coax_2_objectfromface(1) - $end 'coax_2_objectfromface' $begin 'coax_pin_' coax_pin_(2) $end 'coax_pin_' $begin 'coax_pin_0' coax_pin_0(-1) $end 'coax_pin_0' - $begin 'cylinder' - cylinder(1) - $end 'cylinder' $begin 'feedpin_' feedpin_(2) $end 'feedpin_' @@ -3803,27 +5154,157 @@ $begin 'ComponentBody' $begin 'global' global(-1) $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' $begin 'model' model(-1) $end 'model' $begin 'newobject_0tw2ol' newobject_0tw2ol(-1) $end 'newobject_0tw2ol' + $begin 'newobject_84dcwv' + newobject_84dcwv(-1) + $end 'newobject_84dcwv' + $begin 'newobject_84dcwv_' + newobject_84dcwv_(1, 2, 3) + $end 'newobject_84dcwv_' $begin 'newobject_lxhi3y' newobject_lxhi3y(-1) $end 'newobject_lxhi3y' $begin 'relativecs' relativecs(1) $end 'relativecs' - $begin 'sub' - sub(-1) - $end 'sub' - $begin 'sub_objectfromface' - sub_objectfromface(1) - $end 'sub_objectfromface' + $begin 'soil' + soil(-1) + $end 'soil' $end 'CachedNames' $end 'GeometryOperations' $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 428) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('GeometryOperation', 428) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 492) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 493) + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryOperation', 492) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 493) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 713) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('GeometryOperation', 713) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 741) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryOperation', 741) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=5 + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('GeometryBodyOperation', 389) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 439) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryOperation', 439) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 503) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 504) + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryOperation', 503) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 504) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 724) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('GeometryOperation', 724) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 752) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 753) + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryOperation', 752) + $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=2 DependencyObject('GeometryBodyOperation', 113) @@ -4072,36 +5553,11 @@ $begin 'ComponentBody' DependencyObject('GeometryBodyOperation', 736) DependencyObject('GeometryOperation', 763) $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=0 - DependencyObject('GeometryOperation', 1098) - $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=1 - DependencyObject('GeometryBodyOperation', 995) - DependencyObject('CoordinateSystem', 1) - $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=1 - DependencyObject('GeometryBodyOperation', 1042) + DependencyObject('GeometryBodyOperation', 951) DependencyObject('CoordinateSystem', 1) $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=0 - DependencyObject('GeometryOperation', 1082) - $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=2 - DependencyObject('GeometryBodyOperation', 1083) - DependencyObject('GeometryOperation', 1082) - DependencyObject('GeometryBodyOperation', 1042) - $end 'DependencyInformation' - $begin 'DependencyInformation' - NumParents=2 - DependencyObject('GeometryBodyOperation', 1104) - DependencyObject('GeometryBodyOperation', 1083) - DependencyObject('GeometryBodyOperation', 1099) - $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=1 DependencyObject('GeometryBodyOperation', 45) @@ -4192,11 +5648,78 @@ $begin 'ComponentBody' DependencyObject('GeometryOperation', 285) DependencyObject('CoordinateSystem', 1) $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 198) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 202) + DependencyObject('GeometryBodyOperation', 198) + $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=2 - DependencyObject('GeometryBodyOperation', 1099) - DependencyObject('GeometryOperation', 1098) - DependencyObject('GeometryBodyOperation', 764) + DependencyObject('GeometryBodyOperation', 367) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 202) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 368) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 374) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 380) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 369) + DependencyObject('GeometryOperation', 368) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 369) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 375) + DependencyObject('GeometryOperation', 374) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 375) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 381) + DependencyObject('GeometryOperation', 380) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 389) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 381) $end 'DependencyInformation' $begin 'DependencyInformation' NumParents=1 @@ -4205,14 +5728,216 @@ $begin 'ComponentBody' $end 'DependencyInformation' $end 'GeometryDependencies' $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 114] + $begin 'AssignedFace' + kID=288 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(2, 2, 2, 0) + $begin 'FaceGeometry' + Area=13.351768777756622 + FcUVMid(-1.9890913754777577, -1.9890913754777573, -2.5219999999999998) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=289 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=2.269800692218626 + FcUVMid(-2.590132139486323, -2.590132139486323, -3.7720000000000002) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=953 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1245.3840999999998 + FcUVMid(0, 0, 30.000000000000004) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=955 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, -17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=956 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(-17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=957 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, 17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=958 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=256 + $begin 'EdgeData' + ParentObjectID=252 + ParentFaces[2: 253, 254] + $begin 'EdgeGeomTopol' + EdgeFaces(253, 254) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-2.4133554441896861, -2.4133554441896861, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=291 + $begin 'EdgeData' + ParentObjectID=287 + ParentFaces[2: 288, 289] + $begin 'EdgeGeomTopol' + EdgeFaces(288, 289) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-1.9890913754777577, -1.9890913754777577, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=971 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 959, 968] + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=972 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 960, 959, 970] + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=974 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 961, 967] + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=975 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 970, 966, 963] + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=976 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 968, 964, 963] + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=977 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 967, 965, 964] + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' $begin 'Settings' - IncludedParts[7: 114, 217, 252, 287, 996, 1043, 1084] + IncludedParts[7: 6, 34, 114, 217, 252, 287, 952] HiddenParts[0:] IncludedCS[0:] ReferenceCS=1 - IncludedParameters('Dp', 'H', 'Ln', 'Sf', 'Sx', 'Sy', 'Wn', 'alpha', 'beta3', 'coax_inner_rad', 'coax_outer_rad', 'feedLength') + IncludedParameters('Dp', 'H', 'Ln', 'Sf', 'Sx', 'Sy', 'Wn', 'alpha', 'beta2', 'beta3', 'beta4', 'coax_inner_rad', 'coax_outer_rad', 'feedLength', 'subLength', 'subWidth') IncludedDependentParameters() - ParameterDescription(Dp='', H='', Ln='', Sf='', Sx='', Sy='', Wn='', alpha='', beta3='', coax_inner_rad='', coax_outer_rad='', feedLength='') + ParameterDescription(Dp='', H='', Ln='', Sf='', Sx='', Sy='', Wn='', alpha='', beta2='', beta3='', beta4='', coax_inner_rad='', coax_outer_rad='', feedLength='', subLength='', subWidth='') $end 'Settings' $end 'GeometryData' $end 'ComponentBody' diff --git a/_unittest/example_models/T20/array_info.csv b/_unittest/example_models/T20/array_info.csv new file mode 100644 index 00000000000..7e740ea657a --- /dev/null +++ b/_unittest/example_models/T20/array_info.csv @@ -0,0 +1,35 @@ +ArrayName,A1 +Size Along A Vector,8 +Size Along B Vector,8 +A Vector,02_Patch1_LatticePair1 +B Vector,02_Patch1_LatticePair2 +Component Index,Component Name +1,02_Patch1 +2,01_Metal_Only1 +3,03_Radome_Side1 +4,Radome_Corner1 +Source Row,Source Column,Source Name,Magnitude,Phase +3,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 2*ScanPhaseShiftB) +3,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 3*ScanPhaseShiftB) +3,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 4*ScanPhaseShiftB) +3,6,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (2*ScanPhaseShiftA + 5*ScanPhaseShiftB) +4,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 2*ScanPhaseShiftB) +4,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 3*ScanPhaseShiftB) +4,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 4*ScanPhaseShiftB) +4,6,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (3*ScanPhaseShiftA + 5*ScanPhaseShiftB) +5,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 2*ScanPhaseShiftB) +5,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 3*ScanPhaseShiftB) +5,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 4*ScanPhaseShiftB) +5,6,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (4*ScanPhaseShiftA + 5*ScanPhaseShiftB) +6,3,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (5*ScanPhaseShiftA + 2*ScanPhaseShiftB) +6,4,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (5*ScanPhaseShiftA + 3*ScanPhaseShiftB) +6,5,02_Patch1_1:1,ScanMag1*1,ScanPhase1 + (5*ScanPhaseShiftA + 4*ScanPhaseShiftB) +Array,Format: Component_index:Rotation_angle:Active_or_Passive +4,3,3,3,3,3,3,4:90.0deg, +3:270.0deg,2,2,2,2,2,2,3:90.0deg, +3:270.0deg,2:0,1,1,1,1,2,3:90.0deg, +3:270.0deg,2,1,1,1,1,2,3:90.0deg, +3:270.0deg,2,1,1,1,1,2,3:90.0deg:0, +3:270.0deg,2,1,1,1,1:0,2,, +3:270.0deg,2,2,,2,2,2,3:90.0deg, +4:270.0deg,3:180.0deg,3:180.0deg,,3:180.0deg,3:180.0deg,3:180.0deg,4:180.0deg, diff --git a/_unittest/example_models/T20/array_simple_232.json b/_unittest/example_models/T20/array_simple_232.json new file mode 100644 index 00000000000..a64330c56ec --- /dev/null +++ b/_unittest/example_models/T20/array_simple_232.json @@ -0,0 +1,44 @@ +{ + "primarylattice": "Circ_Patch_5GHz_232_1_Primary1", + "secondarylattice": "Circ_Patch_5GHz_232_1_Primary2", + "useairobjects": true, + "rowdimension": 3, + "columndimension": 3, + "visible": false, + "showcellnumber": false, + "paddingcells": 0, + "referencecsid": 1, + "cells": { + "(1,1)": { + "name": "Circ_Patch_5GHz_232_1", + "color": "(255,0,20)", + "active": true, + "postprocessing": true, + "rotation": 0.0 + }, + "(1,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(1,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,3)": { + "name": "Circ_Patch_5GHz_232_1" + } + } +} \ No newline at end of file diff --git a/_unittest/example_models/T98/3d_comp_mesh_prio_test.aedt b/_unittest/example_models/T98/3d_comp_mesh_prio_test.aedt new file mode 100644 index 00000000000..96304ade003 --- /dev/null +++ b/_unittest/example_models/T98/3d_comp_mesh_prio_test.aedt @@ -0,0 +1,4363 @@ +$begin 'AnsoftProject' + Created='Tue Oct 31 11:07:03 2023' + Product='ElectronicsDesktop' + FileOwnedByWorkbench=false + $begin 'Desktop' + Version(2023, 2) + InfrastructureVersion(1, 0) + $begin 'FactoryHeader' + $begin 'geometry3deditor' + KernelVersion(2, 0) + ProjectContainsGeometry3D='1' + $end 'geometry3deditor' + $end 'FactoryHeader' + $end 'Desktop' + UsesAdvancedFeatures=true + NextUniqueID=0 + MoveBackwards=false + $begin 'HFSSEnvironment' + Version(1, 0) + $end 'HFSSEnvironment' + $begin 'PlanarEMEnvironment' + Version(1, 0) + $end 'PlanarEMEnvironment' + $begin 'Q3DEnvironment' + Version(1, 0) + $end 'Q3DEnvironment' + $begin '2DExtractorEnvironment' + Version(1, 0) + $end '2DExtractorEnvironment' + $begin 'NexximEnvironment' + Version(1, 0) + $end 'NexximEnvironment' + $begin 'NexximNetlistEnvironment' + Version(1, 0) + $end 'NexximNetlistEnvironment' + $begin 'EmitEnvironment' + Version(1, 0) + $end 'EmitEnvironment' + $begin 'Maxwell3DEnvironment' + Version(1, 0) + $end 'Maxwell3DEnvironment' + $begin 'Maxwell2DEnvironment' + Version(1, 0) + $end 'Maxwell2DEnvironment' + $begin 'RMxprtEnvironment' + Version(1, 0) + $end 'RMxprtEnvironment' + $begin 'MaxCirEnvironment' + Version(1, 0) + $end 'MaxCirEnvironment' + $begin 'SimplorerEnvironment' + Version(1, 0) + $end 'SimplorerEnvironment' + $begin 'IcepakEnvironment' + Version(1, 0) + $end 'IcepakEnvironment' + $begin 'MechanicalEnvironment' + Version(1, 0) + $end 'MechanicalEnvironment' + $begin 'SchematicEnvironment' + Version(1, 0) + $end 'SchematicEnvironment' + $begin 'geometry3deditor' + Version(1, 0) + $end 'geometry3deditor' + ReadVersion=11 + $begin 'DesignMgrEnvironment' + CompInstCounter=1 + GPortCounter=0 + NetCounter=0 + Alias('Ieee;Simplorer Elements\\Ieee', 'Std;Simplorer Elements\\Std', 'Basic_VHDLAMS;Simplorer Elements\\Basic Elements VHDLAMS\\Basic Elements VHDLAMS', 'Digital_Elements;Simplorer Elements\\Digital Elements\\Digital Elements', 'Transformations;Simplorer Elements\\Tools\\Transformations\\Transformations', 'HEV_VHDLAMS;Simplorer Elements\\HEV VHDLAMS\\HEV VHDLAMS', 'automotive_vda;Simplorer Elements\\VDALibs VHDLAMS\\automotive_vda', 'example_boardnet;Simplorer Elements\\VDALibs VHDLAMS\\example_boardnet', 'example_ecar;Simplorer Elements\\VDALibs VHDLAMS\\example_ecar', 'fundamentals_vda;Simplorer Elements\\VDALibs VHDLAMS\\fundamentals_vda', 'hybrid_emc_vda;Simplorer Elements\\VDALibs VHDLAMS\\hybrid_emc_vda', 'megma;Simplorer Elements\\VDALibs VHDLAMS\\megma', 'modelica_rotational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_rotational', 'modelica_thermal;Simplorer Elements\\VDALibs VHDLAMS\\modelica_thermal', 'modelica_translational;Simplorer Elements\\VDALibs VHDLAMS\\modelica_translational', 'spice2vhd;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd', 'spice2vhd_devices;Simplorer Elements\\VDALibs VHDLAMS\\spice2vhd_devices', 'aircraft_electrical_vhdlams;Simplorer Elements\\Aircraft Electrical VHDLAMS\\Aircraft Electrical VHDLAMS', 'power_system_vhdlams;Simplorer Elements\\Power System VHDLAMS\\Power System VHDLAMS') + $end 'DesignMgrEnvironment' + $begin 'ProjectDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='ProjectDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'ProjectDatasets' + VariableOrders[0:] + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $begin 'air' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic', 'Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.949999988079071 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1.0006' + permeability='1.0000004' + thermal_conductivity='0.0261' + mass_density='1.1614' + specific_heat='1005' + thermal_expansion_coefficient='0.00333' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + diffusivity='2.88e-05' + molecular_mass='0.028966' + viscosity='1.84e-05' + material_refractive_index='1.000293' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'air' + $end 'Materials' + $begin 'SurfaceMaterials' + $begin 'Steel-oxidised-surface' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=2 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + surface_emissivity='0.8' + ModTime=1461288057 + Library='SurfaceMaterials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Steel-oxidised-surface' + $end 'SurfaceMaterials' + $begin 'Scripts' + $end 'Scripts' + $begin 'Symbols' + $begin 'IcepakDesign1' + ModTime=1698730423 + CE=5 + Library='' + ModSinceLib=false + LibLocation='Project' + HighestLevel=1 + Normalize=true + InitialLevels(0, 1) + $begin 'Graphics' + Rect(0, 0, 0, 0, 0.00254, 0.00254, 0.00508, 0.00508, 0, 0, 0) + Rect(0, 1, 0, 0, 0.000423333333333333, 0.00254, 0.000423333333333333, 0.000423333333333334, 0, 0, 0) + $end 'Graphics' + $end 'IcepakDesign1' + $end 'Symbols' + $begin 'DefInfo' + IcepakDesign1(0, 0, '', 1698730423, '', 'IcepakDesign1', '', '', '', '', '', 'Design.bmp', '', 'Project', '', '', 1698730423, '', 0) + $end 'DefInfo' + $begin 'Compdefs' + $begin 'IcepakDesign1' + Library='' + CircuitEnv=5 + Refbase='U' + NumParts=1 + ModSinceLib=true + $begin 'Properties' + TextProp('Representation', 'SRD', '', 'IcepakDesign1') + TextProp('Owner', 'SRD', '', 'Icepak') + $end 'Properties' + CompExtID=6 + $end 'IcepakDesign1' + $end 'Compdefs' + $end 'Definitions' + DesignIDServer=2 + MoveBackwards=false + $begin 'IcepakModel' + RepRewriteV2=true + Name='IcepakDesign1' + DesignID=0 + 'Perform Minimal validation'=false + 'Default Fluid Material'='air' + 'Default Solid Material'='Al-Extruded' + 'Default Surface Material'='Steel-oxidised-surface' + AmbientTemperature='20cel' + AmbientPressure='0n_per_meter_sq' + AmbientRadiationTemperature='20cel' + 'Gravity Vector CS ID'=1 + 'Gravity Vector Axis'='Z' + Positive=false + ExportOnSimulationComplete=false + ExportDirectory='' + SherlockExportOnSimulationComplete=false + SherlockExportAsFatigue=true + SherlockExportDirectory='' + AutoLaunchMeshViewer=true + MeshCadAsLightWeight=true + EnableTransitionTemplate=false + TempSecondaryGradientSkewMesh=false + EnableMeshByLayerFor2DMLM=false + BoundaryBasedMeshRefinement=false + EnableAltitudeEffects=false + UpdateFanCurve=false + Altitude='0meter' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $begin 'OutputVariable' + NextUniqueID=0 + MoveBackwards=false + $end 'OutputVariable' + $begin 'ModelSetup' + $begin 'DesignDatasets' + NextUniqueID=0 + MoveBackwards=false + DatasetType='DesignDatasetType' + $begin 'DatasetDefinitions' + $end 'DatasetDefinitions' + $end 'DesignDatasets' + VariableOrders[0:] + $begin 'Editor3D Doc Preferences' + 'Plane Background'=true + BackgroundColor1=16777215 + BackgroundColor2=0 + 'Need Lights'=true + 'Ambient Light'=8355711 + 'Num Lights'=1 + Light0[4: 16777215, 0.75, -0.150000005960464, -0.629999995231628] + Ver=2 + $end 'Editor3D Doc Preferences' + SnapMode=31 + WorkingCS=1 + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=8 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=309 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'SubModelDefinitions' + $begin 'SubModelDefinition' + SubmodelDefinitionID=165 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 165] + SubmodelDefinitionName='IcepakDesign1' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/0temp/10_pyaedt_meshing_issue/2d_3d_comp.a3dcomp' + IsLocal=false + ChecksumString='73c5bab3e52d2b12cbc47b9b0fc6753f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='2d_3d_comp165.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=257 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 257] + SubmodelDefinitionName='all_2d_objects' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/0temp/10_pyaedt_meshing_issue/all_2d_objects.a3dcomp' + IsLocal=false + ChecksumString='48b1fbe13ec15836fb483ca4bedb821f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='all_2d_objects257.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $begin 'SubModelDefinition' + SubmodelDefinitionID=273 + ComponentDefinitionType='DesignDerivedComponentDefinition' + InstanceIDs[1: 273] + SubmodelDefinitionName='all_3d_objects' + $begin 'ComponentPriorityLists' + $end 'ComponentPriorityLists' + $begin 'BasicComponentOptions' + PartNamesEditableInUI=true + $end 'BasicComponentOptions' + SubmodelDefinitionUnits='mm' + IsEncrypted=false + AllowEdit=false + SecurityMessage='' + PasswordType='UnknownPassword' + HideContents=true + ReplaceNames=true + ComponentOutline='None' + PartReplaceNameMap() + MaterialReplaceNameMap() + SurfaceMaterialReplaceNameMap() + ShowLabel=true + ModelExtents=10000 + OriginFilePath='D:/0temp/10_pyaedt_meshing_issue/all_3d_objects.a3dcomp' + IsLocal=false + ChecksumString='1d642112d4e930ee4e995da76ff2d7f0' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + IsDefinitionEncrypted=false + Version(2023, 2) + SubmodelTempFileName='all_3d_objects273.a3dcomp' + GeometryOnlySubDef=false + UnsupportedDefinition=false + $end 'SubModelDefinition' + $end 'SubModelDefinitions' + $begin 'Groups' + $end 'Groups' + $begin 'UserDefinedModels' + $begin 'UserDefinedModel' + ID=165 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('34'=166, '74'=167) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='IcepakDesign1_1' + GroupID=-1 + SubModelDefinitionID=165 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/0temp/10_pyaedt_meshing_issue/2d_3d_comp.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=257 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('71'=258, '92'=259) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='all_2d_objects1' + GroupID=-1 + SubModelDefinitionID=257 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/0temp/10_pyaedt_meshing_issue/all_2d_objects.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $begin 'UserDefinedModel' + ID=273 + Type='DesignDerivedComponentInstanceWithParams' + ObjectKeyVsOperIdMap('34'=274, '62'=275) + CSKeyVsOperIdMap() + SkippedCoordinateSystems() + IsDirty=false + IsDirtyDueToVarChangeOnly=false + $begin 'Attributes' + Name='all_3d_objects1' + GroupID=-1 + SubModelDefinitionID=273 + SubmodelOutlineType=0 + $begin 'OutlineVisAttributes' + ShowOutline=true + Color='(143 175 143)' + Transparency=0.5 + ShowAsWire=false + $end 'OutlineVisAttributes' + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + $begin 'UserDefinedModelParameters' + $begin 'Definition' + $begin 'UDMParam' + Name='3D Component File Path' + Value='"D:/0temp/10_pyaedt_meshing_issue/all_3d_objects.a3dcomp"' + DataType='String' + PropType2=0 + PropFlag2=1 + $end 'UDMParam' + $end 'Definition' + $begin 'Options' + $end 'Options' + $begin 'GeometryParams' + $end 'GeometryParams' + $begin 'DesignParams' + $end 'DesignParams' + $begin 'MaterialParams' + $end 'MaterialParams' + $end 'UserDefinedModelParameters' + $end 'UserDefinedModel' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Region' + Flags='Wireframe#' + Color='(255 0 0)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"air"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='nan ' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Region' + ID=5 + ReferenceCoordSystemID=1 + $begin 'RegionParameters' + KernelVersion=23 + '+XPaddingType'='Percentage Offset' + '+XPadding'='50' + '-XPaddingType'='Percentage Offset' + '-XPadding'='50' + '+YPaddingType'='Percentage Offset' + '+YPadding'='50' + '-YPaddingType'='Percentage Offset' + '-YPadding'='50' + '+ZPaddingType'='Percentage Offset' + '+ZPadding'='50' + '-ZPaddingType'='Percentage Offset' + '-ZPadding'='50' + $begin 'BoxForVirtualObjects' + LowPoint[3: 1, 1, 1] + HighPoint[3: -1, -1, -1] + $end 'BoxForVirtualObjects' + $end 'RegionParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=82 + StartEdgeID=88 + StartVertexID=100 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=108 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='1mm' + YPosition='1mm' + ZPosition='0mm' + XSize='6.5mm' + YSize='3mm' + ZSize='2.5mm' + $end 'BoxParameters' + ParentPartID=109 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=109 + StartFaceID=110 + StartEdgeID=116 + StartVertexID=128 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=165 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=166 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=168 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=168 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('35'=169, '36'=170, '37'=171, '38'=172, '39'=173, '40'=174) + EdgeKeyIDMap('41'=175, '42'=176, '43'=177, '44'=178, '45'=179, '46'=180, '47'=181, '48'=182, '49'=183, '50'=184, '51'=185, '52'=186) + VertexKeyIDMap('53'=187, '54'=188, '55'=189, '56'=190, '57'=191, '58'=192, '59'=193, '60'=194) + BodyKeyIDMap('34'=168) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=165 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=167 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=195 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=195 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('84'=196) + EdgeKeyIDMap('75'=197, '76'=198, '77'=199, '78'=200) + VertexKeyIDMap('79'=201, '80'=202, '81'=203, '82'=204) + BodyKeyIDMap('74'=195) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle2' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=205 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='7.5mm' + YStart='1mm' + ZStart='2.5mm' + Width='3.75mm' + Height='-3mm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=206 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=206 + StartFaceID=-1 + StartEdgeID=207 + StartVertexID=211 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=215 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=206 + $end 'LocalOperationParameters' + ParentPartID=206 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=216 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=216 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=11.25 + FcUVMid(9.375, -0.5, 2.5) + $begin 'FcTolVts' + TolVt(7.5, 1, 2.5, 5e-07) + TolVt(11.25, 1, 2.5, 5e-07) + TolVt(11.25, -2, 2.5, 5e-07) + TolVt(7.5, -2, 2.5, 5e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=205 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box2' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=219 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='1mm' + YPosition='0mm' + ZPosition='0mm' + XSize='2mm' + YSize='-3mm' + ZSize='2mm' + $end 'BoxParameters' + ParentPartID=220 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=220 + StartFaceID=221 + StartEdgeID=227 + StartVertexID=239 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ellipse1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Ellipse' + ID=247 + ReferenceCoordSystemID=1 + $begin 'EllipseParameters' + KernelVersion=23 + XCenter='2mm' + YCenter='-1.5mm' + ZCenter='2mm' + MajRadius='1mm' + Ratio='1.5' + WhichAxis='Z' + NumSegments='0' + $end 'EllipseParameters' + ParentPartID=248 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=248 + StartFaceID=-1 + StartEdgeID=249 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=251 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=248 + $end 'LocalOperationParameters' + ParentPartID=248 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=252 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=252 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=4.71903167416204 + FcUVMid(2, -1.5, 2) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=247 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1_1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=257 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=258 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=260 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=260 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('90'=261) + EdgeKeyIDMap('72'=262, '73'=263, '74'=264, '75'=265) + VertexKeyIDMap('76'=266, '77'=267, '78'=268, '79'=269) + BodyKeyIDMap('71'=260) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ellipse1_1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=257 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=259 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=270 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=270 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('96'=271) + EdgeKeyIDMap('93'=272) + VertexKeyIDMap() + BodyKeyIDMap('92'=270) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1_2' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=273 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=274 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=276 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=276 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('35'=277, '36'=278, '37'=279, '38'=280, '39'=281, '40'=282) + EdgeKeyIDMap('41'=283, '42'=284, '43'=285, '44'=286, '45'=287, '46'=288, '47'=289, '48'=290, '49'=291, '50'=292, '51'=293, '52'=294) + VertexKeyIDMap('53'=295, '54'=296, '55'=297, '56'=298, '57'=299, '58'=300, '59'=301, '60'=302) + BodyKeyIDMap('34'=276) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Cylinder1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=273 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=false + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='ExternalBody' + ID=275 + ReferenceCoordSystemID=1 + $begin 'ExternalBodyParameters' + KernelVersion=23 + $end 'ExternalBodyParameters' + ParentPartID=303 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=303 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + FaceKeyIDMap('63'=304, '64'=305, '65'=306) + EdgeKeyIDMap('66'=307, '67'=308) + VertexKeyIDMap() + BodyKeyIDMap('62'=303) + $end 'OperationIdentity' + AttribNameForId='ATTRIB_XACIS_ID' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=217 + $begin 'PriorityListParameters' + EntityType='Object' + EntityList(206, 248) + PriorityNumber=2 + PriorityListType='2D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=218 + $begin 'PriorityListParameters' + EntityType='Object' + EntityList(109, 220) + PriorityNumber=2 + PriorityListType='3D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=255 + $begin 'PriorityListParameters' + EntityType='Component' + EntityList(165) + PriorityNumber=1 + PriorityListType='3D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $begin 'PriorityListOperation' + OperationType='CreatePriorityList' + ID=256 + $begin 'PriorityListParameters' + EntityType='Component' + EntityList(165) + PriorityNumber=1 + PriorityListType='2D' + $end 'PriorityListParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='' + $end 'Attributes' + $end 'PriorityListOperation' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'all_2d_objects' + all_2d_objects(-1, 1) + $end 'all_2d_objects' + $begin 'all_3d_objects' + all_3d_objects(-1, 1) + $end 'all_3d_objects' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1, 2) + $end 'box' + $begin 'box1_' + box1_(1, 2) + $end 'box1_' + $begin 'cylinder' + cylinder(1) + $end 'cylinder' + $begin 'ellipse' + ellipse(1) + $end 'ellipse' + $begin 'ellipse1_' + ellipse1_(1) + $end 'ellipse1_' + $begin 'global' + global(-1) + $end 'global' + $begin 'icepakdesign' + icepakdesign(1) + $end 'icepakdesign' + $begin 'icepakdesign1_' + icepakdesign1_(1) + $end 'icepakdesign1_' + $begin 'model' + model(-1) + $end 'model' + $begin 'rectangle' + rectangle(1, 2) + $end 'rectangle' + $begin 'rectangle1_' + rectangle1_(1) + $end 'rectangle1_' + $begin 'region' + region(-1) + $end 'region' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 108) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 166) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 167) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 205) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 215) + DependencyObject('GeometryBodyOperation', 205) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 219) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 247) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 251) + DependencyObject('GeometryBodyOperation', 247) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 258) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 259) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 274) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 275) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 195] + $end 'AssignedEntities' + GroupByMaterial=true + GroupSheetByMaterial=true + GroupCompByDefID=true + DoNotOrganizeUnderGroup=false + DoNotOrganizeUnderComponent=false + OrganizeLightweight=false + ShowGroup=true + $begin 'LastUserInputs' + $end 'LastUserInputs' + $end 'ModelSetup' + $begin '3DComponent' + $begin 'ComponentDefinition' + ID=165 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '165' + $end '165' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '165' + '0'=1 + $end '165' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $begin 'Source1' + ID=0 + BoundType='Source' + IsComponent=false + Objects(74) + 'Thermal Condition'='Total Power' + 'Total Power'='0.1W' + 'Surface Heat'='0mW_per_m2' + Temperature='AmbientTemp' + $begin 'Radiation' + Radiate=false + $end 'Radiation' + 'Voltage/Current - Enabled'=false + 'Voltage/Current Option'='Current' + Current='0A' + Voltage='0V' + $end 'Source1' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '165' + $end '165' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshRegions' + $begin 'MeshRegionsDesc' + $end 'MeshRegionsDesc' + $begin 'MeshRegionsIDMap' + $begin '165' + $end '165' + $end 'MeshRegionsIDMap' + $begin 'MeshRegionsData' + $end 'MeshRegionsData' + $begin 'MeshRegionsInstData' + $end 'MeshRegionsInstData' + $end 'MeshRegions' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '165' + $end '165' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=257 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '257' + $end '257' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '257' + $end '257' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '257' + $end '257' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshRegions' + $begin 'MeshRegionsDesc' + $end 'MeshRegionsDesc' + $begin 'MeshRegionsIDMap' + $begin '257' + $end '257' + $end 'MeshRegionsIDMap' + $begin 'MeshRegionsData' + $end 'MeshRegionsData' + $begin 'MeshRegionsInstData' + $end 'MeshRegionsInstData' + $end 'MeshRegions' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '257' + $end '257' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $end 'ComponentDefinition' + $begin 'ComponentDefinition' + ID=273 + $begin 'Excitations' + $begin 'ExcitationsDesc' + $end 'ExcitationsDesc' + $begin 'ExcitationsIDMap' + $begin '273' + $end '273' + $end 'ExcitationsIDMap' + $begin 'ExcitationsData' + $end 'ExcitationsData' + $begin 'ExcitationsInstData' + $end 'ExcitationsInstData' + $end 'Excitations' + $begin 'Boundaries' + $begin 'BoundariesDesc' + $end 'BoundariesDesc' + $begin 'BoundariesIDMap' + $begin '273' + $end '273' + $end 'BoundariesIDMap' + $begin 'BoundariesData' + $end 'BoundariesData' + $begin 'BoundariesInstData' + $end 'BoundariesInstData' + $end 'Boundaries' + $begin 'DesignSettings' + $begin 'DesignSettingsDesc' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettingsDesc' + $begin 'DesignSettingsIDMap' + $begin '273' + $end '273' + $end 'DesignSettingsIDMap' + $begin 'DesignSettingsData' + $end 'DesignSettingsData' + $begin 'DesignSettingsInstData' + $end 'DesignSettingsInstData' + $end 'DesignSettings' + $begin 'MeshRegions' + $begin 'MeshRegionsDesc' + $end 'MeshRegionsDesc' + $begin 'MeshRegionsIDMap' + $begin '273' + $end '273' + $end 'MeshRegionsIDMap' + $begin 'MeshRegionsData' + $end 'MeshRegionsData' + $begin 'MeshRegionsInstData' + $end 'MeshRegionsInstData' + $end 'MeshRegions' + $begin 'MeshOperations' + $begin 'MeshOperationsDesc' + $end 'MeshOperationsDesc' + $begin 'MeshOperationsIDMap' + $begin '273' + $end '273' + $end 'MeshOperationsIDMap' + $begin 'MeshOperationsData' + $end 'MeshOperationsData' + $begin 'MeshOperationsInstData' + $end 'MeshOperationsInstData' + $end 'MeshOperations' + $end 'ComponentDefinition' + $end '3DComponent' + $begin 'BoundarySetup' + $begin 'GlobalBoundData' + $end 'GlobalBoundData' + $begin 'Boundaries' + NextUniqueID=2 + MoveBackwards=false + $begin 'IcepakDesign1_1_Source1' + ID=1 + BoundType='Source' + IsComponent=true + Objects(195) + 'Thermal Condition'='Total Power' + 'Total Power'='0.1W' + 'Surface Heat'='0mW_per_m2' + Temperature='AmbientTemp' + $begin 'Radiation' + Radiate=false + $end 'Radiation' + 'Voltage/Current - Enabled'=false + 'Voltage/Current Option'='Current' + Current='0A' + Voltage='0V' + $end 'IcepakDesign1_1_Source1' + $end 'Boundaries' + $begin 'ProductSpecificData' + $end 'ProductSpecificData' + $end 'BoundarySetup' + $begin 'Monitor' + $begin 'IcepakMonitors' + NextUniqueID=0 + MoveBackwards=false + $end 'IcepakMonitors' + $end 'Monitor' + $begin 'MeshRegion' + $begin 'MeshSetup' + NextUniqueID=1 + MoveBackwards=false + $begin 'MeshRegions' + $begin 'Global' + ID=0 + IsComponent=false + MeshMethod='MesherHD' + UserSpecifiedSettings=false + ComputeGap=true + MeshRegionResolution=3 + MinGapX='1mm' + MinGapY='1mm' + MinGapZ='1mm' + Objects(6) + StairStepSliderMeshing=false + FacetLevel='3' + ProximitySizeFunction=true + CurvatureSizeFunction=true + EnableTransition=false + OptimizePCBMesh=true + Enable2DCutCell=false + EnforceCutCellMeshing=false + Enforce2dot5DCutCell=false + $end 'Global' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'MeshSetup' + $end 'MeshRegion' + $begin 'AnalysisSetup' + $begin 'DesignMeshLink' + ImportMesh=false + $end 'DesignMeshLink' + $begin 'SolveSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'SolveSetups' + $end 'AnalysisSetup' + $begin 'Optimetrics' + $begin 'OptimetricsSetups' + NextUniqueID=0 + MoveBackwards=false + $end 'OptimetricsSetups' + $end 'Optimetrics' + $begin 'Solutions' + $begin 'FieldsSummarySetting' + $end 'FieldsSummarySetting' + $end 'Solutions' + $begin 'FieldsReporter' + $begin 'FieldsCalculator' + Line_Discretization=1000 + $end 'FieldsCalculator' + $begin 'PlotDefaults' + Default_SolutionId=-1 + Default_PlotFolder='Automatic' + $end 'PlotDefaults' + $begin 'FieldsPlotManagerID' + NextUniqueID=0 + MoveBackwards=false + NumQuantityType=0 + NumPlots=0 + $end 'FieldsPlotManagerID' + $begin 'Report3dInGeomWnd' + Report3dNum=0 + $end 'Report3dInGeomWnd' + $begin 'Report2dInGeomWnd' + Report2dNum=0 + $end 'Report2dInGeomWnd' + $begin 'AntennaParametersInGeomWnd' + AntennaParametersNum=0 + $end 'AntennaParametersInGeomWnd' + AntennaParametersPlotTablesOrder() + $end 'FieldsReporter' + $begin 'SolutionManager' + $begin 'Version ID Map' + V=2 + $end 'Version ID Map' + ValidationCacheHeader='' + $end 'SolutionManager' + $begin 'UserDefinedSolutionMgr' + NextUniqueID=1000000 + MoveBackwards=false + $end 'UserDefinedSolutionMgr' + $begin 'DatasetSolutionMgr' + NextUniqueID=2000000 + MoveBackwards=false + $end 'DatasetSolutionMgr' + Notes=$begin_cdata$ $end_cdata$ + $begin 'AnimationSetups' + $end 'AnimationSetups' + CacheHeaderFile='HDR583C1009616987439064.tmp' + $end 'IcepakModel' + $begin 'DataInstances' + DesignEditor='TopLevel' + Refdes('0', 'U1') + $begin 'CompInstances' + $begin 'Compinst' + ID='0' + Status='Status' + CompName='IcepakDesign1' + GatesInUse() + $begin 'Properties' + TextProp('ID', 'SRID', '', '0') + $end 'Properties' + $end 'Compinst' + $end 'CompInstances' + $begin 'Instance' + DesignEditor='IcepakDesign1' + ID='0' + $begin 'IcepakDesignInstance' + DesignInstanceID=1 + $begin 'WindowPosition' + $begin 'EditorWindow' + Circuit(Editor3d(View('View Orientation Gadget'=1, WindowPos(3, -1, -1, -8, -31, 0, 0, 1154, 410), OrientationMatrix(0.0785268545150757, 0.0500493012368679, -0.0154549926519394, 0, -0.0459545068442822, 0.0524593703448772, -0.063611663877964, 0, -0.0251389350742102, 0.0604428015649319, 0.0680068358778954, 0, -0.358919560909271, -0.39542555809021, -5.95154047012329, 1, 0, -2.6081440448761, 3.17571091651917, -1.86155533790588, 1.42088794708252, -0.604207992553711, 12.6383638381958), Drawings[14: 'Region', 'Box1', 'Box1_1', 'Rectangle1', 'Rectangle2', 'Box2', 'Ellipse1', 'IcepakDesign1_1', 'Rectangle1_1', 'Ellipse1_1', 'all_2d_objects1', 'Box1_2', 'Cylinder1', 'all_3d_objects1'], 'View Data'('Render Mode'=1, 'Show Ruler'=1, 'Coordinate Systems View Mode'=1, 'CS Triad View Mode'=0, 'Render Facets'=1, GridVisible=2, GridAutoAdjust=1, GridAutoExtents=1, GridType='Rect', GridStyle='Line', NumPixels=30, dXForGrid=1, dYForGrid=1, dZForGrid=1, dRForGrid=1, dThetaForGrid=10), ClipPlanes(ClipPlaneOptions(DisableWhenDrawingNewPlane=true, ForceOpqaueForUnclipped=false, ShowClipped=false, Transparency=0, HandleColor=16776960))))) + $end 'EditorWindow' + $end 'WindowPosition' + $begin 'ReportSetup' + $begin 'ReportManager' + $begin 'Reports' + $end 'Reports' + NextUniqueID=0 + MoveBackwards=false + $begin 'NextVersID' + NextUniqueID=0 + MoveBackwards=false + $end 'NextVersID' + $end 'ReportManager' + $begin 'Reports' + $end 'Reports' + $begin 'ReportsWindowInfoList' + $end 'ReportsWindowInfoList' + $end 'ReportSetup' + $begin 'Properties' + $end 'Properties' + $begin 'UserDefinedDocument' + $begin 'Data' + $end 'Data' + $end 'UserDefinedDocument' + $end 'IcepakDesignInstance' + $end 'Instance' + $begin 'SODInfo' + $end 'SODInfo' + $end 'DataInstances' + $begin 'WBSystemIDToDesignInstanceIDMap' + $end 'WBSystemIDToDesignInstanceIDMap' + $begin 'WBSysIDSysDetails' + $end 'WBSysIDSysDetails' + $begin 'WBConnIDConnDetails' + $end 'WBConnIDConnDetails' + $begin 'WBMaterialGuidDetails' + WBMaterialGuidMap() + $end 'WBMaterialGuidDetails' + $begin 'MinervaProjectSettingsBlk' + MinervaRemoteFilePath='' + FolderContainerString='' + $end 'MinervaProjectSettingsBlk' +$end 'AnsoftProject' +$begin 'AllReferencedFilesForProject' +$begin 'Design_0.setup/UdmDefFiles' +NumFiles= 3 +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/2d_3d_comp165.a3dcomp +BIN000000029955 +$begin 'AnsoftComponentChkSum' + ChecksumString='73c5bab3e52d2b12cbc47b9b0fc6753f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='IcepakDesign1' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Nitin Netake' + Email='nitin.netake@ansys.com' + Date='11:14:15 AM Oct 31, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettings' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAoryL42fHj4T/s6\ +eCW+Ifxj8XQ+EPC51aw0GzmTSte8R61rWuamJ5bXRvDXhPwnpd/q3inVvsNnqV7LbadY3U1vp2jX+pX\ +CRafYXlzB/Pf8df+Cof7TXxR8S2938Gtbv8A9mTwRpH9pW+naTpmn/C/4keOfGMN1fvJYa78Qb/x98O\ +9Y0zwvfx6RFpsSaF4fF1Bp95Jqbz+KPEtvc6d/ZXFi8fhsGl7WV5vaMdZW72ukl5tq9na7R52OzTCZe\ +l7ebdSW0I2crd7XSS821eztdqx/TbRX8vnhH/gqn+294Ls9A0/Urz4J/GWw0nVrGbWrv4g+BNa8GfET\ +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\ +s1lLcQraQTR2NsV3VFe2fSBXgH7T3xa1z4J/BvWPHPhjTtJ1HxLceLvhP8PPDw15Ly40PStc+Mnxb8D\ +fB/SfE+tabp93bXGvaTpF/47t9VudLgvdNm1WHRn02LVdKe6XUbX3+viz/goB/ybgn/AGcP+xb/AOtn\ +fAGubGTlSwmKqQfLOnTnJPs1FtPXTRnJj6k6OBxtWnLlqUqVSUX2lGDaeumjXU/n6+Kf7Lf7aV54l1r\ +x341ntv2l/EesanJpcvizTfijn4galpa3+t6xY3zeDvirBoWgfC/wIt/qWs3MPhXw74hu9M8P3viuS1\ +0TTpbKS8vo/lvxLp/inwPFqdz8QPh78Tfh9p+hXLWPiDxD4y+HPjLRfA2iXq3i6Z5N38TZdGbwxc20m\ +qyQ2tpe2usXGn6jPdW66bd3gurZpv6TKK/KVmVdtuqlVb3bvd97vX8j8PWbYiUnKtFVpPdttSfe71/L\ +7z+aDS9V0vW7GDVNF1Kw1fTbrzfs2o6XeW9/Y3HkzSW83kXdpI8cuy4ilRtrHa8TKcMpAv1+8Xjj9mn\ +9nv4k6nrWv+N/gr8MvEHirxBbJban43ufBuhQeP2MGmw6RY31j4/srKLWtI1m00+2s47C/tL6C90/7D\ +bvZXEEkELJ83a//wAE5PgvfXkU3hPxz8a/hxpy2yRz6HoHjXR/GdndXolmaTVZdU+NfhPxXqsFzJA9t\ +C1vb6jDp6JYpJFZR3Mt3Pc7xzGk/jg4v5Nfo/wOmGaUJfHCUH8mv8/wPyuor7G8Rf8ABP39oDRvsf8A\ +wifxB+DvxG+0/aPt/wDwkWl+Nfgv/Y3k+R9l+x/2a3j7/hJftHm3Pmb/AOyfsf2FNv277U32P5+8WfB\ +D9oPwD50ni74F/ECTT4dTk0aHX/h9aWPxb0vV76P7S0d5o+h/Di81DxNB4duILO5mt7/V/DukIsZhh1\ +CPT9QuYLF+mGJoT+Gqrvvo/udjrhisPU+CtFt9G7P7nZnnVFYkniPR7XX28I6pdP4e8aR48/wN4rs73\ +wj47s91kNTi+3+CPE1taarp/maU0d5F59nH5tnPHdxb7aWOVtut001dO6ZvvZrVMKKKKACiiigAoooo\ +AKKK4H4g/E3wd8MdKj1Txdqgsxd/ak0vT7eJ7vVNXubS2a4ktrC0iHJ/1SGaVorWKS7hWeeLzULCTbs\ +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\ +AKKKKACiiigAooooA//Z' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'IcepakModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + $end 'DesignSettings' + $begin 'Boundaries' + $begin 'Source1' + ID=0 + BoundType='Source' + IsComponent=false + Objects(74) + 'Thermal Condition'='Total Power' + 'Total Power'='0.1W' + 'Surface Heat'='0mW_per_m2' + Temperature='AmbientTemp' + $begin 'Radiation' + Radiate=false + $end 'Radiation' + 'Voltage/Current - Enabled'=false + 'Voltage/Current Option'='Current' + Current='0A' + Voltage='0V' + $end 'Source1' + $end 'Boundaries' + $begin 'MeshRegions' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'DesignData' + $end 'IcepakModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $end 'Materials' + $begin 'SurfaceMaterials' + $begin 'Steel-oxidised-surface' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=2 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + surface_emissivity='0.8' + ModTime=1461288057 + Library='SurfaceMaterials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Steel-oxidised-surface' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=1 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=85 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=33 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='0mm' + YPosition='0mm' + ZPosition='0mm' + XSize='1mm' + YSize='1mm' + ZSize='1mm' + $end 'BoxParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=34 + StartFaceID=35 + StartEdgeID=41 + StartVertexID=53 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=73 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='1mm' + YStart='1mm' + ZStart='1mm' + Width='-1mm' + Height='-1mm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=74 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=74 + StartFaceID=-1 + StartEdgeID=75 + StartVertexID=79 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=83 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=74 + $end 'LocalOperationParameters' + ParentPartID=74 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=84 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=84 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1 + FcUVMid(0.5, 0.5, 1) + $begin 'FcTolVts' + TolVt(1, 1, 1, 4.9999999999999998e-07) + TolVt(0, 1, 1, 4.9999999999999998e-07) + TolVt(0, 0, 1, 4.9999999999999998e-07) + TolVt(1, 0, 1, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=73 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'rectangle' + rectangle(1) + $end 'rectangle' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 73) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 83) + DependencyObject('GeometryBodyOperation', 73) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[1: 74] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[2: 74, 34] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/all_2d_objects257.a3dcomp +BIN000000023692 +$begin 'AnsoftComponentChkSum' + ChecksumString='48b1fbe13ec15836fb483ca4bedb821f' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='all_2d_objects' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Nitin Netake' + Email='nitin.netake@ansys.com' + Date='4:57:29 PM Oct 31, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettings' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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\ +ueIvDl9YQfHyCwvtN8UaR4D8B6R4o01Lfxp8E9asItOfxL4le3vvDXiLw1rj+HPDj6zNrOr6v4O6sJh\ +K2NrwoUYuTk9X0iusm+iX47LU7MDgcRmGIhh8PBylJq7tpFdZSeySV+uuy1Puv/gmt4Il0L9m8fEm8j\ +uYdQ/aO8d+IfjskT3NnNps3gzWNO0DwJ8F9a0S2t1M+lW2sfAT4ffCvW7yzv5ZNQt9W8SaklzDpp26P\ +p36AUUV+oYejHD0KNCDvGjFRT72Vr/Pc/ZcLh4YXD0MNB3hQhGKfflVrvze7CiiitjcKKKKACiiigAo\ +oooAKKKKACiiigAooooAKKKKACiiigAr8/8Axv8A8E1v2b9dlkvPhsPHf7OOoTXNs8qfAnxDp2j+DId\ +Nhs2t7nRNF+C/jvQPEPgLwhbXd6lrf3l5onhXTdWuNQgmuX1LOpawuo/oBRWNbD0MRHkr0o1YrpJJ29\ +L7fIwxGFw+KgoYmhCvBbKUVK3mr7P0Px0/4dr/ALQP/R1nwc/8RM8bf/Rf0f8ADtf9oH/o6z4Of+Ime\ +Nv/AKL+v2Lorzv7Cyr/AKBF/wCB1P8A5M8r/VvJP+gFf+B1P/kz89vA3/BNT4A6DqMl/wDE7WviJ+0r\ +bx7f7M8M/Hm68A6l4AsN8F3De/2n8Nvhv8PfDPh/4g+a82n3EP8AwlmmeIP7JvdBs7/Qv7KvVnuLj9C\ +aKK9Ghh6GGhyUKUaMXraKSu+77v1PVw+Fw2Eh7PDUI0IPVqKSu+7tu/NhRRRWxuFFFFABRRRQAUUUUA\ +FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU\ +AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU\ +UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU\ +UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//Z' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'IcepakModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + $end 'DesignSettings' + $begin 'MeshRegions' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'DesignData' + $end 'IcepakModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=2 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=97 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Rectangle1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=70 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=23 + XStart='0mm' + YStart='0mm' + ZStart='0mm' + Width='2.5mm' + Height='2.5mm' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=71 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=71 + StartFaceID=-1 + StartEdgeID=72 + StartVertexID=76 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=89 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=71 + $end 'LocalOperationParameters' + ParentPartID=71 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=90 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=90 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6.2500000000000009 + FcUVMid(1.25, 1.25, 0) + $begin 'FcTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(2.5, 0, 0, 4.9999999999999998e-07) + TolVt(2.5, 2.5, 0, 4.9999999999999998e-07) + TolVt(0, 2.5, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=70 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ellipse1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Ellipse' + ID=91 + ReferenceCoordSystemID=1 + $begin 'EllipseParameters' + KernelVersion=23 + XCenter='2.5mm' + YCenter='2.5mm' + ZCenter='0mm' + MajRadius='2mm' + Ratio='1.25' + WhichAxis='Z' + NumSegments='0' + $end 'EllipseParameters' + ParentPartID=92 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=92 + StartFaceID=-1 + StartEdgeID=93 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=95 + $begin 'LocalOperationParameters' + KernelVersion=23 + LocalOpPart=92 + $end 'LocalOperationParameters' + ParentPartID=92 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=96 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=96 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=15.707050686830295 + FcUVMid(2.5, 2.5, 0) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=91 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'ellipse' + ellipse(1) + $end 'ellipse' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'rectangle' + rectangle(1) + $end 'rectangle' + $begin 'region' + region(-1) + $end 'region' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 70) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 89) + DependencyObject('GeometryBodyOperation', 70) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 91) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 95) + DependencyObject('GeometryBodyOperation', 91) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[0:] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[2: 92, 71] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$begin 'a3dcomp' +Design_0.setup/UdmDefFiles/all_3d_objects273.a3dcomp +BIN000000019755 +$begin 'AnsoftComponentChkSum' + ChecksumString='1d642112d4e930ee4e995da76ff2d7f0' + ChecksumHistory() + VersionHistory() + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='all_3d_objects' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='1.0' + Notes='' + IconType='' + Owner='Nitin Netake' + Email='nitin.netake@ansys.com' + Date='4:56:30 PM Oct 31, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='Icepak' + $begin 'SolutionTypeOption' + SolutionTypeOption='SteadyState' + ProblemOption='TemperatureAndFlow' + $end 'SolutionTypeOption' + $end 'DesignSettings' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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\ +L0R9hlmY0szw7r04Om4vllF62lZPR9Vro7J+SCiiiu09EKKKKACiiigAooooAKKKKACiiigAooooAKK\ +KKACiiigAr54/a803VNY/ZO/af0jRPB83xC1rVf2d/jXpukeAbey8Q6lceONUvvht4ltdP8Hwad4Svb\ +bVb+bU7uWKyWHTLi31CVr0JZTRXLROv0PRUzipwlBuykmvvViKkFUhODdlNNferH8mXjj9mj4xeDLOH\ +xP4G0kftB/B/VNLPiXwp8SfhvrfhfVfE9x4IbTrPWbPWvFfgwTacviHUZtLv0Fi/gUeIm8RHSp76z0T\ +Q3vtN0JvnDWfFNj4WiS68b6V4z+G+nyzLawav8VPh549+Fmh3N86SSx6Zaa78RPDWmWd3q728NzLHZx\ +TvdSQ2VxMkTRW8zx/1L/ED9jzRNY1vX/F/wl+Jnj74G+JvEWoat4l13RNAfRfGXwg8XeL7+Z9Uj1PxR\ +8KfHWnXkXhzTrrxHc6xf+Il8Aaj4C1fxTd+KdU1DWNcm1uWz1iw+WfHf7Gf7XTWRu9I+KH7OHxXv7mc\ +WsvhzUvAPxN/ZytLC2ljllk11PGtr46+Kj6tPFLDDbrpR0CyWddTe8Os25sRZaj8DUyPN6E5RVOGLpR\ +2lGSjJrpeMn8XdK68z8yrcN55h5yjGjDG0Yt2nCSjJrpeEmrS7qN12bP56JvjB8ORG0uneJY/FEUX/H\ +3J4F03WPiDHpu7/U/2w/gfTtQGi+dtl+z/AGsw/aPss/keZ5E2zxf4iftd+B/BlrMdG8PeKfFF8IYZI\ +Bc6bdeENL89roR3NneT+I7WPULeeOzBmV4tLuLeRpI4RMreeYP3rm/4JU/tMfFJtVHxE+KHwJ+DUUX2\ +b+zE8Gab8QP2iJNe+0/aft32+TXIfhiPCP2TybTyvLXXP7Q/tKXf/Zv2JPt+v8L/APggR+ztaavB4i/\ +aR+JPjL4+31rqmpyjwp4d08/BX4Z6pot5oq2NhZa9pWj+INX8TT6xaaxNd363mn+L9Mt5jBY202nNBB\ +ejUunDZLjKji61B0ovvKP42bl+F7befVhOHcfVcXXwzpRl3nBW9bNy+6N7arofhN/wTfg/a2/bM/bw+\ +Dfi/wCGB1bw38OfgH8U/CPxT+IGpaZqt/4c8J+Bvh3FqSWeueGNb8S6VarP4m8UeKfCVn4o0Kz0yUSt\ +qya7rCG2sPDaa7PYf3g15R8GPgX8Hv2d/A1h8Nvgh8OPCfwy8Faf9lk/sXwppUGn/wBp6haaPpeg/wB\ +v+JNRw134r8VzaTomkxXmr6nPd6pf/YI3vbu4kXfXq9fV4LCRwdL2cd3q7bfLq/NvV/gfbZdgIZfQdK\ +LV5O7tt206vzb1f4BRRRXYegFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR\ +RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB\ +RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA\ +BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF\ +ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2\ +Q==' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'IcepakModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + $end 'DesignSettings' + $begin 'MeshRegions' + $end 'MeshRegions' + $begin 'MeshOperations' + $end 'MeshOperations' + $end 'DesignData' + $end 'IcepakModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Al-Extruded' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=232 + Green=235 + Blue=235 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='205' + mass_density='2800' + specific_heat='900' + youngs_modulus='69000000000' + poissons_ratio='0.33' + thermal_expansion_coefficient='2.277e-06' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Solid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Opaque' + $end 'clarity_type' + ModTime=1592011950 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Al-Extruded' + $end 'Materials' + $begin 'SurfaceMaterials' + $begin 'Steel-oxidised-surface' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=2 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + surface_emissivity='0.8' + ModTime=1461288057 + Library='SurfaceMaterials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'Steel-oxidised-surface' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=1 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=70 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=33 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=23 + XPosition='1mm' + YPosition='1mm' + ZPosition='0mm' + XSize='1mm' + YSize='0.6mm' + ZSize='0.6mm' + $end 'BoxParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=34 + StartFaceID=35 + StartEdgeID=41 + StartVertexID=53 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Cylinder1' + Flags='' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Al-Extruded"' + SurfaceMaterialValue='"Steel-oxidised-surface"' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=61 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=23 + XCenter='3mm' + YCenter='2.4mm' + ZCenter='0mm' + Radius='0.707106781186548mm' + Height='0.2mm' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=62 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=62 + StartFaceID=63 + StartEdgeID=66 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'cylinder' + cylinder(1) + $end 'cylinder' + $begin 'global' + global(-1) + $end 'global' + $begin 'model' + model(-1) + $end 'model' + $begin 'region' + region(-1) + $end 'region' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 61) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[0:] + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[2: 34, 62] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters() + IncludedDependentParameters() + ParameterDescription() + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' +$end 'a3dcomp' +$end 'Design_0.setup/UdmDefFiles' +$end 'AllReferencedFilesForProject' +$begin 'ProjectPreview' + IsEncrypted=false + Thumbnail64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCABgAGADASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooqOWWK3ilnnljhghjeWaaV1jiiijU\ +vJLLI5AjjVFJZiQAASTigCSiv4JfjZrPxy+PvxM/aV/4Lj/AAzv7248G/sxftk/CPwn8KNHKSx2eu/C\ +PwLLFoU2ovhS9tp7Q3nwmW/giSS3nHxH1+Sd82r+Z/UF+3j/AMFSPDH7Hf7HXwS/bH8FfDEfHfwh8c/\ +F3w70Lwxon/Cep8O2h0L4jfDPxp8StL8RS6yng7XhNPFZ+E4raSy+yxnfqbOblDbmKYA/Viivwn+LX/\ +BZ7xx+z7rPwt8ZfH/9gL40fCD9lX4x+JtP8P8Agr4+eKfiN4DuPFAt9Vtm1Gx1LxR8FtEtbq68Gztok\ +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' + $begin 'DesignInfo' + DesignName='IcepakDesign1' + Notes='' + Factory='Icepak' + IsSolved=false + 'Nominal Setups'[0:] + 'Nominal Setup Types'[0:] + 'Optimetrics Setups'[0:] + 'Optimetrics Experiment Types'[0:] + Image64='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiiigAooooAKKKKACiii\ +gAooooAKKwfFXifQvBPhjxH4z8Uajb6P4Z8I6DrHifxFq92xW10rQtA0+41XV9RuWAO23g0+0uJXPZY\ +jX8WH7Pn7dP7avhz9pb4D/8ABRr4x/Fv4rD9h/8Aaq/a9+LvwTg+E3iH4g+ML34Y/D7wdqQstJ8MapF\ +4RvNYfR9O07SptY1d7OW0txcmf4Nay0hb7SfPAP7baK/P/wDba/4KS/s9/sB+KPgB4c+Pdh8RRbftDa\ +94l0TQPFPg3w/omveHfBkHhDUfAdh4g1/x6t54os9QttFgj+IOlXGNI0/WL2SDTrzy7N50t4LnyL4cf\ +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' + $end 'DesignInfo' +$end 'ProjectPreview' diff --git a/_unittest/example_models/syslib/Materials.amat b/_unittest/example_models/syslib/Materials.amat new file mode 100644 index 00000000000..a688590e6d9 --- /dev/null +++ b/_unittest/example_models/syslib/Materials.amat @@ -0,0 +1,123 @@ +$begin '$base_index$' + $begin 'properties' + all_levels=000000000000 + time(year=000000002021, month=000000000009, day=000000000001, hour=000000000015, min=000000000032, sec=000000000052) + version=000000000000 + $end 'properties' + $begin '$base_index$' + $index$(pos=000000318773, lin=000000011311, lvl=000000000000) + $end '$base_index$' +$end '$base_index$' +$begin 'FC-78' + $begin 'MaterialDef' + $begin 'FC-78' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=0 + Green=128 + Blue=255 + Transparency=0.8 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='0.062' + mass_density='1700' + specific_heat='1050' + thermal_expansion_coeffcient='0.0016' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + molecular_mass='0.001' + viscosity='0.000462' + ModTime=1592011950 + $end 'FC-78' + $end 'MaterialDef' +$end 'FC-78' +$begin 'Polyflon CuFlon (tm)' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=225 + Blue=220 + $end 'MatAppearanceData' + $end 'AttachedData' + simple('permittivity', 2.1) + simple('dielectric_loss_tangent', 0.00045) + ModTime=1499970477 +$end 'Polyflon CuFlon (tm)' +$begin 'Water(@360K)' + $begin 'MaterialDef' + $begin 'Water(@360K)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=0 + Green=128 + Blue=255 + Transparency=0.8 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='0.6743' + mass_density='967.4' + specific_heat='4206' + thermal_expansion_coeffcient='0.0006979' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + material_refractive_index='1.333' + diffusivity='1.657e-007' + molecular_mass='0.018015' + viscosity='0.000324' + ModTime=1592011950 + $end 'Water(@360K)' + $end 'MaterialDef' +$end 'Water(@360K)' +$begin 'steel_stainless' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=176 + Green=154 + Blue=176 + $end 'MatAppearanceData' + $end 'AttachedData' + simple('conductivity', 1100000) + simple('thermal_conductivity', 13.8) + simple('mass_density', 8055) + simple('specific_heat', 480) + simple('youngs_modulus', 195000000000) + simple('poissons_ratio', 0.3) + simple('thermal_expansion_coeffcient', 1.08e-005) + ModTime=1499970477 +$end 'steel_stainless' +$begin '$index$' + $begin '$index$' + steel_stainless(pos=1224, lin=48, lvl=0) + 'Polyflon CuFlon (tm)'(pos=22164, lin=814, lvl=0) + 'FC-78'(pos=126130, lin=4842, lvl=0) + 'Water(@360K)'(pos=118115, lin=4556, lvl=0) + $base_index$(pos=0, lin=1, lvl=0) + $index$(pos=318773, lin=11311, lvl=0) + $end '$index$' +$end '$index$' diff --git a/_unittest/test_00_EDB.py b/_unittest/test_00_EDB.py index 717b7d2b97d..b926ebd088d 100644 --- a/_unittest/test_00_EDB.py +++ b/_unittest/test_00_EDB.py @@ -1,10 +1,15 @@ +import builtins import json import os # Setup paths for module imports # Import required modules import sys +from unittest.mock import mock_open +from mock import MagicMock +from mock import PropertyMock +from mock import patch import pytest from pyaedt import Edb @@ -12,6 +17,7 @@ from pyaedt.edb_core.edb_data.edbvalue import EdbValue from pyaedt.edb_core.edb_data.simulation_configuration import SimulationConfiguration from pyaedt.edb_core.edb_data.sources import Source +from pyaedt.edb_core.materials import Materials from pyaedt.generic.constants import RadiationBoxType from pyaedt.generic.general_methods import check_numeric_equivalence @@ -33,6 +39,59 @@ test_subfolder = "TEDB" +MATERIALS = """ +$begin 'Polyflon CuFlon (tm)' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=225 + Blue=220 + $end 'MatAppearanceData' + $end 'AttachedData' + simple('permittivity', 2.1) + simple('dielectric_loss_tangent', 0.00045) + ModTime=1499970477 +$end 'Polyflon CuFlon (tm)' +$begin 'Water(@360K)' + $begin 'MaterialDef' + $begin 'Water(@360K)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Thermal') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=0 + Green=128 + Blue=255 + Transparency=0.8 + $end 'MatAppearanceData' + $end 'AttachedData' + thermal_conductivity='0.6743' + mass_density='967.4' + specific_heat='4206' + thermal_expansion_coeffcient='0.0006979' + $begin 'thermal_material_type' + property_type='ChoiceProperty' + Choice='Fluid' + $end 'thermal_material_type' + $begin 'clarity_type' + property_type='ChoiceProperty' + Choice='Transparent' + $end 'clarity_type' + material_refractive_index='1.333' + diffusivity='1.657e-007' + molecular_mass='0.018015' + viscosity='0.000324' + ModTime=1592011950 + $end 'Water(@360K)' + $end 'MaterialDef' +$end 'Water(@360K)' +""" + @pytest.fixture(scope="class") def edbapp(add_edb): @@ -114,7 +173,7 @@ def test_003_create_coax_port_on_component(self): coax_port.radial_extent_factor = 3 assert coax_port.radial_extent_factor == 3 assert coax_port.component - assert self.edbapp.components["U6"].pins["R3"].terminal + assert self.edbapp.components["U6"].pins["R3"].get_terminal() assert self.edbapp.components["U6"].pins["R3"].id assert self.edbapp.terminals assert self.edbapp.ports @@ -278,7 +337,7 @@ def test_010_nets_query(self): diff_pair = self.edbapp.differential_pairs.create("new_pair1", "PCIe_Gen4_RX1_P", "PCIe_Gen4_RX1_N") assert diff_pair.positive_net.name == "PCIe_Gen4_RX1_P" assert diff_pair.negative_net.name == "PCIe_Gen4_RX1_N" - assert self.edbapp.differential_pairs.items + assert self.edbapp.differential_pairs["new_pair1"] assert self.edbapp.net_classes.items assert self.edbapp.net_classes.create("DDR4_ADD", ["DDR4_A0", "DDR4_A1"]) @@ -435,6 +494,10 @@ def test_041_create_voltage_source(self): assert list(self.edbapp.sources.values())[0].magnitude == 3.3 list(self.edbapp.sources.values())[0].phase = 1 assert list(self.edbapp.sources.values())[0].phase == 1 + u6 = self.edbapp.components["U6"] + self.edbapp.create_voltage_source( + u6.pins["F2"].get_terminal(create_new_terminal=True), u6.pins["F1"].get_terminal(create_new_terminal=True) + ) def test_042_create_current_source(self): assert self.edbapp.siwave.create_current_source_on_net("U1", "USB3_D_N", "U1", "GND", 0.1, 0) != "" @@ -448,12 +511,12 @@ def test_042_create_current_source(self): ) self.edbapp.siwave.create_pin_group( - reference_designator="U1", pin_numbers=["A14", "A15"], group_name="sink_pos" + reference_designator="U1", pin_numbers=["R23", "P23"], group_name="sink_pos" ) assert self.edbapp.siwave.create_voltage_source_on_pin_group("sink_pos", "gnd", name="vrm_voltage_source") self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["A27", "A28"], group_name="vp_pos") - self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["A14", "A15"], group_name="vp_neg") + self.edbapp.siwave.create_pin_group(reference_designator="U1", pin_numbers=["R23", "P23"], group_name="vp_neg") assert self.edbapp.siwave.create_voltage_probe_on_pin_group("vprobe", "vp_pos", "vp_neg") assert self.edbapp.probes["vprobe"] self.edbapp.siwave.place_voltage_probe( @@ -465,6 +528,10 @@ def test_042_create_current_source(self): ref_term.location = [0, 0] assert ref_term.layer ref_term.layer = "1_Top" + u6 = self.edbapp.components["U6"] + self.edbapp.create_current_source( + u6.pins["H8"].get_terminal(create_new_terminal=True), u6.pins["G9"].get_terminal(create_new_terminal=True) + ) def test_043_create_dc_terminal(self): assert self.edbapp.siwave.create_dc_terminal("U1", "DDR4_DQ40", "dc_terminal1") == "dc_terminal1" @@ -1051,8 +1118,10 @@ def test_086_set_component_type(self): assert comp.type == "Other" def test_087_deactivate_rlc(self): - assert self.edbapp.components.deactivate_rlc_component(component="C1", create_circuit_port=True) + assert self.edbapp.components.deactivate_rlc_component(component="C1", create_circuit_port=False) + assert self.edbapp.ports["C1"] assert self.edbapp.components["C1"].is_enabled is False + assert self.edbapp.components.deactivate_rlc_component(component="C2", create_circuit_port=True) self.edbapp.components["C2"].is_enabled = False assert self.edbapp.components["C2"].is_enabled is False self.edbapp.components["C2"].is_enabled = True @@ -2001,6 +2070,7 @@ def test_129_hfss_simulation_setup(self): setup1.hfss_solver_settings.relative_residual = 0.0002 setup1.hfss_solver_settings.use_shell_elements = True + setup1b = edbapp.setups["setup1"] hfss_solver_settings = edbapp.setups["setup1"].hfss_solver_settings assert hfss_solver_settings.order_basis == "first" assert hfss_solver_settings.relative_residual == 0.0002 @@ -2167,72 +2237,55 @@ def test_129_hfss_simulation_setup(self): def test_130_siwave_dc_simulation_setup(self): setup1 = self.edbapp.create_siwave_dc_setup("DC1") - assert setup1.name == "DC1" - assert not setup1.compute_inductance - assert setup1.contact_radius == "0.1mm" - assert setup1.dc_slider_position == 1 - assert setup1.enabled - assert setup1.energy_error == 3.0 - assert setup1.max_init_mesh_edge_length == "2.5mm" - assert setup1.max_num_pass == 5 - assert setup1.min_num_pass == 1 - assert setup1.mesh_bondwires - assert setup1.mesh_vias - assert setup1.min_plane_area == "0.25mm2" - assert setup1.min_void_area == "0.01mm2" - assert setup1.num_bondwire_sides == 8 - assert setup1.num_via_sides == 8 - assert setup1.percent_local_refinement == 20.0 - assert setup1.perform_adaptive_refinement - assert setup1.plot_jv - assert not setup1.refine_bondwires - assert not setup1.refine_vias - setup1.name = "DC2" - setup1.compute_inductance = True - setup1.contact_radius = "0.2mm" - setup1.dc_slider_position = 2 - setup1.energy_error = 2.0 - setup1.max_init_mesh_edge_length = "5.5mm" - setup1.max_num_pass = 3 - setup1.min_num_pass = 2 - setup1.mesh_bondwires = False - setup1.mesh_vias = False - assert not setup1.mesh_bondwires - assert not setup1.mesh_vias - setup1.min_plane_area = "0.5mm2" - setup1.min_void_area = "0.021mm2" - setup1.num_bondwire_sides = 6 - setup1.num_via_sides = 10 - setup1.percent_local_refinement = 10.0 - setup1.perform_adaptive_refinement = False - setup1.plot_jv = False - setup1.refine_bondwires = True - setup1.refine_vias = True - - assert setup1.name == "DC2" - assert setup1.compute_inductance - assert setup1.contact_radius == "0.2mm" - assert setup1.dc_slider_position == 2 - assert setup1.energy_error == 2.0 - assert setup1.max_init_mesh_edge_length == "5.5mm" - assert setup1.max_num_pass == 3 - assert setup1.min_num_pass == 2 - assert setup1.mesh_bondwires - assert setup1.mesh_vias - assert setup1.min_plane_area == "0.5mm2" - assert setup1.min_void_area == "0.021mm2" - assert setup1.num_bondwire_sides == 6 - assert setup1.num_via_sides == 10 - assert setup1.percent_local_refinement == 10.0 - assert not setup1.perform_adaptive_refinement - assert not setup1.plot_jv - assert setup1.refine_bondwires - assert setup1.refine_vias + setup1.dc_settings.restore_default() + setup1.dc_advanced_settings.restore_default() + + settings = self.edbapp.setups["DC1"].get_configurations() + for k, v in setup1.dc_settings.defaults.items(): + if k in ["compute_inductance", "plot_jv"]: + continue + print(k) + assert settings["dc_settings"][k] == v + + for k, v in setup1.dc_advanced_settings.defaults.items(): + print(k) + assert settings["dc_advanced_settings"][k] == v + + for p in [0, 1, 2]: + setup1.set_dc_slider(p) + settings = self.edbapp.setups["DC1"].get_configurations() + for k, v in setup1.dc_settings.dc_defaults.items(): + print(k) + assert settings["dc_settings"][k] == v[p] + + for k, v in setup1.dc_advanced_settings.dc_defaults.items(): + print(k) + assert settings["dc_advanced_settings"][k] == v[p] def test_131_siwave_ac_simulation_setup(self): setup1 = self.edbapp.create_siwave_syz_setup("AC1") assert setup1.name == "AC1" assert setup1.enabled + setup1.advanced_settings.restore_default() + + settings = self.edbapp.setups["AC1"].get_configurations() + for k, v in setup1.advanced_settings.defaults.items(): + if k in ["min_plane_area_to_mesh"]: + continue + assert settings["advanced_settings"][k] == v + + for p in [0, 1, 2]: + setup1.set_si_slider(p) + settings = self.edbapp.setups["AC1"].get_configurations() + for k, v in setup1.advanced_settings.si_defaults.items(): + assert settings["advanced_settings"][k] == v[p] + + for p in [0, 1, 2]: + setup1.set_pi_slider(p) + settings = self.edbapp.setups["AC1"].get_configurations() + for k, v in setup1.advanced_settings.pi_defaults.items(): + assert settings["advanced_settings"][k] == v[p] + sweep = setup1.add_frequency_sweep( "sweep1", frequency_sweep=[ @@ -2241,7 +2294,6 @@ def test_131_siwave_ac_simulation_setup(self): ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], ], ) - assert "sweep1" in setup1.frequency_sweeps assert "0" in sweep.frequencies assert not sweep.adaptive_sampling assert not sweep.adv_dc_extrapolation @@ -2250,9 +2302,9 @@ def test_131_siwave_ac_simulation_setup(self): assert not sweep.enforce_dc_and_causality assert sweep.enforce_passivity assert sweep.freq_sweep_type == "kInterpolatingSweep" - assert sweep.interp_use_full_basis - assert sweep.interp_use_port_impedance - assert sweep.interp_use_prop_const + assert sweep.interpolation_use_full_basis + assert sweep.interpolation_use_port_impedance + assert sweep.interpolation_use_prop_const assert sweep.max_solutions == 250 assert sweep.min_freq_s_mat_only_solve == "1MHz" assert not sweep.min_solved_freq @@ -2264,14 +2316,15 @@ def test_131_siwave_ac_simulation_setup(self): sweep.adaptive_sampling = True sweep.adv_dc_extrapolation = True + sweep.compute_dc_point = True sweep.auto_s_mat_only_solve = False sweep.enforce_causality = True sweep.enforce_dc_and_causality = True sweep.enforce_passivity = False sweep.freq_sweep_type = "kDiscreteSweep" - sweep.interp_use_full_basis = False - sweep.interp_use_port_impedance = False - sweep.interp_use_prop_const = False + sweep.interpolation_use_full_basis = False + sweep.interpolation_use_port_impedance = False + sweep.interpolation_use_prop_const = False sweep.max_solutions = 200 sweep.min_freq_s_mat_only_solve = "2MHz" sweep.min_solved_freq = "1Hz" @@ -2283,14 +2336,15 @@ def test_131_siwave_ac_simulation_setup(self): assert sweep.adaptive_sampling assert sweep.adv_dc_extrapolation + assert sweep.compute_dc_point assert not sweep.auto_s_mat_only_solve assert sweep.enforce_causality assert sweep.enforce_dc_and_causality assert not sweep.enforce_passivity assert sweep.freq_sweep_type == "kDiscreteSweep" - assert not sweep.interp_use_full_basis - assert not sweep.interp_use_port_impedance - assert not sweep.interp_use_prop_const + assert not sweep.interpolation_use_full_basis + assert not sweep.interpolation_use_port_impedance + assert not sweep.interpolation_use_prop_const assert sweep.max_solutions == 200 assert sweep.min_freq_s_mat_only_solve == "2MHz" assert sweep.min_solved_freq == "1Hz" @@ -2300,85 +2354,6 @@ def test_131_siwave_ac_simulation_setup(self): assert sweep.save_rad_fields_only assert sweep.use_q3d_for_dc - setup1.pi_slider_postion = 0 - setup1.pi_slider_postion = 1 - setup1.pi_slider_postion = 2 - setup1.si_slider_postion = 0 - setup1.si_slider_postion = 1 - setup1.si_slider_postion = 2 - assert setup1.automatic_mesh - assert setup1.enabled - assert setup1.dc_settings - assert setup1.ignore_non_functional_pads - assert setup1.include_coplane_coupling - assert setup1.include_fringe_coupling - assert not setup1.include_infinite_ground - assert not setup1.include_inter_plane_coupling - assert setup1.include_split_plane_coupling - assert setup1.include_trace_coupling - assert not setup1.include_vi_sources - assert setup1.infinite_ground_location == "0" - assert setup1.max_coupled_lines == 40 - assert setup1.mesh_frequency == "4GHz" - assert setup1.min_pad_area_to_mesh == "1mm2" - assert setup1.min_plane_area_to_mesh == "6.25e-6mm2" - assert setup1.min_void_area == "2mm2" - assert setup1.name == "AC1" - assert setup1.perform_erc - assert setup1.return_current_distribution - assert setup1.snap_length_threshold == "2.5um" - assert setup1.use_si_settings - assert setup1.use_custom_settings - assert setup1.xtalk_threshold == "-34" - - setup1.automatic_mesh = False - setup1.enabled = False - setup1.ignore_non_functional_pads = False - setup1.include_coplane_coupling = False - setup1.include_fringe_coupling = False - setup1.include_infinite_ground = True - setup1.include_inter_plane_coupling = True - setup1.include_split_plane_coupling = False - setup1.include_trace_coupling = False - assert setup1.use_custom_settings - setup1.include_vi_sources = True - setup1.infinite_ground_location = "0.1" - setup1.max_coupled_lines = 10 - setup1.mesh_frequency = "3GHz" - setup1.min_pad_area_to_mesh = "2mm2" - setup1.min_plane_area_to_mesh = "5.25e-6mm2" - setup1.min_void_area = "1mm2" - setup1.name = "AC2" - setup1.perform_erc = False - setup1.return_current_distribution = True - setup1.snap_length_threshold = "3.5um" - setup1.use_si_settings = False - assert not setup1.use_custom_settings - setup1.xtalk_threshold = "-44" - - assert not setup1.automatic_mesh - assert not setup1.enabled - assert not setup1.ignore_non_functional_pads - assert not setup1.include_coplane_coupling - assert not setup1.include_fringe_coupling - assert setup1.include_infinite_ground - assert setup1.include_inter_plane_coupling - assert not setup1.include_split_plane_coupling - assert not setup1.include_trace_coupling - assert setup1.include_vi_sources - assert setup1.infinite_ground_location == "0.1" - assert setup1.max_coupled_lines == 10 - assert setup1.mesh_frequency == "3GHz" - assert setup1.min_pad_area_to_mesh == "2mm2" - assert setup1.min_plane_area_to_mesh == "5.25e-6mm2" - assert setup1.min_void_area == "1mm2" - assert setup1.name == "AC2" - assert not setup1.perform_erc - assert setup1.return_current_distribution - assert setup1.snap_length_threshold == "3.5um" - assert not setup1.use_si_settings - assert setup1.xtalk_threshold == "-44" - def test_132_via_plating_ratio_check(self): assert self.edbapp.padstacks.check_and_fix_via_plating() @@ -2391,7 +2366,7 @@ def test_133_siwave_build_ac_prject(self): simconfig.solver_type = SolverType.SiwaveSYZ simconfig.mesh_freq = "40.25GHz" edbapp.build_simulation_project(simconfig) - assert edbapp.siwave_ac_setups[simconfig.setup_name].mesh_frequency == simconfig.mesh_freq + assert edbapp.siwave_ac_setups[simconfig.setup_name].advanced_settings.mesh_frequency == simconfig.mesh_freq edbapp.close() def test_134_create_port_between_pin_and_layer(self): @@ -2402,6 +2377,14 @@ def test_134_create_port_between_pin_and_layer(self): edbapp.siwave.create_port_between_pin_and_layer( component_name="U1", pins_name="A27", layer_name="16_Bottom", reference_net="GND" ) + U7 = edbapp.components["U7"] + U7.pins["G7"].create_port() + port = U7.pins["F7"].create_port(reference=U7.pins["E7"]) + port.is_circuit_port = True + _, pin_group = edbapp.siwave.create_pin_group_on_net( + reference_designator="U7", net_name="GND", group_name="U7_GND" + ) + U7.pins["F7"].create_port(reference=pin_group) edbapp.close() def test_134_siwave_source_setter(self): @@ -2946,14 +2929,57 @@ def test_147_find_dc_shorts(self): assert len(edbapp.nets["DDR4_DM3"].find_dc_short()) == 0 edbapp.close() - def test_148_load_amat(self): - assert "Rogers RO3003 (tm)" in self.edbapp.materials.materials_in_aedt - material_file = os.path.join(self.edbapp.materials.syslib, "Materials.amat") - assert self.edbapp.materials.add_material_from_aedt("Arnold_Magnetics_N28AH_-40C") - assert "Arnold_Magnetics_N28AH_-40C" in self.edbapp.materials.materials.keys() - assert self.edbapp.materials.load_amat(material_file) + @patch("pyaedt.edb_core.materials.Materials.materials", new_callable=PropertyMock) + @patch.object(builtins, "open", new_callable=mock_open, read_data=MATERIALS) + def test_149_materials_read_materials(self, mock_file_open, mock_materials_property): + """Read materials from an AMAT file.""" + mock_materials_property.return_value = ["copper"] + materials = Materials(MagicMock()) + expected_res = { + "Polyflon CuFlon (tm)": {"permittivity": 2.1, "tangent_delta": 0.00045}, + "Water(@360K)": { + "thermal_conductivity": 0.6743, + "mass_density": 967.4, + "specific_heat": 4206, + "thermal_expansion_coeffcient": 0.0006979, + }, + } + mats = materials.read_materials("some path") + assert mats == expected_res + + def test_150_material_load_amat(self): + """Load material from an AMAT file.""" + mat_file = os.path.join(self.edbapp.base_path, "syslib", "Materials.amat") + assert self.edbapp.materials.load_amat(mat_file) material_list = list(self.edbapp.materials.materials.keys()) assert material_list assert len(material_list) > 0 assert self.edbapp.materials.materials["Rogers RO3003 (tm)"].loss_tangent == 0.0013 assert self.edbapp.materials.materials["Rogers RO3003 (tm)"].permittivity == 3.0 + + def test_151_materials_read_materials(self): + """Read materials.""" + path = os.path.join(local_path, "example_models", "syslib", "Materials.amat") + mats = self.edbapp.materials.read_materials(path) + key = "FC-78" + assert key in mats + assert mats[key]["thermal_conductivity"] == 0.062 + assert mats[key]["mass_density"] == 1700 + assert mats[key]["specific_heat"] == 1050 + assert mats[key]["thermal_expansion_coeffcient"] == 0.0016 + key = "Polyflon CuFlon (tm)" + assert key in mats + assert mats[key]["permittivity"] == 2.1 + assert mats[key]["tangent_delta"] == 0.00045 + key = "Water(@360K)" + assert key in mats + assert mats[key]["thermal_conductivity"] == 0.6743 + assert mats[key]["mass_density"] == 967.4 + assert mats[key]["specific_heat"] == 4206 + assert mats[key]["thermal_expansion_coeffcient"] == 0.0006979 + key = "steel_stainless" + assert mats[key]["conductivity"] == 1100000 + assert mats[key]["thermal_conductivity"] == 13.8 + assert mats[key]["mass_density"] == 8055 + assert mats[key]["specific_heat"] == 480 + assert mats[key]["thermal_expansion_coeffcient"] == 1.08e-005 diff --git a/_unittest/test_01_Design.py b/_unittest/test_01_Design.py index 1dc5fc7c31f..00e37c48092 100644 --- a/_unittest/test_01_Design.py +++ b/_unittest/test_01_Design.py @@ -98,6 +98,8 @@ def test_08_objects(self): print(self.aedtapp.logger) print(self.aedtapp.variable_manager) print(self.aedtapp.materials) + print(self.aedtapp) + assert self.aedtapp.info def test_09_set_objects_deformation(self): assert self.aedtapp.modeler.set_objects_deformation(["inner"]) diff --git a/_unittest/test_02_3D_modeler.py b/_unittest/test_02_3D_modeler.py index f728c871e3d..8dc36cfa7ac 100644 --- a/_unittest/test_02_3D_modeler.py +++ b/_unittest/test_02_3D_modeler.py @@ -1041,3 +1041,44 @@ def test_61_get_face_by_id(self): assert isinstance(face, FacePrimitive) face = self.aedtapp.modeler.get_face_by_id(random.randint(10000, 100000)) assert not face + + def test_62_copy_solid_bodies_udm_3dcomponent(self, add_app): + self.aedtapp.insert_design("udm") + my_udmPairs = [] + mypair = ["ILD Thickness (ILD)", "0.006mm"] + my_udmPairs.append(mypair) + mypair = ["Line Spacing (LS)", "0.004mm"] + my_udmPairs.append(mypair) + mypair = ["Line Thickness (LT)", "0.005mm"] + my_udmPairs.append(mypair) + mypair = ["Line Width (LW)", "0.004mm"] + my_udmPairs.append(mypair) + mypair = ["No. of Turns (N)", 2] + my_udmPairs.append(mypair) + mypair = ["Outer Diameter (OD)", "0.15mm"] + my_udmPairs.append(mypair) + mypair = ["Substrate Thickness", "0.2mm"] + my_udmPairs.append(mypair) + mypair = [ + "Inductor Type", + '"Square,Square,Octagonal,Circular,Square-Differential,Octagonal-Differential,Circular-Differential"', + ] + my_udmPairs.append(mypair) + mypair = ["Underpass Thickness (UT)", "0.001mm"] + my_udmPairs.append(mypair) + mypair = ["Via Thickness (VT)", "0.001mm"] + my_udmPairs.append(mypair) + + obj_udm = self.aedtapp.modeler.create_udm( + udmfullname="Maxwell3D/OnDieSpiralInductor.py", udm_params_list=my_udmPairs, udm_library="syslib" + ) + + compfile = self.aedtapp.components3d["Bowtie_DM"] + obj_3dcomp = self.aedtapp.modeler.insert_3d_component(compfile) + dest = add_app(design_name="IcepakDesign1", just_open=True) + dest.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) + dest.delete_design("IcepakDesign1") + dest = add_app(design_name="IcepakDesign2", just_open=True) + dest.copy_solid_bodies_from(self.aedtapp) + dest2 = add_app(design_name="uUSB") + dest2.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) diff --git a/_unittest/test_03_Materials.py b/_unittest/test_03_Materials.py index 7fc62a651e3..53b23a0bbf1 100644 --- a/_unittest/test_03_Materials.py +++ b/_unittest/test_03_Materials.py @@ -227,7 +227,9 @@ def test_09_non_linear_materials(self, add_app): assert app.materials["myMat"].permittivity.type == "nonlinear" assert app.materials["myMat"].permeability.bunit == "tesla" mat2 = app.materials.add_material("myMat2") + assert not mat2.is_used assert app.modeler.create_box([0, 0, 0], [10, 10, 10], matname="myMat2") + assert app.materials.material_keys["mymat2"].is_used def test_10_add_material_sweep(self): assert self.aedtapp.materials.add_material_sweep(["copper", "aluminum"], "sweep_copper") @@ -237,3 +239,9 @@ def test_11_material_case(self): assert self.aedtapp.materials["Aluminum"] == self.aedtapp.materials["aluminum"] assert self.aedtapp.materials["Aluminum"].name == "aluminum" assert self.aedtapp.materials.add_material("AluMinum") == self.aedtapp.materials["aluminum"] + + def test_12_material_model(self): + mat = self.aedtapp.materials.add_material("ds_material") + self.aedtapp["$dk"] = 3 + self.aedtapp["$df"] = 0.01 + assert mat.set_djordjevic_sarkar_model(dk="$dk", df="$df") diff --git a/_unittest/test_04_SBR.py b/_unittest/test_04_SBR.py index 9a7ff0374b3..65878cfd65e 100644 --- a/_unittest/test_04_SBR.py +++ b/_unittest/test_04_SBR.py @@ -60,6 +60,7 @@ def test_01_open_source(self, source): assert len(self.aedtapp.native_components) == 1 def test_02_add_antennas(self): + self.aedtapp.insert_design("add_antennas") dict1 = {"polarization": "Horizontal"} par_beam = self.aedtapp.create_sbr_antenna( self.aedtapp.SbrAntennas.ParametricBeam, parameters_dict=dict1, antenna_name="TX1" @@ -71,8 +72,8 @@ def test_02_add_antennas(self): assert par_beam.update() self.aedtapp.modeler.user_defined_components["TX1_1"].native_properties["Unit"] = "mm" - assert len(self.aedtapp.native_components) == 3 - assert len(self.aedtapp.modeler.user_defined_components) == 3 + assert len(self.aedtapp.native_components) == 2 + assert len(self.aedtapp.modeler.user_defined_components) == 2 assert self.aedtapp.set_sbr_txrx_settings({"TX1_1_p1": "RX1_1_p1"}) assert self.aedtapp.create_sbr_antenna( self.aedtapp.SbrAntennas.CrossDipole, use_current_source_representation=True @@ -109,6 +110,7 @@ def test_02_add_antennas(self): assert array.update() def test_03_add_ffd_antenna(self): + self.aedtapp.insert_design("ffd_antenna") assert self.aedtapp.create_sbr_file_based_antenna( ffd_full_path=os.path.join(local_path, "example_models", test_subfolder, "test.ffd") ) diff --git a/_unittest/test_07_Object3D.py b/_unittest/test_07_Object3D.py index bbfb5ad8054..439aa15bfe5 100644 --- a/_unittest/test_07_Object3D.py +++ b/_unittest/test_07_Object3D.py @@ -340,14 +340,14 @@ def test_print_object(self): o = self.create_copper_box() assert o.name in o.__str__() test_face = o.faces[0] - assert "FaceId" in test_face.__repr__() - assert "FaceId" in test_face.__str__() + assert isinstance(int(test_face.__str__()), int) + assert isinstance(int(test_face.__repr__()), int) test_edge = test_face.edges[0] - assert "EdgeId" in test_edge.__repr__() - assert "EdgeId" in test_edge.__str__() + assert isinstance(int(test_edge.__str__()), int) + assert isinstance(int(test_edge.__repr__()), int) test_vertex = test_face.vertices[0] - assert "Vertex" in test_vertex.__repr__() - assert "Vertex" in test_vertex.__str__() + assert isinstance(int(test_vertex.__str__()), int) + assert isinstance(int(test_vertex.__repr__()), int) def test_13_delete_self(self): o = self.create_copper_box() diff --git a/_unittest/test_08_Primitives3D.py b/_unittest/test_08_Primitives3D.py index d23a7fe61ec..4aa553bf993 100644 --- a/_unittest/test_08_Primitives3D.py +++ b/_unittest/test_08_Primitives3D.py @@ -1185,6 +1185,13 @@ def test_64_create_3d_component_encrypted(self): is_encrypted=True, password="password_test", ) + assert self.aedtapp.modeler.create_3dcomponent( + self.component3d_file, + included_cs="Global", + is_encrypted=True, + password="password_test", + hide_contents=["Solid"], + ) assert not self.aedtapp.modeler.create_3dcomponent( self.component3d_file, included_cs="Global", @@ -1769,8 +1776,9 @@ def test_85_insert_layoutcomponent(self): ) self.aedtapp.solution_type = "Terminal" comp = self.aedtapp.modeler.insert_layout_component(self.layout_component, name=None, parameter_mapping=False) + assert comp.name in self.aedtapp.modeler.layout_component_names assert isinstance(comp, UserDefinedComponent) - assert len(self.aedtapp.modeler.modeler.user_defined_components[comp.name].parts) == 3 + assert len(self.aedtapp.modeler.user_defined_components[comp.name].parts) == 3 comp2 = self.aedtapp.modeler.insert_layout_component( self.layout_component, name="new_layout", parameter_mapping=True ) diff --git a/_unittest/test_20_HFSS.py b/_unittest/test_20_HFSS.py index 08cf93e0e11..72f828818a7 100644 --- a/_unittest/test_20_HFSS.py +++ b/_unittest/test_20_HFSS.py @@ -14,10 +14,17 @@ test_subfolder = "T20" if config["desktopVersion"] > "2022.2": + component = "Circ_Patch_5GHz_232.a3dcomp" +else: + component = "Circ_Patch_5GHz.a3dcomp" + +if config["desktopVersion"] > "2023.1": diff_proj_name = "differential_pairs_231" else: diff_proj_name = "differential_pairs" +component_array = "Array_232" + @pytest.fixture(scope="class") def aedtapp(add_app): @@ -1257,16 +1264,32 @@ def test_51a_array(self): self.aedtapp.insert_design("Array_simple", "Modal") from pyaedt.generic.DataHandlers import json_to_dict - dict_in = json_to_dict( - os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_simple.json") - ) - dict_in["Circ_Patch_5GHz1"] = os.path.join( - local_path, "../_unittest/example_models", test_subfolder, "Circ_Patch_5GHz.a3dcomp" - ) - dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} + if config["desktopVersion"] > "2023.1": + dict_in = json_to_dict( + os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_simple_232.json") + ) + dict_in["Circ_Patch_5GHz_232_1"] = os.path.join( + local_path, "../_unittest/example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz_232_1"} + else: + dict_in = json_to_dict( + os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_simple.json") + ) + dict_in["Circ_Patch_5GHz1"] = os.path.join( + local_path, "../_unittest/example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} + assert self.aedtapp.add_3d_component_array_from_json(dict_in) + array_name = self.aedtapp.component_array_names[0] + assert self.aedtapp.component_array[array_name].cells[2][2].rotation == 0 + assert self.aedtapp.component_array_names dict_in["cells"][(3, 3)]["rotation"] = 90 - assert self.aedtapp.add_3d_component_array_from_json(dict_in) + component_array = self.aedtapp.add_3d_component_array_from_json(dict_in) + assert component_array.cells[2][2].rotation == 90 + component_array.cells[2][2].rotation = 0 + assert component_array.cells[2][2].rotation == 0 def test_51b_set_material_threshold(self): assert self.aedtapp.set_material_threshold() @@ -1470,3 +1493,116 @@ def test_64_import_dxf(self): dxf_layers = self.aedtapp.get_dxf_layers(dxf_file) assert isinstance(dxf_layers, list) assert self.aedtapp.import_dxf(dxf_file, dxf_layers) + + def test_65_component_array(self, add_app): + hfss_array = add_app(project_name=component_array, subfolder=test_subfolder) + assert len(hfss_array.component_array) == 1 + + array = hfss_array.component_array["A1"] + assert array.name == hfss_array.component_array_names[0] + + cell1 = array.get_cell(1, 1) + cell2 = array[1, 1] + assert cell2 + assert cell1.rotation == 0 + + assert not array.get_cell(0, 0) + assert not array.get_cell(10, 0) + + lc = array.lattice_vector() + assert len(lc) == 6 + + assert len(array.component_names) == 4 + + assert len(array.post_processing_cells) == 4 + post_cells = array.post_processing_cells + post_cells["Radome_Corner1"] = [8, 1] + array.post_processing_cells = post_cells + assert array.post_processing_cells["Radome_Corner1"] == [8, 1] + + array.cells[0][1].component = None + assert not array.cells[0][1].component + + array.cells[1][1].rotation = 90 + assert array.cells[1][1].rotation == 90 + + array.cells[1][1].rotation = 10 + assert not array.cells[1][1].rotation == 10 + + array.cells[1][1].is_active = False + array.cells[1][1].is_active = 1 + assert not array.cells[1][1].is_active + + assert array.cells[1][2].component == array.component_names[2] + assert not array.cells[1][2].component == "test" + + array.cells[0][1].component = array.component_names[3] + assert array.cells[0][1].component == array.component_names[3] + + hfss_array.component_array["A1"].name = "Array_new" + assert hfss_array.component_array_names[0] == "Array_new" + hfss_array.component_array["Array_new"].name = "A1" + + omodel = hfss_array.get_oo_object(hfss_array.odesign, "Model") + oarray = hfss_array.get_oo_object(omodel, "A1") + + assert array.visible + array.visible = False + assert not oarray.GetPropValue("Visible") + array.visible = True + assert oarray.GetPropValue("Visible") + + assert array.show_cell_number + array.show_cell_number = False + assert not oarray.GetPropValue("Show Cell Number") + array.show_cell_number = True + assert oarray.GetPropValue("Show Cell Number") + + assert array.render == "Shaded" + array.render = "Wireframe" + assert oarray.GetPropValue("Render") == "Wireframe" + array.render = "Shaded" + assert oarray.GetPropValue("Render") == "Shaded" + array.render = "Shaded1" + assert not array.render == "Shaded1" + + a_choices = array.a_vector_choices + assert array.a_vector_name in a_choices + array.a_vector_name = a_choices[0] + assert oarray.GetPropValue("A Vector") == a_choices[0] + array.a_vector_name = "Test" + assert not array.a_vector_name == "Test" + + b_choices = array.b_vector_choices + assert array.b_vector_name in b_choices + array.b_vector_name = b_choices[1] + assert oarray.GetPropValue("B Vector") == b_choices[1] + array.b_vector_name = "Test" + assert not array.b_vector_name == "Test" + + assert array.a_size == 8 + + assert array.b_size == 8 + + assert array.padding_cells == 0 + array.padding_cells = 2 + assert oarray.GetPropValue("Padding") == "2" + array.padding_cells = 0 + + assert array.coordinate_system == "Global" + array.coordinate_system = "Corner" + array.coordinate_system = "Global" + + array_csv = os.path.join(local_path, "../_unittest/example_models", test_subfolder, "array_info.csv") + array_info = array.parse_array_info_from_csv(array_csv) + assert len(array_info) == 4 + assert array_info["component"][1] == "02_Patch1" + + # Delete 3D Component + hfss_array.modeler.user_defined_components["03_Radome_Side1"].delete() + array.update_properties() + assert len(array.component_names) == 3 + assert len(array.post_processing_cells) == 3 + + array.delete() + assert not hfss_array.component_array diff --git a/_unittest/test_98_Icepak.py b/_unittest/test_98_Icepak.py index cbc6be940e7..b9d858fb6ea 100644 --- a/_unittest/test_98_Icepak.py +++ b/_unittest/test_98_Icepak.py @@ -327,58 +327,14 @@ def test_25_copy_solid_bodies(self, add_app): new_design.delete_design(design_name) new_design.close_project(project_name) - def test_26_copy_solid_bodies_udm_3dcomponent(self, add_app): - my_udmPairs = [] - mypair = ["ILD Thickness (ILD)", "0.006mm"] - my_udmPairs.append(mypair) - mypair = ["Line Spacing (LS)", "0.004mm"] - my_udmPairs.append(mypair) - mypair = ["Line Thickness (LT)", "0.005mm"] - my_udmPairs.append(mypair) - mypair = ["Line Width (LW)", "0.004mm"] - my_udmPairs.append(mypair) - mypair = ["No. of Turns (N)", 2] - my_udmPairs.append(mypair) - mypair = ["Outer Diameter (OD)", "0.15mm"] - my_udmPairs.append(mypair) - mypair = ["Substrate Thickness", "0.2mm"] - my_udmPairs.append(mypair) - mypair = [ - "Inductor Type", - '"Square,Square,Octagonal,Circular,Square-Differential,Octagonal-Differential,Circular-Differential"', - ] - my_udmPairs.append(mypair) - mypair = ["Underpass Thickness (UT)", "0.001mm"] - my_udmPairs.append(mypair) - mypair = ["Via Thickness (VT)", "0.001mm"] - my_udmPairs.append(mypair) - - obj_udm = self.aedtapp.modeler.create_udm( - udmfullname="Maxwell3D/OnDieSpiralInductor.py", udm_params_list=my_udmPairs, udm_library="syslib" - ) - - compfile = self.aedtapp.components3d["ADDA_AB0305MB_GA0"] - obj_3dcomp = self.aedtapp.modeler.insert_3d_component(compfile) - dest = add_app(application=Icepak, design_name="IcepakDesign1", just_open=True) - dest.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) - dest.delete_design("IcepakDesign1") - dest = add_app(application=Icepak, design_name="IcepakDesign2", just_open=True) - dest.copy_solid_bodies_from(self.aedtapp) - dest2 = add_app(design_name="uUSB") - dest2.copy_solid_bodies_from(self.aedtapp, [obj_udm.name, obj_3dcomp.name]) - def test_27_get_all_conductors(self): conductors = self.aedtapp.get_all_conductors_names() - assert sorted(conductors) == ["Inductor", "Paddle", "box", "network_box", "network_box2"] + assert sorted(conductors) == ["box", "network_box", "network_box2"] def test_28_get_all_dielectrics(self): dielectrics = self.aedtapp.get_all_dielectrics_names() assert sorted(dielectrics) == [ - "ADDA_AB0305MB_GA0_1_Box", - "Boundary", - "ILD", "Region", - "Substrate", "box2", "box3", "network_box3", @@ -1307,3 +1263,18 @@ def test_67_import_dxf(self): dxf_layers = self.aedtapp.get_dxf_layers(dxf_file) assert isinstance(dxf_layers, list) assert self.aedtapp.import_dxf(dxf_file, dxf_layers) + + def test_68_mesh_priority_3d_comp(self, add_app): + app = add_app( + application=Icepak, + project_name="3d_comp_mesh_prio_test", + design_name="IcepakDesign1", + subfolder=test_subfolder, + ) + assert app.mesh.add_priority(entity_type=2, comp_name="IcepakDesign1_1", priority=3) + + assert app.mesh.add_priority(entity_type=2, comp_name="all_2d_objects1", priority=2) + + assert app.mesh.add_priority(entity_type=2, comp_name="all_3d_objects1", priority=2) + + app.close_project(name="3d_comp_mesh_prio_test", save_project=False) diff --git a/_unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp b/_unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp new file mode 100644 index 00000000000..a78e60d3e73 --- /dev/null +++ b/_unittest_solvers/example_models/T00/Circ_Patch_5GHz_232.a3dcomp @@ -0,0 +1,5945 @@ +$begin 'AnsoftComponentChkSum' + ChecksumString='6a12cbfd15e157cadf37b8d1f78fb0a7' + ChecksumHistory('f4c81c746cee97b0fa0eca9b6026ba74', 'b76bafd4b64349f9b1bef83210e30246', '2deba8a0e7fff848e49beff26a952a82', 'b6452e22b0ea6d367603320594b474b6') + VersionHistory('1.0', '1.0', '1.0', '1.0') + FormatVersion=11 + Version(2023, 2) + ComponentDefinitionType='DesignDerivedComponentDefinition' +$end 'AnsoftComponentChkSum' +$begin 'AnsoftComponentHeader' + $begin 'Information' + $begin 'ComponentInfo' + ComponentName='Circ_Patch_5GHz_232' + Company='' + 'Company URL'='' + 'Model Number'='' + 'Help URL'='' + Version='2.0' + Notes='' + IconType='' + Owner='Arien Sligar' + Email='arien.sligar@ansys.com' + Date='9:25:10 AM Nov 06, 2023' + HasLabel=false + LabelImage='' + $end 'ComponentInfo' + $end 'Information' + $begin 'DesignDataDescriptions' + $begin 'DesignSettings' + ProductName='HFSS' + SolutionType='HFSS Hybrid Modal Network' + $begin 'DrivenOptions' + AutoOpen=false + $end 'DrivenOptions' + $end 'DesignSettings' + $begin 'Component Meshing' + Type='Volume' + $end 'Component Meshing' + $end 'DesignDataDescriptions' + $begin 'Preview' + Image='/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE\ +BAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAg\ +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCADIAMgDASIAAhEBAxEB/\ +8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR\ +BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUp\ +TVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5us\ +LDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAA\ +AECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB\ +CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ\ +3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4u\ +Pk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+/iiiigAooooAKKKKACiivmj4jeM/GOtfErwB4\ +C8DeJbzwj4bPjrVPBnxJ8UaXp3h658Sr4ll+EPiH4oeG/DXhlPFui6nZ/Y4tG06xvNYuZdNII1/SrbT\ +b2SdNahss6tWNKKlJOTlKMUla7cnZbtLzd3smZVq0aMYyknJylGKStduTSW7S63d2rJNn0vRXkX/AAi\ +fxf0v/R9B+L2kavZv++kufid8MbHxHryXLfI8FpffDfxR4NsYtIEUcLRxS6ZPdrNLcPJfywyQW9qf2z\ +8cdO4vPAPw58R2dhxd3/h/4ka7pGva9bWv+vu9E8Ha98PGsdL1e6iR3ttMvfFJtIJp0tbjXzCr6jU+1\ +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' + $end 'Preview' + ContainsLightweightGeometry=false +$end 'AnsoftComponentHeader' +$begin 'ComponentBody' + $begin 'HFSSModel' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'DesignData' + $begin 'DesignSettings' + 'Allow Material Override'=true + IncludeTemperatureDependence=false + EnableFeedback=false + Temperatures(6, '22cel', 34, '22cel', 114, '22cel', 217, '22cel', 252, '22cel', 287, '22cel', 952, '22cel') + ObjsEnabledForDeformation() + $end 'DesignSettings' + $begin 'DCThickness' + $end 'DCThickness' + $begin 'Boundaries' + $begin 'antennaMetal_2' + ID=2 + BoundType='Perfect E' + IsComponent=false + Objects(114) + ParentBndID=-1 + InfGroundPlane=false + $end 'antennaMetal_2' + $begin 'groundMetal' + ID=4 + BoundType='Perfect E' + IsComponent=false + Objects(34) + ParentBndID=-1 + InfGroundPlane=false + $end 'groundMetal' + $begin 'coax_outer_2' + ID=7 + BoundType='Perfect E' + IsComponent=false + Faces(288) + ParentBndID=-1 + InfGroundPlane=false + $end 'coax_outer_2' + $begin 'Rad1' + ID=21 + BoundType='Radiation' + IsComponent=false + Faces(953) + ParentBndID=-1 + UseAdaptiveIE=false + IsFssReference=false + IsForPML=false + $end 'Rad1' + $begin 'Primary1' + ID=22 + BoundType='Primary' + IsComponent=false + Faces(957) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=975 + ParentIDs(970, 966, 963) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=957 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=972 + ParentIDs(960, 959, 970) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=957 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=false + $end 'Primary1' + $begin 'Secondary1' + ID=23 + BoundType='Secondary' + IsComponent=false + Faces(955) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=976 + ParentIDs(968, 964, 963) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=1 + uvpos_id=955 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=971 + ParentIDs(962, 959, 968) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=1 + uvpos_id=955 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + primary=22 + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Secondary1' + $begin 'Primary2' + ID=24 + BoundType='Primary' + IsComponent=false + Faces(958) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=976 + ParentIDs(968, 964, 963) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=958 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=971 + ParentIDs(962, 959, 968) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='17.645' + YPosition='-17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=958 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=false + $end 'Primary2' + $begin 'Secondary2' + ID=25 + BoundType='Secondary' + IsComponent=false + Faces(956) + ParentBndID=-1 + $begin 'CoordSysVector' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=977 + ParentIDs(967, 965, 964) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-17.645' + YPosition='-17.645' + ZPosition='-1.272' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0 + uvpos_v=0 + uvpos_id=956 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=974 + ParentIDs(962, 961, 967) + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + PositionType='OnVertex' + UParam=0 + VParam=0 + XPosition='-17.645' + YPosition='-17.645' + ZPosition='30' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=1 + uvpos_v=0 + uvpos_id=956 + $end 'uv_block_name' + $end 'CoordSysVector' + ReverseV=true + primary=24 + PhaseDelay='UseScanAngle' + Phi='0deg' + Theta='0deg' + Phase='0deg' + $end 'Secondary2' + $end 'Boundaries' + $begin 'Excitations' + $begin '1' + ID=26 + BoundType='Wave Port' + IsComponent=false + Faces(289) + WavePortType='Modal' + NumModes=1 + PECCapPartID=-1 + UseLineModeAlignment=false + DoDeembed=false + DeembedDist='0mm' + ParentBndID=-1 + $begin 'Modes' + $begin 'Mode1' + ModeNum=1 + UseIntLine=true + $begin 'IntLine' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=291 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + closedU=true + PositionType='OnEdge' + UParam=0 + VParam=0 + XPosition='-3.19117290349489' + YPosition='-3.19117290349489' + ZPosition='-3.772' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.0059288537549406911 + uvpos_v=0.49999999999999989 + uvpos_id=289 + $end 'uv_block_name' + $begin 'GeometryPosition' + IsAttachedToEntity=true + EntityID=256 + FacetedBodyTriangleIndex=-1 + TriangleVertexIndex=-1 + hasXYZ=true + closedU=true + PositionType='OnEdge' + UParam=0 + VParam=0 + XPosition='-2.76690883478296' + YPosition='-2.76690883478296' + ZPosition='-3.772' + $end 'GeometryPosition' + $begin 'uv_block_name' + uvpos_u=0.35468495698674718 + uvpos_v=0.5 + uvpos_id=289 + $end 'uv_block_name' + $end 'IntLine' + AlignmentGroup=0 + CharImp='Zpi' + $end 'Mode1' + $end 'Modes' + UseAnalyticAlignment=false + ShowReporterFilter=false + ReporterFilter(true) + $end '1' + $end 'Excitations' + $begin 'Circuit Elements' + $end 'Circuit Elements' + $begin 'PMLGroups' + $end 'PMLGroups' + $begin 'MeshOperations' + $begin 'GlobalSurfApproximation' + CurvedSurfaceApproxChoice='UseSlider' + SliderMeshSettings=5 + $end 'GlobalSurfApproximation' + $begin 'GlobalCurvilinear' + Apply=false + $end 'GlobalCurvilinear' + $begin 'GlobalModelRes' + UseAutoLength=true + $end 'GlobalModelRes' + MeshMethod='Auto' + UseLegacyFaceterForTauVolumeMesh=false + DynamicSurfaceResolution=false + UseFlexMeshingForTAUvolumeMesh=false + UseAlternativeMeshMethodsAsFallBack=true + AllowPhiForLayeredGeometry=true + $end 'MeshOperations' + $end 'DesignData' + $end 'HFSSModel' + $begin 'MaterialDefinitions' + $begin 'Variables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'Definitions' + $begin 'Materials' + $begin 'Teflon (tm)' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + permittivity='2.1' + conductivity='0' + dielectric_loss_tangent='0.001' + ModTime=1610399599 + Library='' + LibLocation='Project' + ModSinceLib=false + $end 'Teflon (tm)' + $begin 'pec' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=247 + Green=242 + Blue=232 + $end 'MatAppearanceData' + $end 'AttachedData' + conductivity='1e+30' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'pec' + $begin 'vacuum' + CoordinateSystemType='Cartesian' + BulkOrSurfaceType=1 + $begin 'PhysicsTypes' + set('Electromagnetic') + $end 'PhysicsTypes' + $begin 'AttachedData' + $begin 'MatAppearanceData' + property_data='appearance_data' + Red=230 + Green=230 + Blue=230 + Transparency=0.94999998807907104 + $end 'MatAppearanceData' + $end 'AttachedData' + permittivity='1' + ModTime=1499970477 + Library='Materials' + LibLocation='SysLibrary' + ModSinceLib=false + $end 'vacuum' + $end 'Materials' + $begin 'SurfaceMaterials' + $end 'SurfaceMaterials' + $end 'Definitions' + $end 'MaterialDefinitions' + $begin 'GeometryData' + $begin 'Variables' + $begin 'LocalVariables' + VariableProp('beta2', 'UD', '', '-90deg') + VariableProp('beta4', 'UD', '', '-270deg') + VariableProp('Sy', 'UD', '', '35.29mm') + VariableProp('subWidth', 'UD', '', '80mm') + VariableProp('Wn', 'UD', '', '3.004mm') + VariableProp('Dp', 'UD', '', '23.53mm') + VariableProp('Ln', 'UD', '', '1.502mm') + VariableProp('feedLength', 'UD', '', '2.5mm') + VariableProp('subLength', 'UD', '', '80mm') + VariableProp('coax_inner_rad', 'UD', '', '0.25mm') + VariableProp('coax_outer_rad', 'UD', '', '0.85mm') + VariableProp('Sf', 'UD', '', '3.663mm') + VariableProp('Sx', 'UD', '', '35.29mm') + VariableProp('H', 'UD', '', '1.272mm') + VariableProp('beta3', 'UD', '', '-180deg') + VariableProp('alpha', 'UD', '', '45deg') + $end 'LocalVariables' + $end 'Variables' + $begin 'Datasets' + $end 'Datasets' + $begin 'GeometryCore' + BlockVersionID=3 + DataVersion=7 + NativeKernel='PARASOLID' + NativeKernelVersionID=23 + Units='mm' + ModelExtents=10000 + InstanceID=-1 + $begin 'ValidationOptions' + EntityCheckLevel='Strict' + IgnoreUnclassifiedObjects=false + SkipIntersectionChecks=false + $end 'ValidationOptions' + ContainsGeomLinkUDM=false + $begin 'GeometryOperations' + BlockVersionID=2 + $begin 'AnsoftRangedIDServerManager' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=0 + IDServerRangeMin=0 + IDServerRangeMax=2146483647 + NextUniqueID=979 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $begin 'AnsoftRangedIDServer' + IDServerObjectTypeID=1 + IDServerRangeMin=2146483648 + IDServerRangeMax=2146485547 + NextUniqueID=2146483654 + MoveBackwards=false + $end 'AnsoftRangedIDServer' + $end 'AnsoftRangedIDServerManager' + StartBackGroundFaceID=2146483648 + $begin 'CoordinateSystems' + $begin 'Operation' + OperationType='CreateRelativeCoordinateSystem' + ID=709 + ReferenceCoordSystemID=1 + $begin 'RelativeCSParameters' + KernelVersion=13 + Mode='Axis/Position' + OriginX='-17.645mm' + OriginY='-17.645mm' + OriginZ='14mm' + XAxisXvec='1mm' + XAxisYvec='0mm' + XAxisZvec='0mm' + YAxisXvec='0mm' + YAxisYvec='1mm' + YAxisZvec='0mm' + $end 'RelativeCSParameters' + ParentPartID=-1 + ReferenceUDMID=-1 + $begin 'Attributes' + Name='RelativeCS1' + UDMId=-1 + $end 'Attributes' + $begin 'Operations' + $end 'Operations' + XYPlaneID=710 + $end 'Operation' + $end 'CoordinateSystems' + $begin 'OperandCSs' + $end 'OperandCSs' + $begin 'UserDefinedModels' + $end 'UserDefinedModels' + $begin 'OperandUserDefinedModels' + $end 'OperandUserDefinedModels' + $begin 'ToplevelParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Soil' + Flags='' + Color='(0 128 0)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=5 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-subWidth/2' + YPosition='-subLength/2' + ZPosition='0mm' + XSize='subWidth' + YSize='subLength' + ZSize='H' + $end 'BoxParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=6 + StartFaceID=7 + StartEdgeID=13 + StartVertexID=25 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=428 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=429 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=430 + StartEdgeID=431 + StartVertexID=435 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=430 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=101.76000000000001 + FcUVMid(0, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=433 + EdgeFaces(7, 430) + $begin 'EdTolVts' + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=434 + EdgeFaces(9, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, -40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, -40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=432 + EdgeFaces(11, 430) + $begin 'EdTolVts' + TolVt(0, 40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 40, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=431 + EdgeFaces(8, 430) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=435 + VtPos(0, -40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=438 + VtPos(0, -40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=437 + VtPos(0, 40, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=436 + VtPos(0, 40, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=428 + ParentOperation=5 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=492 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=493 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=494 + StartEdgeID=495 + StartVertexID=499 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=494 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000003 + FcUVMid(-20, 0, 0.63600000000000001) + $begin 'FcTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=498 + EdgeFaces(7, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=497 + EdgeFaces(10, 494) + $begin 'EdTolVts' + TolVt(-40, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-40, 0, 0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=496 + EdgeFaces(8, 494) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=495 + EdgeFaces(430, 494) + $begin 'EdTolVts' + TolVt(0, 0, 1.272, 4.9999999999999998e-07) + TolVt(0, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0.63600000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=499 + VtPos(0, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=502 + VtPos(-40, 0, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=501 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=500 + VtPos(0, 0, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=492 + ParentOperation=429 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=588 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=6 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=493 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=713 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=714 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=715 + StartEdgeID=716 + StartVertexID=720 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=715 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=50.880000000000038 + FcUVMid(-2.3550000000000044, -17.645, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=719 + EdgeFaces(7, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=716 + EdgeFaces(10, 715) + $begin 'EdTolVts' + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-22.355, -17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=717 + EdgeFaces(8, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-22.355000000000008, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000044, -17.645, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=718 + EdgeFaces(430, 715) + $begin 'EdTolVts' + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(17.645, -17.645, -0.63600000000000001) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=722 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=720 + VtPos(-22.355, -17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=721 + VtPos(-22.355000000000008, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=723 + VtPos(17.645, -17.645, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=713 + ParentOperation=588 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=741 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=6 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=6 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=742 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=6 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=743 + StartEdgeID=744 + StartVertexID=748 + NumNewFaces=1 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=743 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=44.888880000000029 + FcUVMid(-17.645, 0, -0.63600000000000045) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=745 + EdgeFaces(7, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=747 + EdgeFaces(8, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=746 + EdgeFaces(494, 743) + $begin 'EdTolVts' + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 17.645, -0.63600000000000001) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=744 + EdgeFaces(715, 743) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, -17.645, -0.63600000000000045) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=748 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=750 + VtPos(-17.645, 17.645, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=751 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=749 + VtPos(-17.645, -17.645, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=741 + ParentOperation=714 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Ground' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=33 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-subWidth/2' + YStart='-subLength/2' + ZStart='0mm' + Width='subWidth' + Height='subLength' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=34 + StartFaceID=-1 + StartEdgeID=35 + StartVertexID=39 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=43 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=34 + $end 'LocalOperationParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=44 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=44 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=6400.0000000000009 + FcUVMid(0, 0, 0) + $begin 'FcTolVts' + TolVt(-40, -40, 0, 4.9999999999999998e-07) + TolVt(40, -40, 0, 4.9999999999999998e-07) + TolVt(40, 40, 0, 4.9999999999999998e-07) + TolVt(-40, 40, 0, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=33 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=390 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=34 + NumToolParts=4 + ToolParts(199, 370, 376, 382) + $end 'SubtractParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=5 + NumCoedges=8 + NumEdges=8 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=391 + StartVertexID=395 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=391 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(15.65590862452224, -15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=392 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-19.634091375477759, -19.634091375477759, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=393 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-15.65590862452224, 15.65590862452224, 0) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=394 + EdgeFaces(44) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(19.634091375477759, 19.634091375477759, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=43 + NumToolOperations=4 + ToolOperations(386, 387, 388, 389) + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=439 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=440 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=3 + NumCoedges=6 + NumEdges=6 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=441 + StartVertexID=442 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=441 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, -40, 0, 4.9999999999999998e-07) + TolVt(0, 40, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(0, 0, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=443 + VtPos(0, 40, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=442 + VtPos(0, -40, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=439 + ParentOperation=390 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=503 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=504 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=505 + StartVertexID=506 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=505 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(0, 0, 0, 4.9999999999999998e-07) + TolVt(-40, 0, 0, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-20, 0, 0) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=507 + VtPos(-40, 0, 0) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=506 + VtPos(0, 0, 0) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=503 + ParentOperation=440 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=589 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=34 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=504 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=724 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=725 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=726 + StartVertexID=727 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=726 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-22.355, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.3550000000000013, -17.645, -1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=728 + VtPos(17.645, -17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=727 + VtPos(-22.355, -17.645, -1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=724 + ParentOperation=589 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=752 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=34 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=34 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=753 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=34 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=2 + NumCoedges=5 + NumEdges=5 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=754 + StartVertexID=755 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=2 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=754 + EdgeFaces(44) + $begin 'EdTolVts' + TolVt(-17.645, -17.645, -1.272, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-17.645, 0, -1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=755 + VtPos(-17.645, 17.645, -1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=756 + VtPos(-17.645, -17.645, -1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=752 + ParentOperation=725 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Circle_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=113 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=46 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=114 + StartFaceID=115 + StartEdgeID=116 + StartVertexID=124 + NumNewFaces=1 + NumNewEdges=8 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('50'='115') + CloneEdges('76'='116', '77'='117', '78'='118', '79'='119', '80'='120', '81'='121', '82'='122', '83'='123') + CloneVertices('84'='124', '85'='125', '86'='126', '87'='127', '88'='128', '89'='129', '90'='130', '91'='131') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(50) + OriginalEdgeIDs(76, 77, 78, 79, 80, 81, 82, 83) + OriginalVertexIDs(84, 85, 86, 87, 88, 89, 90, 91) + $end 'OperationIdentity' + PlaceHolderOpnId=112 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=154 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=114 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=113 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=448 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=449 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=448 + ParentOperation=154 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=510 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=511 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=510 + ParentOperation=449 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=590 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=114 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=511 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=729 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=730 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=729 + ParentOperation=590 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=757 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=114 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=114 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=758 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=114 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=757 + ParentOperation=730 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='FeedPin_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=216 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=157 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=217 + StartFaceID=218 + StartEdgeID=221 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('158'='218', '159'='219', '160'='220') + CloneEdges('161'='221', '162'='222') + CloneVertices('163'='223', '164'='224') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(158, 159, 160) + OriginalEdgeIDs(161, 162) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=215 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=237 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=217 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=216 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=464 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=465 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=464 + ParentOperation=237 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=514 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=515 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=514 + ParentOperation=465 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=591 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=217 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=515 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=731 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=732 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=731 + ParentOperation=591 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=759 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=217 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=217 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=760 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=217 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=759 + ParentOperation=732 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_pin_2' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=251 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=166 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=252 + StartFaceID=253 + StartEdgeID=256 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('167'='253', '168'='254', '169'='255') + CloneEdges('170'='256', '171'='257') + CloneVertices('172'='258', '173'='259') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(167, 168, 169) + OriginalEdgeIDs(170, 171) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=250 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=272 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=252 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=251 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=470 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=471 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=470 + ParentOperation=272 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=518 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=519 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=518 + ParentOperation=471 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=592 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=252 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=519 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=733 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=734 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=733 + ParentOperation=592 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=761 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=252 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=252 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=762 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=252 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=761 + ParentOperation=734 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_2' + Flags='' + Color='(128 255 255)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=286 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=175 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=287 + StartFaceID=288 + StartEdgeID=291 + StartVertexID=-1 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('176'='288', '177'='289', '178'='290') + CloneEdges('179'='291', '180'='292') + CloneVertices('181'='293', '182'='294') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(176, 177, 178) + OriginalEdgeIDs(179, 180) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=285 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=307 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=286 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=476 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=477 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=476 + ParentOperation=307 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=522 + ReferenceCoordSystemID=1 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='NegativeOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=523 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=522 + ParentOperation=477 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=593 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=287 + TranslateVectorX='17.645mm' + TranslateVectorY='17.645mm' + TranslateVectorZ='-1.272mm' + $end 'TranslateParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=523 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=735 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='ZX' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=736 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=735 + ParentOperation=593 + $end 'Operation' + $begin 'Operation' + OperationType='Split' + ID=763 + ReferenceCoordSystemID=709 + $begin 'SplitToParameters' + KernelVersion=13 + SourcePartID=287 + SplitPlane='YZ' + WhichSide='PositiveOnly' + ToolType='PlaneTool' + ToolEntityID=-1 + ToolPartID=-1 + $end 'SplitToParameters' + ParentPartID=287 + ReferenceUDMID=-1 + $end 'Operation' + $begin 'Operation' + OperationType='SplitEdit' + ID=764 + $begin 'SplitFromParameters' + $end 'SplitFromParameters' + ParentPartID=287 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + SplitFromOperation=-1 + SplitToOperation=763 + ParentOperation=736 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Box1' + Flags='Wireframe#' + Color='(143 175 143)' + Transparency=0 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Box' + ID=951 + ReferenceCoordSystemID=1 + $begin 'BoxParameters' + KernelVersion=13 + XPosition='-17.645mm' + YPosition='17.645mm' + ZPosition='-1.272mm' + XSize='35.29mm' + YSize='-35.29mm' + ZSize='30mm+H' + $end 'BoxParameters' + ParentPartID=952 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=952 + StartFaceID=953 + StartEdgeID=959 + StartVertexID=971 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'ToplevelParts' + $begin 'OperandParts' + $begin 'GeometryPart' + $begin 'Attributes' + Name='Circle_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"vacuum"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Circle' + ID=45 + ReferenceCoordSystemID=1 + $begin 'CircleParameters' + KernelVersion=13 + XCenter='0' + YCenter='0' + ZCenter='H' + Radius='Dp/2' + WhichAxis='Z' + NumSegments='0' + $end 'CircleParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=46 + StartFaceID=-1 + StartEdgeID=47 + StartVertexID=48 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=49 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=46 + $end 'LocalOperationParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=50 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=50 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=434.84425400497821 + FcUVMid(0, 0, 1.272) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=45 + $end 'Operation' + $begin 'Operation' + OperationType='Substract' + ID=75 + $begin 'SubtractParameters' + KernelVersion=13 + KeepOriginals=false + TurnOnNBodyBoolean=false + BlankPart=46 + NumToolParts=2 + ToolParts(52, 64) + $end 'SubtractParameters' + ParentPartID=46 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=8 + NumEdges=8 + NumVertices=8 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=76 + StartVertexID=84 + NumNewFaces=0 + NumNewEdges=8 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $end 'NewFaces' + $begin 'NewEdges' + $begin 'Edge' + NormalizedSerialNum=0 + ID=78 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=1 + ID=77 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=2 + ID=76 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=3 + ID=80 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, -1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=4 + ID=81 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.263, 0, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=5 + ID=82 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(10.965864168442007, 1.502, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=6 + ID=83 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, 1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(7.2039847959843046e-16, 11.765000000000001, 1.272) + $end 'Edge' + $begin 'Edge' + NormalizedSerialNum=7 + ID=79 + EdgeFaces(50) + $begin 'EdTolVts' + TolVt(11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.668728336884017, -1.502, 1.272, 4.9999999999999998e-07) + $end 'EdTolVts' + EdgeMidPoint(-2.1611954387952916e-15, -11.765000000000001, 1.272) + $end 'Edge' + $end 'NewEdges' + $begin 'NewVertices' + $begin 'Vertex' + NormalizedSerialNum=0 + ID=86 + VtPos(-10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=1 + ID=85 + VtPos(-10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=2 + ID=87 + VtPos(-11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=3 + ID=84 + VtPos(-11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=4 + ID=89 + VtPos(10.263, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=5 + ID=90 + VtPos(10.263, 1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=6 + ID=88 + VtPos(11.668728336884017, -1.502, 1.272) + $end 'Vertex' + $begin 'Vertex' + NormalizedSerialNum=7 + ID=91 + VtPos(11.668728336884017, 1.502, 1.272) + $end 'Vertex' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $begin 'MergedFaces' + $end 'MergedFaces' + $begin 'MergedEdges' + $end 'MergedEdges' + $end 'OperationIdentity' + BlankOperation=49 + NumToolOperations=2 + ToolOperations(61, 73) + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=112 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=46 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=46 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_LXHI3Y' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=51 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='-Ln' + Height='Wn' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=52 + StartFaceID=-1 + StartEdgeID=53 + StartVertexID=57 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=61 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=52 + $end 'LocalOperationParameters' + ParentPartID=52 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=62 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=62 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=4.5120080000000016 + FcUVMid(11.013999999999999, 0, 1.272) + $begin 'FcTolVts' + TolVt(11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=51 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_0TW2OL' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Rectangle' + ID=63 + ReferenceCoordSystemID=1 + $begin 'RectangleParameters' + KernelVersion=13 + XStart='-Dp/2' + YStart='-Wn/2' + ZStart='H' + Width='Ln' + Height='Wn' + WhichAxis='Z' + $end 'RectangleParameters' + ParentPartID=64 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=64 + StartFaceID=-1 + StartEdgeID=65 + StartVertexID=69 + NumNewFaces=0 + NumNewEdges=4 + NumNewVertices=4 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=73 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=64 + $end 'LocalOperationParameters' + ParentPartID=64 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=4 + NumEdges=4 + NumVertices=4 + $end 'Topology' + BodyID=-1 + StartFaceID=74 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=74 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=4.5120080000000016 + FcUVMid(-11.013999999999999, 0, 1.272) + $begin 'FcTolVts' + TolVt(-11.765000000000001, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, -1.502, 1.272, 4.9999999999999998e-07) + TolVt(-10.263, 1.502, 1.272, 4.9999999999999998e-07) + TolVt(-11.765000000000001, 1.502, 1.272, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=63 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='FeedPin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=156 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='H' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=157 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=157 + StartFaceID=158 + StartEdgeID=161 + StartVertexID=163 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=204 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=157 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=157 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=156 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=215 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=157 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=157 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_pin_0' + Flags='' + Color='(255 128 65)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"pec"' + SurfaceMaterialValue='""' + SolveInside=false + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=165 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_inner_rad' + Height='-feedLength' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=166 + StartFaceID=167 + StartEdgeID=170 + StartVertexID=172 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=239 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=166 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=166 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=165 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=250 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=166 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=166 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='coax_0' + Flags='' + Color='(128 255 255)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='"Teflon (tm)"' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Cylinder' + ID=174 + ReferenceCoordSystemID=1 + $begin 'CylinderParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' + Height='-feedLength' + WhichAxis='Z' + NumSides='0' + $end 'CylinderParameters' + ParentPartID=175 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=175 + StartFaceID=176 + StartEdgeID=179 + StartVertexID=181 + NumNewFaces=3 + NumNewEdges=2 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=274 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=175 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=175 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=3 + NumWires=0 + NumLoops=4 + NumCoedges=4 + NumEdges=2 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=174 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=285 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=175 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=175 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='Circle' + ID=198 + ReferenceCoordSystemID=1 + $begin 'CircleParameters' + KernelVersion=13 + XCenter='Sf' + YCenter='0mm' + ZCenter='0mm' + Radius='coax_outer_rad' + WhichAxis='Z' + NumSegments='0' + $end 'CircleParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=0 + NumWires=1 + NumLoops=0 + NumCoedges=0 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=199 + StartFaceID=-1 + StartEdgeID=200 + StartVertexID=201 + NumNewFaces=0 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + $end 'Operation' + $begin 'Operation' + OperationType='CoverLines' + ID=202 + $begin 'LocalOperationParameters' + KernelVersion=13 + LocalOpPart=199 + $end 'LocalOperationParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=203 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'GeomTopolBasedOperationIdentityHelper' + $begin 'NewFaces' + $begin 'Face' + NormalizedSerialNum=0 + ID=203 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=2.2698006922186251 + FcUVMid(3.6629999999999994, 0, 0) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'Face' + $end 'NewFaces' + $begin 'NewEdges' + $end 'NewEdges' + $begin 'NewVertices' + $end 'NewVertices' + $end 'GeomTopolBasedOperationIdentityHelper' + $end 'OperationIdentity' + ParentOperationID=198 + $end 'Operation' + $begin 'Operation' + OperationType='Rotate' + ID=367 + ReferenceCoordSystemID=1 + $begin 'RotateParameters' + KernelVersion=13 + TargetID=199 + RotateAxis='Z' + RotateAngle='alpha' + $end 'RotateParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=202 + $end 'Operation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=368 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta2' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=374 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta3' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'CloneToOperation' + OperationType='DuplicateAroundAxis' + ID=380 + ReferenceCoordSystemID=1 + $begin 'DuplicateAroundAxisParameters' + KernelVersion=13 + ClonedEntity=199 + CreateNewObjects=true + WhichAxis='Z' + AngleStr='beta4' + NumClones='2' + $end 'DuplicateAroundAxisParameters' + ParentPartID=199 + ReferenceUDMID=-1 + $end 'CloneToOperation' + $begin 'Operation' + OperationType='Move' + ID=386 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=199 + TranslateVectorX='Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=199 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=367 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV_1' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=369 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=370 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=370 + StartFaceID=371 + StartEdgeID=372 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='371') + CloneEdges('200'='372') + CloneVertices('201'='373') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=368 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=387 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=370 + TranslateVectorX='-Sx/2' + TranslateVectorY='Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=370 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=369 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV_2' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=375 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=376 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=376 + StartFaceID=377 + StartEdgeID=378 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='377') + CloneEdges('200'='378') + CloneVertices('201'='379') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=374 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=388 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=376 + TranslateVectorX='-Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=376 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=375 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $begin 'GeometryPart' + $begin 'Attributes' + Name='NewObject_84DCWV_3' + Flags='' + Color='(132 132 193)' + Transparency=0.29999999999999999 + PartCoordinateSystem=1 + UDMId=-1 + GroupId=-1 + MaterialValue='""' + SurfaceMaterialValue='""' + SolveInside=true + ShellElement=false + ShellElementThickness='0mm' + ReferenceTemperature='20cel' + IsMaterialEditable=true + UseMaterialAppearance=false + IsLightweight=false + IsAlwaysHidden=false + $end 'Attributes' + $begin 'Operations' + $begin 'Operation' + OperationType='DuplicateBodyAroundAxis' + ID=381 + $begin 'CloneFromParameters' + KernelVersion=13 + SourceID=199 + WhichClone=0 + $end 'CloneFromParameters' + ParentPartID=382 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=382 + StartFaceID=383 + StartEdgeID=384 + StartVertexID=-1 + NumNewFaces=1 + NumNewEdges=1 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $begin 'CloneFromOperationIdentityHelper' + CloneFaces('203'='383') + CloneEdges('200'='384') + CloneVertices('201'='385') + CloneIdentityHelperKernelType=0 + $end 'CloneFromOperationIdentityHelper' + OriginalFaceIDs(203) + OriginalEdgeIDs(200) + OriginalVertexIDs() + $end 'OperationIdentity' + PlaceHolderOpnId=380 + $end 'Operation' + $begin 'Operation' + OperationType='Move' + ID=389 + ReferenceCoordSystemID=1 + $begin 'TranslateParameters' + KernelVersion=13 + TargetID=382 + TranslateVectorX='Sx/2' + TranslateVectorY='-Sy/2' + TranslateVectorZ='0' + $end 'TranslateParameters' + ParentPartID=382 + ReferenceUDMID=-1 + IsSuppressed=false + $begin 'OperationIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=1 + NumWires=0 + NumLoops=1 + NumCoedges=1 + NumEdges=1 + NumVertices=0 + $end 'Topology' + BodyID=-1 + StartFaceID=-1 + StartEdgeID=-1 + StartVertexID=-1 + NumNewFaces=0 + NumNewEdges=0 + NumNewVertices=0 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + $end 'OperationIdentity' + TranformBaseOperationID=381 + $end 'Operation' + $end 'Operations' + $end 'GeometryPart' + $end 'OperandParts' + $begin 'Planes' + $end 'Planes' + $begin 'Points' + $end 'Points' + $begin 'GeometryEntityLists' + $end 'GeometryEntityLists' + $begin 'RegionIdentity' + $begin 'Topology' + NumLumps=1 + NumShells=1 + NumFaces=6 + NumWires=0 + NumLoops=6 + NumCoedges=24 + NumEdges=12 + NumVertices=8 + $end 'Topology' + BodyID=400 + StartFaceID=401 + StartEdgeID=407 + StartVertexID=419 + NumNewFaces=6 + NumNewEdges=12 + NumNewVertices=8 + FaceNameAndIDMap() + EdgeNameAndIDMap() + VertexNameAndIDMap() + IsXZ2DModeler=false + $end 'RegionIdentity' + $begin 'CachedNames' + $begin 'allobjects' + allobjects(-1) + $end 'allobjects' + $begin 'box' + box(1) + $end 'box' + $begin 'circle_' + circle_(2) + $end 'circle_' + $begin 'circle_0' + circle_0(-1) + $end 'circle_0' + $begin 'coax_' + coax_(2) + $end 'coax_' + $begin 'coax_0' + coax_0(-1) + $end 'coax_0' + $begin 'coax_pin_' + coax_pin_(2) + $end 'coax_pin_' + $begin 'coax_pin_0' + coax_pin_0(-1) + $end 'coax_pin_0' + $begin 'feedpin_' + feedpin_(2) + $end 'feedpin_' + $begin 'feedpin_0' + feedpin_0(-1) + $end 'feedpin_0' + $begin 'global' + global(-1) + $end 'global' + $begin 'ground' + ground(-1) + $end 'ground' + $begin 'model' + model(-1) + $end 'model' + $begin 'newobject_0tw2ol' + newobject_0tw2ol(-1) + $end 'newobject_0tw2ol' + $begin 'newobject_84dcwv' + newobject_84dcwv(-1) + $end 'newobject_84dcwv' + $begin 'newobject_84dcwv_' + newobject_84dcwv_(1, 2, 3) + $end 'newobject_84dcwv_' + $begin 'newobject_lxhi3y' + newobject_lxhi3y(-1) + $end 'newobject_lxhi3y' + $begin 'relativecs' + relativecs(1) + $end 'relativecs' + $begin 'soil' + soil(-1) + $end 'soil' + $end 'CachedNames' + $end 'GeometryOperations' + $begin 'GeometryDependencies' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 428) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryBodyOperation', 5) + DependencyObject('GeometryOperation', 428) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 492) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 493) + DependencyObject('GeometryBodyOperation', 429) + DependencyObject('GeometryOperation', 492) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 493) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 713) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryBodyOperation', 588) + DependencyObject('GeometryOperation', 713) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 741) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 742) + DependencyObject('GeometryBodyOperation', 714) + DependencyObject('GeometryOperation', 741) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 33) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 33) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=5 + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryBodyOperation', 43) + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('GeometryBodyOperation', 389) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 439) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryBodyOperation', 390) + DependencyObject('GeometryOperation', 439) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 503) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 504) + DependencyObject('GeometryBodyOperation', 440) + DependencyObject('GeometryOperation', 503) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 504) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 724) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryBodyOperation', 589) + DependencyObject('GeometryOperation', 724) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 752) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 753) + DependencyObject('GeometryBodyOperation', 725) + DependencyObject('GeometryOperation', 752) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 113) + DependencyObject('GeometryOperation', 112) + DependencyObject('GeometryBodyOperation', 75) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 154) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 113) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 448) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 449) + DependencyObject('GeometryBodyOperation', 154) + DependencyObject('GeometryOperation', 448) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 510) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 511) + DependencyObject('GeometryBodyOperation', 449) + DependencyObject('GeometryOperation', 510) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 590) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 511) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 729) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 730) + DependencyObject('GeometryBodyOperation', 590) + DependencyObject('GeometryOperation', 729) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 757) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 758) + DependencyObject('GeometryBodyOperation', 730) + DependencyObject('GeometryOperation', 757) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 216) + DependencyObject('GeometryOperation', 215) + DependencyObject('GeometryBodyOperation', 204) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 216) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 464) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 465) + DependencyObject('GeometryBodyOperation', 237) + DependencyObject('GeometryOperation', 464) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 514) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 515) + DependencyObject('GeometryBodyOperation', 465) + DependencyObject('GeometryOperation', 514) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 591) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 515) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 731) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 732) + DependencyObject('GeometryBodyOperation', 591) + DependencyObject('GeometryOperation', 731) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 759) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 760) + DependencyObject('GeometryBodyOperation', 732) + DependencyObject('GeometryOperation', 759) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 251) + DependencyObject('GeometryOperation', 250) + DependencyObject('GeometryBodyOperation', 239) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 272) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 251) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 470) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 471) + DependencyObject('GeometryBodyOperation', 272) + DependencyObject('GeometryOperation', 470) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 518) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 519) + DependencyObject('GeometryBodyOperation', 471) + DependencyObject('GeometryOperation', 518) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 592) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 519) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 733) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 734) + DependencyObject('GeometryBodyOperation', 592) + DependencyObject('GeometryOperation', 733) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 761) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 762) + DependencyObject('GeometryBodyOperation', 734) + DependencyObject('GeometryOperation', 761) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 286) + DependencyObject('GeometryOperation', 285) + DependencyObject('GeometryBodyOperation', 274) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 307) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 286) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 476) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 477) + DependencyObject('GeometryBodyOperation', 307) + DependencyObject('GeometryOperation', 476) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 522) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 523) + DependencyObject('GeometryBodyOperation', 477) + DependencyObject('GeometryOperation', 522) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 593) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 523) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 735) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 736) + DependencyObject('GeometryBodyOperation', 593) + DependencyObject('GeometryOperation', 735) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 763) + DependencyObject('CoordinateSystem', 709) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 764) + DependencyObject('GeometryBodyOperation', 736) + DependencyObject('GeometryOperation', 763) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 951) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 45) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 49) + DependencyObject('GeometryBodyOperation', 45) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=3 + DependencyObject('GeometryBodyOperation', 75) + DependencyObject('GeometryBodyOperation', 49) + DependencyObject('GeometryBodyOperation', 61) + DependencyObject('GeometryBodyOperation', 73) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 112) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 51) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 61) + DependencyObject('GeometryBodyOperation', 51) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 63) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 73) + DependencyObject('GeometryBodyOperation', 63) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 156) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 204) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 156) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 215) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 165) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 239) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 165) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 250) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 174) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 274) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 174) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 285) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 198) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryBodyOperation', 202) + DependencyObject('GeometryBodyOperation', 198) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 367) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 202) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 368) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 374) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('GeometryOperation', 380) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 386) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 369) + DependencyObject('GeometryOperation', 368) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 387) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 369) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 375) + DependencyObject('GeometryOperation', 374) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 388) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 375) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 381) + DependencyObject('GeometryOperation', 380) + DependencyObject('GeometryBodyOperation', 367) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=2 + DependencyObject('GeometryBodyOperation', 389) + DependencyObject('CoordinateSystem', 1) + DependencyObject('GeometryBodyOperation', 381) + $end 'DependencyInformation' + $begin 'DependencyInformation' + NumParents=1 + DependencyObject('CoordinateSystem', 709) + DependencyObject('CoordinateSystem', 1) + $end 'DependencyInformation' + $end 'GeometryDependencies' + $end 'GeometryCore' + $begin 'AssignedEntities' + AssignedObject[2: 34, 114] + $begin 'AssignedFace' + kID=288 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(2, 2, 2, 0) + $begin 'FaceGeometry' + Area=13.351768777756622 + FcUVMid(-1.9890913754777577, -1.9890913754777573, -2.5219999999999998) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=289 + $begin 'FaceData' + ParentObjectID=287 + $begin 'FaceGeomTopol' + FaceTopol(1, 1, 1, 0) + $begin 'FaceGeometry' + Area=2.269800692218626 + FcUVMid(-2.590132139486323, -2.590132139486323, -3.7720000000000002) + $begin 'FcTolVts' + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=953 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1245.3840999999998 + FcUVMid(0, 0, 30.000000000000004) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=955 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, -17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=956 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(-17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=957 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(0, 17.645, 14.364000000000001) + $begin 'FcTolVts' + TolVt(-17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(-17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedFace' + kID=958 + $begin 'FaceData' + ParentObjectID=952 + $begin 'FaceGeomTopol' + FaceTopol(1, 4, 4, 4) + $begin 'FaceGeometry' + Area=1103.58888 + FcUVMid(17.645, 0, 14.364000000000001) + $begin 'FcTolVts' + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'FcTolVts' + $end 'FaceGeometry' + $end 'FaceGeomTopol' + $end 'FaceData' + $end 'AssignedFace' + $begin 'AssignedEdge' + kID=256 + $begin 'EdgeData' + ParentObjectID=252 + ParentFaces[2: 253, 254] + $begin 'EdgeGeomTopol' + EdgeFaces(253, 254) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-2.4133554441896861, -2.4133554441896861, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedEdge' + kID=291 + $begin 'EdgeData' + ParentObjectID=287 + ParentFaces[2: 288, 289] + $begin 'EdgeGeomTopol' + EdgeFaces(288, 289) + $begin 'EdTolVts' + $end 'EdTolVts' + EdgeMidPoint(-1.9890913754777577, -1.9890913754777577, -3.7720000000000002) + $end 'EdgeGeomTopol' + $end 'EdgeData' + $end 'AssignedEdge' + $begin 'AssignedVertex' + kID=971 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 959, 968] + TolVt(17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=972 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 960, 959, 970] + TolVt(17.645, 17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=974 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 962, 961, 967] + TolVt(-17.645, -17.645, 30.000000000000004, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=975 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 970, 966, 963] + TolVt(17.645, 17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=976 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 968, 964, 963] + TolVt(17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $begin 'AssignedVertex' + kID=977 + $begin 'VertexData' + ParentObjectID=952 + ParentEdges[3: 967, 965, 964] + TolVt(-17.645, -17.645, -1.2720000000000009, 4.9999999999999998e-07) + $end 'VertexData' + $end 'AssignedVertex' + $end 'AssignedEntities' + $begin 'Settings' + IncludedParts[7: 6, 34, 114, 217, 252, 287, 952] + HiddenParts[0:] + IncludedCS[0:] + ReferenceCS=1 + IncludedParameters('Dp', 'H', 'Ln', 'Sf', 'Sx', 'Sy', 'Wn', 'alpha', 'beta2', 'beta3', 'beta4', 'coax_inner_rad', 'coax_outer_rad', 'feedLength', 'subLength', 'subWidth') + IncludedDependentParameters() + ParameterDescription(Dp='', H='', Ln='', Sf='', Sx='', Sy='', Wn='', alpha='', beta2='', beta3='', beta4='', coax_inner_rad='', coax_outer_rad='', feedLength='', subLength='', subWidth='') + $end 'Settings' + $end 'GeometryData' +$end 'ComponentBody' +$begin 'AllReferencedFilesForComponent' +$end 'AllReferencedFilesForComponent' diff --git a/_unittest_solvers/example_models/T00/array_simple_232.json b/_unittest_solvers/example_models/T00/array_simple_232.json new file mode 100644 index 00000000000..a64330c56ec --- /dev/null +++ b/_unittest_solvers/example_models/T00/array_simple_232.json @@ -0,0 +1,44 @@ +{ + "primarylattice": "Circ_Patch_5GHz_232_1_Primary1", + "secondarylattice": "Circ_Patch_5GHz_232_1_Primary2", + "useairobjects": true, + "rowdimension": 3, + "columndimension": 3, + "visible": false, + "showcellnumber": false, + "paddingcells": 0, + "referencecsid": 1, + "cells": { + "(1,1)": { + "name": "Circ_Patch_5GHz_232_1", + "color": "(255,0,20)", + "active": true, + "postprocessing": true, + "rotation": 0.0 + }, + "(1,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(1,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(2,3)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,1)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,2)": { + "name": "Circ_Patch_5GHz_232_1" + }, + "(3,3)": { + "name": "Circ_Patch_5GHz_232_1" + } + } +} \ No newline at end of file diff --git a/_unittest_solvers/test_00_analyze.py b/_unittest_solvers/test_00_analyze.py index f35a5fb6334..93f85153aae 100644 --- a/_unittest_solvers/test_00_analyze.py +++ b/_unittest_solvers/test_00_analyze.py @@ -14,7 +14,7 @@ from pyaedt import Icepak from pyaedt import Hfss3dLayout from pyaedt import Circuit, Maxwell3d - +from _unittest.conftest import config sbr_platform_name = "satellite_231" array_name = "array_231" @@ -22,6 +22,11 @@ original_project_name = "Galileo_t21_231" transient = "Transient_StrandedWindings" +if config["desktopVersion"] > "2022.2": + component = "Circ_Patch_5GHz_232.a3dcomp" +else: + component = "Circ_Patch_5GHz.a3dcomp" + test_subfolder = "T00" @@ -147,14 +152,25 @@ def test_02_hfss_export_results(self, hfss_app): hfss_app.insert_design("Array_simple_resuts", "Modal") from pyaedt.generic.DataHandlers import json_to_dict - dict_in = json_to_dict( - os.path.join(local_path, "../_unittest_solvers/example_models", test_subfolder, "array_simple.json")) - dict_in["Circ_Patch_5GHz1"] = os.path.join( - local_path, "../_unittest_solvers/example_models", test_subfolder, "Circ_Patch_5GHz.a3dcomp" - ) - dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} - assert hfss_app.add_3d_component_array_from_json(dict_in) - dict_in["cells"][(3, 3)]["rotation"] = 90 + if config["desktopVersion"] > "2023.1": + dict_in = json_to_dict( + os.path.join(local_path, "example_models", test_subfolder, "array_simple_232.json") + ) + dict_in["Circ_Patch_5GHz_232_1"] = os.path.join( + local_path, "example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz_232_1"} + dict_in["cells"][(3, 3)]["rotation"] = 90 + else: + dict_in = json_to_dict( + os.path.join(local_path, "example_models", test_subfolder, "array_simple.json") + ) + dict_in["Circ_Patch_5GHz1"] = os.path.join( + local_path, "example_models", test_subfolder, component + ) + dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} + dict_in["cells"][(3, 3)]["rotation"] = 90 + hfss_app.add_3d_component_array_from_json(dict_in) exported_files = hfss_app.export_results() assert len(exported_files) == 0 setup = hfss_app.create_setup(setupname="test") diff --git a/doc/source/API/Primitive_Objects.rst b/doc/source/API/Primitive_Objects.rst index 8c6d9b9dab6..ee4652f3461 100644 --- a/doc/source/API/Primitive_Objects.rst +++ b/doc/source/API/Primitive_Objects.rst @@ -61,6 +61,7 @@ They contain all getters and setters to simplify object manipulation. cad.elements3d.VertexPrimitive cad.polylines.PolylineSegment cad.polylines.Polyline + cad.component_array.ComponentArray cad.components_3d.UserDefinedComponent cad.elements3d.Point cad.elements3d.Plane diff --git a/doc/source/Getting_started/Troubleshooting.rst b/doc/source/Getting_started/Troubleshooting.rst index e50ad5b5598..d5fc1592811 100644 --- a/doc/source/Getting_started/Troubleshooting.rst +++ b/doc/source/Getting_started/Troubleshooting.rst @@ -135,11 +135,12 @@ Failure connecting to the gRPC server On Linux, PyAEDT may fail to initialize a new instance of the gRPC server or connect to an existing server session. This may be due to: - - Firewall - - Proxy - - Permissions - - License - - Scheduler (for example if the gRPC server was started from LSF or Slurm) + +- Firewall +- Proxy +- Permissions +- License +- Scheduler (for example if the gRPC server was started from LSF or Slurm) For issues related to use of a proxy server, you may set the following environment variable to disable the proxy server for the *localhost*. diff --git a/doc/source/conf.py b/doc/source/conf.py index 0b335cb0883..864471ad0ff 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -21,6 +21,7 @@ from docutils.parsers.rst import Directive from docutils import nodes from sphinx import addnodes +import shutil # <-----------------Override the sphinx pdf builder----------------> # Some pages do not render properly as per the expected Sphinx LaTeX PDF signature. @@ -70,9 +71,16 @@ def autodoc_skip_member(app, what, name, obj, skip, options): # return True if exclude else None +def remove_doctree(app, exception): + """Remove the .doctree directory created during the documentation build. + """ + shutil.rmtree(app.doctreedir) + + def setup(app): app.add_directive('pprint', PrettyPrintDirective) app.connect('autodoc-skip-member', autodoc_skip_member) + app.connect('build-finished', remove_doctree) local_path = os.path.dirname(os.path.realpath(__file__)) @@ -318,6 +326,7 @@ def setup(app): # specify the location of your github repo html_theme_options = { "github_url": "https://github.com/ansys/pyaedt", + "navigation_with_keys": False, "show_prev_next": False, "show_breadcrumbs": True, "collapse_navigation": True, @@ -337,6 +346,7 @@ def setup(app): "version_match": get_version_match(__version__), }, "collapse_navigation": True, + "navigation_with_keys": True, "use_meilisearch": { "api_key": os.getenv("MEILISEARCH_PUBLIC_API_KEY", ""), "index_uids": { diff --git a/doc/styles/Vocab/ANSYS/accept.txt b/doc/styles/Vocab/ANSYS/accept.txt index 05c0ccba44d..68b407714d1 100644 --- a/doc/styles/Vocab/ANSYS/accept.txt +++ b/doc/styles/Vocab/ANSYS/accept.txt @@ -1,51 +1,46 @@ -ANSYS -Ansys -ansys +2D Extractor +2D modeler +3D modeler +_static AEDB -API AEDT -AEDT API -2D Extractor airbox airgap +(?i)Ansys +API autosave busbar busbars Bz -circuit -Circuit -com -COM +[Cc]ircuit +codecov +[Cc]om COM interface -Components -components +[Cc]omponents +Conda CPython DesignXploration docstring -Docstrings -docstrings +[Dd]ocstrings doppler EDB -EDB API +EDT efields EMIT getters globals -gRPC -GRPC +[Gg]gRPC HFSS -HFSS 3D Layout Huray Icepak IronPython +[Ll]ayout limitilines -Layout -layout matplotlib Maxwell 2D Maxwell 3D Maxwell Circuit -Mechanical +[Mm]echanical multiphysics multiplot namespaces @@ -53,52 +48,39 @@ netlist Nexxim numpy numpydoc -optimetrics -Optimetrics +[Oo]ptimetrics padstack padstacks parametrics -polyline +PMs +[Pp]olyline polylines -Polyline Postprocessing -PMs +pwl pyaedt PyAEDT -PyAnsys -PyPI +(?i)PyAnsys +[Pp]y[Pp][Ii] Python +Python.NET pyvista Q2D Extractor -Q3D Extractor Q3D +Q3D Extractor RC +reusability RF RMXprt scipy -Siwave setters +Siwave +Slurm Spyder +Stackup 3D stackups stripline subcircuit +[Tt]oolkits Twin Builder Uncomment vias -_static -pwl -Conda -PyAnsys -codecov -mechanical -reusability -pypi -EDT -pyansys -Slurm -Python.NET -Toolkits -toolkits -3D modeler -2D modeler -Stackup 3D diff --git a/examples/00-EDB/01_edb_example.py b/examples/00-EDB/01_edb_example.py index 6df7a797c2d..c2b71e1b18d 100644 --- a/examples/00-EDB/01_edb_example.py +++ b/examples/00-EDB/01_edb_example.py @@ -130,7 +130,7 @@ edb.siwave.create_current_source_on_net("IC2", "NetD3_2", "IC2", "GND", 1.0, 0, "I1") setup = edb.siwave.add_siwave_dc_analysis("myDCIR_4") setup.use_dc_custom_settings = True -setup.dc_slider_position = 0 +setup.set_dc_slider = 0 setup.add_source_terminal_to_ground("V1", 1) diff --git a/examples/02-HFSS/Array.py b/examples/02-HFSS/Array.py index 1d3950e471c..9564242c923 100644 --- a/examples/02-HFSS/Array.py +++ b/examples/02-HFSS/Array.py @@ -54,7 +54,18 @@ dict_in = pyaedt.data_handler.json_to_dict(os.path.join(example_path, "array_simple.json")) dict_in["Circ_Patch_5GHz1"] = os.path.join(example_path, "Circ_Patch_5GHz.a3dcomp") dict_in["cells"][(3, 3)] = {"name": "Circ_Patch_5GHz1"} -hfss.add_3d_component_array_from_json(dict_in) +array = hfss.add_3d_component_array_from_json(dict_in) + +########################################################## +# Modify cells +# ~~~~~~~~~~~~ +# Make center element passive and rotate corner elements. + +array.cells[1][1].is_active = False +array.cells[0][0].rotation = 90 +array.cells[0][2].rotation = 90 +array.cells[2][0].rotation = 90 +array.cells[2][2].rotation = 90 ########################################################## # Set up simulation diff --git a/pyaedt/application/Design.py b/pyaedt/application/Design.py index b83305c3c82..7c4091ba855 100644 --- a/pyaedt/application/Design.py +++ b/pyaedt/application/Design.py @@ -103,15 +103,36 @@ class Design(AedtObjects): """ - def __str__(self): - pyaedt_details = " pyaedt API\n" - pyaedt_details += "pyaedt running AEDT Version {} \n".format(settings.aedt_version) - pyaedt_details += "Running {} tool in AEDT\n".format(self.design_type) - pyaedt_details += "Solution Type: {} \n".format(self.solution_type) - pyaedt_details += "Project Name: {} Design Name {} \n".format(self.project_name, self.design_name) + @property + def _pyaedt_details(self): + import platform + + from pyaedt import __version__ as pyaedt_version + + _p_dets = { + "PyAEDT Version": pyaedt_version, + "Product": "Ansys Electronics Desktop {}".format(settings.aedt_version), + "Design Type": self.design_type, + "Solution Type": self.solution_type, + "Project Name": self.project_name, + "Design Name": self.design_name, + "Project Path": "", + } if self._oproject: - pyaedt_details += 'Project Path: "{}" \n'.format(self.project_path) - return pyaedt_details + _p_dets["Project Path"] = self.project_file + _p_dets["Platform"] = platform.platform() + _p_dets["Python Version"] = platform.python_version() + _p_dets["AEDT Process ID"] = self.desktop_class.aedt_process_id + _p_dets["AEDT GRPC Port"] = self.desktop_class.port + return _p_dets + + def __str__(self): + return "\n".join( + [ + "{}:".format(each_name).ljust(25) + "{}".format(each_attr).ljust(25) + for each_name, each_attr in self._pyaedt_details.items() + ] + ) def __exit__(self, ex_type, ex_value, ex_traceback): if ex_type: @@ -133,6 +154,16 @@ def __setitem__(self, variable_name, variable_value): self.variable_manager[variable_name] = variable_value return True + @property + def info(self): + """Dictionary of the PyAEDT session information. + + Returns + ------- + dict + """ + return self._pyaedt_details + def _init_design(self, project_name, design_name, solution_type=None): # calls the method from the application class self._init_from_design( diff --git a/pyaedt/desktop.py b/pyaedt/desktop.py index 93b9bd14c82..65a79301e7d 100644 --- a/pyaedt/desktop.py +++ b/pyaedt/desktop.py @@ -655,7 +655,8 @@ def __init__( sys.path.append( os.path.join(self._main.sDesktopinstallDirectory, "common", "commonfiles", "IronPython", "DLLs") ) - + if "GetGrpcServerPort" in dir(self.odesktop): + self.port = self.odesktop.GetGrpcServerPort() # save the current desktop session in the database _desktop_sessions[self.aedt_process_id] = self diff --git a/pyaedt/edb.py b/pyaedt/edb.py index 3eee3c44133..7dc1d8b4e67 100644 --- a/pyaedt/edb.py +++ b/pyaedt/edb.py @@ -23,6 +23,7 @@ from pyaedt.edb_core.edb_data.edbvalue import EdbValue from pyaedt.edb_core.edb_data.hfss_simulation_setup_data import HfssSimulationSetup from pyaedt.edb_core.edb_data.ports import BundleWavePort +from pyaedt.edb_core.edb_data.ports import CircuitPort from pyaedt.edb_core.edb_data.ports import CoaxPort from pyaedt.edb_core.edb_data.ports import ExcitationSources from pyaedt.edb_core.edb_data.ports import GapPort @@ -31,16 +32,10 @@ from pyaedt.edb_core.edb_data.siwave_simulation_setup_data import SiwaveDCSimulationSetup from pyaedt.edb_core.edb_data.siwave_simulation_setup_data import SiwaveSYZSimulationSetup from pyaedt.edb_core.edb_data.sources import SourceType -from pyaedt.edb_core.edb_data.terminals import BundleTerminal -from pyaedt.edb_core.edb_data.terminals import EdgeTerminal -from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal -from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal from pyaedt.edb_core.edb_data.terminals import Terminal from pyaedt.edb_core.edb_data.variables import Variable -from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import LayoutObjType from pyaedt.edb_core.general import Primitives -from pyaedt.edb_core.general import TerminalType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.edb_core.hfss import EdbHfss from pyaedt.edb_core.ipc2581.ipc2581 import Ipc2581 @@ -273,7 +268,6 @@ def _clean_variables(self): self._siwave = None self._hfss = None self._nets = None - self._setups = {} self._layout_instance = None self._variables = None self._active_cell = None @@ -357,18 +351,10 @@ def variables(self): def terminals(self): """Get terminals belonging to active layout.""" temp = {} + terminal_mapping = Terminal(self)._terminal_mapping for i in self.layout.terminals: terminal_type = i.ToString().split(".")[-1] - if terminal_type == TerminalType.EdgeTerminal.name: - ter = EdgeTerminal(self, i) - elif terminal_type == TerminalType.BundleTerminal.name: - ter = BundleTerminal(self, i) - elif terminal_type == TerminalType.PadstackInstanceTerminal.name: - ter = PadstackInstanceTerminal(self, i) - elif terminal_type == TerminalType.PinGroupTerminal.name: - ter = PinGroupTerminal(self, i) - else: - ter = Terminal(self, i) + ter = terminal_mapping[terminal_type](self, i) temp[ter.name] = ter return temp @@ -400,12 +386,18 @@ def ports(self): ports = {} for t in temp: t2 = Terminal(self, t) - if t2.terminal_type == TerminalType.BundleTerminal.name: - bundle_ter = BundleWavePort(self, t) - ports[bundle_ter.name] = bundle_ter + if not t2.boundary_type == "PortBoundary": + continue + + if t2.is_circuit_port: + port = CircuitPort(self, t) + ports[port.name] = port + elif t2.terminal_type == "BundleTerminal": + port = BundleWavePort(self, t) + ports[port.name] = port elif t2.hfss_type == "Wave": ports[t2.name] = WavePort(self, t) - elif t2.terminal_type == TerminalType.PadstackInstanceTerminal.name: + elif t2.terminal_type == "PadstackInstanceTerminal": ports[t2.name] = CoaxPort(self, t) else: ports[t2.name] = GapPort(self, t) @@ -429,7 +421,7 @@ def probes(self): """Get all layout sources.""" temp = {} for name, val in self.terminals.items(): - if val.boundary_type == BoundaryType.kVoltageProbe.name: + if val.boundary_type == "kVoltageProbe": if not val.is_reference_terminal: temp[name] = val return temp @@ -3191,7 +3183,7 @@ def build_simulation_project(self, simulation_setup): self.edbpath = legacy_name self.open_edb() return True - except: # pragma: no cover + except: return False @pyaedt_function_handler() @@ -3320,15 +3312,15 @@ def setups(self): Dict[str, :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`] """ + setups = {} for i in list(self.active_cell.SimulationSetups): - if i.GetName() not in self._setups: - if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS: - self._setups[i.GetName()] = HfssSimulationSetup(self, i.GetName(), i) - elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave: - self._setups[i.GetName()] = SiwaveSYZSimulationSetup(self, i.GetName(), i) - elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR: - self._setups[i.GetName()] = SiwaveDCSimulationSetup(self, i.GetName(), i) - return self._setups + if i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kHFSS: + setups[i.GetName()] = HfssSimulationSetup(self, i) + elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWave: + setups[i.GetName()] = SiwaveSYZSimulationSetup(self, i) + elif i.GetType() == self.edb_api.utility.utility.SimulationSetupType.kSIWaveDCIR: + setups[i.GetName()] = SiwaveDCSimulationSetup(self, i) + return setups @property def hfss_setups(self): @@ -3349,7 +3341,7 @@ def siwave_dc_setups(self): ------- Dict[str, :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveDCSimulationSetup`] """ - return {name: i for name, i in self.setups.items() if i.setup_type == "kSIWaveDCIR"} + return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveDCSimulationSetup)} @property def siwave_ac_setups(self): @@ -3359,10 +3351,10 @@ def siwave_ac_setups(self): ------- Dict[str, :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup`] """ - return {name: i for name, i in self.setups.items() if i.setup_type == "kSIWave"} + return {name: i for name, i in self.setups.items() if isinstance(i, SiwaveSYZSimulationSetup)} def create_hfss_setup(self, name=None): - """Create a setup from a template. + """Create an HFSS simulation setup from a template. Parameters ---------- @@ -3380,8 +3372,7 @@ def create_hfss_setup(self, name=None): """ if name in self.setups: return False - setup = HfssSimulationSetup(self, name) - self._setups[name] = setup + setup = HfssSimulationSetup(self).create(name) return setup @pyaedt_function_handler() @@ -3410,11 +3401,8 @@ def create_siwave_syz_setup(self, name=None): name = generate_unique_name("Siwave_SYZ") if name in self.setups: return False - setup = SiwaveSYZSimulationSetup(self, name) - setup.si_slider_postion = 1 - setup.pi_slider_postion = 1 - self._setups[name] = setup - return setup + SiwaveSYZSimulationSetup(self).create(name) + return self.setups[name] @pyaedt_function_handler() def create_siwave_dc_setup(self, name=None): @@ -3439,8 +3427,7 @@ def create_siwave_dc_setup(self, name=None): name = generate_unique_name("Siwave_DC") if name in self.setups: return False - setup = SiwaveDCSimulationSetup(self, name) - self._setups[name] = setup + setup = SiwaveDCSimulationSetup(self).create(name) return setup @pyaedt_function_handler() @@ -3639,3 +3626,151 @@ def _get_connected_ports_from_multizone_cutout(self, terminal_info_dict): ): connected_ports_list.append((port1_connexion, port2_connexion)) return connected_ports_list + + @pyaedt_function_handler + def create_port(self, terminal, ref_terminal=None, is_circuit_port=False): + """Create a port. + + Parameters + ---------- + terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + optional + Negative terminal of the port. + is_circuit_port : bool, optional + Whether it is a circuit port. The default is ``False``. + + Returns + ------- + + """ + + terminal.boundary_type = "PortBoundary" + terminal.is_circuit_port = is_circuit_port + + if ref_terminal: + ref_terminal.boundary_type = "PortBoundary" + terminal.ref_terminal = ref_terminal + + return self.ports[terminal.name] + + @pyaedt_function_handler + def create_voltage_probe(self, terminal, ref_terminal): + """Create a voltage probe. + + Parameters + ---------- + terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Negative terminal of the probe. + + Returns + ------- + + """ + term = Terminal(self, terminal._edb_object) + term.boundary_type = "kVoltageProbe" + + ref_term = Terminal(self, ref_terminal._edb_object) + ref_term.boundary_type = "kVoltageProbe" + + term.ref_terminal = ref_terminal + return self.probes[term.name] + + @pyaedt_function_handler + def create_voltage_source(self, terminal, ref_terminal): + """Create a voltage source. + + Parameters + ---------- + terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Negative terminal of the source. + + Returns + ------- + class:`pyaedt.edb_core.edb_data.ports.ExcitationSources` + """ + term = Terminal(self, terminal._edb_object) + term.boundary_type = "kVoltageSource" + + ref_term = Terminal(self, ref_terminal._edb_object) + ref_term.boundary_type = "kVoltageProbe" + + term.ref_terminal = ref_terminal + return self.sources[term.name] + + @pyaedt_function_handler + def create_current_source(self, terminal, ref_terminal): + """Create a current source. + + Parameters + ---------- + terminal : :class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Positive terminal of the port. + ref_terminal : class:`pyaedt.edb_core.edb_data.terminals.EdgeTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PadstackInstanceTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal`, + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal`, + Negative terminal of the source. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.ports.ExcitationSources` + """ + term = Terminal(self, terminal._edb_object) + term.boundary_type = "kCurrentSource" + + ref_term = Terminal(self, ref_terminal._edb_object) + ref_term.boundary_type = "kCurrentSource" + + term.ref_terminal = ref_terminal + return self.sources[term.name] + + @pyaedt_function_handler + def get_point_terminal(self, name, net_name, location, layer): + """Place a voltage probe between two points. + + Parameters + ---------- + name : str, + Name of the terminal. + net_name : str + Name of the net. + location : list + Location of the terminal. + layer : str, + Layer of the terminal. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal` + """ + from pyaedt.edb_core.edb_data.terminals import PointTerminal + + point_terminal = PointTerminal(self) + return point_terminal.create(name, net_name, location, layer) diff --git a/pyaedt/edb_core/components.py b/pyaedt/edb_core/components.py index 2bb82399012..3d492a36528 100644 --- a/pyaedt/edb_core/components.py +++ b/pyaedt/edb_core/components.py @@ -713,7 +713,7 @@ def create_source_on_component(self, sources=None): return True @pyaedt_function_handler() - def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): + def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0, port_name=None): """Create circuit port between pins and reference ones. Parameters @@ -732,6 +732,8 @@ def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): str, [str], EDBPadstackInstance, [EDBPadstackInstance] impedance : Port impedance str, float + port_name : Port Name (Optional) when provided will overwrite the default naming convention + str Returns ------- @@ -767,6 +769,8 @@ def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): if not len([pin for pin in pins if isinstance(pin, EDBPadstackInstance)]) == len(pins): self._logger.error("Pin list must contain only pins instances") return + if not port_name: + port_name = "Port_{}_{}".format(pins[0].net_name, pins[0].name) if len([pin for pin in reference_pins if isinstance(pin, str)]) == len(reference_pins): ref_cmp_pins = [] for ref_pin_name in reference_pins: @@ -781,17 +785,17 @@ def create_port_on_pins(self, refdes, pins, reference_pins, impedance=50.0): if len(pins) > 1: group_name = "group_{}_{}".format(pins[0].net_name, pins[0].name) pin_group = self.create_pingroup_from_pins(pins, group_name) - term = self._create_pin_group_terminal(pingroup=pin_group) + term = self._create_pin_group_terminal(pingroup=pin_group, term_name=port_name) else: - term = self._create_terminal(pins[0]) + term = self._create_terminal(pins[0], term_name=port_name) term.SetIsCircuitPort(True) if len(reference_pins) > 1: ref_group_name = "group_{}_{}_ref".format(reference_pins[0].net_name, reference_pins[0].name) ref_pin_group = self.create_pingroup_from_pins(reference_pins, ref_group_name) - ref_term = self._create_pin_group_terminal(pingroup=ref_pin_group) + ref_term = self._create_pin_group_terminal(pingroup=ref_pin_group, term_name=port_name + "_ref") else: - ref_term = self._create_terminal(reference_pins[0]) + ref_term = self._create_terminal(reference_pins[0], term_name=port_name + "_ref") ref_term.SetIsCircuitPort(True) term.SetImpedance(self._edb.utility.value(impedance)) term.SetReferenceTerminal(ref_term) @@ -820,7 +824,7 @@ def create_port_on_component( False will take the closest reference pin and generate one port per signal pin. refnet : string or list of string. list of the reference net. - port_name : string + port_name : str Port name for overwriting the default port-naming convention, which is ``[component][net][pin]``. The port name must be unique. If a port with the specified name already exists, the @@ -933,13 +937,16 @@ def create_port_on_component( return True @pyaedt_function_handler() - def _create_terminal(self, pin): + def _create_terminal(self, pin, term_name=None): """Create terminal on component pin. Parameters ---------- pin : Edb padstack instance. + term_name : Terminal name (Optional). + str. + Returns ------- Edb terminal. @@ -951,7 +958,8 @@ def _create_terminal(self, pin): cmp_name = pin.GetComponent().GetName() net_name = pin.GetNet().GetName() pin_name = pin.GetName() - term_name = "{}.{}.{}".format(cmp_name, pin_name, net_name) + if term_name is None: + term_name = "{}.{}.{}".format(cmp_name, pin_name, net_name) for term in list(self._pedb.active_layout.Terminals): if term.GetName() == term_name: return term @@ -1057,7 +1065,7 @@ def deactivate_rlc_component(self, component=None, create_circuit_port=False): >>> from pyaedt import Edb >>> edb_file = r'C:\my_edb_file.aedb' >>> edb = Edb(edb_file) - >>> for cmp in list(edb.components.components.keys()): + >>> for cmp in list(edb.components.instances.keys()): >>> edb.components.deactivate_rlc_component(component=cmp, create_circuit_port=False) >>> edb.save_edb() >>> edb.close_edb() @@ -1078,12 +1086,10 @@ def deactivate_rlc_component(self, component=None, create_circuit_port=False): self._logger.info("Component %s passed to deactivate is not an RLC.", component.refdes) return False component.is_enabled = False - if create_circuit_port: - return self.add_port_on_rlc_component(component.refdes) - return True + return self.add_port_on_rlc_component(component=component.refdes, circuit_ports=create_circuit_port) @pyaedt_function_handler() - def add_port_on_rlc_component(self, component=None): + def add_port_on_rlc_component(self, component=None, circuit_ports=True): """Deactivate RLC component and replace it with a circuit port. The circuit port supports only 2-pin components. @@ -1092,6 +1098,10 @@ def add_port_on_rlc_component(self, component=None): component : str Reference designator of the RLC component. + circuit_ports : bool + ``True`` will replace RLC component by circuit ports, ``False`` gap ports compatible with HFSS 3D modeler + export. + Returns ------- bool @@ -1108,35 +1118,43 @@ def add_port_on_rlc_component(self, component=None): pt = self._pedb.point_data(*pos_pin_loc) pin_layers = self._padstack._get_pin_layer_range(pins[0]) - pos_pin_term = self._pedb.edb_api.cell.terminal.PointTerminal.Create( + pos_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create( self._active_layout, pins[0].GetNet(), "{}_{}".format(component.refdes, pins[0].GetName()), - pt, + pins[0], pin_layers[0], + False, ) if not pos_pin_term: # pragma: no cover return False neg_pin_loc = self.get_pin_position(pins[1]) pt = self._pedb.point_data(*neg_pin_loc) - neg_pin_term = self._pedb.edb_api.cell.terminal.PointTerminal.Create( + neg_pin_term = self._pedb.edb_api.cell.terminal.PadstackInstanceTerminal.Create( self._active_layout, pins[1].GetNet(), "{}_{}_ref".format(component.refdes, pins[1].GetName()), - pt, + pins[1], pin_layers[0], + False, ) if not neg_pin_term: # pragma: no cover return False pos_pin_term.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary) - pos_pin_term.SetIsCircuitPort(True) pos_pin_term.SetName(component.refdes) neg_pin_term.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary) - neg_pin_term.SetIsCircuitPort(True) pos_pin_term.SetReferenceTerminal(neg_pin_term) + if circuit_ports: + pos_pin_term.SetIsCircuitPort(True) + neg_pin_term.SetIsCircuitPort(True) + else: + pos_pin_term.SetIsCircuitPort(False) + neg_pin_term.SetIsCircuitPort(False) + self._logger.info("Component {} has been replaced by port".format(component.refdes)) return True + return False @pyaedt_function_handler() def add_rlc_boundary(self, component=None, circuit_type=True): @@ -1213,7 +1231,7 @@ def add_rlc_boundary(self, component=None, circuit_type=True): return True @pyaedt_function_handler() - def _create_pin_group_terminal(self, pingroup, isref=False): + def _create_pin_group_terminal(self, pingroup, isref=False, term_name=None): """Creates an EDB pin group terminal from a given EDB pin group. Parameters @@ -1222,14 +1240,16 @@ def _create_pin_group_terminal(self, pingroup, isref=False): isref : bool + term_name : Terminal name (Optional). If not provided default name is Component name, Pin name, Net name. + str. + Returns ------- Edb pin group terminal. """ pin = list(pingroup.GetPins())[0] - term_name = "{}.{}.{}".format( - pin.GetComponent().GetName(), pin.GetComponent().GetName(), pin.GetNet().GetName() - ) + if term_name is None: + term_name = "{}.{}.{}".format(pin.GetComponent().GetName(), pin.GetName(), pin.GetNet().GetName()) for t in list(self._pedb.active_layout.Terminals): if t.GetName() == term_name: return t @@ -1869,10 +1889,10 @@ def set_solder_ball( cmp_property.SetSolderBallProperty(solder_ball_prop) port_prop = cmp_property.GetPortProperty().Clone() + port_prop.SetReferenceHeight(self._pedb.edb_value(reference_height)) port_prop.SetReferenceSizeAuto(auto_reference_size) if not auto_reference_size: port_prop.SetReferenceSize(self._pedb.edb_value(reference_size_x), self._pedb.edb_value(reference_size_y)) - port_prop.SetReferenceHeight(self._pedb.edb_value(reference_height)) cmp_property.SetPortProperty(port_prop) edb_cmp.SetComponentProperty(cmp_property) return True diff --git a/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py b/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py index 76e9cc8e6da..d7e6afecf7b 100644 --- a/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py +++ b/pyaedt/edb_core/edb_data/hfss_simulation_setup_data.py @@ -1,487 +1,11 @@ +from pyaedt.edb_core.edb_data.simulation_setup import BaseSimulationSetup +from pyaedt.edb_core.edb_data.simulation_setup import EdbFrequencySweep from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.clr_module import Tuple from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import pyaedt_function_handler -class EdbFrequencySweep(object): - """Manages EDB methods for frequency sweep.""" - - def __init__(self, sim_setup, frequency_sweep=None, name=None, edb_sweep_data=None): - self._sim_setup = sim_setup - - if edb_sweep_data: - self._edb_sweep_data = edb_sweep_data - self._name = self._edb_sweep_data.Name - else: - if not name: - self._name = generate_unique_name("sweep") - else: - self._name = name - self._edb_sweep_data = self._sim_setup._edb.simsetupdata.SweepData(self._name) - self.set_frequencies(frequency_sweep) - - @pyaedt_function_handler() - def _update_sweep(self): - """Update sweep.""" - self._sim_setup._edb_sim_setup_info.SweepDataList.Clear() - for el in list(self._sim_setup.frequency_sweeps.values()): - self._sim_setup._edb_sim_setup_info.SweepDataList.Add(el._edb_sweep_data) - self._sim_setup._edb_sim_setup_info.SweepDataList.Add(self._edb_sweep_data) - return self._sim_setup._update_setup() - - @property - def name(self): - """Name of the sweep.""" - return self._edb_sweep_data.Name - - @name.setter - def name(self, value): - """Set name of this sweep""" - self._edb_sweep_data.Name = value - self._update_sweep() - - @property - def sweep_type(self): - """Sweep type.""" - return - - @property - def frequencies(self): - """List of frequencies points.""" - return list(self._edb_sweep_data.Frequencies) - - @property - def adaptive_sampling(self): - """Whether adaptive sampling is used. - - Returns - ------- - bool - ``True`` if adaptive sampling is used, ``False`` otherwise. - """ - return self._edb_sweep_data.AdaptiveSampling - - @property - def adv_dc_extrapolation(self): - """Whether to turn on advanced DC Extrapolation. - - Returns - ------- - bool - ``True`` if advanced DC Extrapolation is used, ``False`` otherwise. - - """ - return self._edb_sweep_data.AdvDCExtrapolation - - @property - def auto_s_mat_only_solve(self): - """Whether to turn on Auto/Manual SMatrix only solve. - - Returns - ------- - bool - ``True`` if Auto/Manual SMatrix only solve is used, ``False`` otherwise. - """ - return self._edb_sweep_data.AutoSMatOnlySolve - - @property - def enforce_causality(self): - """Whether to enforce causality during interpolating sweep. - - Returns - ------- - bool - ``True`` if enforce causality is used, ``False`` otherwise. - """ - return self._edb_sweep_data.EnforceCausality - - @property - def enforce_dc_and_causality(self): - """Whether to enforce DC point and causality. - - Returns - ------- - bool - ``True`` if enforce dc point and causality is used, ``False`` otherwise. - - """ - return self._edb_sweep_data.EnforceDCAndCausality - - @property - def enforce_passivity(self): - """Whether to enforce passivity during interpolating sweep. - - Returns - ------- - bool - ``True`` if enforce passivity is used, ``False`` otherwise. - """ - return self._edb_sweep_data.EnforcePassivity - - @property - def freq_sweep_type(self): - """Sweep type. - Options are: - - ``kInterpolatingSweep``. - - ``kDiscreteSweep``. - - ``kBroadbandFastSweep``. - - Returns - ------- - str - """ - return self._edb_sweep_data.FreqSweepType.ToString() - - @property - def interp_use_full_basis(self): - """Whether to use Full basis elements. - - Returns - ------- - bool - ``True`` if full basis interpolation is used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUseFullBasis - - @property - def interp_use_port_impedance(self): - """Whether to turn on the port impedance interpolation. - - Returns - ------- - bool - ``True`` if port impedance is used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUsePortImpedance - - @property - def interp_use_prop_const(self): - """Whether to use propagation constants. - - Returns - ------- - bool - ``True`` if propagation constants are used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUsePropConst - - @property - def interp_use_s_matrix(self): - """Whether to use S matrix. - - Returns - ------- - bool - ``True`` if S matrix are used, ``False`` otherwise. - """ - return self._edb_sweep_data.InterpUseSMatrix - - @property - def max_solutions(self): - """Number of aximum solutions. - - Returns - ------- - int - """ - return self._edb_sweep_data.MaxSolutions - - @property - def min_freq_s_mat_only_solve(self): - """Minimum frequency SMatrix only solve. - - Returns - ------- - str - Frequency with units. - """ - return self._edb_sweep_data.MinFreqSMatOnlySolve - - @property - def min_solved_freq(self): - """Minimum solved frequency. - - Returns - ------- - str - Frequency with units. - """ - return self._edb_sweep_data.MinSolvedFreq - - @property - def passivity_tolerance(self): - """Tolerance for passivity enforcement. - - Returns - ------- - float - """ - return self._edb_sweep_data.PassivityTolerance - - @property - def relative_s_error(self): - """Specify S-parameter error tolerance for interpolating sweep. - - Returns - ------- - float - """ - return self._edb_sweep_data.RelativeSError - - @property - def save_fields(self): - """Whether to turn on or off the extraction of surface current data. - - Returns - ------- - bool - ``True`` if save fields is enabled, ``False`` otherwise. - """ - return self._edb_sweep_data.SaveFields - - @property - def save_rad_fields_only(self): - """Whether to turn on save radiated fields only. - - Returns - ------- - bool - ``True`` if save radiated field only is used, ``False`` otherwise. - - """ - return self._edb_sweep_data.SaveRadFieldsOnly - - @property - def use_q3d_for_dc(self): - """Whether to enable Q3D solver for DC point extraction . - - Returns - ------- - bool - ``True`` if Q3d for DC point is used, ``False`` otherwise. - """ - return self._edb_sweep_data.UseQ3DForDC - - @adaptive_sampling.setter - def adaptive_sampling(self, value): - self._edb_sweep_data.AdaptiveSampling = value - self._update_sweep() - - @adv_dc_extrapolation.setter - def adv_dc_extrapolation(self, value): - self._edb_sweep_data.AdvDCExtrapolation = value - self._update_sweep() - - @auto_s_mat_only_solve.setter - def auto_s_mat_only_solve(self, value): - self._edb_sweep_data.AutoSMatOnlySolve = value - self._update_sweep() - - @enforce_causality.setter - def enforce_causality(self, value): - self._edb_sweep_data.EnforceCausality = value - self._update_sweep() - - @enforce_dc_and_causality.setter - def enforce_dc_and_causality(self, value): - self._edb_sweep_data.EnforceDCAndCausality = value - self._update_sweep() - - @enforce_passivity.setter - def enforce_passivity(self, value): - self._edb_sweep_data.EnforcePassivity = value - self._update_sweep() - - @freq_sweep_type.setter - def freq_sweep_type(self, value): - edb_freq_sweep_type = self._edb_sweep_data.TFreqSweepType - if value in [0, "kInterpolatingSweep"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep - elif value in [1, "kDiscreteSweep"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep - elif value in [2, "kBroadbandFastSweep"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep - elif value in [3, "kNumSweepTypes"]: - self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kNumSweepTypes - self._edb_sweep_data.FreqSweepType.ToString() - - @interp_use_full_basis.setter - def interp_use_full_basis(self, value): - self._edb_sweep_data.InterpUseFullBasis = value - self._update_sweep() - - @interp_use_port_impedance.setter - def interp_use_port_impedance(self, value): - self._edb_sweep_data.InterpUsePortImpedance = value - self._update_sweep() - - @interp_use_prop_const.setter - def interp_use_prop_const(self, value): - self._edb_sweep_data.InterpUsePropConst = value - self._update_sweep() - - @interp_use_s_matrix.setter - def interp_use_s_matrix(self, value): - self._edb_sweep_data.InterpUseSMatrix = value - self._update_sweep() - - @max_solutions.setter - def max_solutions(self, value): - self._edb_sweep_data.MaxSolutions = value - self._update_sweep() - - @min_freq_s_mat_only_solve.setter - def min_freq_s_mat_only_solve(self, value): - self._edb_sweep_data.MinFreqSMatOnlySolve = value - self._update_sweep() - - @min_solved_freq.setter - def min_solved_freq(self, value): - self._edb_sweep_data.MinSolvedFreq = value - self._update_sweep() - - @passivity_tolerance.setter - def passivity_tolerance(self, value): - self._edb_sweep_data.PassivityTolerance = value - self._update_sweep() - - @relative_s_error.setter - def relative_s_error(self, value): - self._edb_sweep_data.RelativeSError = value - self._update_sweep() - - @save_fields.setter - def save_fields(self, value): - self._edb_sweep_data.SaveFields = value - self._update_sweep() - - @save_rad_fields_only.setter - def save_rad_fields_only(self, value): - self._edb_sweep_data.SaveRadFieldsOnly = value - self._update_sweep() - - @use_q3d_for_dc.setter - def use_q3d_for_dc(self, value): - self._edb_sweep_data.UseQ3DForDC = value - self._update_sweep() - - @pyaedt_function_handler() - def _set_frequencies(self, freq_sweep_string="Linear Step: 0GHz to 20GHz, step=0.05GHz"): - self._edb_sweep_data.SetFrequencies(freq_sweep_string) - self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies_linear_scale(self, start="0.1GHz", stop="20GHz", step="50MHz"): - """Set a linear scale frequency sweep. - - Parameters - ---------- - start : str, float - Start frequency. - stop : str, float - Stop frequency. - step : str, float - Step frequency. - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - - """ - self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, step) - return self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies_linear_count(self, start="1kHz", stop="0.1GHz", count=10): - """Set a linear count frequency sweep. - - Parameters - ---------- - start : str, float - Start frequency. - stop : str, float - Stop frequency. - count : int - Step frequency. - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - - """ - start = self._sim_setup._edb.arg_to_dim(start, "Hz") - stop = self._sim_setup._edb.arg_to_dim(stop, "Hz") - self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, count) - return self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies_log_scale(self, start="1kHz", stop="0.1GHz", samples=10): - """Set a log count frequency sweep. - - Parameters - ---------- - start : str, float - Start frequency. - stop : str, float - Stop frequency. - samples : int - Step frequency. - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - """ - start = self._sim_setup._edb.arg_to_dim(start, "Hz") - stop = self._sim_setup._edb.arg_to_dim(stop, "Hz") - self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetLogFrequencies(start, stop, samples) - return self._update_sweep() - - @pyaedt_function_handler() - def set_frequencies(self, frequency_list=None): - """Set frequency list to the sweep frequencies. - - Parameters - ---------- - frequency_list : list, optional - List of lists with four elements. Each list must contain: - - 1- frequency type (``"linear count"``, ``"log scale"`` or ``"linear scale"``) - 2- start frequency - 3- stop frequency - 4- step frequency or count - - Returns - ------- - bool - ``True`` if correctly executed, ``False`` otherwise. - - """ - if not frequency_list: - frequency_list = [ - ["linear count", "0", "1kHz", 1], - ["log scale", "1kHz", "0.1GHz", 10], - ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], - ] - temp = [] - for i in frequency_list: - if i[0] == "linear count": - temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) - elif i[0] == "linear scale": - temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) - elif i[0] == "log scale": - temp.extend(list(self._edb_sweep_data.SetLogFrequencies(i[1], i[2], i[3]))) - else: - return False - self._edb_sweep_data.Frequencies.Clear() - for i in temp: - self._edb_sweep_data.Frequencies.Add(i) - return self._update_sweep() - - class MeshOperation(object): """Mesh Operation Class.""" @@ -752,7 +276,7 @@ def __init__(self, parent): @property def _hfss_port_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.HFSSPortSettings + return self._parent.get_sim_setup_info.SimulationSettings.HFSSPortSettings @property def max_delta_z0(self): @@ -819,12 +343,12 @@ def enable_set_triangles_wave_port(self, value): class HfssSolverSettings(object): """Manages EDB methods for HFSS solver settings.""" - def __init__(self, parent): - self._parent = parent + def __init__(self, sim_setup): + self._parent = sim_setup @property def _hfss_solver_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.HFSSSolverSettings + return self._parent.get_sim_setup_info.SimulationSettings.HFSSSolverSettings @property def enhanced_low_freq_accuracy(self): @@ -993,7 +517,7 @@ def adaptive_settings(self): ------- :class:`pyaedt.edb_core.edb_data.hfss_simulation_setup_data.AdaptiveSettings` """ - return self._parent._edb_sim_setup_info.SimulationSettings.AdaptiveSettings + return self._parent.get_sim_setup_info.SimulationSettings.AdaptiveSettings @property def adaptive_frequency_data_list(self): @@ -1115,7 +639,7 @@ def save_fields(self, value): @property def save_rad_field_only(self): - """Whether to turn on save radiated fields only. + """Flag indicating if the saving of only radiated fields is turned on. Returns ------- @@ -1181,10 +705,10 @@ def add_adaptive_frequency_data(self, frequency=0, max_num_passes=10, max_delta_ bool ``True`` if method is successful, ``False`` otherwise. """ - low_freq_adapt_data = self._parent._edb.simsetupdata.AdaptiveFrequencyData() - low_freq_adapt_data.MaxDelta = self._parent._edb.edb_value(max_delta_s).ToString() + low_freq_adapt_data = self._parent._pedb.simsetupdata.AdaptiveFrequencyData() + low_freq_adapt_data.MaxDelta = self._parent._pedb.edb_value(max_delta_s).ToString() low_freq_adapt_data.MaxPasses = max_num_passes - low_freq_adapt_data.AdaptiveFrequency = self._parent._edb.edb_value(frequency).ToString() + low_freq_adapt_data.AdaptiveFrequency = self._parent._pedb.edb_value(frequency).ToString() self.adaptive_settings.AdaptiveFrequencyDataList.Clear() self.adaptive_settings.AdaptiveFrequencyDataList.Add(low_freq_adapt_data) return self._parent._update_setup() @@ -1211,14 +735,14 @@ def add_broadband_adaptive_frequency_data( bool ``True`` if method is successful, ``False`` otherwise. """ - low_freq_adapt_data = self._parent._edb.simsetupdata.AdaptiveFrequencyData() - low_freq_adapt_data.MaxDelta = self._parent._edb.edb_value(max_delta_s).ToString() + low_freq_adapt_data = self._parent._pedb.simsetupdata.AdaptiveFrequencyData() + low_freq_adapt_data.MaxDelta = self._parent._pedb.edb_value(max_delta_s).ToString() low_freq_adapt_data.MaxPasses = max_num_passes - low_freq_adapt_data.AdaptiveFrequency = self._parent._edb.edb_value(low_frequency).ToString() - high_freq_adapt_data = self._parent._edb.simsetupdata.AdaptiveFrequencyData() - high_freq_adapt_data.MaxDelta = self._parent._edb.edb_value(max_delta_s).ToString() + low_freq_adapt_data.AdaptiveFrequency = self._parent._pedb.edb_value(low_frequency).ToString() + high_freq_adapt_data = self._parent._pedb.simsetupdata.AdaptiveFrequencyData() + high_freq_adapt_data.MaxDelta = self._parent._pedb.edb_value(max_delta_s).ToString() high_freq_adapt_data.MaxPasses = max_num_passes - high_freq_adapt_data.AdaptiveFrequency = self._parent._edb.edb_value(high_frequency).ToString() + high_freq_adapt_data.AdaptiveFrequency = self._parent._pedb.edb_value(high_frequency).ToString() self.adaptive_settings.AdaptiveFrequencyDataList.Clear() self.adaptive_settings.AdaptiveFrequencyDataList.Add(low_freq_adapt_data) self.adaptive_settings.AdaptiveFrequencyDataList.Add(high_freq_adapt_data) @@ -1233,7 +757,7 @@ def __init__(self, parent): @property def _defeature_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.DefeatureSettings + return self._parent.get_sim_setup_info.SimulationSettings.DefeatureSettings @property def defeature_abs_length(self): @@ -1401,7 +925,7 @@ def __init__( @property def _via_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.ViaSettings + return self._parent.get_sim_setup_info.SimulationSettings.ViaSettings @property def via_density(self): @@ -1478,7 +1002,7 @@ def __init__(self, parent): @property def _advanced_mesh_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.AdvancedMeshSettings + return self._parent.get_sim_setup_info.SimulationSettings.AdvancedMeshSettings @property def layer_snap_tol(self): @@ -1537,7 +1061,7 @@ def __init__(self, parent): @property def _curve_approx_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.CurveApproxSettings + return self._parent.get_sim_setup_info.SimulationSettings.CurveApproxSettings @property def arc_angle(self): @@ -1623,7 +1147,7 @@ def __init__(self, parent): @property def _dcr_settings(self): - return self._parent._edb_sim_setup_info.SimulationSettings.DCRSettings + return self._parent.get_sim_setup_info.SimulationSettings.DCRSettings @property def conduction_max_passes(self): @@ -1701,82 +1225,25 @@ def conduction_per_refine(self, value): self._parent._update_setup() -class HfssSimulationSetup(object): +class HfssSimulationSetup(BaseSimulationSetup): """Manages EDB methods for HFSS simulation setup.""" - def __init__(self, edb, name=None, edb_hfss_sim_setup=None): - self._edb = edb - self._name = None + def __init__(self, pedb, edb_object=None): + super().__init__(pedb, edb_object) + self._setup_type = "kHFSS" self._mesh_operations = {} - if edb_hfss_sim_setup: - self._edb_sim_setup = edb_hfss_sim_setup - self._edb_sim_setup_info = edb_hfss_sim_setup.GetSimSetupInfo() - self._name = edb_hfss_sim_setup.GetName() - else: - self._edb_sim_setup_info = self._edb.simsetupdata.SimSetupInfo[ - self._edb.simsetupdata.HFSSSimulationSettings - ]() - if not name: - self._edb_sim_setup_info.Name = generate_unique_name("hfss") - else: - self._edb_sim_setup_info.Name = name - self._name = name - self.hfss_solver_settings.order_basis = "mixed" - - self._edb_sim_setup = self._edb.edb_api.utility.utility.HFSSSimulationSetup(self._edb_sim_setup_info) - self._update_setup() - - @property - def edb_sim_setup_info(self): - """EDB internal simulation setup object.""" - return self._edb_sim_setup_info - @pyaedt_function_handler() - def _update_setup(self): - mesh_operations = self._edb_sim_setup_info.SimulationSettings.MeshOperations - mesh_operations.Clear() - for mop in self.mesh_operations.values(): - mesh_operations.Add(mop.mesh_operation) - - self._edb_sim_setup = self._edb.edb_api.utility.utility.HFSSSimulationSetup(self._edb_sim_setup_info) - - if self._name in self._edb.setups: - self._edb.active_cell.DeleteSimulationSetup(self._name) - self._name = self.name - self._edb.active_cell.AddSimulationSetup(self._edb_sim_setup) - for i in list(self._edb.active_cell.SimulationSetups): - if i.GetSimSetupInfo().Name == self._name: - self._edb_sim_setup_info = i.GetSimSetupInfo() - return True - return False - - @property - def frequency_sweeps(self): - """Frequency sweep list. - - Returns - ------- - List of :class:`pyaedt.edb_core.edb_data.hfss_simulation_setup_data.EdbFrequencySweep` - """ - sweep_data_list = {} - for i in list(self._edb_sim_setup_info.SweepDataList): - sweep_data_list[i.Name] = EdbFrequencySweep(self, None, i.Name, i) - return sweep_data_list + def create(self, name=None): + """Create a HFSS setup.""" + self._name = name + self._create(name) + return self @property - def name(self): - """Name of the setup.""" - return self._edb_sim_setup_info.Name - - @name.setter - def name(self, value): - legacy_name = self._name - self._edb_sim_setup_info.Name = value - self._update_setup() - if legacy_name in self._edb.setups: - del self._edb._setups[legacy_name] - self._name = value + def get_sim_setup_info(self): + """Get simulation setup information.""" + return self._edb_object.GetSimSetupInfo() @property def solver_slider_type(self): @@ -1791,35 +1258,30 @@ def solver_slider_type(self): ------- str """ - return self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.ToString() + return self.get_sim_setup_info.SimulationSettings.TSolveSliderType.ToString() @solver_slider_type.setter def solver_slider_type(self, value): """Set solver slider type.""" solver_types = { - "kFast": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaWirebond, - "kMedium": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaRibbon, - "kAccurate": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaMesh, - "kNumSliderTypes": self._edb_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaField, + "kFast": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaWirebond, + "kMedium": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaRibbon, + "kAccurate": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaMesh, + "kNumSliderTypes": self.get_sim_setup_info.SimulationSettings.TSolveSliderType.k25DViaField, } - self._edb_sim_setup_info.SimulationSettings.TSolveSliderType = solver_types[value] + self.get_sim_setup_info.SimulationSettings.TSolveSliderType = solver_types[value] self._update_setup() @property def is_auto_setup(self): """Whether if auto setup is enabled.""" - return self._edb_sim_setup_info.SimulationSettings.IsAutoSetup + return self.get_sim_setup_info.SimulationSettings.IsAutoSetup @is_auto_setup.setter def is_auto_setup(self, value): - self._edb_sim_setup_info.SimulationSettings.IsAutoSetup = value + self.get_sim_setup_info.SimulationSettings.IsAutoSetup = value self._update_setup() - @property - def setup_type(self): - """Setup type.""" - return self._edb_sim_setup_info.SimulationSettings.SetupType - @property def hfss_solver_settings(self): """Manages EDB methods for HFSS solver settings. @@ -1919,7 +1381,7 @@ def mesh_operations(self): """ if self._mesh_operations: return self._mesh_operations - settings = self._edb_sim_setup_info.SimulationSettings.MeshOperations + settings = self.get_sim_setup_info.SimulationSettings.MeshOperations self._mesh_operations = {} for i in list(settings): if i.MeshOpType == i.TMeshOpType.kMeshSetupLength: @@ -1970,7 +1432,7 @@ def add_length_mesh_operation( """ if not name: name = generate_unique_name("skin") - mesh_operation = MeshOperationLength(self, self._edb.simsetupdata.LengthMeshOperation()) + mesh_operation = MeshOperationLength(self, self._pedb.simsetupdata.LengthMeshOperation()) mesh_operation.mesh_region = mesh_region mesh_operation.name = name mesh_operation.nets_layers_list = net_layer_list @@ -2024,7 +1486,7 @@ def add_skin_depth_mesh_operation( """ if not name: name = generate_unique_name("length") - mesh_operation = MeshOperationSkinDepth(self, self._edb.simsetupdata.SkinDepthMeshOperation()) + mesh_operation = MeshOperationSkinDepth(self, self._pedb.simsetupdata.SkinDepthMeshOperation()) mesh_operation.mesh_region = mesh_region mesh_operation.name = name mesh_operation.nets_layers_list = net_layer_list diff --git a/pyaedt/edb_core/edb_data/padstacks_data.py b/pyaedt/edb_core/edb_data/padstacks_data.py index a37d2b2987a..4abd7768f42 100644 --- a/pyaedt/edb_core/edb_data/padstacks_data.py +++ b/pyaedt/edb_core/edb_data/padstacks_data.py @@ -998,12 +998,29 @@ def __init__(self, edb_padstackinstance, _pedb): self._position = [] self._pdef = None - @property - def terminal(self): - """Return PadstackInstanceTerminal object.""" - from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal + @pyaedt_function_handler + def get_terminal(self, name=None, create_new_terminal=False): + """Return PadstackInstanceTerminal object. - term = PadstackInstanceTerminal(self._pedb, self._edb_object.GetPadstackInstanceTerminal()) + Parameters + ---------- + name : str, optional + Name of the terminal. Only applicable when create_new_terminal is True. + create_new_terminal : bool, optional + Whether to create a new terminal. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals` + + """ + + if create_new_terminal: + term = self._create_terminal(name) + else: + from pyaedt.edb_core.edb_data.terminals import PadstackInstanceTerminal + + term = PadstackInstanceTerminal(self._pedb, self._edb_object.GetPadstackInstanceTerminal()) if not term.is_null: return term @@ -1018,12 +1035,35 @@ def _create_terminal(self, name=None): @pyaedt_function_handler def create_coax_port(self, name=None, radial_extent_factor=0): """Create a coax port.""" - from pyaedt.edb_core.edb_data.ports import CoaxPort - term = self._create_terminal(name) - coax = CoaxPort(self._pedb, term._edb_object) - coax.radial_extent_factor = radial_extent_factor - return coax + port = self.create_port(name) + port.radial_extent_factor = radial_extent_factor + return port + + @pyaedt_function_handler + def create_port(self, name=None, reference=None, is_circuit_port=False): + """Create a port on the padstack. + + Parameters + ---------- + name : str, optional + Name of the port. The default is ``None``, in which case a name is automatically assigned. + reference : class:`pyaedt.edb_core.edb_data.nets_data.EDBNetsData`, + class:`pyaedt.edb_core.edb_data.padstacks_data.EDBPadstackInstance`, + class:`pyaedt.edb_core.edb_data.sources.PinGroup`, optional + Negative terminal of the port. + is_circuit_port : bool, optional + Whether it is a circuit port. + """ + terminal = self._create_terminal(name) + if reference: + ref_terminal = reference._create_terminal(terminal.name + "_ref") + if reference._edb_object.ToString() == "PinGroup": + is_circuit_port = True + else: + ref_terminal = None + + return self._pedb.create_port(terminal, ref_terminal, is_circuit_port) @property def _em_properties(self): @@ -1163,7 +1203,8 @@ def in_polygon(self, polygon_data, include_partial=True, simple_check=False): @property def pin(self): - """Return Edb padstack object.""" + """EDB padstack object.""" + warnings.warn("`pin` is deprecated.", DeprecationWarning) return self._edb_padstackinstance @property diff --git a/pyaedt/edb_core/edb_data/ports.py b/pyaedt/edb_core/edb_data/ports.py index a26d240be6f..b68539286ba 100644 --- a/pyaedt/edb_core/edb_data/ports.py +++ b/pyaedt/edb_core/edb_data/ports.py @@ -54,6 +54,25 @@ def renormalize_z0(self): ) +class CircuitPort(GapPort): + """Manages gap port properties. + + Parameters + ---------- + pedb : pyaedt.edb.Edb + EDB object from the ``Edblib`` library. + edb_object : Ansys.Ansoft.Edb.Cell.Terminal.EdgeTerminal + Edge terminal instance from EDB. + + Examples + -------- + This example shows how to access the ``GapPort`` class. + """ + + def __init__(self, pedb, edb_object): + super().__init__(pedb, edb_object) + + class WavePort(EdgeTerminal): """Manages wave port properties. diff --git a/pyaedt/edb_core/edb_data/primitives_data.py b/pyaedt/edb_core/edb_data/primitives_data.py index 4b29f1c4dbc..8896d96cb99 100644 --- a/pyaedt/edb_core/edb_data/primitives_data.py +++ b/pyaedt/edb_core/edb_data/primitives_data.py @@ -123,12 +123,12 @@ def layer_name(self): @layer_name.setter def layer_name(self, val): if isinstance(val, str) and val in list(self._core_stackup.layers.keys()): - lay = self._core_stackup.layers["TOP"]._edb_layer + lay = self._core_stackup.layers[val]._edb_layer if lay: self.primitive_object.SetLayer(lay) else: raise AttributeError("Layer {} not found in layer".format(val)) - elif isinstance(val, type(self._core_stackup.layers["TOP"])): + elif isinstance(val, type(self._core_stackup.layers[val])): try: self.primitive_object.SetLayer(val._edb_layer) except: @@ -1053,14 +1053,14 @@ def in_polygon( class EdbText(EDBPrimitivesMain, TextDotNet): def __init__(self, raw_primitive, core_app): - TextDotNet.__init__(self, self._app, raw_primitive) EDBPrimitives.__init__(self, raw_primitive, core_app) + TextDotNet.__init__(self, self._app, raw_primitive) class EdbBondwire(EDBPrimitivesMain, BondwireDotNet): def __init__(self, raw_primitive, core_app): - BondwireDotNet.__init__(self, self._app, raw_primitive) EDBPrimitives.__init__(self, raw_primitive, core_app) + BondwireDotNet.__init__(self, core_app, raw_primitive) class EDBArcs(object): diff --git a/pyaedt/edb_core/edb_data/simulation_setup.py b/pyaedt/edb_core/edb_data/simulation_setup.py new file mode 100644 index 00000000000..adfe33d7562 --- /dev/null +++ b/pyaedt/edb_core/edb_data/simulation_setup.py @@ -0,0 +1,723 @@ +from pyaedt.generic.general_methods import generate_unique_name +from pyaedt.generic.general_methods import pyaedt_function_handler + + +class BaseSimulationSetup(object): + """Provide base simulation setup. + + Parameters + ---------- + pedb : :class:`pyaedt.edb.Edb` + Inherited AEDT object. + edb_object : :class:`Ansys.Ansoft.Edb.Utility.SIWaveSimulationSetup`, + :class:`Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings`, + :class:`Ansys.Ansoft.Edb.Utility.HFSSSimulationSettings` + Edb object. + """ + + def __init__(self, pedb, edb_setup=None): + self._pedb = pedb + self._edb_object = edb_setup + self._setup_type = "" + self._setup_type_mapping = { + "kHFSS": self._pedb.simsetupdata.HFSSSimulationSettings, + "kPEM": None, + "kSIwave": self._pedb.simsetupdata.SIwave.SIWSimulationSettings, + "kLNA": None, + "kTransient": None, + "kQEye": None, + "kVEye": None, + "kAMI": None, + "kAnalysisOption": None, + "kSIwaveDCIR": self._pedb.simsetupdata.SIwave.SIWDCIRSimulationSettings, + "kSIwaveEMI": None, + "kHFSSPI": None, + "kDDRwizard": None, + "kQ3D": None, + "kNumSetupTypes": None, + } + if self._edb_object: + self._name = self._edb_object.GetName() + + self._sweep_list = {} + + @pyaedt_function_handler + def _create(self, name=None): + """Create a setup.""" + if not name: + name = generate_unique_name(self.setup_type) + self._name = name + + setup_type = self._setup_type_mapping[self._setup_type] + edb_setup_info = self._pedb.simsetupdata.SimSetupInfo[setup_type]() + edb_setup_info.Name = name + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @pyaedt_function_handler + def _set_edb_setup_info(self, edb_setup_info): + """Create a setup object from setup information object.""" + utility = self._pedb._edb.Utility + setup_type_mapping = { + "kHFSS": utility.HFSSSimulationSetup, + "kPEM": None, + "kSIwave": utility.SIWaveSimulationSetup, + "kLNA": None, + "kTransient": None, + "kQEye": None, + "kVEye": None, + "kAMI": None, + "kAnalysisOption": None, + "kSIwaveDCIR": utility.SIWaveDCIRSimulationSetup, + "kSIwaveEMI": None, + "kHFSSPI": None, + "kDDRwizard": None, + "kQ3D": None, + "kNumSetupTypes": None, + } + setup_utility = setup_type_mapping[self._setup_type] + return setup_utility(edb_setup_info) + + @pyaedt_function_handler() + def _update_setup(self): + """Update setup in EDB.""" + if self._setup_type == "kHFSS": + mesh_operations = self.get_sim_setup_info.SimulationSettings.MeshOperations + mesh_operations.Clear() + for mop in self.mesh_operations.values(): + mesh_operations.Add(mop.mesh_operation) + + if self._name in self._pedb.setups: + self._pedb.layout.cell.DeleteSimulationSetup(self._name) + if not self._pedb.layout.cell.AddSimulationSetup(self._edb_object): + raise Exception("Updating setup {} failed.".format(self._name)) + else: + return True + + @property + def enabled(self): + """Whether the setup is enabled.""" + return self.get_sim_setup_info.SimulationSettings.Enabled + + @enabled.setter + def enabled(self, value): + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.Enabled = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @property + def name(self): + """Name of the setup.""" + return self._edb_object.GetName() + + @name.setter + def name(self, value): + self._pedb.layout.cell.DeleteSimulationSetup(self.name) + edb_setup_info = self.get_sim_setup_info + edb_setup_info.Name = value + self._name = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @property + def position(self): + """Position in the setup list.""" + return self.get_sim_setup_info.Position + + @position.setter + def position(self, value): + edb_setup_info = self.get_sim_setup_info.SimulationSettings + edb_setup_info.Position = value + self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @property + def setup_type(self): + """Type of the setup.""" + return self.get_sim_setup_info.SimSetupType.ToString() + + @property + def frequency_sweeps(self): + """List of frequency sweeps.""" + temp = {} + for i in list(self.get_sim_setup_info.SweepDataList): + temp[i.Name] = EdbFrequencySweep(self, None, i.Name, i) + return temp + + @pyaedt_function_handler + def _add_frequency_sweep(self, sweep_data): + """Add a frequency sweep. + + Parameters + ---------- + sweep_data: EdbFrequencySweep + """ + self._sweep_list[sweep_data.name] = sweep_data + edb_setup_info = self.get_sim_setup_info + + if self._setup_type in ["kSIwave", "kHFSS"]: + for _, v in self._sweep_list.items(): + edb_setup_info.SweepDataList.Add(v._edb_object) + + self._edb_object = self._set_edb_setup_info(edb_setup_info) + self._update_setup() + + @pyaedt_function_handler + def delete_frequency_sweep(self, sweep_data): + """Delete a frequency sweep. + + Parameters + ---------- + sweep_data : EdbFrequencySweep + """ + name = sweep_data.name + if name in self._sweep_list: + self._sweep_list.pop(name) + + fsweep = [] + for k, val in self.frequency_sweeps.items(): + if not k == name: + fsweep.append(val) + self.get_sim_setup_info.SweepDataList.Clear() + for i in fsweep: + self.get_sim_setup_info.SweepDataList.Add(i._edb_object) + self._update_setup() + return True if name in self.frequency_sweeps else False + + @pyaedt_function_handler() + def add_frequency_sweep(self, name=None, frequency_sweep=None): + """Add frequency sweep. + + Parameters + ---------- + name : str, optional + Name of the frequency sweep. + frequency_sweep : list, optional + List of frequency points. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.simulation_setup_data.EdbFrequencySweep` + + Examples + -------- + >>> setup1 = edbapp.create_siwave_syz_setup("setup1") + >>> setup1.add_frequency_sweep(frequency_sweep=[ + ... ["linear count", "0", "1kHz", 1], + ... ["log scale", "1kHz", "0.1GHz", 10], + ... ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], + ... ]) + """ + if name in self.frequency_sweeps: + return False + + if not frequency_sweep: + frequency_sweep = [["linear scale", "0.1GHz", "10GHz", "0.1GHz"]] + elif not isinstance(frequency_sweep[0], list): + frequency_sweep = [frequency_sweep] + + if not name: + name = generate_unique_name("sweep") + sweep = EdbFrequencySweep(self, frequency_sweep, name) + self._add_frequency_sweep(sweep) + self._update_setup() + return sweep + + +class EdbFrequencySweep(object): + """Manages EDB methods for a frequency sweep. + + Parameters + ---------- + sim_setup : :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveSYZSimulationSetup` + name : str, optional + Name of the frequency sweep. + edb_sweep_data : :class:`Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings`, optional + Edb object. + """ + + def __init__(self, sim_setup, frequency_sweep=None, name=None, edb_sweep_data=None): + self._sim_setup = sim_setup + + if edb_sweep_data: + self._edb_sweep_data = edb_sweep_data + self._name = self._edb_sweep_data.Name + else: + if not name: + self._name = generate_unique_name("sweep") + else: + self._name = name + self._edb_sweep_data = self._pedb.simsetupdata.SweepData(self._name) + self.set_frequencies(frequency_sweep) + + @property + def _edb_object(self): + return self._edb_sweep_data + + @property + def _pedb(self): + """EDB.""" + return self._sim_setup._pedb + + @pyaedt_function_handler() + def _update_sweep(self): + """Update the sweep.""" + self._sim_setup.delete_frequency_sweep(self) + self._sim_setup._add_frequency_sweep(self) + return + + @property + def name(self): + """Name of the sweep.""" + return self._edb_sweep_data.Name + + @name.setter + def name(self, value): + self._edb_sweep_data.Name = value + self._update_sweep() + + @property + def sweep_type(self): + """Sweep type.""" + return + + @property + def frequencies(self): + """List of frequency points.""" + return list(self._edb_sweep_data.Frequencies) + + @property + def adaptive_sampling(self): + """Whether adaptive sampling is used. + + Returns + ------- + bool + ``True`` if adaptive sampling is used, ``False`` otherwise. + """ + return self._edb_sweep_data.AdaptiveSampling + + @property + def adv_dc_extrapolation(self): + """Flag indicating if advanced DC extrapolation is turned on. + + Returns + ------- + bool + ``True`` if advanced DC Extrapolation is used, ``False`` otherwise. + + """ + return self._edb_sweep_data.AdvDCExtrapolation + + @property + def compute_dc_point(self): + """Flag indication if compute exact dc point is turned on.""" + return self._edb_sweep_data.ComputeDCPoint + + @compute_dc_point.setter + def compute_dc_point(self, value): + self._edb_sweep_data.ComputeDCPoint = value + self._update_sweep() + + @property + def auto_s_mat_only_solve(self): + """Flag indication if Auto SMatrix only solve is turned on.""" + return self._edb_sweep_data.AutoSMatOnlySolve + + @property + def enforce_causality(self): + """Whether to enforce causality during interpolating sweep. + + Returns + ------- + bool + ``True`` if enforce causality is used, ``False`` otherwise. + """ + return self._edb_sweep_data.EnforceCausality + + @property + def enforce_dc_and_causality(self): + """Flag indicating if DC point and causality are enforced. + + Returns + ------- + bool + ``True`` if enforce dc point and causality is used, ``False`` otherwise. + + """ + return self._edb_sweep_data.EnforceDCAndCausality + + @property + def enforce_passivity(self): + """Whether to enforce passivity during interpolating sweep. + + Returns + ------- + bool + ``True`` if enforce passivity is used, ``False`` otherwise. + """ + return self._edb_sweep_data.EnforcePassivity + + @property + def freq_sweep_type(self): + """Sweep type. Options are. + + - ``"kInterpolatingSweep"`` + - ``"kDiscreteSweep"`` + - ``"kBroadbandFastSweep"`` + + Returns + ------- + str + Sweep type. + """ + return self._edb_sweep_data.FreqSweepType.ToString() + + @property + def interpolation_use_full_basis(self): + """Whether to use Full basis elements. + + Returns + ------- + bool + ``True`` if full basis interpolation is used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUseFullBasis + + @property + def interpolation_use_port_impedance(self): + """Whether to turn on the port impedance interpolation. + + Returns + ------- + bool + ``True`` if port impedance is used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUsePortImpedance + + @property + def interpolation_use_prop_const(self): + """Flag indicating if propagation constants are used. + + Returns + ------- + bool + ``True`` if propagation constants are used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUsePropConst + + @property + def interpolation_use_s_matrix(self): + """Flag indicating if the S matrix is used. + + Returns + ------- + bool + ``True`` if S matrix are used, ``False`` otherwise. + """ + return self._edb_sweep_data.InterpUseSMatrix + + @property + def max_solutions(self): + """Number of aximum solutions. + + Returns + ------- + int + """ + return self._edb_sweep_data.MaxSolutions + + @property + def min_freq_s_mat_only_solve(self): + """Minimum frequency SMatrix only solve. + + Returns + ------- + str + Frequency with units. + """ + return self._edb_sweep_data.MinFreqSMatOnlySolve + + @property + def min_solved_freq(self): + """Minimum solved frequency. + + Returns + ------- + str + Frequency with units. + """ + return self._edb_sweep_data.MinSolvedFreq + + @property + def passivity_tolerance(self): + """Tolerance for passivity enforcement. + + Returns + ------- + float + """ + return self._edb_sweep_data.PassivityTolerance + + @property + def relative_s_error(self): + """S-parameter error tolerance for the interpolating sweep. + + Returns + ------- + float + """ + return self._edb_sweep_data.RelativeSError + + @property + def save_fields(self): + """Flag indicating if the extraction of surface current data is turned on. + + Returns + ------- + bool + ``True`` if save fields is enabled, ``False`` otherwise. + """ + return self._edb_sweep_data.SaveFields + + @property + def save_rad_fields_only(self): + """Flag indicating if the saving of only radiated fields is turned on. + + Returns + ------- + bool + ``True`` if save radiated field only is used, ``False`` otherwise. + + """ + return self._edb_sweep_data.SaveRadFieldsOnly + + @property + def use_q3d_for_dc(self): + """Flag indicating if The Q3D solver is enabled for DC point extraction. + + Returns + ------- + bool + ``True`` if Q3d for DC point is used, ``False`` otherwise. + """ + return self._edb_sweep_data.UseQ3DForDC + + @adaptive_sampling.setter + def adaptive_sampling(self, value): + self._edb_sweep_data.AdaptiveSampling = value + self._update_sweep() + + @adv_dc_extrapolation.setter + def adv_dc_extrapolation(self, value): + self._edb_sweep_data.AdvDCExtrapolation = value + self._update_sweep() + + @auto_s_mat_only_solve.setter + def auto_s_mat_only_solve(self, value): + self._edb_sweep_data.AutoSMatOnlySolve = value + self._update_sweep() + + @enforce_causality.setter + def enforce_causality(self, value): + self._edb_sweep_data.EnforceCausality = value + self._update_sweep() + + @enforce_dc_and_causality.setter + def enforce_dc_and_causality(self, value): + self._edb_sweep_data.EnforceDCAndCausality = value + self._update_sweep() + + @enforce_passivity.setter + def enforce_passivity(self, value): + self._edb_sweep_data.EnforcePassivity = value + self._update_sweep() + + @freq_sweep_type.setter + def freq_sweep_type(self, value): + edb_freq_sweep_type = self._edb_sweep_data.TFreqSweepType + if value in [0, "kInterpolatingSweep"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kInterpolatingSweep + elif value in [1, "kDiscreteSweep"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kDiscreteSweep + elif value in [2, "kBroadbandFastSweep"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kBroadbandFastSweep + elif value in [3, "kNumSweepTypes"]: + self._edb_sweep_data.FreqSweepType = edb_freq_sweep_type.kNumSweepTypes + self._edb_sweep_data.FreqSweepType.ToString() + + @interpolation_use_full_basis.setter + def interpolation_use_full_basis(self, value): + self._edb_sweep_data.InterpUseFullBasis = value + self._update_sweep() + + @interpolation_use_port_impedance.setter + def interpolation_use_port_impedance(self, value): + self._edb_sweep_data.InterpUsePortImpedance = value + self._update_sweep() + + @interpolation_use_prop_const.setter + def interpolation_use_prop_const(self, value): + self._edb_sweep_data.InterpUsePropConst = value + self._update_sweep() + + @interpolation_use_s_matrix.setter + def interpolation_use_s_matrix(self, value): + self._edb_sweep_data.InterpUseSMatrix = value + self._update_sweep() + + @max_solutions.setter + def max_solutions(self, value): + self._edb_sweep_data.MaxSolutions = value + self._update_sweep() + + @min_freq_s_mat_only_solve.setter + def min_freq_s_mat_only_solve(self, value): + self._edb_sweep_data.MinFreqSMatOnlySolve = value + self._update_sweep() + + @min_solved_freq.setter + def min_solved_freq(self, value): + self._edb_sweep_data.MinSolvedFreq = value + self._update_sweep() + + @passivity_tolerance.setter + def passivity_tolerance(self, value): + self._edb_sweep_data.PassivityTolerance = value + self._update_sweep() + + @relative_s_error.setter + def relative_s_error(self, value): + self._edb_sweep_data.RelativeSError = value + self._update_sweep() + + @save_fields.setter + def save_fields(self, value): + self._edb_sweep_data.SaveFields = value + self._update_sweep() + + @save_rad_fields_only.setter + def save_rad_fields_only(self, value): + self._edb_sweep_data.SaveRadFieldsOnly = value + self._update_sweep() + + @use_q3d_for_dc.setter + def use_q3d_for_dc(self, value): + self._edb_sweep_data.UseQ3DForDC = value + self._update_sweep() + + @pyaedt_function_handler() + def _set_frequencies(self, freq_sweep_string="Linear Step: 0GHz to 20GHz, step=0.05GHz"): + self._edb_sweep_data.SetFrequencies(freq_sweep_string) + self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies_linear_scale(self, start="0.1GHz", stop="20GHz", step="50MHz"): + """Set a linear scale frequency sweep. + + Parameters + ---------- + start : str, float, optional + Start frequency. The default is ``"0.1GHz"``. + stop : str, float, optional + Stop frequency. The default is ``"20GHz"``. + step : str, float, optional + Step frequency. The default is ``"50MHz"``. + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + + """ + self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, step) + return self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies_linear_count(self, start="1kHz", stop="0.1GHz", count=10): + """Set a linear count frequency sweep. + + Parameters + ---------- + start : str, float + Start frequency. + stop : str, float + Stop frequency. + count : int + Step frequency. + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + + """ + start = self._sim_setup._pedb.arg_to_dim(start, "Hz") + stop = self._sim_setup._pedb.arg_to_dim(stop, "Hz") + self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetFrequencies(start, stop, count) + return self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies_log_scale(self, start="1kHz", stop="0.1GHz", samples=10): + """Set a log-count frequency sweep. + + Parameters + ---------- + start : str, float, optional + Start frequency. The default is ``"1kHz"``. + stop : str, float, optional + Stop frequency. The default is ``"0.1GHz"``. + samples : int, optional + Step frequency. The default is ``10``. + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + """ + start = self._sim_setup._pedb.arg_to_dim(start, "Hz") + stop = self._sim_setup._pedb.arg_to_dim(stop, "Hz") + self._edb_sweep_data.Frequencies = self._edb_sweep_data.SetLogFrequencies(start, stop, samples) + return self._update_sweep() + + @pyaedt_function_handler() + def set_frequencies(self, frequency_list=None, update=True): + """Set frequency list to the sweep frequencies. + + Parameters + ---------- + frequency_list : list, optional + List of lists with four elements. The default is ``None``. If provided, each list must contain: + 1 - frequency type (``"linear count"``, ``"log scale"``, or ``"linear scale"``) + 2 - start frequency + 3 - stop frequency + 4 - step frequency or count + + Returns + ------- + bool + ``True`` if correctly executed, ``False`` otherwise. + + """ + if not frequency_list: + frequency_list = [ + ["linear count", "0", "1kHz", 1], + ["log scale", "1kHz", "0.1GHz", 10], + ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], + ] + temp = [] + for i in frequency_list: + if i[0] == "linear count": + temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) + elif i[0] == "linear scale": + temp.extend(list(self._edb_sweep_data.SetFrequencies(i[1], i[2], i[3]))) + elif i[0] == "log scale": + temp.extend(list(self._edb_sweep_data.SetLogFrequencies(i[1], i[2], i[3]))) + else: + return False + self._edb_sweep_data.Frequencies.Clear() + for i in temp: + self._edb_sweep_data.Frequencies.Add(i) + if update: + return self._update_sweep() diff --git a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py index 71e10479425..90abe4e3f2e 100644 --- a/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py +++ b/pyaedt/edb_core/edb_data/siwave_simulation_setup_data.py @@ -1,19 +1,131 @@ -from pyaedt.edb_core.edb_data.hfss_simulation_setup_data import EdbFrequencySweep +from pyaedt.edb_core.edb_data.simulation_setup import BaseSimulationSetup from pyaedt.edb_core.general import convert_netdict_to_pydict from pyaedt.edb_core.general import convert_pydict_to_netdict -from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import is_linux from pyaedt.generic.general_methods import pyaedt_function_handler -class SiwaveAdvancedSettings(object): +def _parse_value(v): + """Parse value in C sharp format.""" + # duck typing parse of the value 'v' + if v is None or v == "": + pv = v + elif v == "true": + pv = True + elif v == "false": + pv = False + else: + try: + pv = int(v) + except ValueError: + try: + pv = float(v) + except ValueError: + if isinstance(v, str) and v[0] == v[-1] == "'": + pv = v[1:-1] + else: + pv = v + return pv + + +class SettingsBase(object): + """Provide base settings.""" + def __init__(self, parent): self._parent = parent @property def sim_setup_info(self): """EDB internal simulation setup object.""" - return self._parent._edb_sim_setup_info + + return self._parent.get_sim_setup_info + + @pyaedt_function_handler + def get_configurations(self): + """Get all attributes. + + Returns + ------- + dict + """ + temp = {} + attrs_list = [i for i in dir(self) if not i.startswith("_")] + attrs_list = [ + i + for i in attrs_list + if i + not in [ + "get_configurations", + "sim_setup_info", + "defaults", + "si_defaults", + "pi_defaults", + "set_dc_slider", + "set_si_slider", + "set_pi_slider", + ] + ] + for i in attrs_list: + temp[i] = self.__getattribute__(i) + return temp + + @pyaedt_function_handler + def restore_default(self): + for k, val in self.defaults.items(): + self.__setattr__(k, val) + + +class AdvancedSettings(SettingsBase): + def __init__(self, parent): + super().__init__(parent) + self.defaults = { + "automatic_mesh": True, + "ignore_non_functional_pads": True, + "include_coplane_coupling": True, + "include_fringe_coupling": True, + "include_infinite_ground": False, + "include_inter_plane_coupling": False, + "include_split_plane_coupling": True, + "include_trace_coupling": True, + "include_vi_sources": False, + "infinite_ground_location": "0", + "max_coupled_lines": 12, + "mesh_frequency": "4GHz", + "min_pad_area_to_mesh": "28mm2", + "min_plane_area_to_mesh": "5e-5mm2", + "min_void_area": "2mm2", + "perform_erc": False, + "return_current_distribution": False, + "snap_length_threshold": "2.5um", + "xtalk_threshold": "-34", + } + + self.si_defaults = { + "include_coplane_coupling": [False, True, True], + "include_fringe_coupling": [False, True, True], + "include_inter_plane_coupling": [False, False, False], + "include_split_plane_coupling": [False, True, True], + "max_coupled_lines": [12, 12, 40], + "return_current_distribution": [False, False, True], + } + + self.pi_defaults = { + "include_coplane_coupling": [False, False, True], + "include_fringe_coupling": [False, True, True], + "include_split_plane_coupling": [False, False, True], + "include_trace_coupling": [False, False, True], + "max_coupled_lines": [12, 12, 40], + } + + @pyaedt_function_handler + def set_si_slider(self, value): + for k, val in self.si_defaults.items(): + self.__setattr__(k, val[value]) + + @pyaedt_function_handler + def set_pi_slider(self, value): + for k, val in self.pi_defaults.items(): + self.__setattr__(k, val[value]) @property def include_inter_plane_coupling(self): @@ -246,130 +358,286 @@ def mesh_frequency(self): ------- str """ - self.sim_setup_info.SimulationSettings.UseCustomSettings = True return self.sim_setup_info.SimulationSettings.AdvancedSettings.MeshFrequency @include_inter_plane_coupling.setter def include_inter_plane_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeInterPlaneCoupling = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeInterPlaneCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @xtalk_threshold.setter def xtalk_threshold(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.XtalkThreshold = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.XtalkThreshold = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_void_area.setter def min_void_area(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.MinVoidArea = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.MinVoidArea = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_pad_area_to_mesh.setter def min_pad_area_to_mesh(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.MinPadAreaToMesh = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.MinPadAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_plane_area_to_mesh.setter def min_plane_area_to_mesh(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.MinPlaneAreaToMesh = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.MinPlaneAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @snap_length_threshold.setter def snap_length_threshold(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.SnapLengthThreshold = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.SnapLengthThreshold = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @return_current_distribution.setter def return_current_distribution(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.ReturnCurrentDistribution = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.ReturnCurrentDistribution = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @ignore_non_functional_pads.setter def ignore_non_functional_pads(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.IgnoreNonFunctionalPads = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.IgnoreNonFunctionalPads = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_coplane_coupling.setter def include_coplane_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeCoPlaneCoupling = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeCoPlaneCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_fringe_coupling.setter def include_fringe_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeFringeCoupling = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeFringeCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_split_plane_coupling.setter def include_split_plane_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeSplitPlaneCoupling = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeSplitPlaneCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_infinite_ground.setter def include_infinite_ground(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeInfGnd = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeInfGnd = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_trace_coupling.setter def include_trace_coupling(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeTraceCoupling = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeTraceCoupling = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @include_vi_sources.setter def include_vi_sources(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.IncludeVISources = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.IncludeVISources = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @infinite_ground_location.setter def infinite_ground_location(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.InfGndLocation = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.InfGndLocation = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @max_coupled_lines.setter def max_coupled_lines(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.MaxCoupledLines = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.MaxCoupledLines = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @automatic_mesh.setter def automatic_mesh(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.MeshAutoMatic = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.MeshAutoMatic = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @perform_erc.setter def perform_erc(self, value): - self.sim_setup_info.SimulationSettings.AdvancedSettings.PerformERC = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.AdvancedSettings.PerformERC = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @mesh_frequency.setter def mesh_frequency(self, value): - self.sim_setup_info.SimulationSettings.UseCustomSettings = True - self.sim_setup_info.SimulationSettings.AdvancedSettings.MeshFrequency = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.AdvancedSettings.MeshFrequency = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() -class SiwaveDCAdvancedSettings(object): +class DCSettings(SettingsBase): def __init__(self, parent): - self._parent = parent + super().__init__(parent) + self.defaults = { + "compute_inductance": False, + "contact_radius": "0.1mm", + "use_dc_custom_settings": False, + "plot_jv": True, + } + self.dc_defaults = { + "dc_slider_position": [0, 1, 2], + } @property - def sim_setup_info(self): - """EDB internal simulation setup object.""" + def compute_inductance(self): + """Whether to compute Inductance. + + Returns + ------- + bool + ``True`` if inductances will be computed, ``False`` otherwise. + """ - return self._parent._edb_sim_setup_info + return self.sim_setup_info.SimulationSettings.DCSettings.ComputeInductance + + @compute_inductance.setter + def compute_inductance(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.ComputeInductance = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() @property - def min_void_area(self): - """Minimum area below which voids are ignored. + def contact_radius(self): + """Circuit element contact radius. + + Returns + ------- + str + """ + return self.sim_setup_info.SimulationSettings.DCSettings.ContactRadius + + @contact_radius.setter + def contact_radius(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.ContactRadius = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + @property + def dc_slider_position(self): + """DC simulation accuracy level slider position. This property only change slider position. + + Options: + 0- ``optimal speed`` + 1- ``balanced`` + 2- ``optimal accuracy``. + """ + return self.sim_setup_info.SimulationSettings.DCSettings.DCSliderPos + + @dc_slider_position.setter + def dc_slider_position(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.DCSliderPos = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + @property + def use_dc_custom_settings(self): + """Whether to use DC custom settings. + This setting is automatically enabled by other properties when needed. + + Returns + ------- + bool + ``True`` if custom dc settings are used, ``False`` otherwise. + """ + return self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings + + @use_dc_custom_settings.setter + def use_dc_custom_settings(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + @property + def plot_jv(self): + """Plot current and voltage distributions. + + Returns + ------- + bool + ``True`` if plot JV is used, ``False`` otherwise. + """ + return self.sim_setup_info.SimulationSettings.DCSettings.PlotJV + + @plot_jv.setter + def plot_jv(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCSettings.PlotJV = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) + self._parent._update_setup() + + +class DCAdvancedSettings(SettingsBase): + def __init__(self, parent): + super().__init__(parent) + self.defaults = { + "dc_min_void_area_to_mesh": "0.001mm2", + "max_init_mesh_edge_length": "5mm", + "dc_min_plane_area_to_mesh": "1.5mm2", + "num_bondwire_sides": 8, + "num_via_sides": 8, + "percent_local_refinement": 20.0, + } + self.dc_defaults = { + "energy_error": [2, 2, 1], + "max_num_pass": [5, 5, 10], + "mesh_bondwires": [False, True, True], + "mesh_vias": [False, True, True], + "min_num_pass": [1, 1, 3], + "perform_adaptive_refinement": [False, True, True], + "refine_bondwires": [False, False, True], + "refine_vias": [False, False, True], + } + + @pyaedt_function_handler + def set_dc_slider(self, value): + for k, val in self.dc_defaults.items(): + self.__setattr__(k, val[value]) + + @property + def dc_min_void_area_to_mesh(self): + """DC minimum area below which voids are ignored. Returns ------- @@ -378,7 +646,7 @@ def min_void_area(self): return self.sim_setup_info.SimulationSettings.DCAdvancedSettings.DcMinVoidAreaToMesh @property - def min_plane_area(self): + def dc_min_plane_area_to_mesh(self): """Minimum area below which geometry is ignored. Returns @@ -511,336 +779,292 @@ def refine_vias(self): """ return self.sim_setup_info.SimulationSettings.DCAdvancedSettings.RefineVias - @property - def compute_inductance(self): - """Whether to compute Inductance. - - Returns - ------- - bool - ``True`` if inductances will be computed, ``False`` otherwise. - """ - return self.sim_setup_info.SimulationSettings.DCSettings.ComputeInductance - - @property - def contact_radius(self): - """Circuit element contact radius. - - Returns - ------- - str - """ - return self.sim_setup_info.SimulationSettings.DCSettings.ContactRadius - - @property - def dc_slider_position(self): - """Slider position for DC. - - Returns - ------- - int - """ - return self.sim_setup_info.SimulationSettings.DCSettings.DCSliderPos - - @property - def use_dc_custom_settings(self): - """Whether to use DC custom settings. - This setting is automatically enabled by other properties when needed. - - Returns - ------- - bool - ``True`` if custom dc settings are used, ``False`` otherwise. - """ - return self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings - - @property - def plot_jv(self): - """Plot JV. - - Returns - ------- - bool - ``True`` if plot JV is used, ``False`` otherwise. - """ - return self.sim_setup_info.SimulationSettings.DCSettings.PlotJV - - @plot_jv.setter - def plot_jv(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.PlotJV = value + @dc_min_void_area_to_mesh.setter + def dc_min_void_area_to_mesh(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.DcMinVoidAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() - @compute_inductance.setter - def compute_inductance(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.ComputeInductance = value - self._parent._update_setup() - - @contact_radius.setter - def contact_radius(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.ContactRadius = value - self._parent._update_setup() - - @dc_slider_position.setter - def dc_slider_position(self, value): - """DC simulation accuracy level slider position. - Options: - 0- ``optimal speed`` - 1- ``balanced`` - 2- ``optimal accuracy``. - """ - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = False - self.sim_setup_info.SimulationSettings.DCSettings.DCSliderPos = value - self._parent._update_setup() - - @use_dc_custom_settings.setter - def use_dc_custom_settings(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = value - self._parent._update_setup() - - @min_void_area.setter - def min_void_area(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.DcMinVoidAreaToMesh = value - self._parent._update_setup() - - @min_plane_area.setter - def min_plane_area(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.DcMinPlaneAreaToMesh = value + @dc_min_plane_area_to_mesh.setter + def dc_min_plane_area_to_mesh(self, value): + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.DcMinPlaneAreaToMesh = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @energy_error.setter def energy_error(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.EnergyError = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.EnergyError = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @max_init_mesh_edge_length.setter def max_init_mesh_edge_length(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MaxInitMeshEdgeLength = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MaxInitMeshEdgeLength = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @max_num_pass.setter def max_num_pass(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MaxNumPasses = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MaxNumPasses = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @min_num_pass.setter def min_num_pass(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MinNumPasses = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MinNumPasses = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @mesh_bondwires.setter def mesh_bondwires(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @mesh_vias.setter def mesh_vias(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @num_bondwire_sides.setter def num_bondwire_sides(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.NumBwSides = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.NumBwSides = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @num_via_sides.setter def num_via_sides(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.NumViaSides = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.NumViaSides = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @percent_local_refinement.setter def percent_local_refinement(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.PercentLocalRefinement = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.PercentLocalRefinement = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @perform_adaptive_refinement.setter def perform_adaptive_refinement(self, value): - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.PerformAdaptiveRefinement = value + edb_setup_info = self.sim_setup_info + + edb_setup_info.SimulationSettings.DCAdvancedSettings.PerformAdaptiveRefinement = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @refine_bondwires.setter def refine_bondwires(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshBws = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.RefineBws = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.RefineBws = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() @refine_vias.setter def refine_vias(self, value): - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.MeshVias = True - self.sim_setup_info.SimulationSettings.DCSettings.UseDCCustomSettings = True - self.sim_setup_info.SimulationSettings.DCAdvancedSettings.RefineVias = value + edb_setup_info = self.sim_setup_info + edb_setup_info.SimulationSettings.DCAdvancedSettings.RefineVias = value + self._parent._edb_object = self._parent._set_edb_setup_info(edb_setup_info) self._parent._update_setup() -class SiwaveSYZSimulationSetup(SiwaveAdvancedSettings, object): - """Manages EDB methods for HFSS simulation setup.""" - - def __init__(self, edb, name=None, edb_siwave_sim_setup=None): - self._edb = edb - self._sweep_data_list = {} - self._edb_sim_setup_info = self._edb.simsetupdata.SimSetupInfo[ - self._edb.simsetupdata.SIwave.SIWSimulationSettings - ]() - if edb_siwave_sim_setup: - _get_edb_setup_info(edb_siwave_sim_setup, self._edb_sim_setup_info) - else: - if not name: - self._edb_sim_setup_info.Name = generate_unique_name("siwave") - else: - self._edb_sim_setup_info.Name = name - self._update_setup() - self.setup_type = "kSIWave" - SiwaveAdvancedSettings.__init__(self, self) +class SiwaveSYZSimulationSetup(BaseSimulationSetup): + """Manages EDB methods for SIwave simulation setup. - @property - def edb_sim_setup_info(self): - """EDB internal simulation setup object.""" - return self._edb_sim_setup_info + Parameters + ---------- + pedb : :class:`pyaedt.edb.Edb` + Inherited AEDT object. + edb_setup : :class:`Ansys.Ansoft.Edb.Utility.SIWaveSimulationSetup` + Edb object. + """ + + def __init__(self, pedb, edb_setup=None): + super().__init__(pedb, edb_setup) + self._edb = self._pedb + self._setup_type = "kSIwave" + self._sim_setup_info = None @pyaedt_function_handler() - def _update_setup(self): - self._edb_sim_setup = self._edb.edb_api.utility.utility.SIWaveSimulationSetup(self._edb_sim_setup_info) - if self.name in self._edb.setups: - self._edb.layout.cell.DeleteSimulationSetup(self.name) - self._edb.layout.cell.AddSimulationSetup(self._edb_sim_setup) - return True + def create(self, name=None): + """Create a SIwave SYZ setup. - @property - def dc_settings(self): - """Siwave DC settings. + Returns + ------- + :class:`SiwaveDCSimulationSetup` + """ + self._name = name + self._create(name) + self.set_si_slider(1) + + return self + + @pyaedt_function_handler + def get_configurations(self): + """Get SIwave SYZ simulation settings. Returns ------- - :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveDCAdvancedSettings` + dict + Dictionary of SIwave SYZ simulation settings. """ - return SiwaveDCAdvancedSettings(self) + return { + "pi_slider_postion": self.pi_slider_position, + "si_slider_postion": self.si_slider_position, + "use_custom_settings": self.use_si_settings, + "use_si_settings": self.use_si_settings, + "advanced_settings": self.advanced_settings.get_configurations(), + } @property - def frequency_sweeps(self): - """Get frequency sweep list.""" - if self._sweep_data_list: - return self._sweep_data_list - self._sweep_data_list = {} - for i in list(self._edb_sim_setup_info.SweepDataList): - self._sweep_data_list[i.Name] = EdbFrequencySweep(self, None, i.Name, i) - return self._sweep_data_list + def advanced_settings(self): + """SIwave advanced settings.""" + return AdvancedSettings(self) @property - def name(self): - """Setup name.""" - return self._edb_sim_setup_info.Name - - @name.setter - def name(self, value): - """Set name of the setup.""" - legacy_name = self._edb_sim_setup_info.Name - self._edb_sim_setup_info.Name = value - self._update_setup() - if legacy_name in self._edb.setups: - del self._edb._setups[legacy_name] + def get_sim_setup_info(self): + """Get simulation information from the setup.""" + if self._sim_setup_info: + return self._sim_setup_info + + edb_setup = self._edb_object + edb_sim_setup_info = self._pedb.simsetupdata.SimSetupInfo[self._setup_type_mapping[self._setup_type]]() + edb_sim_setup_info.Name = edb_setup.GetName() + + string = edb_setup.ToString().replace("\t", "").split("\r\n") + + if is_linux: + string = string[0].split("\n") + keys = [i.split("=")[0] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] + values = [i.split("=")[1] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] + for val in string: + if "SourceTermsToGround()" in val: + break + elif "SourceTermsToGround" in val: + sources = {} + val = val.replace("SourceTermsToGround(", "").replace(")", "").split(",") + for v in val: + source = v.split("=") + sources[source[0]] = source[1] + edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict( + sources + ) + break + for k in keys: + value = _parse_value(values[keys.index(k)]) + setter = None + if k in dir(edb_sim_setup_info.SimulationSettings): + setter = edb_sim_setup_info.SimulationSettings + elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): + setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings + + elif k in dir(edb_sim_setup_info.SimulationSettings.DCAdvancedSettings): + setter = edb_sim_setup_info.SimulationSettings.DCAdvancedSettings + elif "DCIRSettings" in dir(edb_sim_setup_info.SimulationSettings) and k in dir( + edb_sim_setup_info.SimulationSettings.DCIRSettings + ): + setter = edb_sim_setup_info.SimulationSettings.DCIRSettings + elif k in dir(edb_sim_setup_info.SimulationSettings.DCSettings): + setter = edb_sim_setup_info.SimulationSettings.DCSettings + elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): + setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings + if setter: + try: + setter.__setattr__(k, value) + except TypeError: + try: + setter.__setattr__(k, str(value)) + except: + pass - @property - def enabled(self): - """Whether the setup is enabled.""" - return self._edb_sim_setup_info.SimulationSettings.Enabled + return edb_sim_setup_info - @enabled.setter - def enabled(self, value): - self._edb_sim_setup_info.SimulationSettings.Enabled = value - self._update_setup() + @pyaedt_function_handler + def set_pi_slider(self, value): + """Set SIwave PI simulation accuracy level. + + Options are: + + - ``0``: Optimal speed + - ``1``: Balanced + - ``2``: Optimal accuracy + """ + self.use_si_settings = False + self.use_custom_settings = False + self.pi_slider_position = value + self.advanced_settings.set_pi_slider(value) + + @pyaedt_function_handler + def set_si_slider(self, value): + """Set SIwave SI simulation accuracy level. + + Options are: + + - ``0``: Optimal speed + - ``1``: Balanced + - ``2``: Optimal accuracy``` + """ + self.use_si_settings = True + self.use_custom_settings = False + self.si_slider_position = value + self.advanced_settings.set_si_slider(value) @property - def pi_slider_postion(self): + def pi_slider_position(self): """PI solider position. Values are from ``1`` to ``3``.""" - return self._edb_sim_setup_info.SimulationSettings.PISliderPos - - @pi_slider_postion.setter - def pi_slider_postion(self, value): - if value == 0: - self.include_coplane_coupling = False - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = False - self.include_fringe_coupling = False - self.include_trace_coupling = False - self.max_coupled_lines = 12 - elif value == 1: - self.include_coplane_coupling = False - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = False - self.include_fringe_coupling = True - self.include_trace_coupling = False - self.max_coupled_lines = 12 - else: - self.include_coplane_coupling = True - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = True - self.include_fringe_coupling = True - self.include_trace_coupling = True - self.max_coupled_lines = 40 - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False - self._edb_sim_setup_info.SimulationSettings.PISliderPos = value + return self.get_sim_setup_info.SimulationSettings.PISliderPos + + @pi_slider_position.setter + def pi_slider_position(self, value): + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.PISliderPos = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() @property - def si_slider_postion(self): + def si_slider_position(self): """SI solider position. Values are from ``1`` to ``3``.""" - return self._edb_sim_setup_info.SimulationSettings.SISliderPos - - @si_slider_postion.setter - def si_slider_postion(self, value): - if value == 0: - self.include_coplane_coupling = False - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = False - self.include_fringe_coupling = False - self.include_trace_coupling = True - self.max_coupled_lines = 12 - self.return_current_distribution = False - elif value == 1: - self.include_coplane_coupling = True - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = True - self.include_fringe_coupling = True - self.include_trace_coupling = True - self.max_coupled_lines = 12 - self.return_current_distribution = False - else: - self.include_coplane_coupling = True - self.include_inter_plane_coupling = False - self.include_split_plane_coupling = True - self.include_fringe_coupling = True - self.include_trace_coupling = True - self.max_coupled_lines = 40 - self.return_current_distribution = True - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False - self._edb_sim_setup_info.SimulationSettings.SISliderPos = value + return self.get_sim_setup_info.SimulationSettings.SISliderPos + + @si_slider_position.setter + def si_slider_position(self, value): + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.SISliderPos = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() @property def use_custom_settings(self): - """Whether to use custom settings. + """Custom settings to use. Returns ------- bool """ - return self._edb_sim_setup_info.SimulationSettings.UseCustomSettings + return self.get_sim_setup_info.SimulationSettings.UseCustomSettings @use_custom_settings.setter def use_custom_settings(self, value): - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = value + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.UseCustomSettings = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() @property @@ -851,184 +1075,88 @@ def use_si_settings(self): ------- bool """ - return self._edb_sim_setup_info.SimulationSettings.UseSISettings + return self.get_sim_setup_info.SimulationSettings.UseSISettings @use_si_settings.setter def use_si_settings(self, value): - self._edb_sim_setup_info.SimulationSettings.UseCustomSettings = False - self._edb_sim_setup_info.SimulationSettings.UseSISettings = value + edb_setup_info = self.get_sim_setup_info + edb_setup_info.SimulationSettings.UseSISettings = value + self._edb_object = self._set_edb_setup_info(edb_setup_info) self._update_setup() - @pyaedt_function_handler() - def add_frequency_sweep(self, name=None, frequency_sweep=None): - """Add frequency sweep. - - Parameters - ---------- - name : str, optional - Name of the frequency sweep. - frequency_sweep : list, optional - List of frequency points. - Returns - ------- - :class:`pyaedt.edb_core.edb_data.simulation_setup_data.EdbFrequencySweep` - - Examples - -------- - >>> setup1 = edbapp.create_siwave_syz_setup("setup1") - >>> setup1.add_frequency_sweep(frequency_sweep=[ - ... ["linear count", "0", "1kHz", 1], - ... ["log scale", "1kHz", "0.1GHz", 10], - ... ["linear scale", "0.1GHz", "10GHz", "0.1GHz"], - ... ]) - """ - if name in self.frequency_sweeps: - return False - if not name: - name = generate_unique_name("sweep") - sweep = EdbFrequencySweep(self, frequency_sweep, name) - self._sweep_data_list[name] = sweep - return sweep - - -def _parse_value(v): - """ +class SiwaveDCSimulationSetup(SiwaveSYZSimulationSetup): + """Manages EDB methods for SIwave DC simulation setup. Parameters ---------- - v : + pedb : :class:`pyaedt.edb.Edb` + Inherited AEDT object. + edb_setup : Ansys.Ansoft.Edb.Utility.SIWDCIRSimulationSettings + EDB object. The default is ``None``. + """ + def __init__(self, pedb, edb_object=None): + super().__init__(pedb, edb_object) + self._setup_type = "kSIwaveDCIR" + self._edb = pedb + self._mesh_operations = {} - Returns - ------- + def create(self, name=None): + """Create a SIwave DCIR setup. - """ - # duck typing parse of the value 'v' - if v is None or v == "": - pv = v - elif v == "true": - pv = True - elif v == "false": - pv = False - else: - try: - pv = int(v) - except ValueError: - try: - pv = float(v) - except ValueError: - if isinstance(v, str) and v[0] == v[-1] == "'": - pv = v[1:-1] - else: - pv = v - return pv + Returns + ------- + :class:`SiwaveDCSimulationSetup` + """ + self._name = name + self._create(name) + self.set_dc_slider(1) + return self -@pyaedt_function_handler() -def _get_edb_setup_info(edb_siwave_sim_setup, edb_sim_setup_info): - string = edb_siwave_sim_setup.ToString().replace("\t", "").split("\r\n") - if is_linux: - string = string[0].split("\n") - keys = [i.split("=")[0] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] - values = [i.split("=")[1] for i in string if len(i.split("=")) == 2 and "SourceTermsToGround" not in i] - for val in string: - if "SourceTermsToGround()" in val: - break - elif "SourceTermsToGround" in val: - sources = {} - val = val.replace("SourceTermsToGround(", "").replace(")", "").split(",") - for v in val: - source = v.split("=") - sources[source[0]] = source[1] - edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict(sources) - break - for k in keys: - value = _parse_value(values[keys.index(k)]) - setter = None - if k in dir(edb_sim_setup_info.SimulationSettings): - setter = edb_sim_setup_info.SimulationSettings - elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): - setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings - - elif k in dir(edb_sim_setup_info.SimulationSettings.DCAdvancedSettings): - setter = edb_sim_setup_info.SimulationSettings.DCAdvancedSettings - elif "DCIRSettings" in dir(edb_sim_setup_info.SimulationSettings) and k in dir( - edb_sim_setup_info.SimulationSettings.DCIRSettings - ): - setter = edb_sim_setup_info.SimulationSettings.DCIRSettings - elif k in dir(edb_sim_setup_info.SimulationSettings.DCSettings): - setter = edb_sim_setup_info.SimulationSettings.DCSettings - elif k in dir(edb_sim_setup_info.SimulationSettings.AdvancedSettings): - setter = edb_sim_setup_info.SimulationSettings.AdvancedSettings - if setter: - try: - setter.__setattr__(k, value) - except TypeError: - try: - setter.__setattr__(k, str(value)) - except: - pass - + @pyaedt_function_handler + def get_configurations(self): + """Get SIwave DC simulation settings. -class SiwaveDCSimulationSetup(SiwaveDCAdvancedSettings, object): - """Manages EDB methods for HFSS simulation setup.""" + Returns + ------- + dict + Dictionary of SIwave DC simulation settings. + """ + return { + "dc_settings": self.dc_settings.get_configurations(), + "dc_advanced_settings": self.dc_advanced_settings.get_configurations(), + } - def __init__(self, edb, name=None, edb_siwave_sim_setup=None): - self._edb = edb - self._mesh_operations = {} - self._edb_sim_setup_info = self._edb.simsetupdata.SimSetupInfo[ - self._edb.simsetupdata.SIwave.SIWDCIRSimulationSettings - ]() - if edb_siwave_sim_setup: - _get_edb_setup_info(edb_siwave_sim_setup, self._edb_sim_setup_info) - - else: - if not name: - self._edb_sim_setup_info.Name = generate_unique_name("siwave") - else: - self._edb_sim_setup_info.Name = name - self._update_setup() - self.setup_type = "kSIWaveDCIR" - - SiwaveDCAdvancedSettings.__init__(self, self) + @pyaedt_function_handler + def set_dc_slider(self, value): + """Set DC simulation accuracy level. - @property - def edb_sim_setup_info(self): - """EDB internal simulation setup object.""" - return self._edb_sim_setup_info + Options are: - @pyaedt_function_handler() - def _update_setup(self): - edb_sim_setup = self._edb.edb_api.utility.utility.SIWaveDCIRSimulationSetup(self._edb_sim_setup_info) - if self.name in self._edb.setups: - self._edb.layout.cell.DeleteSimulationSetup(self.name) - self._edb.active_cell.AddSimulationSetup(edb_sim_setup) - return True + - ``0``: Optimal speed + - ``1``: Balanced + - ``2``: Optimal accuracy + """ + self.use_custom_settings = False + self.dc_settings.dc_slider_position = value + self.dc_advanced_settings.set_dc_slider(value) @property - def name(self): - """Setup name.""" - return self._edb_sim_setup_info.Name - - @name.setter - def name(self, value): - """Set name of the setup.""" - legacy_name = self._edb_sim_setup_info.Name - self._edb_sim_setup_info.Name = value - self._update_setup() - if legacy_name in self._edb.setups: - del self._edb._setups[legacy_name] + def dc_settings(self): + """SIwave DC setting.""" + return DCSettings(self) @property - def enabled(self): - """Whether setup is enabled.""" - return self._edb_sim_setup_info.SimulationSettings.Enabled + def dc_advanced_settings(self): + """Siwave DC advanced settings. - @enabled.setter - def enabled(self, value): - self._edb_sim_setup_info.SimulationSettings.Enabled = value - self._update_setup() + Returns + ------- + :class:`pyaedt.edb_core.edb_data.siwave_simulation_setup_data.SiwaveDCAdvancedSettings` + """ + return DCAdvancedSettings(self) @property def source_terms_to_ground(self): @@ -1040,7 +1168,7 @@ def source_terms_to_ground(self): {str, int}, keys is source name, value int 0 unspecified, 1 negative node, 2 positive one. """ - return convert_netdict_to_pydict(self._edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround) + return convert_netdict_to_pydict(self.get_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround) @pyaedt_function_handler() def add_source_terminal_to_ground(self, source_name, terminal=0): @@ -1064,7 +1192,7 @@ def add_source_terminal_to_ground(self, source_name, terminal=0): """ terminals = self.source_terms_to_ground terminals[source_name] = terminal - self._edb_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict( + self.get_sim_setup_info.SimulationSettings.DCIRSettings.SourceTermsToGround = convert_pydict_to_netdict( terminals ) return self._update_setup() diff --git a/pyaedt/edb_core/edb_data/sources.py b/pyaedt/edb_core/edb_data/sources.py index f7a3bc6c0a0..ad17de61947 100644 --- a/pyaedt/edb_core/edb_data/sources.py +++ b/pyaedt/edb_core/edb_data/sources.py @@ -1,3 +1,4 @@ +import pyaedt from pyaedt import pyaedt_function_handler from pyaedt.generic.constants import NodeType from pyaedt.generic.constants import SourceType @@ -229,6 +230,7 @@ def __init__(self, name="", edb_pin_group=None, pedb=None): self._component = "" self._node_pins = [] self._net = "" + self._edb_object = self._edb_pin_group @property def _active_layout(self): @@ -274,26 +276,49 @@ def net(self, value): def net_name(self): return self._edb_pin_group.GetNet().GetName() - @pyaedt_function_handler() - def _create_pin_group_terminal(self, is_reference=False): - pg_term = self._edb_pin_group.GetPinGroupTerminal() - pin_group_net = self._edb_pin_group.GetNet() - if pin_group_net.IsNull(): # pragma: no cover - pin_group_net = list(self._edb_pin_group.GetPins())[0].GetNet() - if pg_term.IsNull(): - return self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create( - self._active_layout, - pin_group_net, - self.name, - self._edb_pin_group, - is_reference, - ) + @pyaedt_function_handler + def get_terminal(self, name=None, create_new_terminal=False): + """Terminal.""" + + if create_new_terminal: + term = self._create_terminal(name) else: - return pg_term + from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal + + term = PinGroupTerminal(self._pedb, self._edb_pin_group.GetPinGroupTerminal()) + return term if not term.is_null else None + + @pyaedt_function_handler() + def _create_terminal(self, name=None): + """Create a terminal on the pin group. + + Parameters + ---------- + name : str, optional + Name of the terminal. The default is ``None``, in which case a name is + automatically assigned. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal` + """ + terminal = self.get_terminal() + if terminal: + return terminal + + if not name: + name = pyaedt.generate_unique_name(self.name) + + from pyaedt.edb_core.edb_data.terminals import PinGroupTerminal + + term = PinGroupTerminal(self._pedb) + + term = term.create(name, self.net_name, self.name) + return term @pyaedt_function_handler() def create_current_source_terminal(self, magnitude=1, phase=0): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kCurrentSource) terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude)) terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase)) @@ -301,7 +326,7 @@ def create_current_source_terminal(self, magnitude=1, phase=0): @pyaedt_function_handler() def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageSource) terminal.SetSourceAmplitude(self._pedb.edb_value(magnitude)) terminal.SetSourcePhase(self._pedb.edb_api.utility.value(phase)) @@ -310,14 +335,14 @@ def create_voltage_source_terminal(self, magnitude=1, phase=0, impedance=0.001): @pyaedt_function_handler() def create_voltage_probe_terminal(self, impedance=1000000): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe) terminal.SetImpedance(self._pedb.edb_value(impedance)) return terminal @pyaedt_function_handler() def create_port_terminal(self, impedance=50): - terminal = self._create_pin_group_terminal() + terminal = self._create_terminal()._edb_object terminal.SetBoundaryType(self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary) terminal.SetImpedance(self._pedb.edb_value(impedance)) terminal.SetIsCircuitPort(True) diff --git a/pyaedt/edb_core/edb_data/terminals.py b/pyaedt/edb_core/edb_data/terminals.py index 39245883611..c178821eb70 100644 --- a/pyaedt/edb_core/edb_data/terminals.py +++ b/pyaedt/edb_core/edb_data/terminals.py @@ -4,19 +4,49 @@ from pyaedt.edb_core.edb_data.connectable import Connectable from pyaedt.edb_core.edb_data.padstacks_data import EDBPadstackInstance from pyaedt.edb_core.edb_data.primitives_data import cast -from pyaedt.edb_core.general import BoundaryType -from pyaedt.edb_core.general import TerminalType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.general_methods import generate_unique_name class Terminal(Connectable): - def __init__(self, pedb, edb_object): + def __init__(self, pedb, edb_object=None): super().__init__(pedb, edb_object) self._reference_object = None + self._boundary_type_mapping = { + "InvalidBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.InvalidBoundary, + "PortBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.PortBoundary, + "PecBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.PecBoundary, + "RlcBoundary": self._pedb.edb_api.cell.terminal.BoundaryType.RlcBoundary, + "kCurrentSource": self._pedb.edb_api.cell.terminal.BoundaryType.kCurrentSource, + "kVoltageSource": self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageSource, + "kNexximGround": self._pedb.edb_api.cell.terminal.BoundaryType.kNexximGround, + "kNexximPort": self._pedb.edb_api.cell.terminal.BoundaryType.kNexximPort, + "kDcTerminal": self._pedb.edb_api.cell.terminal.BoundaryType.kDcTerminal, + "kVoltageProbe": self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe, + } + + self._terminal_type_mapping = { + "InvalidTerminal": self._pedb.edb_api.cell.terminal.TerminalType.InvalidTerminal, + "EdgeTerminal": self._pedb.edb_api.cell.terminal.TerminalType.EdgeTerminal, + "PointTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PointTerminal, + "TerminalInstanceTerminal": self._pedb.edb_api.cell.terminal.TerminalType.TerminalInstanceTerminal, + "PadstackInstanceTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PadstackInstanceTerminal, + "BundleTerminal": self._pedb.edb_api.cell.terminal.TerminalType.BundleTerminal, + "PinGroupTerminal": self._pedb.edb_api.cell.terminal.TerminalType.PinGroupTerminal, + } + + self._terminal_mapping = { + "EdgeTerminal": EdgeTerminal, + "PointTerminal": PointTerminal, + "PadstackInstanceTerminal": PadstackInstanceTerminal, + "BundleTerminal": BundleTerminal, + "PinGroupTerminal": PinGroupTerminal, + } + @property def _hfss_port_property(self): + """HFSS port property.""" hfss_prop = re.search(r"HFSS\(.*?\)", self._edb_properties) p = {} if hfss_prop: @@ -128,25 +158,26 @@ def terminal_type(self): """ return self._edb_object.GetTerminalType().ToString() + @terminal_type.setter + def terminal_type(self, value): + self._edb_object.GetTerminalType(self._terminal_type_mapping[value]) + @property def boundary_type(self): - """Boundary Type. + """Boundary type. + Returns ------- - int + str + InvalidBoundary, PortBoundary, PecBoundary, RlcBoundary, kCurrentSource, kVoltageSource, kNexximGround, + kNexximPort, kDcTerminal, kVoltageProbe """ return self._edb_object.GetBoundaryType().ToString() @boundary_type.setter def boundary_type(self, value): - if not value in [i.name for i in BoundaryType]: # pragma : no cover - self._pedb.logger.warning("Invalid Boundary Type={}".format(value)) - if value == self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe.ToString(): - temp = self._pedb.edb_api.cell.terminal.BoundaryType.kVoltageProbe - else: # pragma : no cover - temp = self._pedb.edb_api.cell.terminal.BoundaryType.InvalidBoundary - self._edb_object.SetBoundaryType(temp) + self._edb_object.SetBoundaryType(self._boundary_type_mapping[value]) @property def impedance(self): @@ -168,12 +199,7 @@ def ref_terminal(self): terminal = Terminal(self._pedb, self._edb_object.GetReferenceTerminal()) if not terminal.is_null: - if terminal.terminal_type == TerminalType.PointTerminal.name: - return PointTerminal(self._pedb, terminal._edb_object) - elif terminal.terminal_type == TerminalType.EdgeTerminal.name: - return EdgeTerminal(self._pedb, terminal._edb_object) - elif terminal.terminal_type == TerminalType.InvalidTerminal.name: # pragma : no cover - return None + return self._terminal_mapping[terminal.terminal_type](self._pedb, terminal._edb_object) @ref_terminal.setter def ref_terminal(self, value): @@ -199,11 +225,11 @@ def reference_object(self): # pragma : no cover self._reference_object = self.get_pad_edge_terminal_reference_pin() else: self._reference_object = self.get_edge_terminal_reference_primitive() - elif self.terminal_type == TerminalType.PinGroupTerminal.name: + elif self.terminal_type == "PinGroupTerminal": self._reference_object = self.get_pin_group_terminal_reference_pin() - elif self.terminal_type == TerminalType.PointTerminal.name: + elif self.terminal_type == "PointTerminal": self._reference_object = self.get_point_terminal_reference_primitive() - elif self.terminal_type == TerminalType.PadstackInstanceTerminal.name: + elif self.terminal_type == "PadstackInstanceTerminal": self._reference_object = self.get_padstack_terminal_reference_pin() else: self._pedb.logger.warning("Invalid Terminal Type={}".format(term.GetTerminalType())) @@ -471,7 +497,10 @@ def create(self, padstack_instance, name=None, layer=None, is_ref=False): Edb.Cell.Terminal.EdgeTerminal """ if not name: - name = generate_unique_name("Terminal") + pin_name = padstack_instance._edb_object.GetName() + refdes = padstack_instance.component.refdes + name = "{}_{}".format(refdes, pin_name) + name = generate_unique_name(name) if not layer: layer = padstack_instance.start_layer @@ -516,7 +545,7 @@ def create(self, name, net, location, layer, is_ref=False): Returns ------- - + :class:`pyaedt.edb_core.edb_data.terminals.PointTerminal` """ terminal = self._pedb.edb_api.cell.terminal.PointTerminal.Create( self._pedb.active_layout, @@ -531,11 +560,10 @@ def create(self, name, net, location, layer, is_ref=False): @property def location(self): - """Get location of the terminal.""" - point_data = self._pedb.point_data(0, 0) + """Location of the terminal.""" layer = list(self._pedb.stackup.layers.values())[0]._edb_layer - if self._edb_object.GetParameters(point_data, layer): - return [point_data.X.ToDouble(), point_data.Y.ToDouble()] + _, point_data, _ = self._edb_object.GetParameters(None, layer) + return [point_data.X.ToDouble(), point_data.Y.ToDouble()] @location.setter def location(self, value): @@ -562,3 +590,32 @@ class PinGroupTerminal(Terminal): def __init__(self, pedb, edb_object=None): super().__init__(pedb, edb_object) + + @pyaedt_function_handler + def create(self, name, net_name, pin_group_name, is_ref=False): + """Create a pin group terminal. + + Parameters + ---------- + name : str + Name of the terminal. + net_name : str + Name of the net. + pin_group_name : str, + Name of the pin group. + is_ref : bool, optional + Whether it is a reference terminal. The default is ``False``. + + Returns + ------- + :class:`pyaedt.edb_core.edb_data.terminals.PinGroupTerminal` + """ + term = self._pedb.edb_api.cell.terminal.PinGroupTerminal.Create( + self._pedb.active_layout, + self._pedb.nets[net_name].net_object, + name, + self._pedb.siwave.pin_groups[pin_group_name]._edb_object, + is_ref, + ) + term = PinGroupTerminal(self._pedb, term) + return term if not term.is_null else False diff --git a/pyaedt/edb_core/general.py b/pyaedt/edb_core/general.py index 6be4a4b417d..a3cfcb63883 100644 --- a/pyaedt/edb_core/general.py +++ b/pyaedt/edb_core/general.py @@ -151,29 +151,6 @@ class DielectricExtentType(Enum): Polygon = 3 -class BoundaryType(Enum): - InvalidBoundary = -1 - PortBoundary = 0 - PecBoundary = 1 - RlcBoundary = 2 - kCurrentSource = 3 - kVoltageSource = 4 - kNexximGround = 5 - kNexximPort = 6 - kDcTerminal = 7 - kVoltageProbe = 8 - - -class TerminalType(Enum): - InvalidTerminal = -1 - EdgeTerminal = 0 - PointTerminal = 1 - TerminalInstanceTerminal = 2 - PadstackInstanceTerminal = 3 - BundleTerminal = 4 - PinGroupTerminal = 5 - - class Primitives(Enum): Rectangle = 0 Circle = 1 diff --git a/pyaedt/edb_core/materials.py b/pyaedt/edb_core/materials.py index 154ef5d5d4b..180787bac4c 100644 --- a/pyaedt/edb_core/materials.py +++ b/pyaedt/edb_core/materials.py @@ -1,9 +1,9 @@ from __future__ import absolute_import # noreorder import difflib -import fnmatch import logging import os +import re import warnings from pyaedt import is_ironpython @@ -368,7 +368,6 @@ def __getitem__(self, item): def __init__(self, pedb): self._pedb = pedb self._syslib = os.path.join(self._pedb.base_path, "syslib") - self._personal_lib = None self._materials_in_aedt = None if not self.materials: self.add_material("air") @@ -381,7 +380,7 @@ def materials_in_aedt(self): """Retrieve the dictionary of materials available in AEDT syslib.""" if self._materials_in_aedt: return self._materials_in_aedt - self._materials_in_aedt = self._read_materials() + self._materials_in_aedt = self.read_materials(os.path.join(self._syslib, "Materials.amat")) return self._materials_in_aedt @property @@ -389,16 +388,6 @@ def syslib(self): """Retrieve the project sys library.""" return self._syslib - @property - def personallib(self): - """Get or Set the user personallib.""" - return self._personal_lib - - @personallib.setter - def personallib(self, value): - self._personal_lib = value - self._materials_in_aedt = self._read_materials() - @pyaedt_function_handler() def _edb_value(self, value): return self._pedb.edb_value(value) @@ -838,7 +827,7 @@ def get_property_by_material_name(self, property_name, material_name): @pyaedt_function_handler() def add_material_from_aedt(self, material_name): - """Add a material read from ``syslib amat`` library. + """Add a material read from a ``syslib AMAT`` library. Parameters ---------- @@ -856,116 +845,137 @@ def add_material_from_aedt(self, material_name): return False new_material = self.add_material(name=material_name) material = self.materials_in_aedt[material_name] - try: - new_material.permittivity = float(material["permittivity"]) - except (KeyError, TypeError): - pass - try: - new_material.conductivity = float(material["conductivity"]) - except (KeyError, TypeError): - pass - try: - new_material.mass_density = float(material["mass_density"]) - except (KeyError, TypeError): - pass - try: - new_material.permeability = float(material["permeability"]) - except (KeyError, TypeError): - pass - try: - new_material.loss_tangent = float(material["dielectric_loss_tangent"]) - except (KeyError, TypeError): - pass - try: - new_material.specific_heat = float(material["specific_heat"]) - except (KeyError, TypeError): - pass - try: - new_material.thermal_expansion_coefficient = float(material["thermal_expansion_coeffcient"]) - except (KeyError, TypeError): - pass + properties = [ + "permittivity", + "conductivity", + "mass_density", + "permeability", + "specific_heat", + "thermal_expansion_coefficient", + ] + for mat_prop_name, mat_prop_value in material.items(): + if mat_prop_name in properties: + setattr(new_material, mat_prop_name, mat_prop_value) + if mat_prop_name == "dielectric_loss_tangent": + new_material.loss_tangent = mat_prop_value return True @pyaedt_function_handler() def load_amat(self, amat_file): - """Load material from an amat file and add materials to Edb. + """Load materials from an AMAT file. Parameters ---------- amat_file : str - Full path to the amat file to read and add to the Edb. + Full path to the AMAT file to read and add to the Edb. + + Returns + ------- + bool """ - material_dict = self._read_materials(amat_file) + if not os.path.exists(amat_file): + self._pedb.logger.error("File path {} does not exist.".format(amat_file)) + material_dict = self.read_materials(amat_file) for material_name, material in material_dict.items(): if not material_name in list(self.materials.keys()): new_material = self.add_material(name=material_name) - try: - new_material.permittivity = float(material["permittivity"]) - except (KeyError, TypeError): - pass - try: - new_material.conductivity = float(material["conductivity"]) - except (KeyError, TypeError): - pass - try: - new_material.mass_density = float(material["mass_density"]) - except (KeyError, TypeError): - pass - try: - new_material.permeability = float(material["permeability"]) - except (KeyError, TypeError): - pass - try: - new_material.loss_tangent = float(material["dielectric_loss_tangent"]) - except (KeyError, TypeError): - pass - try: - new_material.specific_heat = float(material["specific_heat"]) - except (KeyError, TypeError): - pass - try: - new_material.thermal_expansion_coefficient = float(material["thermal_expansion_coeffcient"]) - except (KeyError, TypeError): - pass + properties = [ + "permittivity", + "conductivity", + "mass_density", + "permeability", + "specific_heat", + "thermal_expansion_coefficient", + ] + for mat_prop_name, mat_prop_value in material.items(): + if mat_prop_name in properties: + setattr(new_material, mat_prop_name, mat_prop_value) + if mat_prop_name == "tangent_delta": + new_material.loss_tangent = mat_prop_value return True + @staticmethod @pyaedt_function_handler() - def _read_materials(self, mat_file=None): - def get_mat_list(file_name, mats): - from pyaedt.generic.LoadAEDTFile import load_entire_aedt_file - - mread = load_entire_aedt_file(file_name) - for mat, mdict in mread.items(): - if mat != "$base_index$": - try: - mats[mat] = mdict["MaterialDef"][mat] - except KeyError: - mats[mat] = mdict - - if mat_file and os.path.exists(mat_file): - materials = {} - get_mat_list(mat_file, materials) - return materials - - amat_sys = [ - os.path.join(dirpath, filename) - for dirpath, _, filenames in os.walk(self.syslib) - for filename in filenames - if fnmatch.fnmatch(filename, "*.amat") + def read_materials(amat_file): + """Read materials from an AMAT file. + + Parameters + ---------- + amat_file : str + Full path to the AMAT file to read. + + Returns + ------- + dict + {material name: dict of material property to value}. + """ + + def get_line_float_value(line): + """Retrieve the float value expected in the line of an AMAT file. + The associated string is expected to follow one of the following cases: + - simple('permittivity', 12.) + - permittivity='12'. + """ + try: + return float(re.split(",|=", line)[-1].strip(")'")) + except ValueError: + return None + + res = {} + _begin_search = re.compile(r"^\$begin '(.+)'") + _end_search = re.compile(r"^\$end '(.+)'") + amat_keys = [ + "thermal_conductivity", + "permittivity", + "dielectric_loss_tangent", + "permeability", + "magnetic_loss_tangent", + "thermal_expansion_coeffcient", + "specific_heat", + "mass_density", ] - amat_personal = [] - if self.personallib: - amat_personal = [ - os.path.join(dirpath, filename) - for dirpath, _, filenames in os.walk(self.personallib) - for filename in filenames - if fnmatch.fnmatch(filename, "*.amat") - ] - materials = {} - for amat in amat_sys: - get_mat_list(amat, materials) - - if amat_personal: - for amat in amat_personal: - get_mat_list(amat, materials) - return materials + keys = [ + "thermal_conductivity", + "permittivity", + "tangent_delta", + "permeability", + "magnetic_loss_tangent", + "thermal_expansion_coeffcient", + "specific_heat", + "mass_density", + ] + + with open(amat_file, "r") as amat_fh: + raw_lines = amat_fh.read().splitlines() + mat_found = "" + for line in raw_lines: + b = _begin_search.search(line) + if b: # walk down a level + mat_found = b.group(1) + res.setdefault(mat_found, {}) + if mat_found: + for amat_key, key in zip(amat_keys, keys): + if amat_key in line: + value = get_line_float_value(line) + if value is not None: + res[mat_found][key] = value + # Extra case to avoid confusion ("conductivity" is included in "thermal_conductivity") + if "conductivity" in line and "thermal_conductivity" not in line: + value = get_line_float_value(line) + if value is not None: + res[mat_found]["conductivity"] = value + end = _end_search.search(line) + if end: + mat_found = "" + + # Clean unwanted data + try: + del res["$index$"] + except KeyError: + pass + try: + del res["$base_index$"] + except KeyError: + pass + + return res diff --git a/pyaedt/edb_core/siwave.py b/pyaedt/edb_core/siwave.py index 8d6b65c0ced..35ed2eb60b6 100644 --- a/pyaedt/edb_core/siwave.py +++ b/pyaedt/edb_core/siwave.py @@ -13,7 +13,6 @@ from pyaedt.edb_core.edb_data.sources import PinGroup from pyaedt.edb_core.edb_data.sources import ResistorSource from pyaedt.edb_core.edb_data.sources import VoltageSource -from pyaedt.edb_core.general import BoundaryType from pyaedt.edb_core.general import convert_py_list_to_net_list from pyaedt.generic.constants import SolverType from pyaedt.generic.constants import SweepType @@ -838,7 +837,7 @@ def add_siwave_syz_analysis( third_arg = int(decade_count) if sweeptype == 0: third_arg = self._pedb.number_with_units(step_freq, "Hz") - setup.si_slider_postion = int(accuracy_level) + setup.si_slider_position = int(accuracy_level) sweep = setup.add_frequency_sweep( frequency_sweep=[ [sweep, start_freq, stop_freq, third_arg], @@ -1418,13 +1417,7 @@ def place_voltage_probe( negative_layer : str Layer of the negative terminal. """ - from pyaedt.edb_core.edb_data.terminals import PointTerminal - point_terminal = PointTerminal(self._pedb) - p_terminal = point_terminal.create(name, positive_net_name, positive_location, positive_layer) - p_terminal.boundary_type = BoundaryType.kVoltageProbe.name - - n_terminal = point_terminal.create(name + "_ref", negative_net_name, negative_location, negative_layer) - n_terminal.boundary_type = BoundaryType.kVoltageProbe.name - p_terminal.ref_terminal = n_terminal - return self._pedb.probes[name] + p_terminal = self._pedb.get_point_terminal(name, positive_net_name, positive_location, positive_layer) + n_terminal = self._pedb.get_point_terminal(name + "_ref", negative_net_name, negative_location, negative_layer) + return self._pedb.create_voltage_probe(p_terminal, n_terminal) diff --git a/pyaedt/edb_core/stackup.py b/pyaedt/edb_core/stackup.py index 09043aab508..3c009b43535 100644 --- a/pyaedt/edb_core/stackup.py +++ b/pyaedt/edb_core/stackup.py @@ -1723,7 +1723,7 @@ def _import_csv(self, file_path): Parameters ---------- - fpath : str + file_path : str File path to the CSV file. """ if not pd: @@ -1739,17 +1739,17 @@ def _import_csv(self, file_path): logger.error("{} doesn't exist in csv".format(name)) return False - for name, l in df.iterrows(): - layer_type = l.Type + for name, layer_info in df.iterrows(): + layer_type = layer_info.Type if name in self.layers: layer = self.layers[name] layer.type = layer_type else: layer = self.add_layer(name, layer_type=layer_type, material="copper", fillMaterial="copper") - layer.material = l.Material - layer.thickness = l.Thickness - layer.dielectric_fill = l.Dielectric_Fill + layer.material = layer_info.Material + layer.thickness = layer_info.Thickness + layer.dielectric_fill = layer_info.Dielectric_Fill lc_new = self._pedb.edb_api.Cell.LayerCollection() for name, _ in df.iterrows(): diff --git a/pyaedt/generic/LoadAEDTFile.py b/pyaedt/generic/LoadAEDTFile.py index 7c92cf447f0..584dba38708 100644 --- a/pyaedt/generic/LoadAEDTFile.py +++ b/pyaedt/generic/LoadAEDTFile.py @@ -80,17 +80,7 @@ def load_keyword_in_aedt_file(filename, keyword): def _parse_value(v): - """ - - Parameters - ---------- - v : - - - Returns - ------- - - """ + """Parse value in C# format.""" # duck typing parse of the value 'v' if v is None: pv = v @@ -155,7 +145,7 @@ def _decode_recognized_subkeys(sk, d): if m and m.group("SKEY1") == "simple": # extra verification. SKEY2 is with spaces, so it's not considered here. elems = _separate_list_elements(m.group("LIST1")) if elems[0] == "thermal_expansion_coeffcient": - elems[0] = "thermal_expansion_coefficient" # fix a typo in the amat files. AEDT supports both strings! + elems[0] = "thermal_expansion_coefficient" # fix a typo in the AMAT files. AEDT supports both strings! d[elems[0]] = str(elems[1]) # convert to string as it is dedicated to material props return True elif re.search(r"^\w+IDMap\(.*\)$", sk, re.IGNORECASE): # check if the format is AAKeyIDMap('10'=56802, '7'=56803) diff --git a/pyaedt/generic/touchstone_parser.py b/pyaedt/generic/touchstone_parser.py index 9ccdbdeb0c5..3650790a729 100644 --- a/pyaedt/generic/touchstone_parser.py +++ b/pyaedt/generic/touchstone_parser.py @@ -104,10 +104,12 @@ def get_insertion_loss_index(self, threshold=-3): """ temp_list = [] freq_idx = 0 + s_db = self.s_db[freq_idx, :, :] for i in self.port_tuples: - loss = self.s_db[freq_idx, i[0], i[1]] - if loss > threshold: - temp_list.append(i) + if i[0] != i[1]: + loss = s_db[i[0], i[1]] + if loss > threshold: + temp_list.append(i) return temp_list def plot_insertion_losses(self, threshold=-3, plot=True): @@ -126,13 +128,7 @@ def plot_insertion_losses(self, threshold=-3, plot=True): list List of tuples representing insertion loss excitations. """ - temp_list = [] - freq_idx = 0 - for i in self.port_tuples: - loss = self.s_db[freq_idx, i[0], i[1]] - if loss > threshold: - temp_list.append(i) - + temp_list = self.get_insertion_loss_index(threshold=threshold) if plot: # pragma: no cover for i in temp_list: self.plot_s_db(*i, logx=self.log_x) diff --git a/pyaedt/hfss.py b/pyaedt/hfss.py index 4eca4251975..53d96d99303 100644 --- a/pyaedt/hfss.py +++ b/pyaedt/hfss.py @@ -20,6 +20,7 @@ from pyaedt.generic.general_methods import parse_excitation_file from pyaedt.generic.general_methods import pyaedt_function_handler from pyaedt.modeler import cad +from pyaedt.modeler.cad.component_array import ComponentArray from pyaedt.modeler.cad.components_3d import UserDefinedComponent from pyaedt.modeler.geometry_operators import GeometryOperators from pyaedt.modules.Boundary import BoundaryObject @@ -192,6 +193,10 @@ def __init__( aedt_process_id, ) self._field_setups = [] + self.component_array = {} + self.component_array_names = list(self.get_oo_name(self.odesign, "Model")) + for component_array in self.component_array_names: + self.component_array[component_array] = ComponentArray(self, component_array) def _init_from_design(self, *args, **kwargs): self.__init__(*args, **kwargs) @@ -240,7 +245,8 @@ def hybrid(self): @hybrid.setter def hybrid(self, value): - self.design_solutions.hybrid = value + if value != self.design_solutions.hybrid and isinstance(value, bool): + self.design_solutions.hybrid = value @property def composite(self): @@ -5555,8 +5561,7 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): Returns ------- - bool - ``True`` when successful, ``False`` when failed. + class:`pyaedt.modeler.cad.component_array.ComponentArray` Examples -------- @@ -5594,9 +5599,8 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): >>> from pyaedt.generic.DataHandlers import json_to_dict >>> hfss_app = Hfss() >>> dict_in = json_to_dict(path\to\json_file) - >>> hfss_app.add_3d_component_array_from_json(dict_in) + >>> component_array = hfss_app.add_3d_component_array_from_json(dict_in) """ - self.hybrid = True if isinstance(json_file, dict): json_dict = json_file @@ -5621,9 +5625,11 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): cells_names[v["name"]].append(k1) else: def_names = self.oeditor.Get3DComponentDefinitionNames() - if v["name"] not in def_names and v["name"][:-1] not in def_names: + if v["name"] not in def_names and v["name"][:-1] not in def_names and v["name"][:-2] not in def_names: if v["name"] not in json_dict: - self.logger.error("a3comp is not present in design and not define correctly in json.") + self.logger.error( + "3D component array is not present in design and not defined correctly in the JSON file." + ) return False geometryparams = self.get_components3d_vars(json_dict[v["name"]]) @@ -5704,9 +5710,15 @@ def add_3d_component_array_from_json(self, json_file, array_name=None): args.append(col) if self.omodelsetup.IsArrayDefined(): self.omodelsetup.EditArray(args) + if settings.aedt_version < "2024.1": + self.save_project() else: self.omodelsetup.AssignArray(args) - return True + if settings.aedt_version < "2024.1": + self.save_project() + self.component_array[array_name] = ComponentArray(self, array_name) + self.component_array_names = [array_name] + return self.component_array[array_name] @pyaedt_function_handler() def get_antenna_ffd_solution_data( @@ -5770,8 +5782,8 @@ def get_antenna_ffd_solution_data( self.logger.info("Far field sphere %s is created.", setup_name) component_name = None - if self.solution_type == "SBR+" and self.modeler.modeler.user_defined_component_names: - antenna = self.modeler.user_defined_components[self.modeler.modeler.user_defined_component_names[0]] + if self.solution_type == "SBR+" and self.modeler.user_defined_component_names: + antenna = self.modeler.user_defined_components[self.modeler.user_defined_component_names[0]] if antenna.native_properties["Type"] == "Linked Antenna": component_name = antenna.name diff --git a/pyaedt/modeler/cad/Modeler.py b/pyaedt/modeler/cad/Modeler.py index 44b50ac0ed4..8714124a50b 100644 --- a/pyaedt/modeler/cad/Modeler.py +++ b/pyaedt/modeler/cad/Modeler.py @@ -10,14 +10,8 @@ from __future__ import absolute_import # noreorder from collections import OrderedDict -import copy -import math -import os -import warnings -from pyaedt.application.Variables import decompose_variable_value from pyaedt.generic.DataHandlers import _dict2arg -from pyaedt.generic.constants import AEDT_UNITS from pyaedt.generic.general_methods import PropsManager from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import pyaedt_function_handler @@ -26,7 +20,6 @@ from pyaedt.modeler.cad.elements3d import FacePrimitive from pyaedt.modeler.cad.elements3d import VertexPrimitive from pyaedt.modeler.cad.object3d import Object3d -from pyaedt.modeler.cad.polylines import Polyline from pyaedt.modeler.geometry_operators import GeometryOperators @@ -1889,4875 +1882,3 @@ def _oimportexport(self): def projdir(self): """Project directory.""" return self._app.project_path - - -class GeometryModeler(Modeler, object): - """Manages the main AEDT Modeler functionalities for geometry-based designs. - - Parameters - ---------- - app : - Inherited parent object. - is3d : bool, optional - Whether the model is 3D. The default is ``True``. - """ - - def __init__(self, app, is3d=True): - self._app = app - Modeler.__init__(self, app) - # TODO Refactor this as a dictionary with names as key - self._coordinate_systems = [] - self._user_lists = [] - self._planes = [] - self._is3d = is3d - self._solids = [] - self._sheets = [] - self._lines = [] - self._points = [] - self._unclassified = [] - self._all_object_names = [] - self.objects = {} - self.user_defined_components = {} - self._object_names_to_ids = {} - - @property - def _odefinition_manager(self): - return self._app.odefinition_manager - - @property - def _omaterial_manager(self): - return self._app.omaterial_manager - - @property - def coordinate_systems(self): - """Coordinate Systems.""" - if settings.aedt_version > "2022.2": - cs_names = [i for i in self.oeditor.GetChildNames("CoordinateSystems") if i != "Global"] - for cs_name in cs_names: - props = {} - local_names = [i.name for i in self._coordinate_systems] - if cs_name not in local_names: - if self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Relative": - self._coordinate_systems.append(CoordinateSystem(self, props, cs_name)) - elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Face": - self._coordinate_systems.append(FaceCoordinateSystem(self, props, cs_name)) - elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Object": - self._coordinate_systems.append(ObjectCoordinateSystem(self, props, cs_name)) - return self._coordinate_systems - if not self._coordinate_systems: - self._coordinate_systems = self._get_coordinates_data() - return self._coordinate_systems - - @property - def user_lists(self): - """User Lists.""" - if not self._user_lists: - self._user_lists = self._get_lists_data() - return self._user_lists - - @property - def planes(self): - """Planes.""" - if not self._planes: - self._planes = self._get_planes_data() - return self._planes - - @property - def oeditor(self): - """Aedt oEditor Module. - - References - ---------- - - >>> oEditor = oDesign.SetActiveEditor("3D Modeler")""" - - return self._app.oeditor - - @property - def materials(self): - """Material library used in the project. - - Returns - ------- - :class:`pyaedt.modules.MaterialLib.Materials` - - """ - return self._app.materials - - def _get_coordinates_data(self): # pragma: no cover - coord = [] - id2name = {1: "Global"} - name2refid = {} - if self._app.design_properties and "ModelSetup" in self._app.design_properties: - cs = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["CoordinateSystems"] - for ds in cs: - try: - if isinstance(cs[ds], (OrderedDict, dict)): - if cs[ds]["OperationType"] == "CreateRelativeCoordinateSystem": - props = cs[ds]["RelativeCSParameters"] - name = cs[ds]["Attributes"]["Name"] - cs_id = cs[ds]["ID"] - id2name[cs_id] = name - name2refid[name] = cs[ds]["ReferenceCoordSystemID"] - coord.append(CoordinateSystem(self, props, name)) - if "ZXZ" in props["Mode"]: - coord[-1].mode = "zxz" - elif "ZYZ" in props["Mode"]: - coord[-1].mode = "zyz" - else: - coord[-1].mode = "axis" - elif cs[ds]["OperationType"] == "CreateFaceCoordinateSystem": - name = cs[ds]["Attributes"]["Name"] - cs_id = cs[ds]["ID"] - id2name[cs_id] = name - op_id = cs[ds]["PlaceHolderOperationID"] - geometry_part = self._app.design_properties["ModelSetup"]["GeometryCore"][ - "GeometryOperations" - ]["ToplevelParts"]["GeometryPart"] - if isinstance(geometry_part, (OrderedDict, dict)): - op = geometry_part["Operations"]["FaceCSHolderOperation"] - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - elif isinstance(geometry_part, list): - for gp in geometry_part: - op = gp["Operations"]["FaceCSHolderOperation"] - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - elif isinstance(cs[ds], list): - for el in cs[ds]: - if el["OperationType"] == "CreateRelativeCoordinateSystem": - props = el["RelativeCSParameters"] - name = el["Attributes"]["Name"] - cs_id = el["ID"] - id2name[cs_id] = name - name2refid[name] = el["ReferenceCoordSystemID"] - coord.append(CoordinateSystem(self, props, name)) - if "ZXZ" in props["Mode"]: - coord[-1].mode = "zxz" - elif "ZYZ" in props["Mode"]: - coord[-1].mode = "zyz" - else: - coord[-1].mode = "axis" - elif el["OperationType"] == "CreateFaceCoordinateSystem": - name = el["Attributes"]["Name"] - cs_id = el["ID"] - id2name[cs_id] = name - op_id = el["PlaceHolderOperationID"] - geometry_part = self._app.design_properties["ModelSetup"]["GeometryCore"][ - "GeometryOperations" - ]["ToplevelParts"]["GeometryPart"] - if isinstance(geometry_part, (OrderedDict, dict)): - op = geometry_part["Operations"]["FaceCSHolderOperation"] - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - elif isinstance(geometry_part, list): - for gp in geometry_part: - try: - op = gp["Operations"]["FaceCSHolderOperation"] - except KeyError: - continue - if isinstance(op, (OrderedDict, dict)): - if op["ID"] == op_id: - props = op["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - elif isinstance(op, list): - for iop in op: - if iop["ID"] == op_id: - props = iop["FaceCSParameters"] - coord.append(FaceCoordinateSystem(self, props, name)) - break - except: - pass - for cs in coord: - if isinstance(cs, CoordinateSystem): - try: - cs._ref_cs = id2name[name2refid[cs.name]] - except: - pass - coord.reverse() - return coord - - def _get_lists_data(self): - """Retrieve user object list data. - - Returns - ------- - [Dict with List information] - """ - design_lists = [] - if self._app.design_properties and self._app.design_properties.get("ModelSetup", None): - key1 = "GeometryOperations" - key2 = "GeometryEntityLists" - key3 = "GeometryEntityListOperation" - try: - entity_list = self._app.design_properties["ModelSetup"]["GeometryCore"][key1][key2] - if entity_list: - geom_entry = copy.deepcopy(entity_list[key3]) - if isinstance(geom_entry, (dict, OrderedDict)): - geom_entry = [geom_entry] - for data in geom_entry: - props = {} - name = data["Attributes"]["Name"] - props["ID"] = data["ID"] - props["Type"] = data["GeometryEntityListParameters"]["EntityType"] - if props["Type"] == "Object": - name_list = [] - for element in data["GeometryEntityListParameters"]["EntityList"]: - element_name = self.oeditor.GetObjectNameByID(int(element)) - name_list.append(element_name) - props["List"] = name_list - else: - props["List"] = data["GeometryEntityListParameters"]["EntityList"] - design_lists.append(Lists(self, props, name)) - except: - self.logger.info("Lists were not retrieved from AEDT file") - return design_lists - - def _get_planes_data(self): - """Retrieve planes data. - - Returns - ------- - [Dict with List information] - """ - try: - return { - plane_name: self.oeditor.GetChildObject(plane_name) - for plane_name in self.oeditor.GetChildNames("Planes") - } - except TypeError: - return {} - - def __get__(self, instance, owner): - self._app = instance - return self - - @property - def model_units(self): - """Model units as a string. For example ``"mm"``. - - References - ---------- - - >>> oEditor.GetModelUnits - >>> oEditor.SetModelUnits - """ - return self.oeditor.GetModelUnits() - - @model_units.setter - def model_units(self, units): - assert units in AEDT_UNITS["Length"], "Invalid units string {0}.".format(units) - self.oeditor.SetModelUnits(["NAME:Units Parameter", "Units:=", units, "Rescale:=", False]) - - @property - def selections(self): - """Selections. - - References - ---------- - - >>> oEditor.GetSelections - """ - return self.oeditor.GetSelections() - - @property - def obounding_box(self): - """Bounding box. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - return self.oeditor.GetModelBoundingBox() - - @pyaedt_function_handler() - def fit_all(self): - """Fit all. - - References - ---------- - - >>> oEditor.FitAll - """ - self.oeditor.FitAll() - - @property - def dimension(self): - """Dimensions. - - Returns - ------- - str - Dimensionality, which is either ``"2D"`` or ``"3D"``. - - References - ---------- - - >>> oDesign.Is2D - """ - try: - if self._odesign.Is2D(): - return "2D" - else: - return "3D" - except: - if self.design_type == "2D Extractor": - return "2D" - else: - return "3D" - - @property - def design_type(self): - """Design type. - - References - ---------- - - >>> oDesign.GetDesignType - """ - return self._app.design_type - - @property - def geometry_mode(self): - """Geometry mode. - - References - ---------- - - >>> oDesign.GetGeometryMode""" - return self._odesign.GetGeometryMode() - - @property - def solid_bodies(self): - """List of Object Names. - - .. note:: - Non-model objects are also returned. - - Returns - ------- - list os str - List of object names with the object name as the key. - - References - ---------- - - >>> oEditor.GetObjectsInGroup - """ - if self.dimension == "3D": - objects = self.oeditor.GetObjectsInGroup("Solids") - else: - objects = self.oeditor.GetObjectsInGroup("Sheets") - return list(objects) - - @pyaedt_function_handler() - def _find_perpendicular_points(self, face): - if isinstance(face, str): - vertices = [i.position for i in self[face].vertices] - else: - vertices = [] - for vertex in list(self.oeditor.GetVertexIDsFromFace(face)): - vertices.append([float(i) for i in list(self.oeditor.GetVertexPosition(vertex))]) - assert len(vertices) > 2, "Automatic A-B Assignment can be done only on face with more than 2 vertices." - origin = vertices[0] - a_end = [] - b_end = [] - tol = 1e-10 - for v in vertices[1:]: - edge1 = GeometryOperators.v_points(origin, v) - for v2 in vertices[1:]: - if v2 != v: - edge2 = GeometryOperators.v_points(origin, v2) - if abs(GeometryOperators.v_dot(edge1, edge2)) < tol: - a_end = v - b_end = v2 - break - if a_end: - break - if not a_end: - a_end = vertices[1] - b_end = vertices[2] - return False, (origin, a_end, b_end) - return True, (origin, a_end, b_end) - - @pyaedt_function_handler() - def cover_lines(self, selection): - """Cover a closed line and transform it to sheet. - - Parameters - ---------- - selection : str, int - Polyline object to cover. - Returns - ------- - bool - - References - ---------- - - >>> oEditor.CoverLines - """ - obj_to_cover = self.convert_to_selections(selection, False) - self.oeditor.CoverLines(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) - return True - - @pyaedt_function_handler() - def cover_faces(self, selection): - """Cover a sheet. - - Parameters - ---------- - selection : str, int - Sheet object to cover. - Returns - ------- - bool - - References - ---------- - - >>> oEditor.CoverLines - """ - obj_to_cover = self.convert_to_selections(selection, False) - self.oeditor.CoverSurfaces(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) - return True - - @pyaedt_function_handler() - def create_coordinate_system( - self, - origin=None, - reference_cs="Global", - name=None, - mode="axis", - view="iso", - x_pointing=None, - y_pointing=None, - psi=0, - theta=0, - phi=0, - u=None, - ): - """Create a coordinate system. - - Parameters - ---------- - origin : list - List of ``[x, y, z]`` coordinates for the origin of the - coordinate system. The default is ``None``, in which case - ``[0, 0, 0]`` is used. - reference_cs : str, optional - Name of the reference coordinate system. The default is - ``"Global"``. - name : str - Name of the coordinate system. The default is ``None``. - mode : str, optional - Definition mode. Options are ``"view"``, ``"axis"``, - ``"zxz"``, ``"zyz"``, and ``"axisrotation"``. The default - is ``"axis"``. Enumerator ``pyaedt.generic.constants.CSMODE`` can be used. - - * If ``mode="view"``, specify ``view``. - * If ``mode="axis"``, specify ``x_pointing`` and ``y_pointing``. - * If ``mode="zxz"`` or ``mode="zyz"``, specify ``phi``, ``theta``, and ``psi``. - * If ``mode="axisrotation"``, specify ``theta`` and ``u``. - - Parameters not needed by the specified mode are ignored. - The default mode, ``"axis"``, is a coordinate system parallel to the - global coordinate system centered in the global origin. - - view : str, int optional - View for the coordinate system if ``mode="view"``. Options - are ``"XY"``, ``"XZ"``, ``"XY"``, ``"iso"``, ``None``, and - ``"rotate"`` (obsolete). The default is ``"iso"``. - Enumerator ``pyaedt.generic.constants.VIEW`` can be used. - - .. note:: - For backward compatibility, ``mode="view"`` and ``view="rotate"`` are the same as - ``mode="axis"``. Because the "rotate" option in the "view" mode is obsolete, use - ``mode="axis"`` instead. - - x_pointing : list, optional - List of the ``[x, y, z]`` coordinates specifying the X axis - pointing in the global coordinate system if ``mode="axis"``. - The default is ``[1, 0, 0]``. - y_pointing : list, optional - List of the ``[x, y, z]`` coordinates specifying the Y axis - pointing in the global coordinate system if ``mode="axis"``. - The default is ``[0, 1, 0]``. - phi : float, optional - Euler angle phi in degrees if ``mode="zxz"`` or ``mode="zyz"``. - The default is ``0``. - theta : float, optional - Euler angle theta or rotation angle in degrees if ``mode="zxz"``, - ``mode="zyz"``, or ``mode="axisrotation"``. The default is ``0``. - psi : float, optional - Euler angle psi in degrees if ``mode="zxz"`` or ``mode="zyz"``. - The default is ``0``. - u : list - List of the ``[ux, uy, uz]`` coordinates for the rotation axis - if ``mode="zxz"``. The default is ``[1, 0, 0]``. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.CoordinateSystem` - Created coordinate system. - - References - ---------- - - >>> oEditor.CreateRelativeCS - """ - if name: - cs_names = [i.name for i in self.coordinate_systems] - if name in cs_names: - raise AttributeError("A coordinate system with the specified name already exists!") - - cs = CoordinateSystem(self) - if cs: - result = cs.create( - origin=origin, - reference_cs=reference_cs, - name=name, - mode=mode, - view=view, - x_pointing=x_pointing, - y_pointing=y_pointing, - phi=phi, - theta=theta, - psi=psi, - u=u, - ) - if result: - return cs - return False - - @pyaedt_function_handler() - def create_face_coordinate_system( - self, face, origin, axis_position, axis="X", name=None, offset=None, rotation=0, always_move_to_end=True - ): - """Create a face coordinate system. - The face coordinate has always the Z axis parallel to face normal. - The X and Y axis lie on the face plane. - - Parameters - ---------- - face : int, FacePrimitive - Face where the coordinate system is defined. - origin : int, FacePrimitive, EdgePrimitive, VertexPrimitive - Specify the coordinate system origin. The origin must belong to the face where the - coordinate system is defined. - If a face is specified, the origin is placed on the face center. It must be the same as ``face``. - If an edge is specified, the origin is placed on the edge midpoint. - If a vertex is specified, the origin is placed on the vertex. - axis_position : int, FacePrimitive, EdgePrimitive, VertexPrimitive - Specify where the X or Y axis is pointing. The position must belong to the face where the - coordinate system is defined. - Select which axis is considered with the option ``axis``. - If a face is specified, the position is placed on the face center. It must be the same as ``face``. - If an edge is specified, the position is placed on the edce midpoint. - If a vertex is specified, the position is placed on the vertex. - axis : str, optional - Select which axis is considered for positioning. Possible values are ``"X"`` and ``"Y"``. - The default is ``"X"``. - name : str, optional - Name of the coordinate system. The default is ``None``. - offset : list, optional - List of the ``[x, y]`` coordinates specifying the offset of the coordinate system origin. - The offset specified in the face coordinate system reference. - The default is ``[0, 0]``. - rotation : float, optional - Rotation angle of the coordinate system around its Z axis. Angle is in degrees. - The default is ``0``. - always_move_to_end : bool, optional - If ``True`` the Face Coordinate System creation operation will always be moved to the end of subsequent - objects operation. This will guarantee that the coordinate system will remain solidal with the object - face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.FaceCoordinateSystem` - - """ - - if name: - cs_names = [i.name for i in self.coordinate_systems] - if name in cs_names: # pragma: no cover - raise AttributeError("A coordinate system with the specified name already exists!") - - cs = FaceCoordinateSystem(self) - if cs: - result = cs.create( - face=face, - origin=origin, - axis_position=axis_position, - axis=axis, - name=name, - offset=offset, - rotation=rotation, - always_move_to_end=always_move_to_end, - ) - - if result: - return cs - return False - - @pyaedt_function_handler() - def create_object_coordinate_system( - self, obj, origin, x_axis, y_axis, move_to_end=True, reverse_x_axis=False, reverse_y_axis=False, name=None - ): - """Create an object coordinate system. - - Parameters - ---------- - obj : str, :class:`pyaedt.modeler.cad.object3d.Object3d` - Object to attach the object coordinate system to. - origin : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list - Refer to the origin where the object coordinate system is anchored. - It can be: - - - int in which case it refers to the entity Id. - - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. - - list in which case it refers to the origin coordinate system ``[x, y, z]``. - - x_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list - Entity that the x axis of the object coordinate system points to. - It can be: - - - int in which case it refers to the entity Id. - - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. - - list in which case it refers to the point coordinate system ``[x, y, z]`` that the x axis points to. - - y_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list - Entity that the y axis of the object coordinate system points to. - It can be: - - - int in which case it refers to the entity Id. - - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. - - list in which case it refers to the point coordinate system ``[x, y, z]`` that the y axis points to. - - move_to_end : bool, optional - If ``True`` the Coordinate System creation operation will always be moved to the end of subsequent - objects operation. This will guarantee that the coordinate system will remain solidal with the object - face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. - reverse_x_axis : bool, optional - Whether the x-axis is in the reverse direction. - The default is ``False``. - reverse_y_axis : bool, optional - Whether the y-axis is in the reverse direction. - The default is ``False``. - name : str, optional - Name of the coordinate system. The default is ``None``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - """ - if name: - cs_names = [i.name for i in self.coordinate_systems] - if name in cs_names: # pragma: no cover - raise AttributeError("A coordinate system with the specified name already exists.") - - cs = ObjectCoordinateSystem(self, name=name) - if cs: - result = cs.create( - obj=obj, - origin=origin, - x_axis=x_axis, - y_axis=y_axis, - move_to_end=move_to_end, - reverse_x_axis=reverse_x_axis, - reverse_y_axis=reverse_y_axis, - ) - - if result: - return cs - return False - - @pyaedt_function_handler() - def global_to_cs(self, point, ref_cs): - """Transform a point from the global coordinate system to another coordinate system. - - Parameters - ---------- - point : list - List of the ``[x, y, z]`` coordinates to transform. - ref_cs : str, CoordinateSystem - Name of the destination reference system. The ``CoordinateSystem`` object can also be - used. - - Returns - ------- - list - List of the transformed ``[x, y, z]`` coordinates. - - """ - if type(point) is not list or len(point) != 3: - raise AttributeError("Point must be in format [x, y, z].") - try: - point = [float(i) for i in point] - except: - raise AttributeError("Point must be in format [x, y, z].") - if isinstance(ref_cs, BaseCoordinateSystem): - ref_cs_name = ref_cs.name - elif isinstance(ref_cs, str): - ref_cs_name = ref_cs - else: - raise AttributeError("ref_cs must be either a string or a CoordinateSystem object.") - if ref_cs_name == "Global": - return point - cs_names = [i.name for i in self.coordinate_systems] - if ref_cs_name not in cs_names: - raise AttributeError("Specified coordinate system does not exist in the design.") - - def get_total_transformation(p, cs): - idx = cs_names.index(cs) - q = self.coordinate_systems[idx].quaternion - ox = GeometryOperators.parse_dim_arg( - self.coordinate_systems[idx].props["OriginX"], - self.model_units, - variable_manager=self._app.variable_manager, - ) - oy = GeometryOperators.parse_dim_arg( - self.coordinate_systems[idx].props["OriginY"], - self.model_units, - variable_manager=self._app.variable_manager, - ) - oz = GeometryOperators.parse_dim_arg( - self.coordinate_systems[idx].props["OriginZ"], - self.model_units, - variable_manager=self._app.variable_manager, - ) - o = [ox, oy, oz] - refcs = self.coordinate_systems[idx].ref_cs - if refcs == "Global": - p1 = p - else: - p1 = get_total_transformation(p, refcs) - p2 = GeometryOperators.q_rotation_inv(GeometryOperators.v_sub(p1, o), q) - return p2 - - p = get_total_transformation(point, ref_cs_name) - return [round(p[i], 13) for i in range(3)] - - @pyaedt_function_handler() - def set_working_coordinate_system(self, name): - """Set the working coordinate system to another coordinate system. - - Parameters - ---------- - name : str, FaceCoordinateSystem, CoordinateSystem - Name of the coordinate system or ``CoordinateSystem`` object to set as the working - coordinate system. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SetWCS - """ - if isinstance(name, BaseCoordinateSystem): - self.oeditor.SetWCS( - ["NAME:SetWCS Parameter", "Working Coordinate System:=", name.name, "RegionDepCSOk:=", False] - ) - else: - self.oeditor.SetWCS( - ["NAME:SetWCS Parameter", "Working Coordinate System:=", name, "RegionDepCSOk:=", False] - ) - return True - - @pyaedt_function_handler() - def invert_cs(self, coordinate_system, to_global=False): - """Get the inverse translation and the conjugate quaternion of the input coordinate system. - - By defining a new coordinate system with this information, the reference coordinate system - of the input coordinate system is obtained. - - Parameters - ---------- - coordinate_system : str, CoordinateSystem - Name of the destination reference system. A ``CoordinateSystem`` object can also be - used. - to_global : bool, optional - Whether to compute the inverse transformation of the input coordinate system with - respect to the global coordinate system. The default is ``False``. - - Returns - ------- - list - Origin coordinates. - list - Quaternion. - """ - if isinstance(coordinate_system, BaseCoordinateSystem): - cs = coordinate_system - elif isinstance(coordinate_system, str): - cs_names = [i.name for i in self.coordinate_systems] - if coordinate_system not in cs_names: # pragma: no cover - raise AttributeError("Specified coordinate system does not exist in the design.") - cs = self.coordinate_systems[cs_names.index(coordinate_system)] - else: # pragma: no cover - raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") - - if to_global: - o, q = self.reference_cs_to_global(coordinate_system) - o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(o, q)) - q = [q[0], -q[1], -q[2], -q[3]] - else: - q = cs.quaternion - q = [q[0], -q[1], -q[2], -q[3]] - o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(cs.origin, q)) - return o, q - - @pyaedt_function_handler() - def reference_cs_to_global(self, coordinate_system): - """Get the origin and quaternion defining the coordinate system in the global coordinates. - - Parameters - ---------- - coordinate_system : str, CoordinateSystem - Name of the destination reference system. The ``CoordinateSystem`` object can also be used. - - Returns - ------- - list - Origin coordinates. - list - Quaternion. - """ - cs_names = [i.name for i in self.coordinate_systems] - if isinstance(coordinate_system, BaseCoordinateSystem): - cs = coordinate_system - elif isinstance(coordinate_system, str): - if coordinate_system not in cs_names: # pragma: no cover - raise AttributeError("Specified coordinate system does not exist in the design.") - cs = self.coordinate_systems[cs_names.index(coordinate_system)] - else: # pragma: no cover - raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") - quaternion = cs.quaternion - origin = cs.origin - ref_cs_name = cs.ref_cs - while ref_cs_name != "Global": - ref_cs = self.coordinate_systems[cs_names.index(ref_cs_name)] - quaternion_ref = ref_cs.quaternion - quaternion = GeometryOperators.q_prod(quaternion_ref, quaternion) - origin_ref = ref_cs.origin - origin = GeometryOperators.v_sum(origin_ref, GeometryOperators.q_rotation(origin, quaternion_ref)) - ref_cs_name = ref_cs.ref_cs - return origin, quaternion - - @pyaedt_function_handler() - def duplicate_coordinate_system_to_global(self, coordinate_system): - """Create a duplicate coordinate system referenced to the global coordinate system. - - Having this coordinate system referenced to the global coordinate - system removes all nested coordinate system dependencies. - - Parameters - ---------- - coordinate_system : str, CoordinateSystem - Name of the destination reference system. The ``CoordinateSystem`` object can also be used. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.CoordinateSystem` - Created coordinate system. - - References - ---------- - - >>> oEditor.CreateRelativeCS - """ - cs_names = [i.name for i in self.coordinate_systems] - if isinstance(coordinate_system, BaseCoordinateSystem): - cs = coordinate_system - elif isinstance(coordinate_system, str): - if coordinate_system not in cs_names: # pragma: no cover - raise AttributeError("Specified coordinate system does not exist in the design.") - cs = self.coordinate_systems[cs_names.index(coordinate_system)] - else: # pragma: no cover - raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") - if isinstance(cs, CoordinateSystem): - o, q = self.reference_cs_to_global(coordinate_system) - x, y, _ = GeometryOperators.quaternion_to_axis(q) - reference_cs = "Global" - name = cs.name + "_RefToGlobal" - if name in cs_names: - name = cs.name + generate_unique_name("_RefToGlobal") - cs = CoordinateSystem(self) - if cs: - result = cs.create( - origin=o, - reference_cs=reference_cs, - name=name, - mode="axis", - x_pointing=x, - y_pointing=y, - ) - if result: - return cs - elif isinstance(cs, FaceCoordinateSystem): - name = cs.name + "_RefToGlobal" - if name in cs_names: - name = cs.name + generate_unique_name("_RefToGlobal") - face_cs = FaceCoordinateSystem(self, props=cs.props, name=name, face_id=cs.props["FaceID"]) - obj = [obj for obj in self.object_list for face in obj.faces if face.id == face_cs.props["FaceID"]][0] - face = [face for face in obj.faces if face.id == face_cs.props["FaceID"]][0] - if face_cs.props["Origin"]["PositionType"] == "FaceCenter": - origin = face - elif face_cs.props["Origin"]["PositionType"] == "EdgeCenter": - origin = [edge for edge in face.edges if edge.id == face_cs.props["Origin"]["EntityID"]][0] - elif face_cs.props["Origin"]["PositionType"] == "OnVertex": - edge = [ - edge - for edge in face.edges - for vertex in edge.vertices - if vertex.id == face_cs.props["Origin"]["EntityID"] - ][0] - origin = [v for v in edge.vertices if v.id == face_cs.props["Origin"]["EntityID"]][0] - if face_cs.props["AxisPosn"]["PositionType"] == "EdgeCenter": - axis_position = [edge for edge in face.edges if edge.id == face_cs.props["AxisPosn"]["EntityID"]][0] - elif face_cs.props["AxisPosn"]["PositionType"] == "OnVertex": - edge = [ - edge - for edge in face.edges - for vertex in edge.vertices - if vertex.id == face_cs.props["AxisPosn"]["EntityID"] - ][0] - axis_position = [v for v in edge.vertices if v.id == face_cs.props["AxisPosn"]["EntityID"]][0] - if face_cs: - result = face_cs.create( - face=face, - origin=origin, - axis_position=axis_position, - axis=face_cs.props["WhichAxis"], - name=name, - offset=[face_cs["XOffset"], face_cs["YOffset"]], - rotation=decompose_variable_value(face_cs["ZRotationAngle"])[0], - always_move_to_end=face_cs["MoveToEnd"], - ) - if result: - return face_cs - elif isinstance(cs, ObjectCoordinateSystem): - name = cs.name + "_RefToGlobal" - if name in cs_names: - name = cs.name + generate_unique_name("_RefToGlobal") - obj_cs = ObjectCoordinateSystem(self, props=cs.props, name=name, entity_id=cs.entity_id) - objs_by_name_list = [obj for obj in self.object_list if obj.part_coordinate_system == cs.name] - objs_by_id_list = [o for o in self.object_list if o.id == cs.entity_id] - if objs_by_name_list: - obj = objs_by_name_list[0] - elif objs_by_id_list: - obj = [o for o in self.object_list if o.id == cs.entity_id][0] - if cs.props["Origin"]["PositionType"] != "AbsolutePosition": - if cs.props["Origin"]["PositionType"] == "FaceCenter": - origin = [f for f in obj.faces if f.id == cs.props["Origin"]["EntityID"]][0] - elif ( - cs.props["Origin"]["PositionType"] == "EdgeCenter" - or cs.props["Origin"]["PositionType"] == "ArcCenter" - ): - origin = [e for e in obj.edges if e.id == cs.props["Origin"]["EntityID"]][0] - elif cs.props["Origin"]["PositionType"] == "OnVertex": - origin = [v for v in obj.vertices if v.id == cs.props["Origin"]["EntityID"]][0] - else: - origin = [ - cs.props["Origin"]["XPosition"], - cs.props["Origin"]["YPosition"], - cs.props["Origin"]["ZPosition"], - ] - if "xAxisPos" in cs.props: - if cs.props["xAxisPos"]["PositionType"] == "FaceCenter": - x_axis = [f for f in obj.faces if f.id == cs.props["xAxisPos"]["EntityID"]][0] - elif ( - cs.props["xAxisPos"]["PositionType"] == "EdgeCenter" - or cs.props["xAxisPos"]["PositionType"] == "ArcCenter" - ): - x_axis = [e for e in obj.edges if e.id == cs.props["xAxisPos"]["EntityID"]][0] - elif cs.props["xAxisPos"]["PositionType"] == "OnVertex": - x_axis = [v for v in obj.vertices if v.id == cs.props["xAxisPos"]["EntityID"]][0] - elif "xAxis" in cs.props: - x_axis = [ - cs.props["xAxis"]["xDirection"], - cs.props["xAxis"]["yDirection"], - cs.props["xAxis"]["zDirection"], - ] - if "yAxisPos" in cs.props: - if cs.props["yAxisPos"]["PositionType"] == "FaceCenter": - y_axis = [f for f in obj.faces if f.id == cs.props["yAxisPos"]["EntityID"]][0] - elif ( - cs.props["yAxisPos"]["PositionType"] == "EdgeCenter" - or cs.props["yAxisPos"]["PositionType"] == "ArcCenter" - ): - y_axis = [e for e in obj.edges if e.id == cs.props["yAxisPos"]["EntityID"]][0] - elif cs.props["yAxisPos"]["PositionType"] == "OnVertex": - y_axis = [v for v in obj.vertices if v.id == cs.props["yAxisPos"]["EntityID"]][0] - elif "yAxis" in cs.props: - y_axis = [ - cs.props["yAxis"]["xDirection"], - cs.props["yAxis"]["yDirection"], - cs.props["yAxis"]["zDirection"], - ] - if obj_cs: - result = obj_cs.create( - obj=obj, - origin=origin, - x_axis=x_axis, - y_axis=y_axis, - move_to_end=cs.props["MoveToEnd"], - reverse_x_axis=cs.props["ReverseXAxis"], - reverse_y_axis=cs.props["ReverseYAxis"], - ) - if result: - return obj_cs - return False - - @pyaedt_function_handler() - def set_objects_deformation(self, objects): - """Assign deformation objects to a Workbench link. - - Parameters - ---------- - objects : list - List of the deformation objects to assign to the Workbench link. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oDesign.SetObjectDeformation - """ - self.logger.info("Enabling deformation feedback") - try: - self._odesign.SetObjectDeformation(["EnabledObjects:=", objects]) - except: - self.logger.error("Failed to enable the deformation dependence") - return False - else: - self.logger.info("Successfully enabled deformation feedback") - return True - - @pyaedt_function_handler() - def set_objects_temperature(self, objects, ambient_temp=22, create_project_var=False): - """Assign temperatures to objects. - - The materials assigned to the objects must have a thermal modifier. - - Parameters - ---------- - objects : list - List of objects. - ambient_temp : float, optional - Ambient temperature. The default is ``22``. - create_project_var : bool, optional - Whether to create a project variable for the ambient temperature. - The default is ``False``. If ``True,`` ``$AmbientTemp`` is created. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oDesign.SetObjectTemperature - """ - self.logger.info("Set model temperature and enabling Thermal Feedback") - if create_project_var: - self._app.variable_manager["$AmbientTemp"] = str(ambient_temp) + "cel" - var = "$AmbientTemp" - else: - var = str(ambient_temp) + "cel" - vargs1 = [ - "NAME:TemperatureSettings", - "IncludeTemperatureDependence:=", - True, - "EnableFeedback:=", - True, - "Temperatures:=", - ] - vargs2 = [] - for obj in objects: - mat = self[obj].material_name - th = self._app.materials.check_thermal_modifier(mat) - if th: - vargs2.append(obj) - vargs2.append(var) - if not vargs2: - return False - else: - vargs1.append(vargs2) - try: - self._odesign.SetObjectTemperature(vargs1) - except: - self.logger.error("Failed to enable the temperature dependence") - return False - else: - self.logger.info("Assigned Objects Temperature") - return True - - @pyaedt_function_handler() - def _create_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, portonplane): - """Create a sheet from the edge closest to the object. - - Parameters - ---------- - startobj : str - Name of the starting object. - endobject : str - Name of the ending object. - axisdir : int - Axis direction. Options are ``0`` through ``5``. - portonplane : bool - Whether edges are to be on the plane orthogonal to the axis - direction. - - Returns - ------- - str - Name of the sheet. - list - List of float values of the first edge midpoint. - Point in ``[x, y, z]`` coordinates. - list - List of float values of the second edge midpoint. - Point in ``[x, y, z]`` coordinates. - - """ - out, parallel = self.find_closest_edges(startobj, endobject, axisdir) - port_edges = self.get_equivalent_parallel_edges(out, portonplane, axisdir, startobj, endobject) - if port_edges is None or port_edges is False: - port_edges = [] - for e in out: - edge = self.create_object_from_edge(e) - port_edges.append(edge) - edge_0 = port_edges[0].edges[0] - edge_1 = port_edges[1].edges[0] - sheet_name = port_edges[0].name - point0 = edge_0.midpoint - point1 = edge_1.midpoint - self.connect(port_edges) - return sheet_name, point0, point1 - - @pyaedt_function_handler() - def find_point_around(self, objectname, startposition, offset, plane): - """Find the point around an object. - - Parameters - ---------- - objectname : str - Name of the object. - startposition : list - List of the ``[x, y, z]`` coordinates for the starting - position of the object. - offset : - Offset to apply. - plane : str - Coordinate plane of the arc. Choices are ``"YZ"``, - ``"ZX"``, and ``"XY"``. - - - Returns - ------- - list - List of the ``[x, y, z]`` coordinates for the point. - - """ - position = [0, 0, 0] - angle = 0 - if plane == 0: - while angle <= 360: - position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) - position[1] = startposition[1] + offset * math.sin(math.pi * angle / 180) - if objectname in self.get_bodynames_from_position(startposition): - angle = 400 - else: - angle += 90 - elif plane == 1: - while angle <= 360: - position[1] = startposition[1] + offset * math.cos(math.pi * angle / 180) - position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) - if objectname in self.get_bodynames_from_position(startposition): - angle = 400 - else: - angle += 90 - elif plane == 2: - while angle <= 360: - position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) - position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) - if objectname in self.get_bodynames_from_position(startposition): - angle = 400 - else: - angle += 90 - return position - - @pyaedt_function_handler() - def create_sheet_to_ground(self, objectname, groundname=None, axisdir=0, sheet_dim=1): - """Create a sheet between an object and a ground plane. - - The ground plane must be bigger than the object and perpendicular - to one of the three axes. - - Parameters - ---------- - objectname : str - Name of the object. - groundname : str, optional - Name of the ground. The default is ``None``, in which case the - bounding box is used. - axisdir : int, optional - Axis direction. Options are ``0`` through ``5``. The default is ``0``. - sheet_dim : optional - Sheet dimension in millimeters. The default is ``1``. - - Returns - ------- - int - ID of the sheet created. - - References - ---------- - - >>> oEditor.CreatePolyline - """ - if axisdir > 2: - obj_cent = [-1e6, -1e6, -1e6] - else: - obj_cent = [1e6, 1e6, 1e6] - face_ob = None - for face in self[objectname].faces: - center = face.center - if not center: - continue - if axisdir > 2 and center[axisdir - 3] > obj_cent[axisdir - 3]: - obj_cent = center - face_ob = face - elif axisdir <= 2 and center[axisdir] < obj_cent[axisdir]: - obj_cent = center - face_ob = face - vertex = face_ob.vertices - start = vertex[0].position - - if not groundname: - gnd_cent = [] - bounding = self.get_model_bounding_box() - if axisdir < 3: - for i in bounding[0:3]: - gnd_cent.append(float(i)) - else: - for i in bounding[3:]: - gnd_cent.append(float(i)) - else: - ground_plate = self[groundname] - if axisdir > 2: - gnd_cent = [1e6, 1e6, 1e6] - else: - gnd_cent = [-1e6, -1e6, -1e6] - face_gnd = ground_plate.faces - for face in face_gnd: - center = face.center - if not center: - continue - if axisdir > 2 and center[axisdir - 3] < gnd_cent[axisdir - 3]: - gnd_cent = center - elif axisdir <= 2 and center[axisdir] > gnd_cent[axisdir]: - gnd_cent = center - - axisdist = obj_cent[divmod(axisdir, 3)[1]] - gnd_cent[divmod(axisdir, 3)[1]] - if axisdir < 3: - axisdist = -axisdist - - if divmod(axisdir, 3)[1] == 0: - cs = self._app.PLANE.YZ - vector = [axisdist, 0, 0] - elif divmod(axisdir, 3)[1] == 1: - cs = self._app.PLANE.ZX - vector = [0, axisdist, 0] - elif divmod(axisdir, 3)[1] == 2: - cs = self._app.PLANE.XY - vector = [0, 0, axisdist] - - offset = self.find_point_around(objectname, start, sheet_dim, cs) - p1 = self.create_polyline([start, offset]) - p2 = p1.clone().move(vector) - self.connect([p1, p2]) - - return p1 - - @pyaedt_function_handler() - def _get_faceid_on_axis(self, objname, axisdir): - """Get the ID of the face on the axis. - - Parameters - ---------- - objname : str - Name of the object. - axisdir : int - Axis direction. Options are ``1`` through ``5``. - - Returns - ------- - int - ID of the face. - - """ - faces = self.get_object_faces(objname) - face = None - center = None - for f in faces: - try: - c = self.get_face_center(f) - if not face and c: - face = f - center = c - elif axisdir < 3 and c[axisdir] < center[axisdir]: - face = f - center = c - elif axisdir > 2 and c[axisdir - 3] > center[axisdir - 3]: - face = f - center = c - except: - pass - return face - - @pyaedt_function_handler() - def _create_microstrip_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, vfactor=3, hfactor=5): - def duplicate_and_unite(sheet_name, array1, array2, dup_factor): - status, list = self.duplicate_along_line(sheet_name, array1, dup_factor + 1) - status, list2 = self.duplicate_along_line(sheet_name, array2, dup_factor + 1) - list_unite.extend(list) - list_unite.extend(list2) - self.unite(list_unite) - - tol = 1e-6 - out, parallel = self.find_closest_edges(startobj, endobject, axisdir) - port_edges = self.get_equivalent_parallel_edges(out, True, axisdir, startobj, endobject) - if port_edges is None: - return False - sheet_name = port_edges[0].name - point0 = port_edges[0].edges[0].midpoint - point1 = port_edges[1].edges[0].midpoint - len = port_edges[0].edges[0].length - vect = GeometryOperators.v_points(point1, point0) - l1 = out[0].length - l2 = out[1].length - if l1 < l2: - vect_t = [i * (vfactor - 1) for i in vect] - self.move(port_edges[0], vect_t) - else: - vect_t = [i * (1 - vfactor) for i in vect] - self.move(port_edges[1], vect_t) - - self.connect(port_edges) - list_unite = [sheet_name] - dup_factor = divmod((hfactor + 1), 2)[0] - coeff = float(hfactor - 1) / 2 / dup_factor - - if divmod(axisdir, 3)[1] == 0 and abs(vect[1]) < tol: - duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) - elif divmod(axisdir, 3)[1] == 0 and abs(vect[2]) < tol: - duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) - elif divmod(axisdir, 3)[1] == 1 and abs(vect[0]) < tol: - duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) - elif divmod(axisdir, 3)[1] == 1 and abs(vect[2]) < tol: - duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) - elif divmod(axisdir, 3)[1] == 2 and abs(vect[0]) < tol: - duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) - elif divmod(axisdir, 3)[1] == 2 and abs(vect[1]) < tol: - duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) - - return sheet_name, point0, point1 - - @pyaedt_function_handler() - def get_boundaries_name(self): - """Retrieve all boundary names. - - Returns - ------- - list - List of boundary names. Boundaries with multiple modes will return one - boundary for each mode. - - References - ---------- - - >>> oModule.GetBoundaries - """ - if self._app.design_type == "Icepak": - return list(self._app.odesign.GetChildObject("Thermal").GetChildNames()) - else: - return list(self._app.odesign.GetChildObject("Boundaries").GetChildNames()) - - @pyaedt_function_handler() - def set_object_model_state(self, obj_list, model=True): - """Set a list of objects to either models or non-models. - - Parameters - ---------- - obj_list : list - List of objects IDs or names. - model : bool, optional - Whether to set the objects as models. The default is ``True``. - If ``False``, the objects are set as non-models. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ChangeProperty - """ - selections = self.convert_to_selections(obj_list, True) - arguments = [ - "NAME:AllTabs", - [ - "NAME:Geometry3DAttributeTab", - ["NAME:PropServers"] + selections, - ["NAME:ChangedProps", ["NAME:Model", "Value:=", model]], - ], - ] - self._modeler.oeditor.ChangeProperty(arguments) - return True - - @pyaedt_function_handler() - def get_objects_in_group(self, group): - """Retrieve a list of objects belonging to a group. - - Parameters - ---------- - group : str - Name of the group. - - Returns - ------- - list - List of objects belonging to the group. - - References - ---------- - - >>> oEditor.GetObjectsInGroup - """ - if type(group) is not str: - raise ValueError("Group name must be a string") - group_objs = list(self.oeditor.GetObjectsInGroup(group)) - if not group_objs: - return None - return group_objs - - @pyaedt_function_handler() - def get_group_bounding_box(self, group): - """Retrieve the bounding box of a group. - - Parameters - ---------- - group : str - Name of the group. - - Returns - ------- - list - List of six float values representing the bounding box - in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. - - References - ---------- - - >>> oEditor.GetObjectsInGroup - >>> oEditor.GetModelBoundingBox - """ - if type(group) is not str: - raise ValueError("Group name must be a string") - group_objs = list(self.oeditor.GetObjectsInGroup(group)) - if not group_objs: - return None - all_objs = self.object_names - objs_to_unmodel = [i for i in all_objs if i not in group_objs] - if objs_to_unmodel: - vArg1 = ["NAME:Model", "Value:=", False] - self._change_geometry_property(vArg1, objs_to_unmodel) - bounding = self.get_model_bounding_box() - self._odesign.Undo() - else: - bounding = self.get_model_bounding_box() - return bounding - - @pyaedt_function_handler() - def convert_to_selections(self, object_id, return_list=False): - """Convert modeler objects. - - This method converts modeler object or IDs to the corresponding - output according to the following scheme: - - ==================== =========================== - ``object_id`` Return value - ==================== =========================== - - ``int`` object name (str) - ``Object3D`` object name (str) - ``FacePrimitive`` int, face ID - ``EdgePrimitive`` int, edge ID - ``str`` return the same ``str`` - - - - If ``object_id`` is a list, a list is returned according - to the table. If ``object_id`` is a single value, a list - of ``length == 1`` is returned (default). - - - If the second argument, ``return_list``, is set to `False` (default), a - string is returned with elements separated by a comma (,)". - - - Parameters - ---------- - object_id : str, int, list - One or more object IDs whose name will be returned. A list can contain - both strings (object names) and integers (object IDs). - return_list : bool, option - Whether to return a list of the selections. The default is - ``False``, in which case a string of the selections is returned. - If ``True``, a list of the selections is returned. - - Returns - ------- - str or list - Name of the objects corresponding to the one or more object IDs passed as arguments. - - """ - if not isinstance(object_id, list): - object_id = [object_id] - objnames = [] - for el in object_id: - if isinstance(el, int) and el in self.objects: - objnames.append(self.objects[el].name) - elif isinstance(el, int): - objnames.append(el) - elif isinstance(el, Object3d): - objnames.append(el.name) - elif isinstance(el, FacePrimitive) or isinstance(el, EdgePrimitive) or isinstance(el, VertexPrimitive): - objnames.append(el.id) - elif isinstance(el, str): - objnames.append(el) - if return_list: - return objnames - else: - return ",".join([str(i) for i in objnames]) - - @pyaedt_function_handler() - def split(self, objects, plane=None, sides="Both", tool=None, split_crossing_objs=False, delete_invalid_objs=True): - """Split a list of objects. - In case of 3D design possible splitting options are plane, Face Primitive, Edge Primitive or Polyline. - In case of 2D design possible splitting option is plane. - - Parameters - ---------- - objects : str, int, or list - One or more objects to split. A list can contain - both strings (object names) and integers (object IDs). - plane : str, optional - Coordinate plane of the cut or the Application.PLANE object. - The default value is ``None``. - Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``. - If plane or tool parameter are not provided the method returns ``False``. - sides : str, optional - Which side to keep. The default is ``"Both"``, in which case - all objects are kept after the split. Options are ``"Both"``, - ``"NegativeOnly"``, and ``"PositiveOnly"``. - tool : str, int, :class:`pyaedt.modeler.cad.elements3d.FacePrimitive`or - :class:`pyaedt.modeler.cad.elements3d.EdgePrimitive`, optional - For 3D design types is the name, ID, face, edge or polyline used to split the objects. - For 2D design types is the name of the plane used to split the objects. - The default value is ``None``. - If plane or tool parameter are not provided the method returns ``False``. - split_crossing_objs : bool, optional - Whether to split crossing plane objects. - The default is ``False``. - delete_invalid_objs : bool, optional - Whether to delete invalid objects. - The default is ``True``. - - Returns - ------- - list of str - List of split object names. - - References - ---------- - - >>> oEditor.Split - """ - if not plane and not tool or plane and tool: - self.logger.info("One method to split the objects has to be defined.") - return False - objects = self.convert_to_selections(objects) - all_objs = [i for i in self.object_names] - if self._is3d: - if plane and not tool: - tool_type = "PlaneTool" - tool_entity_id = -1 - planes = GeometryOperators.cs_plane_to_plane_str(plane) - selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] - elif tool and not plane: - if isinstance(tool, str): - obj = [f for f in self.object_list if f.name == tool][0] - obj_name = obj.name - if isinstance(obj, Object3d) and obj.object_type != "Line": - obj = obj.faces[0] - tool_type = "FaceTool" - elif obj.object_type == "Line": - obj = obj.edges[0] - tool_type = "EdgeTool" - elif isinstance(tool, int): - # check whether tool it's an object Id - if tool in self.objects.keys(): - obj = self.objects[tool] - else: - # check whether tool is an Id of an object face - objs = [o for o in self.object_list for f in o.faces if f.id == tool] - if objs: - obj = objs[0] - else: - self.logger.info("Tool must be a sheet object or a face of an object.") - return False - if isinstance(obj, FacePrimitive) or isinstance(obj, Object3d) and obj.object_type != "Line": - obj_name = obj.name - obj = obj.faces[0] - tool_type = "FaceTool" - elif obj.object_type == "Line": - obj_name = obj.name - obj = obj.edges[0] - tool_type = "EdgeTool" - elif isinstance(tool, FacePrimitive): - for o in self.object_list: - for f in o.faces: - if f.id == tool.id: - obj_name = o.name - obj = f - tool_type = "FaceTool" - elif isinstance(tool, EdgePrimitive): - for o in self.object_list: - for e in o.edges: - if e.id == tool.id: - obj_name = o.name - obj = e - tool_type = "EdgeTool" - elif isinstance(tool, Polyline) or tool.object_type != "Line": - for o in self.object_list: - if o.name == tool.name: - obj_name = tool.name - obj = o.edges[0] - tool_type = "EdgeTool" - else: - self.logger.error("Face tool part has to be provided as a string (name) or an int (face id).") - return False - planes = "Dummy" - tool_type = tool_type - tool_entity_id = obj.id - selections = [ - "NAME:Selections", - "Selections:=", - objects, - "NewPartsModelFlag:=", - "Model", - "ToolPart:=", - obj_name, - ] - else: - if not plane and tool or not plane: - self.logger.info("For 2D design types only planes can be defined.") - return False - elif plane: - tool_type = "PlaneTool" - tool_entity_id = -1 - planes = GeometryOperators.cs_plane_to_plane_str(plane) - selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] - self.oeditor.Split( - selections, - [ - "NAME:SplitToParameters", - "SplitPlane:=", - planes, - "WhichSide:=", - sides, - "ToolType:=", - tool_type, - "ToolEntityID:=", - tool_entity_id, - "SplitCrossingObjectsOnly:=", - split_crossing_objs, - "DeleteInvalidObjects:=", - delete_invalid_objs, - ], - ) - self.refresh_all_ids() - return [objects] + [i for i in self.object_names if i not in all_objs] - - @pyaedt_function_handler() # TODO: Deprecate this and add duplicate as an option in the mirror method. - def duplicate_and_mirror( - self, - objid, - position, - vector, - is_3d_comp=False, - duplicate_assignment=True, - ): - """Duplicate and mirror a selection. - - Parameters - ---------- - objid : str, int, or Object3d - Name or ID of the object. - position : float - List of the ``[x, y, z]`` coordinates or - Application.Position object for the selection. - vector : float - List of the ``[x1, y1, z1]`` coordinates or - Application.Position object for the vector. - is_3d_comp : bool, optional - If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. - duplicate_assignment : bool, optional - If True, the method duplicates selection assignments. The default value is ``True``. - - Returns - ------- - list - List of objects created or an empty list. - - References - ---------- - - >>> oEditor.DuplicateMirror - """ - return self.mirror( - objid, position, vector, duplicate=True, is_3d_comp=is_3d_comp, duplicate_assignment=duplicate_assignment - ) - # selections = self.convert_to_selections(objid) - - @pyaedt_function_handler() - def mirror(self, objid, position, vector, duplicate=False, is_3d_comp=False, duplicate_assignment=True): - """Mirror a selection. - - Parameters - ---------- - objid : str, int, or Object3d - Name or ID of the object. - position : int or float - List of the ``[x, y, z]`` coordinates or the - ``Application.Position`` object for the selection. - duplicate : bool, optional - Whether if duplicate the object before mirror or not. Default is ``False``. - is_3d_comp : bool, optional - Whether the component is 3D. The default is ``False``. If ``True``, the method - tries to return the duplicated list of 3D components. - vector : float - List of the ``[x1, y1, z1]`` coordinates or - the ``Application.Position`` object for the vector. - duplicate_assignment : bool, optional - Whether to duplicate selection assignments. The default is ``True``. - - Returns - ------- - bool, list - List of objects created or ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Mirror - >>> oEditor.DuplicateMirror - """ - selections = self.convert_to_selections(objid) - Xpos, Ypos, Zpos = self._pos_with_arg(position) - Xnorm, Ynorm, Znorm = self._pos_with_arg(vector) - if duplicate: - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:DuplicateToMirrorParameters"] - vArg2.append("DuplicateMirrorBaseX:="), vArg2.append(Xpos) - vArg2.append("DuplicateMirrorBaseY:="), vArg2.append(Ypos) - vArg2.append("DuplicateMirrorBaseZ:="), vArg2.append(Zpos) - vArg2.append("DuplicateMirrorNormalX:="), vArg2.append(Xnorm) - vArg2.append("DuplicateMirrorNormalY:="), vArg2.append(Ynorm) - vArg2.append("DuplicateMirrorNormalZ:="), vArg2.append(Znorm) - vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] - if is_3d_comp: - orig_3d = [i for i in self.user_defined_component_names] - added_objs = self.oeditor.DuplicateMirror(vArg1, vArg2, vArg3) - self.add_new_objects() - if is_3d_comp: - added_3d_comps = [i for i in self.user_defined_component_names if i not in orig_3d] - if added_3d_comps: - self.logger.info("Found 3D Components Duplication") - return added_3d_comps - return added_objs - else: - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:MirrorParameters"] - vArg2.append("MirrorBaseX:="), vArg2.append(Xpos) - vArg2.append("MirrorBaseY:="), vArg2.append(Ypos) - vArg2.append("MirrorBaseZ:="), vArg2.append(Zpos) - vArg2.append("MirrorNormalX:="), vArg2.append(Xnorm) - vArg2.append("MirrorNormalY:="), vArg2.append(Ynorm) - vArg2.append("MirrorNormalZ:="), vArg2.append(Znorm) - - self.oeditor.Mirror(vArg1, vArg2) - return True - - @pyaedt_function_handler() - def move(self, objid, vector): - """Move objects from a list. - - Parameters - ---------- - objid : list, Position object - List of object IDs. - vector : list - Vector of the direction move. It can be a list of the ``[x, y, z]`` - coordinates or a Position object. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Move - """ - Xvec, Yvec, Zvec = self._pos_with_arg(vector) - szSelections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", szSelections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:TranslateParameters"] - vArg2.append("TranslateVectorX:="), vArg2.append(Xvec) - vArg2.append("TranslateVectorY:="), vArg2.append(Yvec) - vArg2.append("TranslateVectorZ:="), vArg2.append(Zvec) - - if self.oeditor is not None: - self.oeditor.Move(vArg1, vArg2) - return True - - @pyaedt_function_handler() - def duplicate_around_axis( - self, - objid, - cs_axis, - angle=90, - nclones=2, - create_new_objects=True, - is_3d_comp=False, - duplicate_assignment=True, - ): - """Duplicate a selection around an axis. - - Parameters - ---------- - objid : list, str, int, Object3d or UserDefinedComponent - Name or ID of the object. - cs_axis : - Coordinate system axis or the Application.AXIS object. - angle : float, optional - Angle rotation in degees. The default is ``90``. - nclones : int, optional - Number of clones. The default is ``2``. - create_new_objects : - Whether to create the copies as new objects. The - default is ``True``. - is_3d_comp : bool, optional - If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. - duplicate_assignment : bool, optional - If True, the method duplicates selection assignments. The default value is ``True``. - - Returns - ------- - tuple - - References - ---------- - - >>> oEditor.DuplicateAroundAxis - """ - selections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = [ - "NAME:DuplicateAroundAxisParameters", - "CreateNewObjects:=", - create_new_objects, - "WhichAxis:=", - GeometryOperators.cs_axis_str(cs_axis), - "AngleStr:=", - self._arg_with_dim(angle, "deg"), - "Numclones:=", - str(nclones), - ] - vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] - added_objs = self.oeditor.DuplicateAroundAxis(vArg1, vArg2, vArg3) - self._duplicate_added_objects_tuple() - if is_3d_comp: - return self._duplicate_added_components_tuple() - return True, list(added_objs) - - def _duplicate_added_objects_tuple(self): - added_objects = self.add_new_objects() - if added_objects: - return True, added_objects - else: - return False, [] - - def _duplicate_added_components_tuple(self): - added_component = self.add_new_user_defined_component() - if added_component: - return True, added_component - else: - return False, [] - - @pyaedt_function_handler() - def duplicate_along_line( - self, - objid, - vector, - nclones=2, - attachObject=False, - is_3d_comp=False, - duplicate_assignment=True, - ): - """Duplicate a selection along a line. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - vector : list - List of ``[x1,y1,z1]`` coordinates or the Application.Position object for - the vector. - attachObject : bool, optional - The default is ``False``. - nclones : int, optional - Number of clones. The default is ``2``. - is_3d_comp : bool, optional - If True, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. - duplicate_assignment : bool, optional - If True, the method duplicates selection assignments. The default value is ``True``. - - Returns - ------- - tuple - - References - ---------- - - >>> oEditor.DuplicateAlongLine - """ - selections = self.convert_to_selections(objid) - Xpos, Ypos, Zpos = self._pos_with_arg(vector) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:DuplicateToAlongLineParameters"] - vArg2.append("CreateNewObjects:="), vArg2.append(not attachObject) - vArg2.append("XComponent:="), vArg2.append(Xpos) - vArg2.append("YComponent:="), vArg2.append(Ypos) - vArg2.append("ZComponent:="), vArg2.append(Zpos) - vArg2.append("Numclones:="), vArg2.append(str(nclones)) - vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] - self.oeditor.DuplicateAlongLine(vArg1, vArg2, vArg3) - if is_3d_comp: - return self._duplicate_added_components_tuple() - if attachObject: - return True, [] - return self._duplicate_added_objects_tuple() - - @pyaedt_function_handler() - def thicken_sheet(self, objid, thickness, bBothSides=False): - """Thicken the sheet of the selection. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - thickness : float, str - Amount to thicken the sheet by. - bBothSides : bool, optional - Whether to thicken the sheet on both side. The default is ``False``. - - Returns - ------- - pyaedt.modeler.cad.object3d.Object3d - - References - ---------- - - >>> oEditor.ThickenSheet - """ - selections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:SheetThickenParameters"] - vArg2.append("Thickness:="), vArg2.append(self._arg_with_dim(thickness)) - vArg2.append("BothSides:="), vArg2.append(bBothSides) - - self.oeditor.ThickenSheet(vArg1, vArg2) - - if isinstance(objid, list): - obj_list = [] - for objl in objid: - obj_list.append(self.update_object(objl)) - return obj_list - return self.update_object(objid) - - @pyaedt_function_handler() - def sweep_along_normal(self, obj_name, face_id, sweep_value=0.1): - """Sweep the selection along the vector. - - Parameters - ---------- - obj_name : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - face_id : int or list - Face or list of faces to sweep. - sweep_value : float, optional - Sweep value. The default is ``0.1``. - - Returns - ------- - pyaedt.modeler.cad.object3d.Object3d - - References - ---------- - - >>> oEditor.SweepFacesAlongNormal - """ - if not isinstance(face_id, list): - face_id = [face_id] - selections = self.convert_to_selections(obj_name) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:Parameters"] - vArg2.append( - [ - "NAME:SweepFaceAlongNormalToParameters", - "FacesToDetach:=", - face_id, - "LengthOfSweep:=", - self._arg_with_dim(sweep_value), - ] - ) - - objs = self._all_object_names - self.oeditor.SweepFacesAlongNormal(vArg1, vArg2) - self.cleanup_objects() - objs2 = self._all_object_names - obj = [i for i in objs2 if i not in objs] - for el in obj: - self._create_object(el) - if obj: - if len(obj) > 1: - return [self.update_object(self[o]) for o in obj] - else: - return self.update_object(self[obj[0]]) - return False - - @pyaedt_function_handler() - def sweep_along_vector(self, objid, sweep_vector, draft_angle=0, draft_type="Round"): - """Sweep the selection along a vector. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - sweep_vector : float - List of ``[x1, y1, z1]`` coordinates or Application.Position object for - the vector. - draft_angle : float, optional - Draft angle in degrees. The default is ``0``. - draft_type : str - Type of the draft. Options are ``"Round"``, ``"Natural"``, - and ``"Extended"``. The default is ``"Round"``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SweepAlongVector - """ - selections = self.convert_to_selections(objid) - vectorx, vectory, vectorz = self._pos_with_arg(sweep_vector) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:VectorSweepParameters"] - vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) - vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) - vArg2.append("SweepVectorX:="), vArg2.append(vectorx) - vArg2.append("SweepVectorY:="), vArg2.append(vectory) - vArg2.append("SweepVectorZ:="), vArg2.append(vectorz) - - self.oeditor.SweepAlongVector(vArg1, vArg2) - - return self.update_object(objid) - - @pyaedt_function_handler() - def sweep_along_path( - self, objid, sweep_object, draft_angle=0, draft_type="Round", is_check_face_intersection=False, twist_angle=0 - ): - """Sweep the selection along a path. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - sweep_object : str, int - Name or ID of the sweep. - draft_angle : float, optional - Draft angle in degrees. The default is ``0``. - draft_type : str - Type of the draft. Options are ``"Round"``, ``"Natural"``, - and ``"Extended"``. The default is ``"Round"``. - is_check_face_intersection : bool, optional - The default is ``False``. - twist_angle : float, optional - Twist angle in degrees. The default is ``0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SweepAlongPath - """ - selections = self.convert_to_selections(objid) + "," + self.convert_to_selections(sweep_object) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:PathSweepParameters"] - vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) - vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) - vArg2.append("CheckFaceFaceIntersection:="), vArg2.append(is_check_face_intersection) - vArg2.append("TwistAngle:="), vArg2.append(str(twist_angle) + "deg") - - self.oeditor.SweepAlongPath(vArg1, vArg2) - - return self.update_object(objid) - - @pyaedt_function_handler() - def sweep_around_axis(self, objid, cs_axis, sweep_angle=360, draft_angle=0, number_of_segments=0): - """Sweep the selection around the axis. - - Parameters - ---------- - objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` - Name or ID of the object. - cs_axis : - Coordinate system axis or the Application.AXIS object. - sweep_angle : float - Sweep angle in degrees. The default is ``360``. - draft_angle : float - Draft angle in degrees. The default is ``0``. - number_of_segments : int, optional - Number of segments of the sweep operation. Default is ``0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SweepAroundAxis - """ - selections = self.convert_to_selections(objid) - - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = [ - "NAME:AxisSweepParameters", - "DraftAngle:=", - self._arg_with_dim(draft_angle, "deg"), - "DraftType:=", - "Round", - "CheckFaceFaceIntersection:=", - False, - "SweepAxis:=", - GeometryOperators.cs_axis_str(cs_axis), - "SweepAngle:=", - self._arg_with_dim(sweep_angle, "deg"), - "NumOfSegments:=", - str(number_of_segments), - ] - - self.oeditor.SweepAroundAxis(vArg1, vArg2) - - return self.update_object(objid) - - @pyaedt_function_handler() - def section(self, object_list, plane, create_new=True, section_cross_object=False): - """Section the selection. - - Parameters - ---------- - object_list : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` - One or more objects to section. - plane : str - Coordinate plane or Application.PLANE object. - Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``.' - create_new : bool, optional - The default is ``True``, but this parameter has no effect. - section_cross_object : bool, optional - The default is ``False``, but this parameter has no effect. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Section - """ - section_plane = GeometryOperators.cs_plane_to_plane_str(plane) - - selections = self.convert_to_selections(object_list) - - self.oeditor.Section( - ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], - [ - "NAME:SectionToParameters", - "CreateNewObjects:=", - create_new, - "SectionPlane:=", - section_plane, - "SectionCrossObject:=", - section_cross_object, - ], - ) - self.refresh_all_ids() - return True - - @pyaedt_function_handler() - def separate_bodies(self, object_list, create_group=False): - """Separate bodies of the selection. - - Parameters - ---------- - object_list : list - List of objects to separate. - create_group : bool, optional - Whether to create a group. The default is ``False``. - - Returns - ------- - pyaedt.modeler.Object3d.Object3d, bool - 3D object. - ``False`` when failed. - - References - ---------- - - >>> oEditor.SeparateBody - """ - try: - selections = self.convert_to_selections(object_list) - all_objs = [i for i in self.object_names] - self.oeditor.SeparateBody( - ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], - ["CreateGroupsForNewObjects:=", create_group], - ) - self.refresh_all_ids() - new_objects_list_names = [selections] + [i for i in self.object_names if i not in all_objs] - new_objects_list = [] - for obj in self.object_list: - for new_obj in new_objects_list_names: - if obj.name == new_obj: - new_objects_list.append(obj) - return new_objects_list - except: - return False - - @pyaedt_function_handler() - def rotate(self, objid, cs_axis, angle=90.0, unit="deg"): - """Rotate the selection. - - Parameters - ---------- - objid : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` - ID of the object. - cs_axis - Coordinate system axis or the Application.AXIS object. - angle : float - Angle of rotation. The units, defined by ``unit``, can be either - degrees or radians. The default is ``90.0``. - unit : text, optional - Units for the angle. Options are ``"deg"`` or ``"rad"``. - The default is ``"deg"``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Rotate - """ - selections = self.convert_to_selections(objid) - vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] - vArg2 = ["NAME:RotateParameters"] - vArg2.append("RotateAxis:="), vArg2.append(GeometryOperators.cs_axis_str(cs_axis)) - vArg2.append("RotateAngle:="), vArg2.append(self._arg_with_dim(angle, unit)) - - if self.oeditor is not None: - self.oeditor.Rotate(vArg1, vArg2) - - return True - - @pyaedt_function_handler() - def subtract(self, blank_list, tool_list, keep_originals=True, **kwargs): - """Subtract objects. - - Parameters - ---------- - blank_list : str, Object3d, int or List of str, int and Object3d. - List of objects to subtract from. The list can be of - either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. - tool_list : list - List of objects to subtract. The list can be of - either Object3d objects or object IDs. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Subtract - """ - if "keepOriginals" in kwargs: - warnings.warn("keepOriginals has been deprecated. use keep_originals.", DeprecationWarning) - keep_originals = kwargs["keepOriginals"] - szList = self.convert_to_selections(blank_list) - szList1 = self.convert_to_selections(tool_list) - - vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] - vArg2 = ["NAME:SubtractParameters", "KeepOriginals:=", keep_originals] - - self.oeditor.Subtract(vArg1, vArg2) - if not keep_originals: - self.cleanup_objects() - - return True - - @pyaedt_function_handler() - def imprint(self, blank_list, tool_list, keep_originals=True): - """Imprin an object list on another object list. - - Parameters - ---------- - blank_list : list of Object3d or list of int - List of objects to imprint from. The list can be of - either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. - tool_list : list of Object3d or list of int - List of objects to imprint. The list can be of - either Object3d objects or object IDs. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Imprint - """ - szList = self.convert_to_selections(blank_list) - szList1 = self.convert_to_selections(tool_list) - - vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] - vArg2 = ["NAME:ImprintParameters", "KeepOriginals:=", keep_originals] - - self.oeditor.Imprint(vArg1, vArg2) - if not keep_originals: - self.cleanup_objects() - return True - - @pyaedt_function_handler() - def _imprint_projection(self, tool_list, keep_originals=True, normal=True, vector_direction=None, distance="1mm"): - szList1 = self.convert_to_selections(tool_list) - - varg1 = ["NAME:Selections", "Selections:=", szList1] - varg2 = [ - "NAME:ImprintProjectionParameters", - "KeepOriginals:=", - keep_originals, - "NormalProjection:=", - normal, - ] - if not normal: - varg2.append("Distance:=") - varg2.append(self._app.value_with_units(distance)) - varg2.append("DirectionX:=") - varg2.append(self._app.value_with_units(vector_direction[0])) - varg2.append("DirectionY:=") - varg2.append(self._app.value_with_units(vector_direction[1])) - varg2.append("DirectionZ:=") - varg2.append(self._app.value_with_units(vector_direction[2])) - - self.oeditor.ImprintProjection(varg1, varg2) - if not keep_originals: - self.cleanup_objects() - return True - - @pyaedt_function_handler - def imprint_normal_projection( - self, - tool_list, - keep_originals=True, - ): - """Imprint the normal projection of objects over a sheet. - - Parameters - ---------- - tool_list : list - List of objects to imprint. The list can be of - either Object3d objects or object IDs. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ImprintProjection - """ - return self._imprint_projection(tool_list, keep_originals, True) - - @pyaedt_function_handler - def imprint_vector_projection( - self, - tool_list, - vector_points, - distance, - keep_originals=True, - ): - """Imprint the projection of objects over a sheet with a specified vector and distance. - - Parameters - ---------- - tool_list : list - List of objects to imprint. The list can be of - either Object3d objects or object IDs. - vector_points : list - List of [x,y,z] vector projection. - distance : str, int - Distance of Projection. - keep_originals : bool, optional - Whether to keep the original objects. The default is ``True``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ImprintProjection - """ - return self._imprint_projection(tool_list, keep_originals, False, vector_points, distance) - - @pyaedt_function_handler() - def purge_history(self, theList): - """Purge history objects from object names. - - Parameters - ---------- - theList : list - List of object names to purge. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.PurgeHistory - """ - szList = self.convert_to_selections(theList) - - vArg1 = ["NAME:Selections", "Selections:=", szList, "NewPartsModelFlag:=", "Model"] - - self.oeditor.PurgeHistory(vArg1) - return True - - @pyaedt_function_handler() - def get_model_bounding_box(self): - """Retrieve the model bounding box. - - - Returns - ------- - List - List of six float values representing the bounding box - in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - bb = list(self.oeditor.GetModelBoundingBox()) - bound = [float(b) for b in bb] - return bound - - @pyaedt_function_handler() - def unite(self, unite_list, purge=False, keep_originals=False): - """Unite objects from a list. - - Parameters - ---------- - unite_list : list - List of objects. - purge : bool, optional - Purge history after unite. Default is False. - keep_originals : bool, optional - Keep original objects used for the operation. Default is False. - - Returns - ------- - str - The united object that is the first in the list. - - References - ---------- - - >>> oEditor.Unite - """ - slice = min(100, len(unite_list)) - num_objects = len(unite_list) - remaining = num_objects - objs_groups = [] - while remaining > 1: - objs = unite_list[:slice] - szSelections = self.convert_to_selections(objs) - vArg1 = ["NAME:Selections", "Selections:=", szSelections] - vArg2 = ["NAME:UniteParameters", "KeepOriginals:=", keep_originals] - if settings.aedt_version > "2022.2": - vArg2.append("TurnOnNBodyBoolean:=") - vArg2.append(True) - self.oeditor.Unite(vArg1, vArg2) - if szSelections.split(",")[0] in self.unclassified_names: - self.logger.error("Error in uniting objects.") - self._odesign.Undo() - self.cleanup_objects() - return False - elif purge: - self.purge_history(objs[0]) - objs_groups.append(objs[0]) - remaining -= slice - if remaining > 0: - unite_list = unite_list[slice:] - if remaining > 0: - objs_groups.extend(unite_list) - self.cleanup_objects() - if len(objs_groups) > 1: - return self.unite(objs_groups, purge=purge) - self.logger.info("Union of {} objects has been executed.".format(num_objects)) - return self.convert_to_selections(unite_list[0], False) - - @pyaedt_function_handler() - def clone(self, objid): - """Clone objects from a list of object IDs. - - Parameters - ---------- - objid : list - List of object IDs. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - List - List of names of objects cloned when successful. - - References - ---------- - - >>> oEditor.Copy - >>> oEditor.Paste - """ - self.copy(objid) - new_objects = self.paste() - return True, new_objects - - @pyaedt_function_handler() - def copy(self, object_list): - """Copy objects to the clipboard. - - Parameters - ---------- - object_list : list - List of objects (IDs or names). - - Returns - ------- - list - List of names of the objects copied when successful. - - References - ---------- - - >>> oEditor.Copy - """ - # convert to string - - try: - selections = self.convert_to_selections(object_list) - vArg1 = ["NAME:Selections", "Selections:=", selections] - self.oeditor.Copy(vArg1) - return selections - except AttributeError: - self.logger.error("Unable to copy selections to clipboard.") - return None - - @pyaedt_function_handler() - def paste(self): - """Paste objects from the clipboard. - - Returns - ------- - list - List of passed objects. - - References - ---------- - - >>> oEditor.Paste - """ - self.oeditor.Paste() - new_objects = self.add_new_objects() - return new_objects - - @pyaedt_function_handler() - def intersect(self, theList, keep_originals=False, **kwargs): - """Intersect objects from a list. - - Parameters - ---------- - theList : list - List of objects. - keep_originals : bool, optional - Whether to keep the original object. The default is ``False``. - - Returns - ------- - str - Retrieve the resulting 3D Object when succeeded. - - References - ---------- - - >>> oEditor.Intersect - """ - if "keeporiginal" in kwargs: - warnings.warn("keeporiginal has been deprecated. use keep_originals.", DeprecationWarning) - keep_originals = kwargs["keeporiginal"] - unclassified = list(self.oeditor.GetObjectsInGroup("Unclassified")) - szSelections = self.convert_to_selections(theList) - - vArg1 = ["NAME:Selections", "Selections:=", szSelections] - vArg2 = ["NAME:IntersectParameters", "KeepOriginals:=", keep_originals] - - self.oeditor.Intersect(vArg1, vArg2) - unclassified1 = list(self.oeditor.GetObjectsInGroup("Unclassified")) - if unclassified != unclassified1: - self._odesign.Undo() - self.logger.error("Error in intersection. Reverting Operation") - return - self.cleanup_objects() - self.logger.info("Intersection Succeeded") - return self.convert_to_selections(theList[0], False) - - @pyaedt_function_handler() - def connect(self, theList): - """Connect objects from a list. - - Parameters - ---------- - theList : list - List of objects. - - Returns - ------- - pyaedt.modeler.Object3d.Object3d, bool - 3D object. - ``False`` when failed. - - References - ---------- - - >>> oEditor.Connect - """ - try: - unclassified_before = list(self.unclassified_names) - szSelections = self.convert_to_selections(theList) - szSelections_list = szSelections.split(",") - vArg1 = ["NAME:Selections", "Selections:=", szSelections] - - self.oeditor.Connect(vArg1) - if unclassified_before != self.unclassified_names: - self._odesign.Undo() - self.logger.error("Error in connection. Reverting Operation") - return False - - self.cleanup_objects() - self.logger.info("Connection Correctly created") - - self.refresh_all_ids() - objects_list_after_connection = [ - obj - for obj in self.object_list - for sel in set(szSelections_list).intersection(self.object_names) - if obj.name == sel - ] - return objects_list_after_connection - except: - return False - - @pyaedt_function_handler() - def chassis_subtraction(self, chassis_part): - """Subtract all non-vacuum objects from the main chassis object. - - Parameters - ---------- - chassis_part : str - Name of the main chassis object. - - References - ---------- - - >>> oEditor.Subtract - """ - self.logger.info("Subtract all objects from Chassis object - exclude vacuum objs") - mat_names = self._omaterial_manager.GetNames() - num_obj_start = self.oeditor.GetNumObjects() - blank_part = chassis_part - # in main code this object will need to be determined automatically eg by name such as chassis or sheer size - self.logger.info("Blank Part in Subtraction = " + str(blank_part)) - """ - check if blank part exists, if not, skip subtraction - """ - tool_parts = list(self.oeditor.GetObjectsInGroup("Solids")) - tool_parts.remove(blank_part) - for mat in mat_names: - if str(mat).lower() == "vacuum": - objnames = self.oeditor.GetObjectsByMaterial(mat) - for obj in objnames: - tool_parts.remove(obj) - # tool_parts_final=list(set(tool_parts).difference(set(objnames))) - tool_parts = ",".join(tool_parts) - num_obj_end = self.oeditor.GetNumObjects() - self.subtract(blank_part, tool_parts, True) - - self.logger.info("Subtraction Objs - Initial: " + str(num_obj_start) + " , Final: " + str(num_obj_end)) - - @pyaedt_function_handler() - def _offset_on_plane(self, i, offset): - """Offset the object on a plane. - - Parameters - ---------- - i : - - offset : - Offset to apply. - - Returns - ------- - tuple - Position of object after offset is applied. - - """ - if i > 7: - off1 = 0 - elif i % 4 == 0 or i % 4 == 1: - off1 = offset - else: - off1 = -offset - if 3 < i < 8: - off2 = 0 - elif i % 2 == 0: - off2 = offset - else: - off2 = -offset - if i < 4: - off3 = 0 - elif i != 4 and i != 7 and i != 8 and i != 11: - off3 = -offset - else: - off3 = +offset - return off1, off2, off3 - - @pyaedt_function_handler() - def check_plane(self, obj, faceposition, offset=1): - """Check for the plane that is defined as the face for an object. - - Parameters - ---------- - obj : str - Name of the object. - faceposition : list - List of the ``[x, y, z]`` coordinates for the position of the face. - offset : optional - Offset to apply. The default is ``1``. - - Returns - ------- - str - Name of the plane. It can be "XY", "XZ" or "YZ". - - """ - - Xvec, Yvec, Zvec = self._pos_with_arg(faceposition) - - if isinstance(obj, int): - obj = self.objects[obj].name - plane = None - found = False - i = 0 - while not found: - off1, off2, off3 = self._offset_on_plane(i, offset) - vArg1 = ["NAME:FaceParameters"] - vArg1.append("BodyName:="), vArg1.append(obj) - vArg1.append("XPosition:="), vArg1.append(Xvec + "+" + self._arg_with_dim(off1)) - vArg1.append("YPosition:="), vArg1.append(Yvec + "+" + self._arg_with_dim(off2)) - vArg1.append("ZPosition:="), vArg1.append(Zvec + "+" + self._arg_with_dim(off3)) - try: - face_id = self.oeditor.GetFaceByPosition(vArg1) - if i < 4: - plane = "XY" - elif i < 8: - plane = "XZ" - else: - plane = "YZ" - found = True - except: - i = i + 1 - if i > 11: - found = True - - return plane - - @pyaedt_function_handler() - def get_matched_object_name(self, search_string): - """Retrieve the name of the matched object. - - Parameters - ---------- - search_string : str - Text string to search for. - - - Returns - ------- - str - Name of the matched object. - - References - ---------- - - >>> oEditor.GetMatchedObjectName - """ - return self.oeditor.GetMatchedObjectName(search_string) - - @pyaedt_function_handler() - def clean_objects_name(self, main_part_name): - """Clean the names of the objects for a main part. - - Parameters - ---------- - main_part_name : str - Name of the main part. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.RenamePart - """ - # import os.path - # (CADPath, CADFilename) = os.path.split(CADFile) - # (CADName, CADExt) = os.path.splitext(CADFilename) - CADSuffix = main_part_name + "_" - objNames = self.oeditor.GetMatchedObjectName(CADSuffix + "*") - for name in objNames: - RenameArgs = {} - RenameArgs["NAME"] = "Rename Data" - RenameArgs["Old Name"] = name - RenameArgs["New Name"] = name.replace(CADSuffix, "") - self.oeditor.RenamePart(RenameArgs) - return True - - @pyaedt_function_handler() - def create_airbox(self, offset=0, offset_type="Absolute", defname="AirBox_Auto"): - """Create an airbox that is as big as the bounding extension of the project. - - Parameters - ---------- - offset : - Double offset value to apply on the airbox faces versus the bounding box. - The default is ``0``. - offset_type : str - Type of the offset. Options are ``"Absolute"`` and ``"Relative"``. - The default is ``"Absolute"``. If ``"Relative"``, the offset input - is between 0 and 100. - defname : str, optional - Name of the airbox. The default is ``"AirBox_Auto"``. - - Returns - ------- - int - ID of the airbox created. - - References - ---------- - - >>> oEditor.CreateBox - """ - self.logger.info("Adding Airbox to the Bounding ") - - bound = self.get_model_bounding_box() - if offset_type == "Absolute": - offset1 = offset2 = offset3 = offset - else: - offset1 = (bound[3] - bound[0]) * offset / 100 - offset2 = (bound[4] - bound[1]) * offset / 100 - offset3 = (bound[5] - bound[2]) * offset / 100 - startpos = self.Position(bound[0] - offset1, bound[1] - offset2, bound[2] - offset3) - - dim = [] - dim.append(bound[3] - bound[0] + 2 * offset1) - dim.append(bound[4] - bound[1] + 2 * offset2) - dim.append(bound[5] - bound[2] + 2 * offset3) - airid = self.create_box(startpos, dim, defname) - return airid - - @pyaedt_function_handler() - def create_air_region(self, x_pos=0, y_pos=0, z_pos=0, x_neg=0, y_neg=0, z_neg=0, is_percentage=True): - """Create an air region. - - Parameters - ---------- - x_pos : float or str, optional - If float, padding in the +X direction in modeler units. - If str, padding with units in the +X direction. - The default is ``0``. - y_pos : float or str, optional - If float, padding in the +Y direction in modeler units. - If str, padding with units in the +Y direction. - The default is ``0``. - z_pos : float or str, optional - If float, padding in the +Z direction in modeler units. - If str, padding with units in the +Z direction. - The default is ``0``. - x_neg : float or str, optional - If float, padding in the -X direction in modeler units. - If str, padding with units in the -X direction. - The default is ``0``. - y_neg : float or str, optional - If float, padding in the -Y direction in modeler units. - If str, padding with units in the -Y direction. - The default is ``0``. - z_neg : float or str, optional - If float, padding in the -Z direction in modeler units. - If str, padding with units in the -Z direction. - The default is ``0``. - is_percentage : bool, optional - Region definition in percentage or absolute value. The default is `True``. - - Returns - ------- - :class:`pyaedt.modeler.cad.object3d.Object3d` - 3D object. - - References - ---------- - - >>> oEditor.CreateRegion - """ - return self.create_region([x_pos, y_pos, z_pos, x_neg, y_neg, z_neg], is_percentage) - - @pyaedt_function_handler() - def edit_region_dimensions(self, listvalues): - """Modify the dimensions of the region. - - Parameters - ---------- - listvalues : list - List of the padding percentages along all six directions in - the form ``[+X, -X, +Y, -Y, +Z, -Z]``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ChangeProperty - """ - arg = ["NAME:AllTabs"] - arg2 = ["NAME:Geometry3DCmdTab", ["NAME:PropServers", "Region:CreateRegion:1"]] - arg3 = ["NAME:ChangedProps"] - p = ["+X", "-X", "+Y", "-Y", "+Z", "-Z"] - for label, value in zip(p, listvalues): - padding = [] - padding.append("NAME:" + label + " Padding Data") - padding.append("Value:=") - padding.append(str(value)) - arg3.append(padding) - arg2.append(arg3) - arg.append(arg2) - self.oeditor.ChangeProperty(arg) - return True - - @pyaedt_function_handler() - def create_face_list(self, face_list, name=None): - """Create a list of faces given a list of face ID or a list of objects. - - Parameters - ---------- - face_list : list - List of face ID or list of objects - - name : str, optional - Name of the new list. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.Lists` - List object when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateEntityList - """ - if name: - for i in self.user_lists: - if i.name == name: - self.logger.warning("A List with the specified name already exists!") - return i - face_list = self.convert_to_selections(face_list, True) - user_list = Lists(self) - list_type = "Face" - if user_list: - result = user_list.create( - object_list=face_list, - name=name, - type=list_type, - ) - if result: - return user_list - else: - self._app.logger.error("Wrong object definition. Review object list and type") - return False - else: - self._app.logger.error("User list object could not be created") - return False - - @pyaedt_function_handler() - def create_object_list(self, object_list, name=None): - """Create an object list given a list of object names. - - Parameters - ---------- - object_list : list - List of object names. - name : str, optional - Name of the new object list. - - Returns - ------- - :class:`pyaedt.modeler.Modeler.Lists` - List object when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateEntityList - """ - if name: - for i in self.user_lists: - if i.name == name: - self.logger.warning("A List with the specified name already exists!") - return i - object_list = self.convert_to_selections(object_list, True) - user_list = Lists(self) - list_type = "Object" - if user_list: - result = user_list.create( - object_list=object_list, - name=name, - type=list_type, - ) - if result: - return user_list - else: - self._app.logger.error("Wrong object definition. Review object list and type") - return False - else: - self._app.logger.error("User list object could not be created") - return False - - @pyaedt_function_handler() - def generate_object_history(self, objectname): - """Generate history for the object. - - Parameters - ---------- - objectname : str - Name of the history object. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.GenerateHistory - """ - objectname = self.convert_to_selections(objectname) - self.oeditor.GenerateHistory( - ["NAME:Selections", "Selections:=", objectname, "NewPartsModelFlag:=", "Model", "UseCurrentCS:=", True] - ) - self.cleanup_objects() - return True - - @pyaedt_function_handler() - def create_faceted_bondwire_from_true_surface(self, bondname, bond_direction, min_size=0.2, numberofsegments=8): - """Create a faceted bondwire from an existing true surface bondwire. - - Parameters - ---------- - bondname : str - Name of the bondwire to replace. - bond_direction : list - List of the ``[x, y, z]`` coordinates for the axis direction - of the bondwire. For example, ``[0, 1, 2]``. - min_size : float - Minimum size of the subsegment of the new polyline. The default is ``0.2``. - numberofsegments : int, optional - Number of segments. The default is ``8``. - - Returns - ------- - str - Name of the bondwire created. - """ - old_bondwire = self.get_object_from_name(bondname) - if not old_bondwire: - return False - edges = old_bondwire.edges - faces = old_bondwire.faces - centers = [] - for el in faces: - center = el.center - if center: - centers.append(center) - edgelist = [] - verlist = [] - for el in edges: - ver = el.vertices - if len(ver) < 2: - continue - p1 = ver[0].position - p2 = ver[1].position - p3 = [abs(i - j) for i, j in zip(p1, p2)] - - dir = p3.index(max(p3)) - if dir == bond_direction: - edgelist.append(el) - verlist.append([p1, p2]) - if not edgelist: - self.logger.error("No edges found specified direction. Check again") - return False - connected = [edgelist[0]] - tol = 1e-6 - for edge in edgelist[1:]: - ver = edge.vertices - p1 = ver[0].position - p2 = ver[1].position - for el in connected: - ver1 = el.vertices - p3 = ver1[0].position - p4 = ver1[1].position - dist = GeometryOperators.points_distance(p1, p3) - if dist < tol: - connected.append(edge) - break - dist = GeometryOperators.points_distance(p1, p4) - if dist < tol: - connected.append(edge) - break - dist = GeometryOperators.points_distance(p2, p3) - if dist < tol: - connected.append(edge) - break - dist = GeometryOperators.points_distance(p2, p4) - if dist < tol: - connected.append(edge) - break - new_edges = [] - for edge in connected: - edge_object = self.create_object_from_edge(edge) - new_edges.append(edge_object) - - self.unite(new_edges) - self.generate_object_history(new_edges[0]) - self.convert_segments_to_line(new_edges[0].name) - - edges = new_edges[0].edges - i = 0 - edge_to_delete = [] - first_vert = None - for edge in edges: - ver = edge.vertices - p1 = ver[0].position - p2 = ver[1].position - if not first_vert: - first_vert = p1 - dist = GeometryOperators.points_distance(p1, p2) - if dist < min_size: - edge_to_delete.append(i) - i += 1 - - rad = 1e6 - move_vector = None - for fc in centers: - dist = GeometryOperators.points_distance(fc, first_vert) - if dist < rad: - rad = dist - move_vector = GeometryOperators.v_sub(fc, first_vert) - - P = self.get_existing_polyline(object=new_edges[0]) - - if edge_to_delete: - P.remove_edges(edge_to_delete) - - angle = math.pi * (180 - 360 / numberofsegments) / 360 - - status = P.set_crosssection_properties( - type="Circle", num_seg=numberofsegments, width=(rad * (2 - math.sin(angle))) * 2 - ) - if status: - self.move(new_edges[0], move_vector) - old_bondwire.model = False - return new_edges[0] - else: - return False - - @pyaedt_function_handler() - def get_entitylist_id(self, name): - """Retrieve the ID of an entity list. - - Parameters - ---------- - name : str - Name of the entity list. - - Returns - ------- - int - ID of the entity list. - - References - ---------- - - >>> oEditor.GetEntityListIDByName - """ - id = self.oeditor.GetEntityListIDByName(name) - return id - - @pyaedt_function_handler() - def create_outer_facelist(self, externalobjects, name="outer_faces"): - """Create a face list from a list of outer objects. - - Parameters - ---------- - externalobjects : list - List of outer objects. - name : str, optional - Name of the new list. The default is ``"outer_faces"``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - """ - list2 = self.select_allfaces_fromobjects(externalobjects) # find ALL faces of outer objects - self.create_face_list(list2, name) - self.logger.info("Extfaces of thermal model = " + str(len(list2))) - return True - - @pyaedt_function_handler() - def explicitly_subtract(self, diellist, metallist): - """Explicitly subtract all elements in a SolveInside list and a SolveSurface list. - - Parameters - ---------- - diellist : list - List of dielectrics. - metallist : list - List of metals. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Subtract - >>> oEditor.PurgeHistory - """ - self.logger.info("Creating explicit subtraction between objects.") - for el in diellist: - list1 = el - list2 = "" - for el1 in metallist: - list2 = list2 + el1 + "," - for el1 in diellist: - if el1 is not el: - list2 = list2 + el1 + "," - if list2: - list2 = list2[:-1] - self.subtract(list1, list2, True) - self.purge_history(list1) - self.purge_history(list2) - for el in metallist: - list1 = el - list2 = "" - for el1 in metallist: - if el1 is not el: - list2 = list2 + el1 + "," - if list2: - list2 = list2[:-1] - self.subtract(list1, list2, True) - self.purge_history(list1) - self.purge_history(list2) - self.logger.info("Explicit subtraction is completed.") - return True - - @pyaedt_function_handler() - def find_port_faces(self, port_sheets): - """Find the vacuums given a list of input sheets. - - Starting from a list of input sheets, this method creates a list of output sheets - that represent the blank parts (vacuums) and the tool parts of all the intersections - of solids on the sheets. After a vacuum on a sheet is found, a port can be - created on it. - - Parameters - ---------- - port_sheets : list - List of input sheets names. - - Returns - ------- - List - List of output sheets (`2x len(port_sheets)`). - - """ - faces = [] - solids = [s for s in self.solid_objects if s.material_name not in ["vacuum", "air"] and s.model] - for sheet_name in port_sheets: - sheet = self[sheet_name] # get the sheet object - _, cloned = self.clone(sheet) - cloned = self[cloned[0]] - cloned.subtract(solids) - sheet.subtract(cloned) - cloned.name = sheet.name + "_Face1Vacuum" - faces.append(sheet.name) - faces.append(cloned.name) - return faces - - @pyaedt_function_handler() - def get_line_ids(self): - """Create a dictionary of object IDs for the lines in the design with the line name as the key.""" - line_ids = {} - line_list = list(self.oeditor.GetObjectsInGroup("Lines")) - for line_object in line_list: - # TODO Problem with GetObjectIDByName - try: - line_ids[line_object] = str(self.oeditor.GetObjectIDByName(line_object)) - except: - self.logger.warning("Line {} has an invalid ID!".format(line_object)) - return line_ids - - @pyaedt_function_handler() - def get_bounding_dimension(self): - """Retrieve the dimension array of the bounding box. - - Returns - ------- - list - List of three float values representing the bounding box dimensions - in the form ``[dim_x, dim_y, dim_z]``. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - oBoundingBox = list(self.oeditor.GetModelBoundingBox()) - dimensions = [] - dimensions.append(abs(float(oBoundingBox[0]) - float(oBoundingBox[3]))) - dimensions.append(abs(float(oBoundingBox[1]) - float(oBoundingBox[4]))) - dimensions.append(abs(float(oBoundingBox[2]) - float(oBoundingBox[5]))) - return dimensions - - @pyaedt_function_handler() - def get_object_name_from_edge_id(self, edge_id): - """Retrieve the object name for a predefined edge ID. - - Parameters - ---------- - edge_id : int - ID of the edge. - - Returns - ------- - str - Name of the edge if it exists, ``False`` otherwise. - - References - ---------- - - >>> oEditor.GetEdgeIDsFromObject - """ - for object in list(self._object_names_to_ids.keys()): - try: - oEdgeIDs = self.oeditor.GetEdgeIDsFromObject(object) - if str(edge_id) in oEdgeIDs: - return object - except: - return False - return False - - @pyaedt_function_handler() - def get_solving_volume(self): - """Generate a mesh for a setup. - - Returns - ------- - int - ``1`` when successful, ``0`` when failed. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - bound = self.get_model_bounding_box() - volume = abs(bound[3] - bound[0]) * abs(bound[4] - bound[1]) * abs(bound[5] - bound[2]) - volume = str(round(volume, 0)) - return volume - - @pyaedt_function_handler() - def vertex_data_of_lines(self, txtfilter=None): - """Generate a dictionary of line vertex data for all lines contained within the design. - - Parameters - ---------- - txtfilter : str, optional - Text string for filtering. The default is ``None``. When a text string is specified, - line data is generated only if this text string is contained within the line name. - - Returns - ------- - dict - Dictionary of the line name with a list of vertex positions in either 2D or 3D. - - """ - line_data = {} - lines = self.get_line_ids() - if txtfilter is not None: - lines = [n for n in lines if txtfilter in n] - for x in lines: - line_data[x] = self.get_vertices_of_line(x) - - return line_data - - @pyaedt_function_handler() - def get_vertices_of_line(self, sLineName): - """Generate a list of vertex positions for a line object from AEDT in model units. - - Parameters - ---------- - sLineName : str - Name of the line object in AEDT. - - Returns - ------- - list - List of the ``[x, y, (z)]`` coordinates for the 2D or 3D line object. - - References - ---------- - - >>> oEditor.GetVertexIDsFromObject - """ - position_list = [] - - # Get all vertices in the line - vertices_on_line = self.oeditor.GetVertexIDsFromObject(sLineName) - - if settings.aedt_version > "2022.2": - vertices_on_line = vertices_on_line[::-1] - - for x in vertices_on_line: - pos = self.oeditor.GetVertexPosition(x) - if self.design_type == "Maxwell 2D": - if self.geometry_mode == "XY": - position_list.append([float(pos[0]), float(pos[1])]) - else: - position_list.append([float(pos[0]), float(pos[2])]) - else: - position_list.append([float(pos[0]), float(pos[1]), float(pos[2])]) - - return position_list - - @pyaedt_function_handler() - def import_3d_cad( - self, - filename, - healing=False, - refresh_all_ids=True, - import_materials=False, - create_lightweigth_part=False, - group_by_assembly=False, - create_group=True, - separate_disjoints_lumped_object=False, - import_free_surfaces=False, - point_coicidence_tolerance=1e-6, - ): - """Import a CAD model. - - Parameters - ---------- - filename : str - Full path and name of the CAD file. - healing : bool, optional - Whether to perform healing. The default is ``False``, in which - case healing is not performed. - healing : int, optional - Whether to perform healing. The default is ``0``, in which - case healing is not performed. - refresh_all_ids : bool, optional - Whether to refresh all IDs after the CAD file is loaded. The - default is ``True``. Refreshing IDs can take a lot of time in - a big project. - import_materials : bool optional - Either to import material names from the file or not if presents. - create_lightweigth_part : bool ,optional - Either to import lightweight or not. - group_by_assembly : bool, optional - Either import by sub-assembly or individual parts. The default is ``False``. - create_group : bool, optional - Either to create a new group of imported objects. The default is ``True``. - separate_disjoints_lumped_object : bool, optional - Either to automatically separate disjoint parts. The default is ``False``. - import_free_surfaces : bool, optional - Either to import free surfaces parts. The default is ``False``. - point_coicidence_tolerance : float, optional - Tolerance on point. Default is ``1e-6``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Import - """ - - if str(healing) in ["0", "1"]: - warnings.warn( - "Assigning `0` or `1` to `healing` option is deprecated. Assign `True` or `False` instead.", - DeprecationWarning, - ) - vArg1 = ["NAME:NativeBodyParameters"] - vArg1.append("HealOption:="), vArg1.append(int(healing)) - vArg1.append("Options:="), vArg1.append("-1") - vArg1.append("FileType:="), vArg1.append("UnRecognized") - vArg1.append("MaxStitchTol:="), vArg1.append(-1) - vArg1.append("ImportFreeSurfaces:="), vArg1.append(import_free_surfaces) - vArg1.append("GroupByAssembly:="), vArg1.append(group_by_assembly) - vArg1.append("CreateGroup:="), vArg1.append(create_group) - vArg1.append("STLFileUnit:="), vArg1.append("Auto") - vArg1.append("MergeFacesAngle:="), vArg1.append(-1) - vArg1.append("PointCoincidenceTol:="), vArg1.append(point_coicidence_tolerance) - vArg1.append("CreateLightweightPart:="), vArg1.append(create_lightweigth_part) - vArg1.append("ImportMaterialNames:="), vArg1.append(import_materials) - vArg1.append("SeparateDisjointLumps:="), vArg1.append(separate_disjoints_lumped_object) - vArg1.append("SourceFile:="), vArg1.append(filename) - self.oeditor.Import(vArg1) - if refresh_all_ids: - self.refresh_all_ids() - self.logger.info("Step file {} imported".format(filename)) - return True - - @pyaedt_function_handler() - def import_spaceclaim_document(self, SCFile): - """Import a SpaceClaim document. - - Parameters - ---------- - SCFile : - Full path and name of the SpaceClaim file. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateUserDefinedModel - """ - environlist = os.environ - latestversion = "" - for l in environlist: - if "AWP_ROOT" in l: - if l > latestversion: - latestversion = l - if not latestversion: - self.logger.error("SpaceClaim is not found.") - else: - scdm_path = os.path.join(os.environ[latestversion], "scdm") - self.oeditor.CreateUserDefinedModel( - [ - "NAME:UserDefinedModelParameters", - [ - "NAME:Definition", - [ - "NAME:UDMParam", - "Name:=", - "GeometryFilePath", - "Value:=", - '"' + SCFile + '"', - "DataType:=", - "String", - "PropType2:=", - 0, - "PropFlag2:=", - 1, - ], - [ - "NAME:UDMParam", - "Name:=", - "IsSpaceClaimLinkUDM", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - ], - [ - "NAME:Options", - [ - "NAME:UDMParam", - "Name:=", - "Solid Bodies", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Surface Bodies", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Parameters", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Parameter Key", - "Value:=", - '""', - "DataType:=", - "String", - "PropType2:=", - 0, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Named Selections", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - [ - "NAME:UDMParam", - "Name:=", - "Rendering Attributes", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Material Assignment", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Import suppressed for physics objects", - "Value:=", - "0", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 0, - ], - [ - "NAME:UDMParam", - "Name:=", - "Explode Multi-Body Parts", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - [ - "NAME:UDMParam", - "Name:=", - "SpaceClaim Installation Path", - "Value:=", - '"' + scdm_path + '"', - "DataType:=", - "String", - "PropType2:=", - 0, - "PropFlag2:=", - 8, - ], - [ - "NAME:UDMParam", - "Name:=", - "Smart CAD Update", - "Value:=", - "1", - "DataType:=", - "Int", - "PropType2:=", - 5, - "PropFlag2:=", - 8, - ], - ], - ["NAME:GeometryParams"], - "DllName:=", - "SCIntegUDM", - "Library:=", - "installLib", - "Version:=", - "2.0", - "ConnectionID:=", - "", - ] - ) - self.refresh_all_ids() - return True - - @pyaedt_function_handler() - def modeler_variable(self, value): - """Modeler variable. - - Parameters - ---------- - value : - - - Returns - ------- - - """ - if isinstance(value, str): - return value - else: - return str(value) + self.model_units - - @pyaedt_function_handler() - def break_spaceclaim_connection(self): # TODO: Need to change this name. Don't use "break". - """Disconnect from the running SpaceClaim instance. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.BreakUDMConnection - """ - args = ["NAME:Selections", "Selections:=", "SpaceClaim1"] - self.oeditor.BreakUDMConnection(args) - return True - - @pyaedt_function_handler() - def load_scdm_in_hfss(self, SpaceClaimFile): - """Load a SpaceClaim file in HFSS. - - Parameters - ---------- - SpaceClaimFile : str - Full path and name of the SpaceClaim file. - - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.CreateUserDefinedModel - >>> oEditor.BreakUDMConnection - """ - self.import_spaceclaim_document(SpaceClaimFile) - self.break_spaceclaim_connection() - return True - - @pyaedt_function_handler() - def get_faces_from_materials(self, mats): - """Select all outer faces given a list of materials. - - Parameters - ---------- - mats : list - List of materials to include in the search for outer - faces. - - Returns - ------- - list - List of all outer faces of the specified materials. - - References - ---------- - - >>> oEditor.GetObjectsByMaterial - >>> oEditor.GetFaceIDs - """ - self.logger.info("Selecting outer faces.") - - sel = [] - objs = [] - if type(mats) is str: - mats = [mats] - for mat in mats: - objs.extend(list(self.oeditor.GetObjectsByMaterial(mat.lower()))) - - for i in objs: - oFaceIDs = self.oeditor.GetFaceIDs(i) - - for face in oFaceIDs: - sel.append(int(face)) - return sel - - @pyaedt_function_handler() - def scale(self, obj_list, x=2.0, y=2.0, z=2.0): - """Scale a list of objects. - - Parameters - ---------- - obj_list : list - List of objects IDs or names. - x : float, optional - Scale factor for X. - y : float, optional - Scale factor for Y. - z : float, optional - Scale factor for Z. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Scale - """ - selections = self.convert_to_selections(obj_list, True) - arg1 = ["NAME:Selections", "Selections:=", ", ".join(selections), "NewPartsModelFlag:=", "Model"] - arg2 = ["NAME:ScaleParameters", "ScaleX:=", str(x), "ScaleY:=", str(y), "ScaleZ:=", str(z)] - self.oeditor.Scale(arg1, arg2) - return True - - @pyaedt_function_handler() - def select_allfaces_fromobjects(self, elements): - """Select all outer faces given a list of objects. - - Parameters - ---------- - elements : list - List of objects to include in the search for outer faces. - - Returns - ------- - List - List of outer faces in the given list of objects. - - References - ---------- - - >>> oEditor.GetFaceIDs - """ - self.logger.info("Selecting outer faces.") - - sel = [] - - for i in elements: - oFaceIDs = self.oeditor.GetFaceIDs(i) - - for face in oFaceIDs: - sel.append(int(face)) - return sel - - @pyaedt_function_handler() - def setunassigned_mats(self): - """Find unassagned objects and set them to non-model. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.SetPropertyValue - """ - oObjects = list(self.oeditor.GetObjectsInGroup("Solids")) - for obj in oObjects: - pro = self.oeditor.GetPropertyValue("Geometry3DAttributeTab", obj, "Material") - if pro == '""': - self.oeditor.SetPropertyValue("Geometry3DAttributeTab", obj, "Model", False) - return True - - @pyaedt_function_handler() - def automatic_thicken_sheets(self, inputlist, value, internalExtr=True, internalvalue=1): - """Create thickened sheets for a list of input faces. - - This method automatically checks the direction in which to thicken the sheets. - - Parameters - ---------- - inputlist : list - List of faces. - value : float - Value in millimeters to thicken the sheets. - internalExtr : bool, optional - Whether to extrude sheets internally. The default is ``True``. - internalvalue : float, optional - Value in millimeters to thicken the sheets internally (vgoing into the model). - The default is ``1``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.ThickenSheet - """ - aedt_bounding_box = self.get_model_bounding_box() - directions = {} - inputlist = self.convert_to_selections(inputlist, True) - for el in inputlist: - objID = self.oeditor.GetFaceIDs(el) - faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) - directionfound = False - l = 10 - while not directionfound: - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", str(l) + "mm", "BothSides:=", False], - ) - aedt_bounding_box2 = self.get_model_bounding_box() - self._odesign.Undo() - if aedt_bounding_box != aedt_bounding_box2: - directions[el] = "External" - directionfound = True - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(l) + "mm", "BothSides:=", False], - ) - aedt_bounding_box2 = self.get_model_bounding_box() - - self._odesign.Undo() - - if aedt_bounding_box != aedt_bounding_box2: - directions[el] = "Internal" - directionfound = True - else: - l = l + 10 - for el in inputlist: - objID = self.oeditor.GetFaceIDs(el) - faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) - if directions[el] == "Internal": - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(value) + "mm", "BothSides:=", False], - ) - else: - self.oeditor.ThickenSheet( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - ["NAME:SheetThickenParameters", "Thickness:=", str(value) + "mm", "BothSides:=", False], - ) - if internalExtr: - objID2 = self.oeditor.GetFaceIDs(el) - for fid in objID2: - try: - faceCenter2 = self.oeditor.GetFaceCenter(int(fid)) - if faceCenter2 == faceCenter: - self.oeditor.MoveFaces( - ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], - [ - "NAME:Parameters", - [ - "NAME:MoveFacesParameters", - "MoveAlongNormalFlag:=", - True, - "OffsetDistance:=", - str(internalvalue) + "mm", - "MoveVectorX:=", - "0mm", - "MoveVectorY:=", - "0mm", - "MoveVectorZ:=", - "0mm", - "FacesToMove:=", - [int(fid)], - ], - ], - ) - except: - self.logger.info("done") - # self.modeler_oproject.ClearMessages() - return True - - @pyaedt_function_handler() - def move_face(self, faces, offset=1.0): - """Move an input face or a list of input faces of a specific object. - - This method moves a face or a list of faces which belong to the same solid. - - Parameters - ---------- - faces : list - List of Face ID or List of :class:`pyaedt.modeler.Object3d.FacePrimitive` object or mixed. - offset : float, optional - Offset to apply in model units. The default is ``1.0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.MoveFaces - - """ - face_selection = self.convert_to_selections(faces, True) - selection = {} - for f in face_selection: - if self.oeditor.GetObjectNameByFaceID(f) in selection: - selection[self.oeditor.GetObjectNameByFaceID(f)].append(f) - else: - selection[self.oeditor.GetObjectNameByFaceID(f)] = [f] - - arg1 = [ - "NAME:Selections", - "Selections:=", - self.convert_to_selections(list(selection.keys()), False), - "NewPartsModelFlag:=", - "Model", - ] - arg2 = ["NAME:Parameters"] - for el in list(selection.keys()): - arg2.append( - [ - "NAME:MoveFacesParameters", - "MoveAlongNormalFlag:=", - True, - "OffsetDistance:=", - str(offset) + self.model_units, - "MoveVectorX:=", - "0mm", - "MoveVectorY:=", - "0mm", - "MoveVectorZ:=", - "0mm", - "FacesToMove:=", - selection[el], - ] - ) - self.oeditor.MoveFaces(arg1, arg2) - return True - - @pyaedt_function_handler() - def move_edge(self, edges, offset=1.0): - """Move an input edge or a list of input edges of a specific object. - - This method moves an edge or a list of edges which belong to the same solid. - - Parameters - ---------- - edges : list - List of Edge ID or List of :class:`pyaedt.modeler.Object3d.EdgePrimitive` object or mixed. - offset : float, optional - Offset to apply in model units. The default is ``1.0``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.MoveEdges - - """ - edge_selection = self.convert_to_selections(edges, True) - selection = {} - for f in edge_selection: - if self.oeditor.GetObjectNameByEdgeID(f) in selection: - selection[self.oeditor.GetObjectNameByEdgeID(f)].append(f) - else: - selection[self.oeditor.GetObjectNameByEdgeID(f)] = [f] - - arg1 = [ - "NAME:Selections", - "Selections:=", - self.convert_to_selections(list(selection.keys()), False), - "NewPartsModelFlag:=", - "Model", - ] - arg2 = ["NAME:Parameters"] - for el in list(selection.keys()): - arg2.append( - [ - "NAME:MoveEdgesParameters", - "MoveAlongNormalFlag:=", - True, - "OffsetDistance:=", - str(offset) + self.model_units, - "MoveVectorX:=", - "0mm", - "MoveVectorY:=", - "0mm", - "MoveVectorZ:=", - "0mm", - "EdgesToMove:=", - selection[el], - ] - ) - self.oeditor.MoveEdges(arg1, arg2) - return True - - class Position: - """Position. - - Parameters - ---------- - args : list or int - Position of the item as either a list of the ``[x, y, z]`` coordinates - or three separate values. If no or insufficient arguments - are specified, ``0`` is applied. - - """ - - @pyaedt_function_handler() - def __getitem__(self, item): - if item == 0: - return self.X - elif item == 1: - return self.Y - elif item == 2: - return self.Z - else: - raise IndexError - - @pyaedt_function_handler() - def __setitem__(self, item, value): - if item == 0: - self.X = value - elif item == 1: - self.Y = value - elif item == 2: - self.Z = value - - def __len__(self): - return 3 - - def __init__(self, *args): - if len(args) == 1 and type(args[0]) is list: - try: - self.X = args[0][0] - except: - self.X = 0 - try: - self.Y = args[0][1] - except: - self.Y = 0 - try: - self.Z = args[0][2] - except: - self.Z = 0 - else: - try: - self.X = args[0] - except: - self.X = 0 - try: - self.Y = args[1] - except: - self.Y = 0 - try: - self.Z = args[2] - except: - self.Z = 0 - - class SweepOptions(object): - """Manages sweep options. - - Parameters - ---------- - draftType : str, optional - Type of the draft. Options are ``"Round"``, ``"Natural"``, - and ``"Extended"``. The default is ``"Round"``. - draftAngle : str, optional - Draft angle with units. The default is ``"0deg"``. - twistAngle : str, optional - Twist angle with units. The default is ``"0deg"``. - - """ - - @pyaedt_function_handler() - def __init__(self, draftType="Round", draftAngle="0deg", twistAngle="0deg"): - self.DraftType = draftType - self.DraftAngle = draftAngle - self.TwistAngle = twistAngle - - @pyaedt_function_handler() - def create_group(self, objects=None, components=None, groups=None, group_name=None): - """Group objects or groups into one group. - - At least one between ``objects``, ``components``, ``groups`` has to be defined. - - Parameters - ---------- - objects : list, optional - List of objects. The default is ``None``, in which case a group - with all objects is created. - components : list, optional - List of 3d components to group. The default is ``None``. - groups : list, optional - List of groups. The default is ``None``. - group_name : str, optional - Name of the new group. The default is ``None``. - It is not possible to choose the name but a name is - assigned automatically. - - Returns - ------- - str - Name assigned to the new group. - - References - ---------- - - >>> oEditor.CreateGroup - """ - if components is None and groups is None and objects is None: - raise AttributeError("At least one between ``objects``, ``components``, ``groups`` has to be defined.") - - all_objects = self.object_names - if objects: - object_selection = self.convert_to_selections(objects, return_list=False) - else: - object_selection = "" - if groups: - group_selection = self.convert_to_selections(groups, return_list=False) - else: - group_selection = "" - if components: - component_selection = self.convert_to_selections(components, return_list=False) - else: - component_selection = "" - - arg = [ - "NAME:GroupParameter", - "ParentGroupID:=", - "Model", - "Parts:=", - object_selection, - "SubmodelInstances:=", - component_selection, - "Groups:=", - group_selection, - ] - assigned_name = self.oeditor.CreateGroup(arg) - if group_name and group_name not in all_objects: - self.oeditor.ChangeProperty( - [ - "NAME:AllTabs", - [ - "NAME:Attributes", - ["NAME:PropServers", assigned_name], - ["NAME:ChangedProps", ["NAME:Name", "Value:=", group_name]], - ], - ] - ) - return group_name - else: - return assigned_name - - @pyaedt_function_handler() - def ungroup(self, groups): - """Ungroup one or more groups. - - Parameters - ---------- - groups : list - List of group names. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Ungroup - """ - group_list = self.convert_to_selections(groups, return_list=True) - arg = ["Groups:=", group_list] - self.oeditor.Ungroup(arg) - return True - - @pyaedt_function_handler() - def flatten_assembly(self): - """Flatten the assembly, removing all group trees. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.FlattenGroup - """ - self.oeditor.FlattenGroup(["Groups:=", ["Model"]]) - return True - - @pyaedt_function_handler() - def wrap_sheet(self, sheet_name, object_name, imprinted=False): - """Execute the sheet wrapping around an object. - If wrapping produces an unclassified operation it will be reverted. - - Parameters - ---------- - sheet_name : str, :class:`pyaedt.modeler.Object3d.Object3d` - Sheet name or sheet object. - object_name : str, :class:`pyaedt.modeler.Object3d.Object3d` - Object name or solid object. - imprinted : bool, optional - Either if imprint or not over the sheet. Default is ``False``. - - Returns - ------- - bool - Command execution status. - """ - sheet_name = self.convert_to_selections(sheet_name, False) - object_name = self.convert_to_selections(object_name, False) - - if sheet_name not in self.sheet_names: - self.logger.error("{} is not a valid sheet.".format(sheet_name)) - return False - if object_name not in self.solid_names: - self.logger.error("{} is not a valid solid body.".format(object_name)) - return False - unclassified = [i for i in self.unclassified_objects] - self.oeditor.WrapSheet( - ["NAME:Selections", "Selections:=", "{},{}".format(sheet_name, object_name)], - ["NAME:WrapSheetParameters", "Imprinted:=", imprinted], - ) - is_unclassified = [i for i in self.unclassified_objects if i not in unclassified] - if is_unclassified: - self.logger.error("Failed to Wrap sheet. Reverting to original objects.") - self._odesign.Undo() - return False - if imprinted: - self.cleanup_objects() - return True - - @pyaedt_function_handler() - def heal_objects( - self, - input_objects_list, - auto_heal=True, - tolerant_stitch=True, - simplify_geometry=True, - tighten_gaps=True, - heal_to_solid=False, - stop_after_first_stitch_error=False, - max_stitch_tolerance=0.001, - explode_and_stitch=True, - geometry_simplification_tolerance=1, - maximum_generated_radius=1, - simplify_type=0, - tighten_gaps_width=0.00001, - remove_silver_faces=True, - remove_small_edges=True, - remove_small_faces=True, - silver_face_tolerance=1, - small_edge_tolerance=1, - small_face_area_tolerance=1, - bounding_box_scale_factor=0, - remove_holes=True, - remove_chamfers=True, - remove_blends=True, - hole_radius_tolerance=1, - chamfer_width_tolerance=1, - blend_radius_tolerance=1, - allowable_surface_area_change=5, - allowable_volume_change=5, - ): - """Repair invalid geometry entities for the selected objects within the specified tolerance settings. - - Parameters - ---------- - input_objects_list : str - List of object names to analyze. - auto_heal : bool, optional - Auto heal option. Default value is ``True``. - tolerant_stitch : bool, optional - Tolerant stitch for manual healing. The default is ``True``. - simplify_geometry : bool, optional - Simplify geometry for manual healing. The default is ``True``. - tighten_gaps : bool, optional - Tighten gaps for manual healing. The default is ``True``. - heal_to_solid : bool, optional - Heal to solid for manual healing. The default is ``False``. - stop_after_first_stitch_error : bool, optional - Stop after first stitch error for manual healing. The default is ``False``. - max_stitch_tolerance : float, str, optional - Max stitch tolerance for manual healing. The default is ``0.001``. - explode_and_stitch : bool, optional - Explode and stitch for manual healing. The default is ``True``. - geometry_simplification_tolerance : float, str, optional - Geometry simplification tolerance for manual healing in mm. The default is ``1``. - maximum_generated_radius : float, str, optional - Maximum generated radius for manual healing in mm. The default is ``1``. - simplify_type : int, optional - Simplify type for manual healing. The default is ``0`` which refers to ``Curves``. - Other available values are ``1`` for ``Surfaces`` and ``2`` for ``Both``. - tighten_gaps_width : float, str, optional - Tighten gaps width for manual healing in mm. The default is ``0.00001``. - remove_silver_faces : bool, optional - Remove silver faces for manual healing. The default is ``True``. - remove_small_edges : bool, optional - Remove small edges faces for manual healing. The default is ``True``. - remove_small_faces : bool, optional - Remove small faces for manual healing. The default is ``True``. - silver_face_tolerance : float, str, optional - Silver face tolerance for manual healing in mm. The default is ``1``. - small_edge_tolerance : float, str, optional - Silver face tolerance for manual healing in mm. The default is ``1``. - small_face_area_tolerance : float, str, optional - Silver face tolerance for manual healing in mm^2. The default is ``1``. - bounding_box_scale_factor : int, optional - Bounding box scaling factor for manual healing. The default is ``0``. - remove_holes : bool, optional - Remove holes for manual healing. The default is ``True``. - remove_chamfers : bool, optional - Remove chamfers for manual healing. The default is``True``. - remove_blends : bool, optional - Remove blends for manual healing. The default is ``True``. - hole_radius_tolerance : float, str, optional - Hole radius tolerance for manual healing in mm. The default is ``1``. - chamfer_width_tolerance : float, str, optional - Chamfer width tolerance for manual healing in mm. The default is ``1``. - blend_radius_tolerance : float, str, optional - Blend radius tolerance for manual healing in mm. The default is ``1``. - allowable_surface_area_change : float, str, optional - Allowable surface area for manual healing in mm. The default is ``1``. - allowable_volume_change : float, str, optional - Allowable volume change for manual healing in mm. The default is ``1``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - """ - if not input_objects_list: - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif not isinstance(input_objects_list, str): - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif "," in input_objects_list: - input_objects_list = input_objects_list.strip() - if ", " in input_objects_list: - input_objects_list_split = input_objects_list.split(", ") - else: - input_objects_list_split = input_objects_list.split(",") - for obj in input_objects_list_split: - if obj not in self.modeler.object_names: - self.logger.error("Provide an object name or a list of object names that exists in current design.") - return False - objects_selection = ",".join(input_objects_list_split) - else: - objects_selection = input_objects_list - - if simplify_type not in [0, 1, 2]: - self.logger.error("Invalid simplify type.") - return False - - selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] - healing_parameters = [ - "NAME:ObjectHealingParameters", - "Version:=", - 1, - "AutoHeal:=", - auto_heal, - "TolerantStitch:=", - tolerant_stitch, - "SimplifyGeom:=", - simplify_geometry, - "TightenGaps:=", - tighten_gaps, - "HealToSolid:=", - heal_to_solid, - "StopAfterFirstStitchError:=", - stop_after_first_stitch_error, - "MaxStitchTol:=", - max_stitch_tolerance, - "ExplodeAndStitch:=", - explode_and_stitch, - "GeomSimplificationTol:=", - geometry_simplification_tolerance, - "MaximumGeneratedRadiusForSimplification:=", - maximum_generated_radius, - "SimplifyType:=", - simplify_type, - "TightenGapsWidth:=", - tighten_gaps_width, - "RemoveSliverFaces:=", - remove_silver_faces, - "RemoveSmallEdges:=", - remove_small_edges, - "RemoveSmallFaces:=", - remove_small_faces, - "SliverFaceTol:=", - silver_face_tolerance, - "SmallEdgeTol:=", - small_edge_tolerance, - "SmallFaceAreaTol:=", - small_face_area_tolerance, - "SpikeTol:=", - -1, - "GashWidthBound:=", - -1, - "GashAspectBound:=", - -1, - "BoundingBoxScaleFactor:=", - bounding_box_scale_factor, - "RemoveHoles:=", - remove_holes, - "RemoveChamfers:=", - remove_chamfers, - "RemoveBlends:=", - remove_blends, - "HoleRadiusTol:=", - hole_radius_tolerance, - "ChamferWidthTol:=", - chamfer_width_tolerance, - "BlendRadiusTol:=", - blend_radius_tolerance, - "AllowableSurfaceAreaChange:=", - allowable_surface_area_change, - "AllowableVolumeChange:=", - allowable_volume_change, - ] - self.oeditor.HealObject(selections_args, healing_parameters) - return True - - @pyaedt_function_handler() - def simplify_objects( - self, - input_objects_list, - simplify_type="Polygon Fit", - extrusion_axis="Auto", - clean_up=True, - allow_splitting=True, - separate_bodies=True, - clone_body=True, - generate_primitive_history=False, - interior_points_on_arc=5, - length_threshold_percentage=25, - create_group_for_new_objects=False, - ): - """Simplify command to converts complex objects into simpler primitives which are easy to mesh and solve. - - Parameters - ---------- - input_objects_list : str - List of object names to simplify. - simplify_type : str, optional - Simplify type. Default value is ``Polygon Fit``. - Available values are ``Polygon Fit`` ``Primitive Fit`` or ``Bounding Box``. - extrusion_axis : str, optional - Extrusion axis. Default value is ``Auto``. - Available values are ``Auto`` ``X``, ``Y`` or ``Z``. - clean_up : bool, optional - Clean up. The default is ``True``. - allow_splitting : bool, optional - Allow splitting. The default is ``True``. - separate_bodies : bool, optional - Separate bodies. The default is ``True``. - clone_body : bool, optional - Clone body. The default is ``True``. - generate_primitive_history : bool, optional - Generate primitive history. - This option will purge the history for selected objects. - The default is ``False``. - interior_points_on_arc : float, optional - Number points on curve. The default is ``5``. - length_threshold_percentage : float, optional - Number points on curve. The default is ``25``. - create_group_for_new_objects : bool, optional - Create group for new objects. The default is ``False``. - - Returns - ------- - bool - ``True`` when successful, ``False`` when failed. - """ - if not input_objects_list: - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif not isinstance(input_objects_list, str): - self.logger.error("Provide an object name or a list of object names as a string.") - return False - elif "," in input_objects_list: - input_objects_list = input_objects_list.strip() - if ", " in input_objects_list: - input_objects_list_split = input_objects_list.split(", ") - else: - input_objects_list_split = input_objects_list.split(",") - for obj in input_objects_list_split: - if obj not in self.modeler.object_names: - self.logger.error("Provide an object name or a list of object names that exists in current design.") - return False - objects_selection = ",".join(input_objects_list_split) - else: - objects_selection = input_objects_list - - if simplify_type not in ["Polygon Fit", "Primitive Fit", "Bounding Box"]: - self.logger.error("Invalid simplify type.") - return False - - if extrusion_axis not in ["Auto", "X", "Y", "Z"]: - self.logger.error("Invalid extrusion axis.") - return False - - selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] - simplify_parameters = [ - "NAME:SimplifyParameters", - "Type:=", - simplify_type, - "ExtrusionAxis:=", - extrusion_axis, - "Cleanup:=", - clean_up, - "Splitting:=", - allow_splitting, - "SeparateBodies:=", - separate_bodies, - "CloneBody:=", - clone_body, - "Generate Primitive History:=", - generate_primitive_history, - "NumberPointsCurve:=", - interior_points_on_arc, - "LengthThresholdCurve:=", - length_threshold_percentage, - ] - groups_for_new_object = ["CreateGroupsForNewObjects:=", create_group_for_new_objects] - - try: - self.oeditor.Simplify(selections_args, simplify_parameters, groups_for_new_object) - return True - except: - self.logger.error("Simplify objects failed.") - return False - - @pyaedt_function_handler - def get_face_by_id(self, id): - """Give the face object given its Id. - - Parameters - ---------- - id : int - Id of the face to retrieve. - - Returns - ------- - modeler.cad.elements3d.FacePrimitive - Face object. - - """ - obj = [o for o in self.object_list for face in o.faces if face.id == id] - if obj: - face_obj = [face for face in obj[0].faces if face.id == id][0] - return face_obj - else: - return False diff --git a/pyaedt/modeler/cad/Primitives.py b/pyaedt/modeler/cad/Primitives.py index f5a1a371b30..edbd2e27451 100644 --- a/pyaedt/modeler/cad/Primitives.py +++ b/pyaedt/modeler/cad/Primitives.py @@ -10,17 +10,29 @@ import random import string import time +import warnings from pyaedt.application.Variables import Variable from pyaedt.application.Variables import decompose_variable_value +from pyaedt.generic.constants import AEDT_UNITS from pyaedt.generic.general_methods import _dim_arg from pyaedt.generic.general_methods import _uname +from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import is_number from pyaedt.generic.general_methods import pyaedt_function_handler +from pyaedt.generic.general_methods import settings +from pyaedt.modeler.cad.Modeler import BaseCoordinateSystem +from pyaedt.modeler.cad.Modeler import CoordinateSystem +from pyaedt.modeler.cad.Modeler import FaceCoordinateSystem +from pyaedt.modeler.cad.Modeler import Lists +from pyaedt.modeler.cad.Modeler import Modeler +from pyaedt.modeler.cad.Modeler import ObjectCoordinateSystem from pyaedt.modeler.cad.components_3d import UserDefinedComponent +from pyaedt.modeler.cad.elements3d import EdgePrimitive from pyaedt.modeler.cad.elements3d import FacePrimitive from pyaedt.modeler.cad.elements3d import Plane from pyaedt.modeler.cad.elements3d import Point +from pyaedt.modeler.cad.elements3d import VertexPrimitive from pyaedt.modeler.cad.object3d import Object3d from pyaedt.modeler.cad.polylines import Polyline from pyaedt.modeler.cad.polylines import PolylineSegment @@ -41,30 +53,330 @@ aedt_wait_time = 0.1 -class Primitives(object): - """Provides common functionalities for primitives. +class GeometryModeler(Modeler): + """Manages the main AEDT Modeler functionalities for geometry-based designs. Parameters ---------- - application : :class:`pyaedt.modeler.Model3D.Modeler3D`, :class:`pyaedt.modeler.Model2D.Modeler2D` - Pointer to the parent object. + app : + Inherited parent object. + is3d : bool, optional + Whether the model is 3D. The default is ``True``. + """ - Examples - -------- - Basic usage demonstrated with an HFSS design: + @pyaedt_function_handler() + def __getitem__(self, partId): + """Get the object ``Object3D`` for a given object ID or object name. - >>> from pyaedt import Hfss - >>> aedtapp = Hfss() - >>> prim = aedtapp.modeler - """ + Parameters + ---------- + partId : int or str + Object ID or object name from the 3D modeler. + + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + Returns ``None`` if the part ID or the object name is not found. + + """ + if isinstance(partId, (int, str)) and not ( + partId in self.objects or partId in self._object_names_to_ids or partId in self.user_defined_components + ): + self.refresh_all_ids() + if isinstance(partId, int): + if partId in self.objects: + return self.objects[partId] + elif partId in self._object_names_to_ids: + return self.objects[self._object_names_to_ids[partId]] + elif partId in self.user_defined_components: + return self.user_defined_components[partId] + elif isinstance(partId, Object3d) or isinstance(partId, UserDefinedComponent): + return partId + return None - def __init__(self): + def __init__(self, app, is3d=True): + self._app = app + Modeler.__init__(self, app) + # TODO Refactor this as a dictionary with names as key + self._coordinate_systems = [] + self._user_lists = [] + self._planes = [] + self._is3d = is3d + self._solids = [] + self._sheets = [] + self._lines = [] + self._points = [] + self._unclassified = [] + self._all_object_names = [] + self.objects = {} + self.user_defined_components = {} + self._object_names_to_ids = {} self.points = {} self.refresh() + class Position: + """Position. + + Parameters + ---------- + args : list or int + Position of the item as either a list of the ``[x, y, z]`` coordinates + or three separate values. If no or insufficient arguments + are specified, ``0`` is applied. + + """ + + @pyaedt_function_handler() + def __getitem__(self, item): + if item == 0: + return self.X + elif item == 1: + return self.Y + elif item == 2: + return self.Z + else: + raise IndexError + + @pyaedt_function_handler() + def __setitem__(self, item, value): + if item == 0: + self.X = value + elif item == 1: + self.Y = value + elif item == 2: + self.Z = value + + def __len__(self): + return 3 + + def __init__(self, *args): + if len(args) == 1 and type(args[0]) is list: + try: + self.X = args[0][0] + except: + self.X = 0 + try: + self.Y = args[0][1] + except: + self.Y = 0 + try: + self.Z = args[0][2] + except: + self.Z = 0 + else: + try: + self.X = args[0] + except: + self.X = 0 + try: + self.Y = args[1] + except: + self.Y = 0 + try: + self.Z = args[2] + except: + self.Z = 0 + + class SweepOptions(object): + """Manages sweep options. + + Parameters + ---------- + draftType : str, optional + Type of the draft. Options are ``"Round"``, ``"Natural"``, + and ``"Extended"``. The default is ``"Round"``. + draftAngle : str, optional + Draft angle with units. The default is ``"0deg"``. + twistAngle : str, optional + Twist angle with units. The default is ``"0deg"``. + + """ + + @pyaedt_function_handler() + def __init__(self, draftType="Round", draftAngle="0deg", twistAngle="0deg"): + self.DraftType = draftType + self.DraftAngle = draftAngle + self.TwistAngle = twistAngle + + @property + def _design_properties(self): + return self._app.design_properties + + @property + def _odefinition_manager(self): + return self._app.odefinition_manager + + @property + def _omaterial_manager(self): + return self._app.omaterial_manager + + @property + def coordinate_systems(self): + """Coordinate systems.""" + if settings.aedt_version > "2022.2": + cs_names = [i for i in self.oeditor.GetChildNames("CoordinateSystems") if i != "Global"] + for cs_name in cs_names: + props = {} + local_names = [i.name for i in self._coordinate_systems] + if cs_name not in local_names: + if self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Relative": + self._coordinate_systems.append(CoordinateSystem(self, props, cs_name)) + elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Face": + self._coordinate_systems.append(FaceCoordinateSystem(self, props, cs_name)) + elif self.oeditor.GetChildObject(cs_name).GetPropValue("Type") == "Object": + self._coordinate_systems.append(ObjectCoordinateSystem(self, props, cs_name)) + return self._coordinate_systems + if not self._coordinate_systems: + self._coordinate_systems = self._get_coordinates_data() + return self._coordinate_systems + + @property + def user_lists(self): + """User lists.""" + if not self._user_lists: + self._user_lists = self._get_lists_data() + return self._user_lists + + @property + def planes(self): + """Planes.""" + if not self._planes: + self._planes = self._get_planes_data() + return self._planes + + @property + def oeditor(self): + """AEDT ``oEditor`` module. + + References + ---------- + + >>> oEditor = oDesign.SetActiveEditor("3D Modeler")""" + + return self._app.oeditor + + @property + def materials(self): + """Material library used in the project. + + Returns + ------- + :class:`pyaedt.modules.MaterialLib.Materials` + + """ + return self._app.materials + + @property + def model_units(self): + """Model units as a string. For example, ``"mm"``. + + References + ---------- + + >>> oEditor.GetModelUnits + >>> oEditor.SetModelUnits + """ + return self.oeditor.GetModelUnits() + + @model_units.setter + def model_units(self, units): + assert units in AEDT_UNITS["Length"], "Invalid units string {0}.".format(units) + self.oeditor.SetModelUnits(["NAME:Units Parameter", "Units:=", units, "Rescale:=", False]) + + @property + def selections(self): + """Selections. + + References + ---------- + + >>> oEditor.GetSelections + """ + return self.oeditor.GetSelections() + + @property + def obounding_box(self): + """Bounding box. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + return self.oeditor.GetModelBoundingBox() + + @property + def dimension(self): + """Dimensions. + + Returns + ------- + str + Dimensionality, which is either ``"2D"`` or ``"3D"``. + + References + ---------- + + >>> oDesign.Is2D + """ + try: + if self._odesign.Is2D(): + return "2D" + else: + return "3D" + except: + if self.design_type == "2D Extractor": + return "2D" + else: + return "3D" + + @property + def design_type(self): + """Design type. + + References + ---------- + + >>> oDesign.GetDesignType + """ + return self._app.design_type + + @property + def geometry_mode(self): + """Geometry mode. + + References + ---------- + + >>> oDesign.GetGeometryMode""" + return self._odesign.GetGeometryMode() + + @property + def solid_bodies(self): + """List of object names. + + .. note:: + Non-model objects are also returned. + + Returns + ------- + list os str + List of object names with the object name as the key. + + References + ---------- + + >>> oEditor.GetObjectsInGroup + """ + if self.dimension == "3D": + objects = self.oeditor.GetObjectsInGroup("Solids") + else: + objects = self.oeditor.GetObjectsInGroup("Sheets") + return list(objects) + @property def _modeler(self): - return self._app.modeler + return self @property def solid_objects(self): @@ -238,6 +550,22 @@ def user_defined_component_names(self): new_obs3d = [] return new_obs3d + @property + def layout_component_names(self): + """List of the names of all Layout component objects. + + Returns + ------- + list + Layout component names. + """ + lc_names = [] + if self.user_defined_components: + for name, value in self.user_defined_components.items(): + if value.layout_component: + lc_names.append(name) + return lc_names + @property def _oproject(self): """Project.""" @@ -269,51 +597,4937 @@ def logger(self): """Logger.""" return self._app.logger - @property - def version(self): - """Version.""" - return self._app._aedt_version + @property + def version(self): + """Version.""" + return self._app._aedt_version + + @property + def model_objects(self): + """List of the names of all model objects.""" + return self._get_model_objects(model=True) + + @property + def non_model_objects(self): + """List of objects of all non-model objects.""" + return list(self.oeditor.GetObjectsInGroup("Non Model")) + + @property + def model_consistency_report(self): + """Summary of detected inconsistencies between the AEDT modeler and PyAEDT structures. + + Returns + ------- + dict + + """ + obj_names = self.object_names + missing = [] + for name in obj_names: + if name not in self._object_names_to_ids: + missing.append(name) + non_existent = [] + for name in self._object_names_to_ids: + if name not in obj_names and name not in self.unclassified_names: + non_existent.append(name) + report = {"Missing Objects": missing, "Non-Existent Objects": non_existent} + return report + + @property + def objects_by_name(self): + """Object dictionary organized by name. + + Returns + ------- + dict + """ + obj_dict = {} + for _, v in self.objects.items(): + obj_dict[v._m_name] = v + return obj_dict + + @pyaedt_function_handler() + def refresh(self): + """Refresh this object.""" + self._solids = [] + self._sheets = [] + self._lines = [] + self._points = [] + self._unclassified = [] + self._all_object_names = [] + self.objects = {} + self.user_defined_components = {} + self._object_names_to_ids = {} + self._currentId = 0 + self._refresh_object_types() + self._refresh_all_ids_from_aedt_file() + self.refresh_all_ids() + + @pyaedt_function_handler() + def _get_commands(self, name): + try: + return self.oeditor.GetChildObject(name).GetChildNames() + except: + return [] + + @pyaedt_function_handler() + def _create_user_defined_component(self, name): + if name not in list(self.user_defined_components.keys()): + native_component_properties = self._get_native_component_properties(name) + if native_component_properties: + component_type = native_component_properties["NativeComponentDefinitionProvider"]["Type"] + o = UserDefinedComponent(self, name, native_component_properties, component_type) + else: + o = UserDefinedComponent(self, name) + self.user_defined_components[name] = o + else: + o = self.user_defined_components[name] + return o + + @pyaedt_function_handler() + def _create_point(self, name): + point = Point(self, name) + self.refresh_all_ids() + + return point + + @pyaedt_function_handler() + def _refresh_all_ids_from_aedt_file(self): + if not self._design_properties or "ModelSetup" not in self._design_properties: + return False + + try: + groups = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["Groups"]["Group"] + except KeyError: + groups = [] + if not isinstance(groups, list): + groups = [groups] + try: + self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"]["GeometryPart"] + except KeyError: + return 0 + for el in self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ + "GeometryPart" + ]: + if isinstance(el, (OrderedDict, dict)): + attribs = el["Attributes"] + operations = el.get("Operations", None) + else: + attribs = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ + "GeometryPart" + ]["Attributes"] + operations = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ + "ToplevelParts" + ]["GeometryPart"]["Operations"] + if attribs["Name"] in self._all_object_names: + pid = 0 + + if operations and isinstance(operations.get("Operation", None), (OrderedDict, dict)): + try: + pid = operations["Operation"]["ParentPartID"] + except: # pragma: no cover + pass + elif operations and isinstance(operations.get("Operation", None), list): + try: + pid = operations["Operation"][0]["ParentPartID"] + except: + pass + o = self._create_object(name=attribs["Name"], pid=pid, use_cached=True) + o._part_coordinate_system = attribs["PartCoordinateSystem"] + if "NonModel" in attribs["Flags"]: + o._model = False + else: + o._model = True + if "Wireframe" in attribs["Flags"]: + o._wireframe = True + else: + o._wireframe = False + groupname = "" + for group in groups: + if attribs["GroupId"] == group["GroupID"]: + groupname = group["Attributes"]["Name"] + + o._m_groupName = groupname + try: + o._color = tuple(int(x) for x in attribs["Color"][1:-1].split(" ")) + except: + o._color = None + o._surface_material = attribs.get("SurfaceMaterialValue", None) + if o._surface_material: + o._surface_material = o._surface_material[1:-1].lower() + if "MaterialValue" in attribs: + o._material_name = attribs["MaterialValue"][1:-1].lower() + + o._is_updated = True + return len(self.objects) + + @pyaedt_function_handler() + def cleanup_objects(self): + """Clean up objects that no longer exist in the modeler because + they were removed by previous operations. + + This method also updates object IDs that may have changed via + a modeler operation such as :func:`pyaedt.modeler.Model3D.Modeler3D.unite` + or :func:`pyaedt.modeler.Model2D.Modeler2D.unite`. + + Returns + ------- + dict + Dictionary of updated object IDs. + + """ + new_object_dict = {} + new_object_id_dict = {} + new_points_dict = {} + + all_objects = self.object_names + all_unclassified = self.unclassified_names + all_objs = all_objects + all_unclassified + for old_id, obj in self.objects.items(): + if obj.name in all_objs: + # Check if ID can change in boolean operations + # updated_id = obj.id # By calling the object property we get the new id + new_object_id_dict[obj.name] = old_id + new_object_dict[old_id] = obj + for old_id, obj in self.points.items(): + if obj.name in self._points: + new_points_dict[obj.name] = obj + self.objects = new_object_dict + self._object_names_to_ids = new_object_id_dict + self.points = new_points_dict + + @pyaedt_function_handler() + def find_new_objects(self): + """Find any new objects in the modeler that were created + by previous operations. + + Returns + ------- + dict + Dictionary of new objects. + + """ + new_objects = [] + for obj_name in self.object_names: + if obj_name not in self._object_names_to_ids: + new_objects.append(obj_name) + return new_objects + + @pyaedt_function_handler() + def add_new_objects(self): + """Add objects that have been created in the modeler by + previous operations. + + Returns + ------- + list + List of added objects. + + """ + # TODO: Need to improve documentation for this method. + added_objects = [] + + for obj_name in self.object_names: + if obj_name not in self._object_names_to_ids: + self._create_object(obj_name) + added_objects.append(obj_name) + for obj_name in self.unclassified_names: + if obj_name not in self._object_names_to_ids: + self._create_object(obj_name) + added_objects.append(obj_name) + for obj_name in self.point_names: + if obj_name not in self.points.keys(): + self._create_object(obj_name) + added_objects.append(obj_name) + return added_objects + + @pyaedt_function_handler() + def add_new_user_defined_component(self): + """Add 3D components and user-defined models that have been created in the modeler by + previous operations. + + Returns + ------- + list + List of added components. + + """ + added_component = [] + for comp_name in self.user_defined_component_names: + if comp_name not in self.user_defined_components: + self._create_user_defined_component(comp_name) + added_component.append(comp_name) + return added_component + + # TODO Eliminate this - check about import_3d_cad + # Should no longer be a problem + @pyaedt_function_handler() + def refresh_all_ids(self): + """Refresh all IDs.""" + + self.add_new_objects() + self.add_new_user_defined_component() + self.cleanup_objects() + + return len(self.objects) + + @pyaedt_function_handler() + def get_objects_by_material(self, materialname=None): + """Get a list of objects either of a specified material or classified by material. + + Parameters + ---------- + materialname : str + Name of the material. The default is ``None``. + + Returns + ------- + list of class:`pyaedt.modeler.cad.object3d.Object3d` + If a material name is not provided, the method returns + a list of dictionaries where keys are material names + of conductors, dielectrics, gases, and liquids respectively + in the design and values are objects assigned to these materials. + If a material name is provided, the method returns a list + of objects assigned to the material. + + References + ---------- + + >>> oEditor.GetObjectsByMaterial + + """ + obj_lst = [] + if materialname is not None: + for obj in self.object_list: + if obj and ("[" in obj.material_name or "(" in obj.material_name) and obj.object_type == "Solid": + material = ( + self._app.odesign.GetChildObject("3D Modeler") + .GetChildObject(obj.name) + .GetPropEvaluatedValue("Material") + .lower() + ) + if materialname.lower() == material: + obj_lst.append(obj) + elif obj and (obj.material_name == materialname or obj.material_name == materialname.lower()): + obj_lst.append(obj) + else: + obj_lst = [ + self._get_object_dict_by_material(self.materials.conductors), + self._get_object_dict_by_material(self.materials.dielectrics), + self._get_object_dict_by_material(self.materials.gases), + self._get_object_dict_by_material(self.materials.liquids), + ] + return obj_lst + + @pyaedt_function_handler() + def _get_coordinates_data(self): # pragma: no cover + coord = [] + id2name = {1: "Global"} + name2refid = {} + if self._design_properties and "ModelSetup" in self._design_properties: + cs = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["CoordinateSystems"] + for ds in cs: + try: + if isinstance(cs[ds], (OrderedDict, dict)): + if cs[ds]["OperationType"] == "CreateRelativeCoordinateSystem": + props = cs[ds]["RelativeCSParameters"] + name = cs[ds]["Attributes"]["Name"] + cs_id = cs[ds]["ID"] + id2name[cs_id] = name + name2refid[name] = cs[ds]["ReferenceCoordSystemID"] + coord.append(CoordinateSystem(self, props, name)) + if "ZXZ" in props["Mode"]: + coord[-1].mode = "zxz" + elif "ZYZ" in props["Mode"]: + coord[-1].mode = "zyz" + else: + coord[-1].mode = "axis" + elif cs[ds]["OperationType"] == "CreateFaceCoordinateSystem": + name = cs[ds]["Attributes"]["Name"] + cs_id = cs[ds]["ID"] + id2name[cs_id] = name + op_id = cs[ds]["PlaceHolderOperationID"] + geometry_part = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ + "ToplevelParts" + ]["GeometryPart"] + if isinstance(geometry_part, (OrderedDict, dict)): + op = geometry_part["Operations"]["FaceCSHolderOperation"] + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + elif isinstance(geometry_part, list): + for gp in geometry_part: + op = gp["Operations"]["FaceCSHolderOperation"] + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + elif isinstance(cs[ds], list): + for el in cs[ds]: + if el["OperationType"] == "CreateRelativeCoordinateSystem": + props = el["RelativeCSParameters"] + name = el["Attributes"]["Name"] + cs_id = el["ID"] + id2name[cs_id] = name + name2refid[name] = el["ReferenceCoordSystemID"] + coord.append(CoordinateSystem(self, props, name)) + if "ZXZ" in props["Mode"]: + coord[-1].mode = "zxz" + elif "ZYZ" in props["Mode"]: + coord[-1].mode = "zyz" + else: + coord[-1].mode = "axis" + elif el["OperationType"] == "CreateFaceCoordinateSystem": + name = el["Attributes"]["Name"] + cs_id = el["ID"] + id2name[cs_id] = name + op_id = el["PlaceHolderOperationID"] + geometry_part = self._design_properties["ModelSetup"]["GeometryCore"][ + "GeometryOperations" + ]["ToplevelParts"]["GeometryPart"] + if isinstance(geometry_part, (OrderedDict, dict)): + op = geometry_part["Operations"]["FaceCSHolderOperation"] + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + elif isinstance(geometry_part, list): + for gp in geometry_part: + try: + op = gp["Operations"]["FaceCSHolderOperation"] + except KeyError: + continue + if isinstance(op, (OrderedDict, dict)): + if op["ID"] == op_id: + props = op["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + elif isinstance(op, list): + for iop in op: + if iop["ID"] == op_id: + props = iop["FaceCSParameters"] + coord.append(FaceCoordinateSystem(self, props, name)) + break + except: + pass + for cs in coord: + if isinstance(cs, CoordinateSystem): + try: + cs._ref_cs = id2name[name2refid[cs.name]] + except: + pass + coord.reverse() + return coord + + def _get_lists_data(self): + """Retrieve user object list data. + + Returns + ------- + [Dict with List information] + """ + design_lists = [] + if self._design_properties and self._design_properties.get("ModelSetup", None): + key1 = "GeometryOperations" + key2 = "GeometryEntityLists" + key3 = "GeometryEntityListOperation" + try: + entity_list = self._design_properties["ModelSetup"]["GeometryCore"][key1][key2] + if entity_list: + geom_entry = copy.deepcopy(entity_list[key3]) + if isinstance(geom_entry, (dict, OrderedDict)): + geom_entry = [geom_entry] + for data in geom_entry: + props = {} + name = data["Attributes"]["Name"] + props["ID"] = data["ID"] + props["Type"] = data["GeometryEntityListParameters"]["EntityType"] + if props["Type"] == "Object": + name_list = [] + for element in data["GeometryEntityListParameters"]["EntityList"]: + element_name = self.oeditor.GetObjectNameByID(int(element)) + name_list.append(element_name) + props["List"] = name_list + else: + props["List"] = data["GeometryEntityListParameters"]["EntityList"] + design_lists.append(Lists(self, props, name)) + except: + self.logger.info("Lists were not retrieved from AEDT file") + return design_lists + + def _get_planes_data(self): + """Get the plane's data. + + Returns + ------- + [Dict with List information] + """ + try: + return { + plane_name: self.oeditor.GetChildObject(plane_name) + for plane_name in self.oeditor.GetChildNames("Planes") + } + except TypeError: + return {} + + def __get__(self, instance, owner): + self._app = instance + return self + + @pyaedt_function_handler() + def fit_all(self): + """Fit all. + + References + ---------- + + >>> oEditor.FitAll + + Examples + -------- + + >>> from pyaedt import hfss + >>> hfss = Hfss() + >>> point_object = hfss.modeler.fit_all + """ + self.oeditor.FitAll() + + @pyaedt_function_handler() + def _find_perpendicular_points(self, face): + if isinstance(face, str): + vertices = [i.position for i in self[face].vertices] + else: + vertices = [] + for vertex in list(self.oeditor.GetVertexIDsFromFace(face)): + vertices.append([float(i) for i in list(self.oeditor.GetVertexPosition(vertex))]) + assert len(vertices) > 2, "Automatic A-B Assignment can be done only on face with more than 2 vertices." + origin = vertices[0] + a_end = [] + b_end = [] + tol = 1e-10 + for v in vertices[1:]: + edge1 = GeometryOperators.v_points(origin, v) + for v2 in vertices[1:]: + if v2 != v: + edge2 = GeometryOperators.v_points(origin, v2) + if abs(GeometryOperators.v_dot(edge1, edge2)) < tol: + a_end = v + b_end = v2 + break + if a_end: + break + if not a_end: + a_end = vertices[1] + b_end = vertices[2] + return False, (origin, a_end, b_end) + return True, (origin, a_end, b_end) + + @pyaedt_function_handler() + def cover_lines(self, selection): + """Cover closed lines and transform them to a sheet. + + Parameters + ---------- + selection : str, int + Polyline object to cover. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CoverLines + """ + obj_to_cover = self.convert_to_selections(selection, False) + self.oeditor.CoverLines(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) + return True + + @pyaedt_function_handler() + def cover_faces(self, selection): + """Cover a face. + + Parameters + ---------- + selection : str, int + Sheet object to cover. + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CoverLines + """ + obj_to_cover = self.convert_to_selections(selection, False) + self.oeditor.CoverSurfaces(["NAME:Selections", "Selections:=", obj_to_cover, "NewPartsModelFlag:=", "Model"]) + return True + + @pyaedt_function_handler() + def create_coordinate_system( + self, + origin=None, + reference_cs="Global", + name=None, + mode="axis", + view="iso", + x_pointing=None, + y_pointing=None, + psi=0, + theta=0, + phi=0, + u=None, + ): + """Create a coordinate system. + + Parameters + ---------- + origin : list, optional + List of ``[x, y, z]`` coordinates for the origin of the + coordinate system. The default is ``None``, in which case + ``[0, 0, 0]`` is used. + reference_cs : str, optional + Name of the reference coordinate system. The default is + ``"Global"``. + name : str, optional + Name of the coordinate system. The default is ``None``. + mode : str, optional + Definition mode. Options are ``"axis"``, ``"axisrotation"``, + ``"view"``, ``"zxz"``, and ``"zyz"`` The default + is ``"axis"``. You can also use the ``pyaedt.generic.constants.CSMODE`` + enumerator. + + * If ``mode="axis"``, specify the ``x_pointing`` and ``y_pointing`` parameters. + * If ``mode="axisrotation"``, specify the ``theta`` and ``u`` parameters. + * If ``mode="view"``, specify the ``view`` parameter. + * If ``mode="zxz"`` or ``mode="zyz"``, specify the ``phi``, ``theta``, + and ``psi`` parameters. + + + Parameters not needed by the specified mode are ignored. + The default mode, ``"axis"``, is a coordinate system parallel to the + global coordinate system centered in the global origin. + + view : str, int optional + View for the coordinate system if ``mode="view"``. Options + are ``"iso"``, ``None``, ``"XY"``, ``"XZ"``, and ``"XY"``. The + default is ``"iso"``. the ``"rotate"`` option is obsolete. You can + also use the ``pyaedt.generic.constants.VIEW`` enumerator. + + .. note:: + For backward compatibility, ``mode="view"`` and ``view="rotate"`` are the same as + ``mode="axis"``. Because the "rotate" option in the "view" mode is obsolete, use + ``mode="axis"`` instead. + + x_pointing : list, optional + List of the ``[x, y, z]`` coordinates specifying the X axis + pointing in the global coordinate system if ``mode="axis"``. + The default is ``[1, 0, 0]``. + y_pointing : list, optional + List of the ``[x, y, z]`` coordinates specifying the Y axis + pointing in the global coordinate system if ``mode="axis"``. + The default is ``[0, 1, 0]``. + phi : float, optional + Euler angle phi in degrees if ``mode="zxz"`` or ``mode="zyz"``. + The default is ``0``. + theta : float, optional + Euler angle theta or rotation angle in degrees if ``mode="zxz"``, + ``mode="zyz"``, or ``mode="axisrotation"``. The default is ``0``. + psi : float, optional + Euler angle psi in degrees if ``mode="zxz"`` or ``mode="zyz"``. + The default is ``0``. + u : list + List of the ``[ux, uy, uz]`` coordinates for the rotation axis + if ``mode="zxz"``. The default is ``[1, 0, 0]``. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.CoordinateSystem` + Created coordinate system. + + References + ---------- + + >>> oEditor.CreateRelativeCS + """ + if name: + cs_names = [i.name for i in self.coordinate_systems] + if name in cs_names: + raise AttributeError("A coordinate system with the specified name already exists.") + + cs = CoordinateSystem(self) + if cs: + result = cs.create( + origin=origin, + reference_cs=reference_cs, + name=name, + mode=mode, + view=view, + x_pointing=x_pointing, + y_pointing=y_pointing, + phi=phi, + theta=theta, + psi=psi, + u=u, + ) + if result: + return cs + return False + + @pyaedt_function_handler() + def create_face_coordinate_system( + self, face, origin, axis_position, axis="X", name=None, offset=None, rotation=0, always_move_to_end=True + ): + """Create a face coordinate system. + + The face coordinate has always the Z axis parallel to face normal. + The X and Y axis lie on the face plane. + + Parameters + ---------- + face : int, FacePrimitive + Face where the coordinate system is defined. + origin : int, FacePrimitive, EdgePrimitive, VertexPrimitive + Coordinate system origin. The origin must belong to the face where the + coordinate system is defined. + + - If a face is specified, the origin is placed on the face center. It must be + the same as the ``face`` parameter. + - If an edge is specified, the origin is placed on the edge midpoint. + - If a vertex is specified, the origin is placed on the vertex. + + axis_position : int, FacePrimitive, EdgePrimitive, VertexPrimitive + Specify where the X or Y axis is pointing. The position must belong to the face where the + coordinate system is defined. + Select which axis is considered with the option ``axis``. + If a face is specified, the position is placed on the face center. It must be the same as ``face``. + If an edge is specified, the position is placed on the edce midpoint. + If a vertex is specified, the position is placed on the vertex. + axis : str, optional + Select which axis is considered for positioning. Possible values are ``"X"`` and ``"Y"``. + The default is ``"X"``. + name : str, optional + Name of the coordinate system. The default is ``None``. + offset : list, optional + List of the ``[x, y]`` coordinates specifying the offset of the coordinate system origin. + The offset specified in the face coordinate system reference. + The default is ``[0, 0]``. + rotation : float, optional + Rotation angle of the coordinate system around its Z axis. Angle is in degrees. + The default is ``0``. + always_move_to_end : bool, optional + If ``True`` the Face Coordinate System creation operation will always be moved to the end of subsequent + objects operation. This will guarantee that the coordinate system will remain solidal with the object + face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.FaceCoordinateSystem` + + """ + + if name: + cs_names = [i.name for i in self.coordinate_systems] + if name in cs_names: # pragma: no cover + raise AttributeError("A coordinate system with the specified name already exists!") + + cs = FaceCoordinateSystem(self) + if cs: + result = cs.create( + face=face, + origin=origin, + axis_position=axis_position, + axis=axis, + name=name, + offset=offset, + rotation=rotation, + always_move_to_end=always_move_to_end, + ) + + if result: + return cs + return False + + @pyaedt_function_handler() + def create_object_coordinate_system( + self, obj, origin, x_axis, y_axis, move_to_end=True, reverse_x_axis=False, reverse_y_axis=False, name=None + ): + """Create an object coordinate system. + + Parameters + ---------- + obj : str, :class:`pyaedt.modeler.cad.object3d.Object3d` + Object to attach the object coordinate system to. + origin : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list + Refer to the origin where the object coordinate system is anchored. + It can be: + + - int in which case it refers to the entity Id. + - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. + - list in which case it refers to the origin coordinate system ``[x, y, z]``. + + x_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list + Entity that the x axis of the object coordinate system points to. + It can be: + + - int in which case it refers to the entity Id. + - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. + - list in which case it refers to the point coordinate system ``[x, y, z]`` that the x axis points to. + + y_axis : int, VertexPrimitive, EdgePrimitive, FacePrimitive, list + Entity that the y axis of the object coordinate system points to. + It can be: + + - int in which case it refers to the entity Id. + - VertexPrimitive, EdgePrimitive, FacePrimitive in which case it refers to the entity type. + - list in which case it refers to the point coordinate system ``[x, y, z]`` that the y axis points to. + + move_to_end : bool, optional + If ``True`` the Coordinate System creation operation will always be moved to the end of subsequent + objects operation. This will guarantee that the coordinate system will remain solidal with the object + face. If ``False`` the option "Always Move CS to End" is set to off. The default is ``True``. + reverse_x_axis : bool, optional + Whether the x-axis is in the reverse direction. + The default is ``False``. + reverse_y_axis : bool, optional + Whether the y-axis is in the reverse direction. + The default is ``False``. + name : str, optional + Name of the coordinate system. The default is ``None``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + if name: + cs_names = [i.name for i in self.coordinate_systems] + if name in cs_names: # pragma: no cover + raise AttributeError("A coordinate system with the specified name already exists.") + + cs = ObjectCoordinateSystem(self, name=name) + if cs: + result = cs.create( + obj=obj, + origin=origin, + x_axis=x_axis, + y_axis=y_axis, + move_to_end=move_to_end, + reverse_x_axis=reverse_x_axis, + reverse_y_axis=reverse_y_axis, + ) + + if result: + return cs + return False + + @pyaedt_function_handler() + def global_to_cs(self, point, ref_cs): + """Transform a point from the global coordinate system to another coordinate system. + + Parameters + ---------- + point : list + List of the ``[x, y, z]`` coordinates to transform. + ref_cs : str, CoordinateSystem + Name of the destination reference system. The ``CoordinateSystem`` object can also be + used. + + Returns + ------- + list + List of the transformed ``[x, y, z]`` coordinates. + + """ + if type(point) is not list or len(point) != 3: + raise AttributeError("Point must be in format [x, y, z].") + try: + point = [float(i) for i in point] + except: + raise AttributeError("Point must be in format [x, y, z].") + if isinstance(ref_cs, BaseCoordinateSystem): + ref_cs_name = ref_cs.name + elif isinstance(ref_cs, str): + ref_cs_name = ref_cs + else: + raise AttributeError("ref_cs must be either a string or a CoordinateSystem object.") + if ref_cs_name == "Global": + return point + cs_names = [i.name for i in self.coordinate_systems] + if ref_cs_name not in cs_names: + raise AttributeError("Specified coordinate system does not exist in the design.") + + def get_total_transformation(p, cs): + idx = cs_names.index(cs) + q = self.coordinate_systems[idx].quaternion + ox = GeometryOperators.parse_dim_arg( + self.coordinate_systems[idx].props["OriginX"], + self.model_units, + variable_manager=self._app.variable_manager, + ) + oy = GeometryOperators.parse_dim_arg( + self.coordinate_systems[idx].props["OriginY"], + self.model_units, + variable_manager=self._app.variable_manager, + ) + oz = GeometryOperators.parse_dim_arg( + self.coordinate_systems[idx].props["OriginZ"], + self.model_units, + variable_manager=self._app.variable_manager, + ) + o = [ox, oy, oz] + refcs = self.coordinate_systems[idx].ref_cs + if refcs == "Global": + p1 = p + else: + p1 = get_total_transformation(p, refcs) + p2 = GeometryOperators.q_rotation_inv(GeometryOperators.v_sub(p1, o), q) + return p2 + + p = get_total_transformation(point, ref_cs_name) + return [round(p[i], 13) for i in range(3)] + + @pyaedt_function_handler() + def set_working_coordinate_system(self, name): + """Set the working coordinate system to another coordinate system. + + Parameters + ---------- + name : str, FaceCoordinateSystem, CoordinateSystem + Name of the coordinate system or ``CoordinateSystem`` object to set as the working + coordinate system. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SetWCS + """ + if isinstance(name, BaseCoordinateSystem): + self.oeditor.SetWCS( + ["NAME:SetWCS Parameter", "Working Coordinate System:=", name.name, "RegionDepCSOk:=", False] + ) + else: + self.oeditor.SetWCS( + ["NAME:SetWCS Parameter", "Working Coordinate System:=", name, "RegionDepCSOk:=", False] + ) + return True + + @pyaedt_function_handler() + def invert_cs(self, coordinate_system, to_global=False): + """Get the inverse translation and the conjugate quaternion of the input coordinate system. + + By defining a new coordinate system with this information, the reference coordinate system + of the input coordinate system is obtained. + + Parameters + ---------- + coordinate_system : str, CoordinateSystem + Name of the destination reference system. A ``CoordinateSystem`` object can also be + used. + to_global : bool, optional + Whether to compute the inverse transformation of the input coordinate system with + respect to the global coordinate system. The default is ``False``. + + Returns + ------- + list + Origin coordinates. + list + Quaternion. + """ + if isinstance(coordinate_system, BaseCoordinateSystem): + cs = coordinate_system + elif isinstance(coordinate_system, str): + cs_names = [i.name for i in self.coordinate_systems] + if coordinate_system not in cs_names: # pragma: no cover + raise AttributeError("Specified coordinate system does not exist in the design.") + cs = self.coordinate_systems[cs_names.index(coordinate_system)] + else: # pragma: no cover + raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") + + if to_global: + o, q = self.reference_cs_to_global(coordinate_system) + o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(o, q)) + q = [q[0], -q[1], -q[2], -q[3]] + else: + q = cs.quaternion + q = [q[0], -q[1], -q[2], -q[3]] + o = GeometryOperators.v_prod(-1, GeometryOperators.q_rotation(cs.origin, q)) + return o, q + + @pyaedt_function_handler() + def reference_cs_to_global(self, coordinate_system): + """Get the origin and quaternion defining the coordinate system in the global coordinates. + + Parameters + ---------- + coordinate_system : str, CoordinateSystem + Name of the destination reference system. The ``CoordinateSystem`` object can also be used. + + Returns + ------- + list + Origin coordinates. + list + Quaternion. + """ + cs_names = [i.name for i in self.coordinate_systems] + if isinstance(coordinate_system, BaseCoordinateSystem): + cs = coordinate_system + elif isinstance(coordinate_system, str): + if coordinate_system not in cs_names: # pragma: no cover + raise AttributeError("Specified coordinate system does not exist in the design.") + cs = self.coordinate_systems[cs_names.index(coordinate_system)] + else: # pragma: no cover + raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") + quaternion = cs.quaternion + origin = cs.origin + ref_cs_name = cs.ref_cs + while ref_cs_name != "Global": + ref_cs = self.coordinate_systems[cs_names.index(ref_cs_name)] + quaternion_ref = ref_cs.quaternion + quaternion = GeometryOperators.q_prod(quaternion_ref, quaternion) + origin_ref = ref_cs.origin + origin = GeometryOperators.v_sum(origin_ref, GeometryOperators.q_rotation(origin, quaternion_ref)) + ref_cs_name = ref_cs.ref_cs + return origin, quaternion + + @pyaedt_function_handler() + def duplicate_coordinate_system_to_global(self, coordinate_system): + """Create a duplicate coordinate system referenced to the global coordinate system. + + Having this coordinate system referenced to the global coordinate + system removes all nested coordinate system dependencies. + + Parameters + ---------- + coordinate_system : str, CoordinateSystem + Name of the destination reference system. The ``CoordinateSystem`` object can also be used. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.CoordinateSystem` + Created coordinate system. + + References + ---------- + + >>> oEditor.CreateRelativeCS + """ + cs_names = [i.name for i in self.coordinate_systems] + if isinstance(coordinate_system, BaseCoordinateSystem): + cs = coordinate_system + elif isinstance(coordinate_system, str): + if coordinate_system not in cs_names: # pragma: no cover + raise AttributeError("Specified coordinate system does not exist in the design.") + cs = self.coordinate_systems[cs_names.index(coordinate_system)] + else: # pragma: no cover + raise AttributeError("coordinate_system must either be a string or a CoordinateSystem object.") + if isinstance(cs, CoordinateSystem): + o, q = self.reference_cs_to_global(coordinate_system) + x, y, _ = GeometryOperators.quaternion_to_axis(q) + reference_cs = "Global" + name = cs.name + "_RefToGlobal" + if name in cs_names: + name = cs.name + generate_unique_name("_RefToGlobal") + cs = CoordinateSystem(self) + if cs: + result = cs.create( + origin=o, + reference_cs=reference_cs, + name=name, + mode="axis", + x_pointing=x, + y_pointing=y, + ) + if result: + return cs + elif isinstance(cs, FaceCoordinateSystem): + name = cs.name + "_RefToGlobal" + if name in cs_names: + name = cs.name + generate_unique_name("_RefToGlobal") + face_cs = FaceCoordinateSystem(self, props=cs.props, name=name, face_id=cs.props["FaceID"]) + obj = [obj for obj in self.object_list for face in obj.faces if face.id == face_cs.props["FaceID"]][0] + face = [face for face in obj.faces if face.id == face_cs.props["FaceID"]][0] + if face_cs.props["Origin"]["PositionType"] == "FaceCenter": + origin = face + elif face_cs.props["Origin"]["PositionType"] == "EdgeCenter": + origin = [edge for edge in face.edges if edge.id == face_cs.props["Origin"]["EntityID"]][0] + elif face_cs.props["Origin"]["PositionType"] == "OnVertex": + edge = [ + edge + for edge in face.edges + for vertex in edge.vertices + if vertex.id == face_cs.props["Origin"]["EntityID"] + ][0] + origin = [v for v in edge.vertices if v.id == face_cs.props["Origin"]["EntityID"]][0] + if face_cs.props["AxisPosn"]["PositionType"] == "EdgeCenter": + axis_position = [edge for edge in face.edges if edge.id == face_cs.props["AxisPosn"]["EntityID"]][0] + elif face_cs.props["AxisPosn"]["PositionType"] == "OnVertex": + edge = [ + edge + for edge in face.edges + for vertex in edge.vertices + if vertex.id == face_cs.props["AxisPosn"]["EntityID"] + ][0] + axis_position = [v for v in edge.vertices if v.id == face_cs.props["AxisPosn"]["EntityID"]][0] + if face_cs: + result = face_cs.create( + face=face, + origin=origin, + axis_position=axis_position, + axis=face_cs.props["WhichAxis"], + name=name, + offset=[face_cs["XOffset"], face_cs["YOffset"]], + rotation=decompose_variable_value(face_cs["ZRotationAngle"])[0], + always_move_to_end=face_cs["MoveToEnd"], + ) + if result: + return face_cs + elif isinstance(cs, ObjectCoordinateSystem): + name = cs.name + "_RefToGlobal" + if name in cs_names: + name = cs.name + generate_unique_name("_RefToGlobal") + obj_cs = ObjectCoordinateSystem(self, props=cs.props, name=name, entity_id=cs.entity_id) + objs_by_name_list = [obj for obj in self.object_list if obj.part_coordinate_system == cs.name] + objs_by_id_list = [o for o in self.object_list if o.id == cs.entity_id] + if objs_by_name_list: + obj = objs_by_name_list[0] + elif objs_by_id_list: + obj = [o for o in self.object_list if o.id == cs.entity_id][0] + if cs.props["Origin"]["PositionType"] != "AbsolutePosition": + if cs.props["Origin"]["PositionType"] == "FaceCenter": + origin = [f for f in obj.faces if f.id == cs.props["Origin"]["EntityID"]][0] + elif ( + cs.props["Origin"]["PositionType"] == "EdgeCenter" + or cs.props["Origin"]["PositionType"] == "ArcCenter" + ): + origin = [e for e in obj.edges if e.id == cs.props["Origin"]["EntityID"]][0] + elif cs.props["Origin"]["PositionType"] == "OnVertex": + origin = [v for v in obj.vertices if v.id == cs.props["Origin"]["EntityID"]][0] + else: + origin = [ + cs.props["Origin"]["XPosition"], + cs.props["Origin"]["YPosition"], + cs.props["Origin"]["ZPosition"], + ] + if "xAxisPos" in cs.props: + if cs.props["xAxisPos"]["PositionType"] == "FaceCenter": + x_axis = [f for f in obj.faces if f.id == cs.props["xAxisPos"]["EntityID"]][0] + elif ( + cs.props["xAxisPos"]["PositionType"] == "EdgeCenter" + or cs.props["xAxisPos"]["PositionType"] == "ArcCenter" + ): + x_axis = [e for e in obj.edges if e.id == cs.props["xAxisPos"]["EntityID"]][0] + elif cs.props["xAxisPos"]["PositionType"] == "OnVertex": + x_axis = [v for v in obj.vertices if v.id == cs.props["xAxisPos"]["EntityID"]][0] + elif "xAxis" in cs.props: + x_axis = [ + cs.props["xAxis"]["xDirection"], + cs.props["xAxis"]["yDirection"], + cs.props["xAxis"]["zDirection"], + ] + if "yAxisPos" in cs.props: + if cs.props["yAxisPos"]["PositionType"] == "FaceCenter": + y_axis = [f for f in obj.faces if f.id == cs.props["yAxisPos"]["EntityID"]][0] + elif ( + cs.props["yAxisPos"]["PositionType"] == "EdgeCenter" + or cs.props["yAxisPos"]["PositionType"] == "ArcCenter" + ): + y_axis = [e for e in obj.edges if e.id == cs.props["yAxisPos"]["EntityID"]][0] + elif cs.props["yAxisPos"]["PositionType"] == "OnVertex": + y_axis = [v for v in obj.vertices if v.id == cs.props["yAxisPos"]["EntityID"]][0] + elif "yAxis" in cs.props: + y_axis = [ + cs.props["yAxis"]["xDirection"], + cs.props["yAxis"]["yDirection"], + cs.props["yAxis"]["zDirection"], + ] + if obj_cs: + result = obj_cs.create( + obj=obj, + origin=origin, + x_axis=x_axis, + y_axis=y_axis, + move_to_end=cs.props["MoveToEnd"], + reverse_x_axis=cs.props["ReverseXAxis"], + reverse_y_axis=cs.props["ReverseYAxis"], + ) + if result: + return obj_cs + return False + + @pyaedt_function_handler() + def set_objects_deformation(self, objects): + """Assign deformation objects to a Workbench link. + + Parameters + ---------- + objects : list + List of the deformation objects to assign to the Workbench link. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oDesign.SetObjectDeformation + """ + self.logger.info("Enabling deformation feedback") + try: + self._odesign.SetObjectDeformation(["EnabledObjects:=", objects]) + except: + self.logger.error("Failed to enable the deformation dependence") + return False + else: + self.logger.info("Successfully enabled deformation feedback") + return True + + @pyaedt_function_handler() + def set_objects_temperature(self, objects, ambient_temp=22, create_project_var=False): + """Assign temperatures to objects. + + The materials assigned to the objects must have a thermal modifier. + + Parameters + ---------- + objects : list + List of objects. + ambient_temp : float, optional + Ambient temperature. The default is ``22``. + create_project_var : bool, optional + Whether to create a project variable for the ambient temperature. + The default is ``False``. If ``True,`` ``$AmbientTemp`` is created. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oDesign.SetObjectTemperature + """ + self.logger.info("Set model temperature and enabling Thermal Feedback") + if create_project_var: + self._app.variable_manager["$AmbientTemp"] = str(ambient_temp) + "cel" + var = "$AmbientTemp" + else: + var = str(ambient_temp) + "cel" + vargs1 = [ + "NAME:TemperatureSettings", + "IncludeTemperatureDependence:=", + True, + "EnableFeedback:=", + True, + "Temperatures:=", + ] + vargs2 = [] + for obj in objects: + mat = self[obj].material_name + th = self._app.materials.check_thermal_modifier(mat) + if th: + vargs2.append(obj) + vargs2.append(var) + if not vargs2: + return False + else: + vargs1.append(vargs2) + try: + self._odesign.SetObjectTemperature(vargs1) + except: + self.logger.error("Failed to enable the temperature dependence") + return False + else: + self.logger.info("Assigned Objects Temperature") + return True + + @pyaedt_function_handler() + def _create_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, portonplane): + """Create a sheet from the edge closest to the object. + + Parameters + ---------- + startobj : str + Name of the starting object. + endobject : str + Name of the ending object. + axisdir : int + Axis direction. Options are ``0`` through ``5``. + portonplane : bool + Whether edges are to be on the plane orthogonal to the axis + direction. + + Returns + ------- + str + Name of the sheet. + list + List of float values of the first edge midpoint. + Point in ``[x, y, z]`` coordinates. + list + List of float values of the second edge midpoint. + Point in ``[x, y, z]`` coordinates. + + """ + out, parallel = self.find_closest_edges(startobj, endobject, axisdir) + port_edges = self.get_equivalent_parallel_edges(out, portonplane, axisdir, startobj, endobject) + if port_edges is None or port_edges is False: + port_edges = [] + for e in out: + edge = self.create_object_from_edge(e) + port_edges.append(edge) + edge_0 = port_edges[0].edges[0] + edge_1 = port_edges[1].edges[0] + sheet_name = port_edges[0].name + point0 = edge_0.midpoint + point1 = edge_1.midpoint + self.connect(port_edges) + return sheet_name, point0, point1 + + @pyaedt_function_handler() + def find_point_around(self, objectname, startposition, offset, plane): + """Find the point around an object. + + Parameters + ---------- + objectname : str + Name of the object. + startposition : list + List of the ``[x, y, z]`` coordinates for the starting + position of the object. + offset : + Offset to apply. + plane : str + Coordinate plane of the arc. Choices are ``"YZ"``, + ``"ZX"``, and ``"XY"``. + + + Returns + ------- + list + List of the ``[x, y, z]`` coordinates for the point. + + """ + position = [0, 0, 0] + angle = 0 + if plane == 0: + while angle <= 360: + position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) + position[1] = startposition[1] + offset * math.sin(math.pi * angle / 180) + if objectname in self.get_bodynames_from_position(startposition): + angle = 400 + else: + angle += 90 + elif plane == 1: + while angle <= 360: + position[1] = startposition[1] + offset * math.cos(math.pi * angle / 180) + position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) + if objectname in self.get_bodynames_from_position(startposition): + angle = 400 + else: + angle += 90 + elif plane == 2: + while angle <= 360: + position[0] = startposition[0] + offset * math.cos(math.pi * angle / 180) + position[2] = startposition[2] + offset * math.sin(math.pi * angle / 180) + if objectname in self.get_bodynames_from_position(startposition): + angle = 400 + else: + angle += 90 + return position + + @pyaedt_function_handler() + def create_sheet_to_ground(self, objectname, groundname=None, axisdir=0, sheet_dim=1): + """Create a sheet between an object and a ground plane. + + The ground plane must be bigger than the object and perpendicular + to one of the three axes. + + Parameters + ---------- + objectname : str + Name of the object. + groundname : str, optional + Name of the ground. The default is ``None``, in which case the + bounding box is used. + axisdir : int, optional + Axis direction. Options are ``0`` through ``5``. The default is ``0``. + sheet_dim : optional + Sheet dimension in millimeters. The default is ``1``. + + Returns + ------- + int + ID of the sheet created. + + References + ---------- + + >>> oEditor.CreatePolyline + """ + if axisdir > 2: + obj_cent = [-1e6, -1e6, -1e6] + else: + obj_cent = [1e6, 1e6, 1e6] + face_ob = None + for face in self[objectname].faces: + center = face.center + if not center: + continue + if axisdir > 2 and center[axisdir - 3] > obj_cent[axisdir - 3]: + obj_cent = center + face_ob = face + elif axisdir <= 2 and center[axisdir] < obj_cent[axisdir]: + obj_cent = center + face_ob = face + vertex = face_ob.vertices + start = vertex[0].position + + if not groundname: + gnd_cent = [] + bounding = self.get_model_bounding_box() + if axisdir < 3: + for i in bounding[0:3]: + gnd_cent.append(float(i)) + else: + for i in bounding[3:]: + gnd_cent.append(float(i)) + else: + ground_plate = self[groundname] + if axisdir > 2: + gnd_cent = [1e6, 1e6, 1e6] + else: + gnd_cent = [-1e6, -1e6, -1e6] + face_gnd = ground_plate.faces + for face in face_gnd: + center = face.center + if not center: + continue + if axisdir > 2 and center[axisdir - 3] < gnd_cent[axisdir - 3]: + gnd_cent = center + elif axisdir <= 2 and center[axisdir] > gnd_cent[axisdir]: + gnd_cent = center + + axisdist = obj_cent[divmod(axisdir, 3)[1]] - gnd_cent[divmod(axisdir, 3)[1]] + if axisdir < 3: + axisdist = -axisdist + + if divmod(axisdir, 3)[1] == 0: + cs = self._app.PLANE.YZ + vector = [axisdist, 0, 0] + elif divmod(axisdir, 3)[1] == 1: + cs = self._app.PLANE.ZX + vector = [0, axisdist, 0] + elif divmod(axisdir, 3)[1] == 2: + cs = self._app.PLANE.XY + vector = [0, 0, axisdist] + + offset = self.find_point_around(objectname, start, sheet_dim, cs) + p1 = self.create_polyline([start, offset]) + p2 = p1.clone().move(vector) + self.connect([p1, p2]) + + return p1 + + @pyaedt_function_handler() + def _get_faceid_on_axis(self, objname, axisdir): + """Get the ID of the face on the axis. + + Parameters + ---------- + objname : str + Name of the object. + axisdir : int + Axis direction. Options are ``1`` through ``5``. + + Returns + ------- + int + ID of the face. + + """ + faces = self.get_object_faces(objname) + face = None + center = None + for f in faces: + try: + c = self.get_face_center(f) + if not face and c: + face = f + center = c + elif axisdir < 3 and c[axisdir] < center[axisdir]: + face = f + center = c + elif axisdir > 2 and c[axisdir - 3] > center[axisdir - 3]: + face = f + center = c + except: + pass + return face + + @pyaedt_function_handler() + def _create_microstrip_sheet_from_object_closest_edge(self, startobj, endobject, axisdir, vfactor=3, hfactor=5): + def duplicate_and_unite(sheet_name, array1, array2, dup_factor): + status, list = self.duplicate_along_line(sheet_name, array1, dup_factor + 1) + status, list2 = self.duplicate_along_line(sheet_name, array2, dup_factor + 1) + list_unite.extend(list) + list_unite.extend(list2) + self.unite(list_unite) + + tol = 1e-6 + out, parallel = self.find_closest_edges(startobj, endobject, axisdir) + port_edges = self.get_equivalent_parallel_edges(out, True, axisdir, startobj, endobject) + if port_edges is None: + return False + sheet_name = port_edges[0].name + point0 = port_edges[0].edges[0].midpoint + point1 = port_edges[1].edges[0].midpoint + len = port_edges[0].edges[0].length + vect = GeometryOperators.v_points(point1, point0) + l1 = out[0].length + l2 = out[1].length + if l1 < l2: + vect_t = [i * (vfactor - 1) for i in vect] + self.move(port_edges[0], vect_t) + else: + vect_t = [i * (1 - vfactor) for i in vect] + self.move(port_edges[1], vect_t) + + self.connect(port_edges) + list_unite = [sheet_name] + dup_factor = divmod((hfactor + 1), 2)[0] + coeff = float(hfactor - 1) / 2 / dup_factor + + if divmod(axisdir, 3)[1] == 0 and abs(vect[1]) < tol: + duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) + elif divmod(axisdir, 3)[1] == 0 and abs(vect[2]) < tol: + duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) + elif divmod(axisdir, 3)[1] == 1 and abs(vect[0]) < tol: + duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) + elif divmod(axisdir, 3)[1] == 1 and abs(vect[2]) < tol: + duplicate_and_unite(sheet_name, [0, 0, len * coeff], [0, 0, -len * coeff], dup_factor) + elif divmod(axisdir, 3)[1] == 2 and abs(vect[0]) < tol: + duplicate_and_unite(sheet_name, [len * coeff, 0, 0], [-len * coeff, 0, 0], dup_factor) + elif divmod(axisdir, 3)[1] == 2 and abs(vect[1]) < tol: + duplicate_and_unite(sheet_name, [0, len * coeff, 0], [0, -len * coeff, 0], dup_factor) + + return sheet_name, point0, point1 + + @pyaedt_function_handler() + def get_boundaries_name(self): + """Retrieve all boundary names. + + Returns + ------- + list + List of boundary names. Boundaries with multiple modes will return one + boundary for each mode. + + References + ---------- + + >>> oModule.GetBoundaries + """ + if self._app.design_type == "Icepak": + return list(self._app.odesign.GetChildObject("Thermal").GetChildNames()) + else: + return list(self._app.odesign.GetChildObject("Boundaries").GetChildNames()) + + @pyaedt_function_handler() + def set_object_model_state(self, obj_list, model=True): + """Set a list of objects to either models or non-models. + + Parameters + ---------- + obj_list : list + List of objects IDs or names. + model : bool, optional + Whether to set the objects as models. The default is ``True``. + If ``False``, the objects are set as non-models. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ChangeProperty + """ + selections = self.convert_to_selections(obj_list, True) + arguments = [ + "NAME:AllTabs", + [ + "NAME:Geometry3DAttributeTab", + ["NAME:PropServers"] + selections, + ["NAME:ChangedProps", ["NAME:Model", "Value:=", model]], + ], + ] + self._modeler.oeditor.ChangeProperty(arguments) + return True + + @pyaedt_function_handler() + def get_objects_in_group(self, group): + """Retrieve a list of objects belonging to a group. + + Parameters + ---------- + group : str + Name of the group. + + Returns + ------- + list + List of objects belonging to the group. + + References + ---------- + + >>> oEditor.GetObjectsInGroup + """ + if type(group) is not str: + raise ValueError("Group name must be a string") + group_objs = list(self.oeditor.GetObjectsInGroup(group)) + if not group_objs: + return None + return group_objs + + @pyaedt_function_handler() + def get_group_bounding_box(self, group): + """Retrieve the bounding box of a group. + + Parameters + ---------- + group : str + Name of the group. + + Returns + ------- + list + List of six float values representing the bounding box + in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. + + References + ---------- + + >>> oEditor.GetObjectsInGroup + >>> oEditor.GetModelBoundingBox + """ + if type(group) is not str: + raise ValueError("Group name must be a string") + group_objs = list(self.oeditor.GetObjectsInGroup(group)) + if not group_objs: + return None + all_objs = self.object_names + objs_to_unmodel = [i for i in all_objs if i not in group_objs] + if objs_to_unmodel: + vArg1 = ["NAME:Model", "Value:=", False] + self._change_geometry_property(vArg1, objs_to_unmodel) + bounding = self.get_model_bounding_box() + self._odesign.Undo() + else: + bounding = self.get_model_bounding_box() + return bounding + + @pyaedt_function_handler() + def convert_to_selections(self, object_id, return_list=False): + """Convert modeler objects. + + This method converts modeler object or IDs to the corresponding + output according to the following scheme: + + ==================== =========================== + ``object_id`` Return value + ==================== =========================== + + ``int`` object name (str) + ``Object3D`` object name (str) + ``FacePrimitive`` int, face ID + ``EdgePrimitive`` int, edge ID + ``str`` return the same ``str`` + + + - If ``object_id`` is a list, a list is returned according + to the table. If ``object_id`` is a single value, a list + of ``length == 1`` is returned (default). + + - If the second argument, ``return_list``, is set to `False` (default), a + string is returned with elements separated by a comma (,)". + + + Parameters + ---------- + object_id : str, int, list + One or more object IDs whose name will be returned. A list can contain + both strings (object names) and integers (object IDs). + return_list : bool, option + Whether to return a list of the selections. The default is + ``False``, in which case a string of the selections is returned. + If ``True``, a list of the selections is returned. + + Returns + ------- + str or list + Name of the objects corresponding to the one or more object IDs passed as arguments. + + """ + if not isinstance(object_id, list): + object_id = [object_id] + objnames = [] + for el in object_id: + if isinstance(el, int) and el in self.objects: + objnames.append(self.objects[el].name) + elif isinstance(el, int): + objnames.append(el) + elif isinstance(el, Object3d): + objnames.append(el.name) + elif isinstance(el, FacePrimitive) or isinstance(el, EdgePrimitive) or isinstance(el, VertexPrimitive): + objnames.append(el.id) + elif isinstance(el, str): + objnames.append(el) + if return_list: + return objnames + else: + return ",".join([str(i) for i in objnames]) + + @pyaedt_function_handler() + def split(self, objects, plane=None, sides="Both", tool=None, split_crossing_objs=False, delete_invalid_objs=True): + """Split a list of objects. + In case of 3D design possible splitting options are plane, Face Primitive, Edge Primitive or Polyline. + In case of 2D design possible splitting option is plane. + + Parameters + ---------- + objects : str, int, or list + One or more objects to split. A list can contain + both strings (object names) and integers (object IDs). + plane : str, optional + Coordinate plane of the cut or the Application.PLANE object. + The default value is ``None``. + Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``. + If plane or tool parameter are not provided the method returns ``False``. + sides : str, optional + Which side to keep. The default is ``"Both"``, in which case + all objects are kept after the split. Options are ``"Both"``, + ``"NegativeOnly"``, and ``"PositiveOnly"``. + tool : str, int, :class:`pyaedt.modeler.cad.elements3d.FacePrimitive`or + :class:`pyaedt.modeler.cad.elements3d.EdgePrimitive`, optional + For 3D design types is the name, ID, face, edge or polyline used to split the objects. + For 2D design types is the name of the plane used to split the objects. + The default value is ``None``. + If plane or tool parameter are not provided the method returns ``False``. + split_crossing_objs : bool, optional + Whether to split crossing plane objects. + The default is ``False``. + delete_invalid_objs : bool, optional + Whether to delete invalid objects. + The default is ``True``. + + Returns + ------- + list of str + List of split object names. + + References + ---------- + + >>> oEditor.Split + """ + if plane is None and not tool or plane and tool: + self.logger.info("One method to split the objects has to be defined.") + return False + objects = self.convert_to_selections(objects) + all_objs = [i for i in self.object_names] + selections = [] + planes = "Dummy" + tool_type = "PlaneTool" + tool_entity_id = -1 + if self._is3d: + obj_name = None + obj = [] + if plane is not None and not tool: + tool_type = "PlaneTool" + tool_entity_id = -1 + planes = GeometryOperators.cs_plane_to_plane_str(plane) + selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] + elif tool and plane is None: + if isinstance(tool, str): + obj = [f for f in self.object_list if f.name == tool][0] + obj_name = obj.name + if isinstance(obj, Object3d) and obj.object_type != "Line": + obj = obj.faces[0] + tool_type = "FaceTool" + elif obj.object_type == "Line": + obj = obj.edges[0] + tool_type = "EdgeTool" + elif isinstance(tool, int): + # check whether tool it's an object Id + if tool in self.objects.keys(): + obj = self.objects[tool] + else: + # check whether tool is an ID of an object face + objs = [o for o in self.object_list for f in o.faces if f.id == tool] + if objs: + obj = objs[0] + else: + self.logger.info("Tool must be a sheet object or a face of an object.") + return False + if isinstance(obj, FacePrimitive) or isinstance(obj, Object3d) and obj.object_type != "Line": + obj_name = obj.name + obj = obj.faces[0] + tool_type = "FaceTool" + elif obj.object_type == "Line": + obj_name = obj.name + obj = obj.edges[0] + tool_type = "EdgeTool" + elif isinstance(tool, FacePrimitive): + for o in self.object_list: + for f in o.faces: + if f.id == tool.id: + obj_name = o.name + obj = f + tool_type = "FaceTool" + elif isinstance(tool, EdgePrimitive): + for o in self.object_list: + for e in o.edges: + if e.id == tool.id: + obj_name = o.name + obj = e + tool_type = "EdgeTool" + elif isinstance(tool, Polyline) or tool.object_type != "Line": + for o in self.object_list: + if o.name == tool.name: + obj_name = tool.name + obj = o.edges[0] + tool_type = "EdgeTool" + else: + self.logger.error("Face tool part has to be provided as a string (name) or an int (face id).") + return False + planes = "Dummy" + tool_type = tool_type + tool_entity_id = obj.id + selections = [ + "NAME:Selections", + "Selections:=", + objects, + "NewPartsModelFlag:=", + "Model", + "ToolPart:=", + obj_name, + ] + else: + if plane is None and tool or not plane: + self.logger.info("For 2D design types only planes can be defined.") + return False + elif plane is not None: + tool_type = "PlaneTool" + tool_entity_id = -1 + planes = GeometryOperators.cs_plane_to_plane_str(plane) + selections = ["NAME:Selections", "Selections:=", objects, "NewPartsModelFlag:=", "Model"] + self.oeditor.Split( + selections, + [ + "NAME:SplitToParameters", + "SplitPlane:=", + planes, + "WhichSide:=", + sides, + "ToolType:=", + tool_type, + "ToolEntityID:=", + tool_entity_id, + "SplitCrossingObjectsOnly:=", + split_crossing_objs, + "DeleteInvalidObjects:=", + delete_invalid_objs, + ], + ) + self.refresh_all_ids() + return [objects] + [i for i in self.object_names if i not in all_objs] + + @pyaedt_function_handler() # TODO: Deprecate this and add duplicate as an option in the mirror method. + def duplicate_and_mirror( + self, + objid, + position, + vector, + is_3d_comp=False, + duplicate_assignment=True, + ): + """Duplicate and mirror a selection. + + Parameters + ---------- + objid : str, int, or Object3d + Name or ID of the object. + position : float + List of the ``[x, y, z]`` coordinates or + Application.Position object for the selection. + vector : float + List of the ``[x1, y1, z1]`` coordinates or + Application.Position object for the vector. + is_3d_comp : bool, optional + If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. + duplicate_assignment : bool, optional + If True, the method duplicates selection assignments. The default value is ``True``. + + Returns + ------- + list + List of objects created or an empty list. + + References + ---------- + + >>> oEditor.DuplicateMirror + """ + return self.mirror( + objid, position, vector, duplicate=True, is_3d_comp=is_3d_comp, duplicate_assignment=duplicate_assignment + ) + # selections = self.convert_to_selections(objid) + + @pyaedt_function_handler() + def mirror(self, objid, position, vector, duplicate=False, is_3d_comp=False, duplicate_assignment=True): + """Mirror a selection. + + Parameters + ---------- + objid : str, int, or Object3d + Name or ID of the object. + position : int or float + List of the ``[x, y, z]`` coordinates or the + ``Application.Position`` object for the selection. + duplicate : bool, optional + Whether if duplicate the object before mirror or not. Default is ``False``. + is_3d_comp : bool, optional + Whether the component is 3D. The default is ``False``. If ``True``, the method + tries to return the duplicated list of 3D components. + vector : float + List of the ``[x1, y1, z1]`` coordinates or + the ``Application.Position`` object for the vector. + duplicate_assignment : bool, optional + Whether to duplicate selection assignments. The default is ``True``. + + Returns + ------- + bool, list + List of objects created or ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Mirror + >>> oEditor.DuplicateMirror + """ + selections = self.convert_to_selections(objid) + Xpos, Ypos, Zpos = self._pos_with_arg(position) + Xnorm, Ynorm, Znorm = self._pos_with_arg(vector) + if duplicate: + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:DuplicateToMirrorParameters"] + vArg2.append("DuplicateMirrorBaseX:="), vArg2.append(Xpos) + vArg2.append("DuplicateMirrorBaseY:="), vArg2.append(Ypos) + vArg2.append("DuplicateMirrorBaseZ:="), vArg2.append(Zpos) + vArg2.append("DuplicateMirrorNormalX:="), vArg2.append(Xnorm) + vArg2.append("DuplicateMirrorNormalY:="), vArg2.append(Ynorm) + vArg2.append("DuplicateMirrorNormalZ:="), vArg2.append(Znorm) + vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] + if is_3d_comp: + orig_3d = [i for i in self.user_defined_component_names] + added_objs = self.oeditor.DuplicateMirror(vArg1, vArg2, vArg3) + self.add_new_objects() + if is_3d_comp: + added_3d_comps = [i for i in self.user_defined_component_names if i not in orig_3d] + if added_3d_comps: + self.logger.info("Found 3D Components Duplication") + return added_3d_comps + return added_objs + else: + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:MirrorParameters"] + vArg2.append("MirrorBaseX:="), vArg2.append(Xpos) + vArg2.append("MirrorBaseY:="), vArg2.append(Ypos) + vArg2.append("MirrorBaseZ:="), vArg2.append(Zpos) + vArg2.append("MirrorNormalX:="), vArg2.append(Xnorm) + vArg2.append("MirrorNormalY:="), vArg2.append(Ynorm) + vArg2.append("MirrorNormalZ:="), vArg2.append(Znorm) + + self.oeditor.Mirror(vArg1, vArg2) + return True + + @pyaedt_function_handler() + def move(self, objid, vector): + """Move objects from a list. + + Parameters + ---------- + objid : list, Position object + List of object IDs. + vector : list + Vector of the direction move. It can be a list of the ``[x, y, z]`` + coordinates or a Position object. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Move + """ + Xvec, Yvec, Zvec = self._pos_with_arg(vector) + szSelections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", szSelections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:TranslateParameters"] + vArg2.append("TranslateVectorX:="), vArg2.append(Xvec) + vArg2.append("TranslateVectorY:="), vArg2.append(Yvec) + vArg2.append("TranslateVectorZ:="), vArg2.append(Zvec) + + if self.oeditor is not None: + self.oeditor.Move(vArg1, vArg2) + return True + + @pyaedt_function_handler() + def duplicate_around_axis( + self, + objid, + cs_axis, + angle=90, + nclones=2, + create_new_objects=True, + is_3d_comp=False, + duplicate_assignment=True, + ): + """Duplicate a selection around an axis. + + Parameters + ---------- + objid : list, str, int, Object3d or UserDefinedComponent + Name or ID of the object. + cs_axis : + Coordinate system axis or the Application.AXIS object. + angle : float, optional + Angle rotation in degees. The default is ``90``. + nclones : int, optional + Number of clones. The default is ``2``. + create_new_objects : + Whether to create the copies as new objects. The + default is ``True``. + is_3d_comp : bool, optional + If ``True``, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. + duplicate_assignment : bool, optional + If True, the method duplicates selection assignments. The default value is ``True``. + + Returns + ------- + tuple + + References + ---------- + + >>> oEditor.DuplicateAroundAxis + """ + selections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = [ + "NAME:DuplicateAroundAxisParameters", + "CreateNewObjects:=", + create_new_objects, + "WhichAxis:=", + GeometryOperators.cs_axis_str(cs_axis), + "AngleStr:=", + self._arg_with_dim(angle, "deg"), + "Numclones:=", + str(nclones), + ] + vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] + added_objs = self.oeditor.DuplicateAroundAxis(vArg1, vArg2, vArg3) + self._duplicate_added_objects_tuple() + if is_3d_comp: + return self._duplicate_added_components_tuple() + return True, list(added_objs) + + def _duplicate_added_objects_tuple(self): + added_objects = self.add_new_objects() + if added_objects: + return True, added_objects + else: + return False, [] + + def _duplicate_added_components_tuple(self): + added_component = self.add_new_user_defined_component() + if added_component: + return True, added_component + else: + return False, [] + + @pyaedt_function_handler() + def duplicate_along_line( + self, + objid, + vector, + nclones=2, + attachObject=False, + is_3d_comp=False, + duplicate_assignment=True, + ): + """Duplicate a selection along a line. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + vector : list + List of ``[x1,y1,z1]`` coordinates or the Application.Position object for + the vector. + attachObject : bool, optional + The default is ``False``. + nclones : int, optional + Number of clones. The default is ``2``. + is_3d_comp : bool, optional + If True, the method will try to return the duplicated list of 3dcomponents. The default is ``False``. + duplicate_assignment : bool, optional + If True, the method duplicates selection assignments. The default value is ``True``. + + Returns + ------- + tuple + + References + ---------- + + >>> oEditor.DuplicateAlongLine + """ + selections = self.convert_to_selections(objid) + Xpos, Ypos, Zpos = self._pos_with_arg(vector) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:DuplicateToAlongLineParameters"] + vArg2.append("CreateNewObjects:="), vArg2.append(not attachObject) + vArg2.append("XComponent:="), vArg2.append(Xpos) + vArg2.append("YComponent:="), vArg2.append(Ypos) + vArg2.append("ZComponent:="), vArg2.append(Zpos) + vArg2.append("Numclones:="), vArg2.append(str(nclones)) + vArg3 = ["NAME:Options", "DuplicateAssignments:=", duplicate_assignment] + self.oeditor.DuplicateAlongLine(vArg1, vArg2, vArg3) + if is_3d_comp: + return self._duplicate_added_components_tuple() + if attachObject: + return True, [] + return self._duplicate_added_objects_tuple() + + @pyaedt_function_handler() + def thicken_sheet(self, objid, thickness, bBothSides=False): + """Thicken the sheet of the selection. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + thickness : float, str + Amount to thicken the sheet by. + bBothSides : bool, optional + Whether to thicken the sheet on both side. The default is ``False``. + + Returns + ------- + pyaedt.modeler.cad.object3d.Object3d + + References + ---------- + + >>> oEditor.ThickenSheet + """ + selections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:SheetThickenParameters"] + vArg2.append("Thickness:="), vArg2.append(self._arg_with_dim(thickness)) + vArg2.append("BothSides:="), vArg2.append(bBothSides) + + self.oeditor.ThickenSheet(vArg1, vArg2) + + if isinstance(objid, list): + obj_list = [] + for objl in objid: + obj_list.append(self.update_object(objl)) + return obj_list + return self.update_object(objid) + + @pyaedt_function_handler() + def sweep_along_normal(self, obj_name, face_id, sweep_value=0.1): + """Sweep the selection along the vector. + + Parameters + ---------- + obj_name : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + face_id : int or list + Face or list of faces to sweep. + sweep_value : float, optional + Sweep value. The default is ``0.1``. + + Returns + ------- + pyaedt.modeler.cad.object3d.Object3d + + References + ---------- + + >>> oEditor.SweepFacesAlongNormal + """ + if not isinstance(face_id, list): + face_id = [face_id] + selections = self.convert_to_selections(obj_name) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:Parameters"] + vArg2.append( + [ + "NAME:SweepFaceAlongNormalToParameters", + "FacesToDetach:=", + face_id, + "LengthOfSweep:=", + self._arg_with_dim(sweep_value), + ] + ) + + objs = self._all_object_names + self.oeditor.SweepFacesAlongNormal(vArg1, vArg2) + self.cleanup_objects() + objs2 = self._all_object_names + obj = [i for i in objs2 if i not in objs] + for el in obj: + self._create_object(el) + if obj: + if len(obj) > 1: + return [self.update_object(self[o]) for o in obj] + else: + return self.update_object(self[obj[0]]) + return False + + @pyaedt_function_handler() + def sweep_along_vector(self, objid, sweep_vector, draft_angle=0, draft_type="Round"): + """Sweep the selection along a vector. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + sweep_vector : float + List of ``[x1, y1, z1]`` coordinates or Application.Position object for + the vector. + draft_angle : float, optional + Draft angle in degrees. The default is ``0``. + draft_type : str + Type of the draft. Options are ``"Round"``, ``"Natural"``, + and ``"Extended"``. The default is ``"Round"``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SweepAlongVector + """ + selections = self.convert_to_selections(objid) + vectorx, vectory, vectorz = self._pos_with_arg(sweep_vector) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:VectorSweepParameters"] + vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) + vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) + vArg2.append("SweepVectorX:="), vArg2.append(vectorx) + vArg2.append("SweepVectorY:="), vArg2.append(vectory) + vArg2.append("SweepVectorZ:="), vArg2.append(vectorz) + + self.oeditor.SweepAlongVector(vArg1, vArg2) + + return self.update_object(objid) + + @pyaedt_function_handler() + def sweep_along_path( + self, objid, sweep_object, draft_angle=0, draft_type="Round", is_check_face_intersection=False, twist_angle=0 + ): + """Sweep the selection along a path. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + sweep_object : str, int + Name or ID of the sweep. + draft_angle : float, optional + Draft angle in degrees. The default is ``0``. + draft_type : str + Type of the draft. Options are ``"Round"``, ``"Natural"``, + and ``"Extended"``. The default is ``"Round"``. + is_check_face_intersection : bool, optional + The default is ``False``. + twist_angle : float, optional + Twist angle in degrees. The default is ``0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SweepAlongPath + """ + selections = self.convert_to_selections(objid) + "," + self.convert_to_selections(sweep_object) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:PathSweepParameters"] + vArg2.append("DraftAngle:="), vArg2.append(self._arg_with_dim(draft_angle, "deg")) + vArg2.append("DraftType:="), vArg2.append(GeometryOperators.draft_type_str(draft_type)) + vArg2.append("CheckFaceFaceIntersection:="), vArg2.append(is_check_face_intersection) + vArg2.append("TwistAngle:="), vArg2.append(str(twist_angle) + "deg") + + self.oeditor.SweepAlongPath(vArg1, vArg2) + + return self.update_object(objid) + + @pyaedt_function_handler() + def sweep_around_axis(self, objid, cs_axis, sweep_angle=360, draft_angle=0, number_of_segments=0): + """Sweep the selection around the axis. + + Parameters + ---------- + objid : list, str, int, :class:`pyaedt.modeler.Object3d.Object3d` + Name or ID of the object. + cs_axis : + Coordinate system axis or the Application.AXIS object. + sweep_angle : float + Sweep angle in degrees. The default is ``360``. + draft_angle : float + Draft angle in degrees. The default is ``0``. + number_of_segments : int, optional + Number of segments of the sweep operation. Default is ``0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SweepAroundAxis + """ + selections = self.convert_to_selections(objid) + + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = [ + "NAME:AxisSweepParameters", + "DraftAngle:=", + self._arg_with_dim(draft_angle, "deg"), + "DraftType:=", + "Round", + "CheckFaceFaceIntersection:=", + False, + "SweepAxis:=", + GeometryOperators.cs_axis_str(cs_axis), + "SweepAngle:=", + self._arg_with_dim(sweep_angle, "deg"), + "NumOfSegments:=", + str(number_of_segments), + ] + + self.oeditor.SweepAroundAxis(vArg1, vArg2) + + return self.update_object(objid) + + @pyaedt_function_handler() + def section(self, object_list, plane, create_new=True, section_cross_object=False): + """Section the selection. + + Parameters + ---------- + object_list : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` + One or more objects to section. + plane : str + Coordinate plane or Application.PLANE object. + Choices for the coordinate plane are ``"XY"``, ``"YZ"``, and ``"ZX"``.' + create_new : bool, optional + The default is ``True``, but this parameter has no effect. + section_cross_object : bool, optional + The default is ``False``, but this parameter has no effect. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Section + """ + section_plane = GeometryOperators.cs_plane_to_plane_str(plane) + + selections = self.convert_to_selections(object_list) + + self.oeditor.Section( + ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], + [ + "NAME:SectionToParameters", + "CreateNewObjects:=", + create_new, + "SectionPlane:=", + section_plane, + "SectionCrossObject:=", + section_cross_object, + ], + ) + self.refresh_all_ids() + return True + + @pyaedt_function_handler() + def separate_bodies(self, object_list, create_group=False): + """Separate bodies of the selection. + + Parameters + ---------- + object_list : list + List of objects to separate. + create_group : bool, optional + Whether to create a group. The default is ``False``. + + Returns + ------- + pyaedt.modeler.Object3d.Object3d, bool + 3D object. + ``False`` when failed. + + References + ---------- + + >>> oEditor.SeparateBody + """ + try: + selections = self.convert_to_selections(object_list) + all_objs = [i for i in self.object_names] + self.oeditor.SeparateBody( + ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"], + ["CreateGroupsForNewObjects:=", create_group], + ) + self.refresh_all_ids() + new_objects_list_names = [selections] + [i for i in self.object_names if i not in all_objs] + new_objects_list = [] + for obj in self.object_list: + for new_obj in new_objects_list_names: + if obj.name == new_obj: + new_objects_list.append(obj) + return new_objects_list + except: + return False + + @pyaedt_function_handler() + def rotate(self, objid, cs_axis, angle=90.0, unit="deg"): + """Rotate the selection. + + Parameters + ---------- + objid : list, str, int, or :class:`pyaedt.modeler.Object3d.Object3d` + ID of the object. + cs_axis + Coordinate system axis or the Application.AXIS object. + angle : float + Angle of rotation. The units, defined by ``unit``, can be either + degrees or radians. The default is ``90.0``. + unit : text, optional + Units for the angle. Options are ``"deg"`` or ``"rad"``. + The default is ``"deg"``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Rotate + """ + selections = self.convert_to_selections(objid) + vArg1 = ["NAME:Selections", "Selections:=", selections, "NewPartsModelFlag:=", "Model"] + vArg2 = ["NAME:RotateParameters"] + vArg2.append("RotateAxis:="), vArg2.append(GeometryOperators.cs_axis_str(cs_axis)) + vArg2.append("RotateAngle:="), vArg2.append(self._arg_with_dim(angle, unit)) + + if self.oeditor is not None: + self.oeditor.Rotate(vArg1, vArg2) + + return True + + @pyaedt_function_handler() + def subtract(self, blank_list, tool_list, keep_originals=True, **kwargs): + """Subtract objects. + + Parameters + ---------- + blank_list : str, Object3d, int or List of str, int and Object3d. + List of objects to subtract from. The list can be of + either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. + tool_list : list + List of objects to subtract. The list can be of + either Object3d objects or object IDs. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Subtract + """ + if "keepOriginals" in kwargs: + warnings.warn("keepOriginals has been deprecated. use keep_originals.", DeprecationWarning) + keep_originals = kwargs["keepOriginals"] + szList = self.convert_to_selections(blank_list) + szList1 = self.convert_to_selections(tool_list) + + vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] + vArg2 = ["NAME:SubtractParameters", "KeepOriginals:=", keep_originals] + + self.oeditor.Subtract(vArg1, vArg2) + if not keep_originals: + self.cleanup_objects() + + return True + + @pyaedt_function_handler() + def imprint(self, blank_list, tool_list, keep_originals=True): + """Imprin an object list on another object list. + + Parameters + ---------- + blank_list : list of Object3d or list of int + List of objects to imprint from. The list can be of + either :class:`pyaedt.modeler.Object3d.Object3d` objects or object IDs. + tool_list : list of Object3d or list of int + List of objects to imprint. The list can be of + either Object3d objects or object IDs. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Imprint + """ + szList = self.convert_to_selections(blank_list) + szList1 = self.convert_to_selections(tool_list) + + vArg1 = ["NAME:Selections", "Blank Parts:=", szList, "Tool Parts:=", szList1] + vArg2 = ["NAME:ImprintParameters", "KeepOriginals:=", keep_originals] + + self.oeditor.Imprint(vArg1, vArg2) + if not keep_originals: + self.cleanup_objects() + return True + + @pyaedt_function_handler() + def _imprint_projection(self, tool_list, keep_originals=True, normal=True, vector_direction=None, distance="1mm"): + szList1 = self.convert_to_selections(tool_list) + + varg1 = ["NAME:Selections", "Selections:=", szList1] + varg2 = [ + "NAME:ImprintProjectionParameters", + "KeepOriginals:=", + keep_originals, + "NormalProjection:=", + normal, + ] + if not normal: + varg2.append("Distance:=") + varg2.append(self._app.value_with_units(distance)) + varg2.append("DirectionX:=") + varg2.append(self._app.value_with_units(vector_direction[0])) + varg2.append("DirectionY:=") + varg2.append(self._app.value_with_units(vector_direction[1])) + varg2.append("DirectionZ:=") + varg2.append(self._app.value_with_units(vector_direction[2])) + + self.oeditor.ImprintProjection(varg1, varg2) + if not keep_originals: + self.cleanup_objects() + return True + + @pyaedt_function_handler + def imprint_normal_projection( + self, + tool_list, + keep_originals=True, + ): + """Imprint the normal projection of objects over a sheet. + + Parameters + ---------- + tool_list : list + List of objects to imprint. The list can be of + either Object3d objects or object IDs. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ImprintProjection + """ + return self._imprint_projection(tool_list, keep_originals, True) + + @pyaedt_function_handler + def imprint_vector_projection( + self, + tool_list, + vector_points, + distance, + keep_originals=True, + ): + """Imprint the projection of objects over a sheet with a specified vector and distance. + + Parameters + ---------- + tool_list : list + List of objects to imprint. The list can be of + either Object3d objects or object IDs. + vector_points : list + List of [x,y,z] vector projection. + distance : str, int + Distance of Projection. + keep_originals : bool, optional + Whether to keep the original objects. The default is ``True``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ImprintProjection + """ + return self._imprint_projection(tool_list, keep_originals, False, vector_points, distance) + + @pyaedt_function_handler() + def purge_history(self, theList): + """Purge history objects from object names. + + Parameters + ---------- + theList : list + List of object names to purge. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.PurgeHistory + """ + szList = self.convert_to_selections(theList) + + vArg1 = ["NAME:Selections", "Selections:=", szList, "NewPartsModelFlag:=", "Model"] + + self.oeditor.PurgeHistory(vArg1) + return True + + @pyaedt_function_handler() + def get_model_bounding_box(self): + """Retrieve the model bounding box. + + + Returns + ------- + List + List of six float values representing the bounding box + in the form ``[min_x, min_y, min_z, max_x, max_y, max_z]``. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + bb = list(self.oeditor.GetModelBoundingBox()) + bound = [float(b) for b in bb] + return bound + + @pyaedt_function_handler() + def unite(self, unite_list, purge=False, keep_originals=False): + """Unite objects from a list. + + Parameters + ---------- + unite_list : list + List of objects. + purge : bool, optional + Purge history after unite. Default is False. + keep_originals : bool, optional + Keep original objects used for the operation. Default is False. + + Returns + ------- + str + The united object that is the first in the list. + + References + ---------- + + >>> oEditor.Unite + """ + slice = min(100, len(unite_list)) + num_objects = len(unite_list) + remaining = num_objects + objs_groups = [] + while remaining > 1: + objs = unite_list[:slice] + szSelections = self.convert_to_selections(objs) + vArg1 = ["NAME:Selections", "Selections:=", szSelections] + vArg2 = ["NAME:UniteParameters", "KeepOriginals:=", keep_originals] + if settings.aedt_version > "2022.2": + vArg2.append("TurnOnNBodyBoolean:=") + vArg2.append(True) + self.oeditor.Unite(vArg1, vArg2) + if szSelections.split(",")[0] in self.unclassified_names: + self.logger.error("Error in uniting objects.") + self._odesign.Undo() + self.cleanup_objects() + return False + elif purge: + self.purge_history(objs[0]) + objs_groups.append(objs[0]) + remaining -= slice + if remaining > 0: + unite_list = unite_list[slice:] + if remaining > 0: + objs_groups.extend(unite_list) + self.cleanup_objects() + if len(objs_groups) > 1: + return self.unite(objs_groups, purge=purge) + self.logger.info("Union of {} objects has been executed.".format(num_objects)) + return self.convert_to_selections(unite_list[0], False) + + @pyaedt_function_handler() + def clone(self, objid): + """Clone objects from a list of object IDs. + + Parameters + ---------- + objid : list + List of object IDs. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + List + List of names of objects cloned when successful. + + References + ---------- + + >>> oEditor.Copy + >>> oEditor.Paste + """ + self.copy(objid) + new_objects = self.paste() + return True, new_objects + + @pyaedt_function_handler() + def copy(self, object_list): + """Copy objects to the clipboard. + + Parameters + ---------- + object_list : list + List of objects (IDs or names). + + Returns + ------- + list + List of names of the objects copied when successful. + + References + ---------- + + >>> oEditor.Copy + """ + # convert to string + + try: + selections = self.convert_to_selections(object_list) + vArg1 = ["NAME:Selections", "Selections:=", selections] + self.oeditor.Copy(vArg1) + return selections + except AttributeError: + self.logger.error("Unable to copy selections to clipboard.") + return None + + @pyaedt_function_handler() + def paste(self): + """Paste objects from the clipboard. + + Returns + ------- + list + List of passed objects. + + References + ---------- + + >>> oEditor.Paste + """ + self.oeditor.Paste() + new_objects = self.add_new_objects() + return new_objects + + @pyaedt_function_handler() + def intersect(self, theList, keep_originals=False, **kwargs): + """Intersect objects from a list. + + Parameters + ---------- + theList : list + List of objects. + keep_originals : bool, optional + Whether to keep the original object. The default is ``False``. + + Returns + ------- + str + Retrieve the resulting 3D Object when succeeded. + + References + ---------- + + >>> oEditor.Intersect + """ + if "keeporiginal" in kwargs: + warnings.warn("keeporiginal has been deprecated. use keep_originals.", DeprecationWarning) + keep_originals = kwargs["keeporiginal"] + unclassified = list(self.oeditor.GetObjectsInGroup("Unclassified")) + szSelections = self.convert_to_selections(theList) + + vArg1 = ["NAME:Selections", "Selections:=", szSelections] + vArg2 = ["NAME:IntersectParameters", "KeepOriginals:=", keep_originals] + + self.oeditor.Intersect(vArg1, vArg2) + unclassified1 = list(self.oeditor.GetObjectsInGroup("Unclassified")) + if unclassified != unclassified1: + self._odesign.Undo() + self.logger.error("Error in intersection. Reverting Operation") + return + self.cleanup_objects() + self.logger.info("Intersection Succeeded") + return self.convert_to_selections(theList[0], False) + + @pyaedt_function_handler() + def connect(self, theList): + """Connect objects from a list. + + Parameters + ---------- + theList : list + List of objects. + + Returns + ------- + pyaedt.modeler.Object3d.Object3d, bool + 3D object. + ``False`` when failed. + + References + ---------- + + >>> oEditor.Connect + """ + try: + unclassified_before = list(self.unclassified_names) + szSelections = self.convert_to_selections(theList) + szSelections_list = szSelections.split(",") + vArg1 = ["NAME:Selections", "Selections:=", szSelections] + + self.oeditor.Connect(vArg1) + if unclassified_before != self.unclassified_names: + self._odesign.Undo() + self.logger.error("Error in connection. Reverting Operation") + return False + + self.cleanup_objects() + self.logger.info("Connection Correctly created") + + self.refresh_all_ids() + objects_list_after_connection = [ + obj + for obj in self.object_list + for sel in set(szSelections_list).intersection(self.object_names) + if obj.name == sel + ] + return objects_list_after_connection + except: + return False + + @pyaedt_function_handler() + def chassis_subtraction(self, chassis_part): + """Subtract all non-vacuum objects from the main chassis object. + + Parameters + ---------- + chassis_part : str + Name of the main chassis object. + + References + ---------- + + >>> oEditor.Subtract + """ + self.logger.info("Subtract all objects from Chassis object - exclude vacuum objs") + mat_names = self._omaterial_manager.GetNames() + num_obj_start = self.oeditor.GetNumObjects() + blank_part = chassis_part + # in main code this object will need to be determined automatically eg by name such as chassis or sheer size + self.logger.info("Blank Part in Subtraction = " + str(blank_part)) + """ + check if blank part exists, if not, skip subtraction + """ + tool_parts = list(self.oeditor.GetObjectsInGroup("Solids")) + tool_parts.remove(blank_part) + for mat in mat_names: + if str(mat).lower() == "vacuum": + objnames = self.oeditor.GetObjectsByMaterial(mat) + for obj in objnames: + tool_parts.remove(obj) + # tool_parts_final=list(set(tool_parts).difference(set(objnames))) + tool_parts = ",".join(tool_parts) + num_obj_end = self.oeditor.GetNumObjects() + self.subtract(blank_part, tool_parts, True) + + self.logger.info("Subtraction Objs - Initial: " + str(num_obj_start) + " , Final: " + str(num_obj_end)) + + @pyaedt_function_handler() + def _offset_on_plane(self, i, offset): + """Offset the object on a plane. + + Parameters + ---------- + i : + + offset : + Offset to apply. + + Returns + ------- + tuple + Position of object after offset is applied. + + """ + if i > 7: + off1 = 0 + elif i % 4 == 0 or i % 4 == 1: + off1 = offset + else: + off1 = -offset + if 3 < i < 8: + off2 = 0 + elif i % 2 == 0: + off2 = offset + else: + off2 = -offset + if i < 4: + off3 = 0 + elif i != 4 and i != 7 and i != 8 and i != 11: + off3 = -offset + else: + off3 = +offset + return off1, off2, off3 + + @pyaedt_function_handler() + def check_plane(self, obj, faceposition, offset=1): + """Check for the plane that is defined as the face for an object. + + Parameters + ---------- + obj : str + Name of the object. + faceposition : list + List of the ``[x, y, z]`` coordinates for the position of the face. + offset : optional + Offset to apply. The default is ``1``. + + Returns + ------- + str + Name of the plane. It can be "XY", "XZ" or "YZ". + + """ + + Xvec, Yvec, Zvec = self._pos_with_arg(faceposition) + + if isinstance(obj, int): + obj = self.objects[obj].name + plane = None + found = False + i = 0 + while not found: + off1, off2, off3 = self._offset_on_plane(i, offset) + vArg1 = ["NAME:FaceParameters"] + vArg1.append("BodyName:="), vArg1.append(obj) + vArg1.append("XPosition:="), vArg1.append(Xvec + "+" + self._arg_with_dim(off1)) + vArg1.append("YPosition:="), vArg1.append(Yvec + "+" + self._arg_with_dim(off2)) + vArg1.append("ZPosition:="), vArg1.append(Zvec + "+" + self._arg_with_dim(off3)) + try: + face_id = self.oeditor.GetFaceByPosition(vArg1) + if i < 4: + plane = "XY" + elif i < 8: + plane = "XZ" + else: + plane = "YZ" + found = True + except: + i = i + 1 + if i > 11: + found = True + + return plane + + @pyaedt_function_handler() + def get_matched_object_name(self, search_string): + """Retrieve the name of the matched object. + + Parameters + ---------- + search_string : str + Text string to search for. + + + Returns + ------- + str + Name of the matched object. + + References + ---------- + + >>> oEditor.GetMatchedObjectName + """ + return self.oeditor.GetMatchedObjectName(search_string) + + @pyaedt_function_handler() + def clean_objects_name(self, main_part_name): + """Clean the names of the objects for a main part. + + Parameters + ---------- + main_part_name : str + Name of the main part. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.RenamePart + """ + # import os.path + # (CADPath, CADFilename) = os.path.split(CADFile) + # (CADName, CADExt) = os.path.splitext(CADFilename) + CADSuffix = main_part_name + "_" + objNames = self.oeditor.GetMatchedObjectName(CADSuffix + "*") + for name in objNames: + RenameArgs = {} + RenameArgs["NAME"] = "Rename Data" + RenameArgs["Old Name"] = name + RenameArgs["New Name"] = name.replace(CADSuffix, "") + self.oeditor.RenamePart(RenameArgs) + return True + + @pyaedt_function_handler() + def create_airbox(self, offset=0, offset_type="Absolute", defname="AirBox_Auto"): + """Create an airbox that is as big as the bounding extension of the project. + + Parameters + ---------- + offset : + Double offset value to apply on the airbox faces versus the bounding box. + The default is ``0``. + offset_type : str + Type of the offset. Options are ``"Absolute"`` and ``"Relative"``. + The default is ``"Absolute"``. If ``"Relative"``, the offset input + is between 0 and 100. + defname : str, optional + Name of the airbox. The default is ``"AirBox_Auto"``. + + Returns + ------- + int + ID of the airbox created. + + References + ---------- + + >>> oEditor.CreateBox + """ + self.logger.info("Adding Airbox to the Bounding ") + + bound = self.get_model_bounding_box() + if offset_type == "Absolute": + offset1 = offset2 = offset3 = offset + else: + offset1 = (bound[3] - bound[0]) * offset / 100 + offset2 = (bound[4] - bound[1]) * offset / 100 + offset3 = (bound[5] - bound[2]) * offset / 100 + startpos = self.Position(bound[0] - offset1, bound[1] - offset2, bound[2] - offset3) + + dim = [] + dim.append(bound[3] - bound[0] + 2 * offset1) + dim.append(bound[4] - bound[1] + 2 * offset2) + dim.append(bound[5] - bound[2] + 2 * offset3) + airid = self.create_box(startpos, dim, defname) + return airid + + @pyaedt_function_handler() + def create_air_region(self, x_pos=0, y_pos=0, z_pos=0, x_neg=0, y_neg=0, z_neg=0, is_percentage=True): + """Create an air region. + + Parameters + ---------- + x_pos : float or str, optional + If float, padding in the +X direction in modeler units. + If str, padding with units in the +X direction. + The default is ``0``. + y_pos : float or str, optional + If float, padding in the +Y direction in modeler units. + If str, padding with units in the +Y direction. + The default is ``0``. + z_pos : float or str, optional + If float, padding in the +Z direction in modeler units. + If str, padding with units in the +Z direction. + The default is ``0``. + x_neg : float or str, optional + If float, padding in the -X direction in modeler units. + If str, padding with units in the -X direction. + The default is ``0``. + y_neg : float or str, optional + If float, padding in the -Y direction in modeler units. + If str, padding with units in the -Y direction. + The default is ``0``. + z_neg : float or str, optional + If float, padding in the -Z direction in modeler units. + If str, padding with units in the -Z direction. + The default is ``0``. + is_percentage : bool, optional + Region definition in percentage or absolute value. The default is `True``. + + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + 3D object. + + References + ---------- + + >>> oEditor.CreateRegion + """ + return self.create_region([x_pos, y_pos, z_pos, x_neg, y_neg, z_neg], is_percentage) + + @pyaedt_function_handler() + def edit_region_dimensions(self, listvalues): + """Modify the dimensions of the region. + + Parameters + ---------- + listvalues : list + List of the padding percentages along all six directions in + the form ``[+X, -X, +Y, -Y, +Z, -Z]``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ChangeProperty + """ + arg = ["NAME:AllTabs"] + arg2 = ["NAME:Geometry3DCmdTab", ["NAME:PropServers", "Region:CreateRegion:1"]] + arg3 = ["NAME:ChangedProps"] + p = ["+X", "-X", "+Y", "-Y", "+Z", "-Z"] + for label, value in zip(p, listvalues): + padding = [] + padding.append("NAME:" + label + " Padding Data") + padding.append("Value:=") + padding.append(str(value)) + arg3.append(padding) + arg2.append(arg3) + arg.append(arg2) + self.oeditor.ChangeProperty(arg) + return True + + @pyaedt_function_handler() + def create_face_list(self, face_list, name=None): + """Create a list of faces given a list of face ID or a list of objects. + + Parameters + ---------- + face_list : list + List of face ID or list of objects + + name : str, optional + Name of the new list. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.Lists` + List object when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateEntityList + """ + if name: + for i in self.user_lists: + if i.name == name: + self.logger.warning("A List with the specified name already exists!") + return i + face_list = self.convert_to_selections(face_list, True) + user_list = Lists(self) + list_type = "Face" + if user_list: + result = user_list.create( + object_list=face_list, + name=name, + type=list_type, + ) + if result: + return user_list + else: + self._app.logger.error("Wrong object definition. Review object list and type") + return False + else: + self._app.logger.error("User list object could not be created") + return False + + @pyaedt_function_handler() + def create_object_list(self, object_list, name=None): + """Create an object list given a list of object names. + + Parameters + ---------- + object_list : list + List of object names. + name : str, optional + Name of the new object list. + + Returns + ------- + :class:`pyaedt.modeler.Modeler.Lists` + List object when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateEntityList + """ + if name: + for i in self.user_lists: + if i.name == name: + self.logger.warning("A List with the specified name already exists!") + return i + object_list = self.convert_to_selections(object_list, True) + user_list = Lists(self) + list_type = "Object" + if user_list: + result = user_list.create( + object_list=object_list, + name=name, + type=list_type, + ) + if result: + return user_list + else: + self._app.logger.error("Wrong object definition. Review object list and type") + return False + else: + self._app.logger.error("User list object could not be created") + return False + + @pyaedt_function_handler() + def generate_object_history(self, objectname): + """Generate history for the object. + + Parameters + ---------- + objectname : str + Name of the history object. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.GenerateHistory + """ + objectname = self.convert_to_selections(objectname) + self.oeditor.GenerateHistory( + ["NAME:Selections", "Selections:=", objectname, "NewPartsModelFlag:=", "Model", "UseCurrentCS:=", True] + ) + self.cleanup_objects() + return True + + @pyaedt_function_handler() + def create_faceted_bondwire_from_true_surface(self, bondname, bond_direction, min_size=0.2, numberofsegments=8): + """Create a faceted bondwire from an existing true surface bondwire. + + Parameters + ---------- + bondname : str + Name of the bondwire to replace. + bond_direction : list + List of the ``[x, y, z]`` coordinates for the axis direction + of the bondwire. For example, ``[0, 1, 2]``. + min_size : float + Minimum size of the subsegment of the new polyline. The default is ``0.2``. + numberofsegments : int, optional + Number of segments. The default is ``8``. + + Returns + ------- + str + Name of the bondwire created. + """ + old_bondwire = self.get_object_from_name(bondname) + if not old_bondwire: + return False + edges = old_bondwire.edges + faces = old_bondwire.faces + centers = [] + for el in faces: + center = el.center + if center: + centers.append(center) + edgelist = [] + verlist = [] + for el in edges: + ver = el.vertices + if len(ver) < 2: + continue + p1 = ver[0].position + p2 = ver[1].position + p3 = [abs(i - j) for i, j in zip(p1, p2)] + + dir = p3.index(max(p3)) + if dir == bond_direction: + edgelist.append(el) + verlist.append([p1, p2]) + if not edgelist: + self.logger.error("No edges found specified direction. Check again") + return False + connected = [edgelist[0]] + tol = 1e-6 + for edge in edgelist[1:]: + ver = edge.vertices + p1 = ver[0].position + p2 = ver[1].position + for el in connected: + ver1 = el.vertices + p3 = ver1[0].position + p4 = ver1[1].position + dist = GeometryOperators.points_distance(p1, p3) + if dist < tol: + connected.append(edge) + break + dist = GeometryOperators.points_distance(p1, p4) + if dist < tol: + connected.append(edge) + break + dist = GeometryOperators.points_distance(p2, p3) + if dist < tol: + connected.append(edge) + break + dist = GeometryOperators.points_distance(p2, p4) + if dist < tol: + connected.append(edge) + break + new_edges = [] + for edge in connected: + edge_object = self.create_object_from_edge(edge) + new_edges.append(edge_object) + + self.unite(new_edges) + self.generate_object_history(new_edges[0]) + self.convert_segments_to_line(new_edges[0].name) + + edges = new_edges[0].edges + i = 0 + edge_to_delete = [] + first_vert = None + for edge in edges: + ver = edge.vertices + p1 = ver[0].position + p2 = ver[1].position + if not first_vert: + first_vert = p1 + dist = GeometryOperators.points_distance(p1, p2) + if dist < min_size: + edge_to_delete.append(i) + i += 1 + + rad = 1e6 + move_vector = None + for fc in centers: + dist = GeometryOperators.points_distance(fc, first_vert) + if dist < rad: + rad = dist + move_vector = GeometryOperators.v_sub(fc, first_vert) + + P = self.get_existing_polyline(object=new_edges[0]) + + if edge_to_delete: + P.remove_edges(edge_to_delete) + + angle = math.pi * (180 - 360 / numberofsegments) / 360 + + status = P.set_crosssection_properties( + type="Circle", num_seg=numberofsegments, width=(rad * (2 - math.sin(angle))) * 2 + ) + if status: + self.move(new_edges[0], move_vector) + old_bondwire.model = False + return new_edges[0] + else: + return False + + @pyaedt_function_handler() + def get_entitylist_id(self, name): + """Retrieve the ID of an entity list. + + Parameters + ---------- + name : str + Name of the entity list. + + Returns + ------- + int + ID of the entity list. + + References + ---------- + + >>> oEditor.GetEntityListIDByName + """ + id = self.oeditor.GetEntityListIDByName(name) + return id + + @pyaedt_function_handler() + def create_outer_facelist(self, externalobjects, name="outer_faces"): + """Create a face list from a list of outer objects. + + Parameters + ---------- + externalobjects : list + List of outer objects. + name : str, optional + Name of the new list. The default is ``"outer_faces"``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + """ + list2 = self.select_allfaces_fromobjects(externalobjects) # find ALL faces of outer objects + self.create_face_list(list2, name) + self.logger.info("Extfaces of thermal model = " + str(len(list2))) + return True + + @pyaedt_function_handler() + def explicitly_subtract(self, diellist, metallist): + """Explicitly subtract all elements in a SolveInside list and a SolveSurface list. + + Parameters + ---------- + diellist : list + List of dielectrics. + metallist : list + List of metals. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Subtract + >>> oEditor.PurgeHistory + """ + self.logger.info("Creating explicit subtraction between objects.") + for el in diellist: + list1 = el + list2 = "" + for el1 in metallist: + list2 = list2 + el1 + "," + for el1 in diellist: + if el1 is not el: + list2 = list2 + el1 + "," + if list2: + list2 = list2[:-1] + self.subtract(list1, list2, True) + self.purge_history(list1) + self.purge_history(list2) + for el in metallist: + list1 = el + list2 = "" + for el1 in metallist: + if el1 is not el: + list2 = list2 + el1 + "," + if list2: + list2 = list2[:-1] + self.subtract(list1, list2, True) + self.purge_history(list1) + self.purge_history(list2) + self.logger.info("Explicit subtraction is completed.") + return True + + @pyaedt_function_handler() + def find_port_faces(self, port_sheets): + """Find the vacuums given a list of input sheets. + + Starting from a list of input sheets, this method creates a list of output sheets + that represent the blank parts (vacuums) and the tool parts of all the intersections + of solids on the sheets. After a vacuum on a sheet is found, a port can be + created on it. + + Parameters + ---------- + port_sheets : list + List of input sheets names. + + Returns + ------- + List + List of output sheets (`2x len(port_sheets)`). + + """ + faces = [] + solids = [s for s in self.solid_objects if s.material_name not in ["vacuum", "air"] and s.model] + for sheet_name in port_sheets: + sheet = self[sheet_name] # get the sheet object + _, cloned = self.clone(sheet) + cloned = self[cloned[0]] + cloned.subtract(solids) + sheet.subtract(cloned) + cloned.name = sheet.name + "_Face1Vacuum" + faces.append(sheet.name) + faces.append(cloned.name) + return faces + + @pyaedt_function_handler() + def get_line_ids(self): + """Create a dictionary of object IDs for the lines in the design with the line name as the key.""" + line_ids = {} + line_list = list(self.oeditor.GetObjectsInGroup("Lines")) + for line_object in line_list: + # TODO Problem with GetObjectIDByName + try: + line_ids[line_object] = str(self.oeditor.GetObjectIDByName(line_object)) + except: + self.logger.warning("Line {} has an invalid ID!".format(line_object)) + return line_ids + + @pyaedt_function_handler() + def get_bounding_dimension(self): + """Retrieve the dimension array of the bounding box. + + Returns + ------- + list + List of three float values representing the bounding box dimensions + in the form ``[dim_x, dim_y, dim_z]``. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + oBoundingBox = list(self.oeditor.GetModelBoundingBox()) + dimensions = [] + dimensions.append(abs(float(oBoundingBox[0]) - float(oBoundingBox[3]))) + dimensions.append(abs(float(oBoundingBox[1]) - float(oBoundingBox[4]))) + dimensions.append(abs(float(oBoundingBox[2]) - float(oBoundingBox[5]))) + return dimensions + + @pyaedt_function_handler() + def get_object_name_from_edge_id(self, edge_id): + """Retrieve the object name for a predefined edge ID. + + Parameters + ---------- + edge_id : int + ID of the edge. + + Returns + ------- + str + Name of the edge if it exists, ``False`` otherwise. + + References + ---------- + + >>> oEditor.GetEdgeIDsFromObject + """ + for object in list(self._object_names_to_ids.keys()): + try: + oEdgeIDs = self.oeditor.GetEdgeIDsFromObject(object) + if str(edge_id) in oEdgeIDs: + return object + except: + return False + return False + + @pyaedt_function_handler() + def get_solving_volume(self): + """Generate a mesh for a setup. + + Returns + ------- + int + ``1`` when successful, ``0`` when failed. + + References + ---------- + + >>> oEditor.GetModelBoundingBox + """ + bound = self.get_model_bounding_box() + volume = abs(bound[3] - bound[0]) * abs(bound[4] - bound[1]) * abs(bound[5] - bound[2]) + volume = str(round(volume, 0)) + return volume + + @pyaedt_function_handler() + def vertex_data_of_lines(self, txtfilter=None): + """Generate a dictionary of line vertex data for all lines contained within the design. + + Parameters + ---------- + txtfilter : str, optional + Text string for filtering. The default is ``None``. When a text string is specified, + line data is generated only if this text string is contained within the line name. + + Returns + ------- + dict + Dictionary of the line name with a list of vertex positions in either 2D or 3D. + + """ + line_data = {} + lines = self.get_line_ids() + if txtfilter is not None: + lines = [n for n in lines if txtfilter in n] + for x in lines: + line_data[x] = self.get_vertices_of_line(x) + + return line_data + + @pyaedt_function_handler() + def get_vertices_of_line(self, sLineName): + """Generate a list of vertex positions for a line object from AEDT in model units. + + Parameters + ---------- + sLineName : str + Name of the line object in AEDT. + + Returns + ------- + list + List of the ``[x, y, (z)]`` coordinates for the 2D or 3D line object. + + References + ---------- + + >>> oEditor.GetVertexIDsFromObject + """ + position_list = [] + + # Get all vertices in the line + vertices_on_line = self.oeditor.GetVertexIDsFromObject(sLineName) + + if settings.aedt_version > "2022.2": + vertices_on_line = vertices_on_line[::-1] + + for x in vertices_on_line: + pos = self.oeditor.GetVertexPosition(x) + if self.design_type == "Maxwell 2D": + if self.geometry_mode == "XY": + position_list.append([float(pos[0]), float(pos[1])]) + else: + position_list.append([float(pos[0]), float(pos[2])]) + else: + position_list.append([float(pos[0]), float(pos[1]), float(pos[2])]) + + return position_list + + @pyaedt_function_handler() + def import_3d_cad( + self, + filename, + healing=False, + refresh_all_ids=True, + import_materials=False, + create_lightweigth_part=False, + group_by_assembly=False, + create_group=True, + separate_disjoints_lumped_object=False, + import_free_surfaces=False, + point_coicidence_tolerance=1e-6, + ): + """Import a CAD model. + + Parameters + ---------- + filename : str + Full path and name of the CAD file. + healing : bool, optional + Whether to perform healing. The default is ``False``, in which + case healing is not performed. + healing : int, optional + Whether to perform healing. The default is ``0``, in which + case healing is not performed. + refresh_all_ids : bool, optional + Whether to refresh all IDs after the CAD file is loaded. The + default is ``True``. Refreshing IDs can take a lot of time in + a big project. + import_materials : bool optional + Either to import material names from the file or not if presents. + create_lightweigth_part : bool ,optional + Either to import lightweight or not. + group_by_assembly : bool, optional + Either import by sub-assembly or individual parts. The default is ``False``. + create_group : bool, optional + Either to create a new group of imported objects. The default is ``True``. + separate_disjoints_lumped_object : bool, optional + Either to automatically separate disjoint parts. The default is ``False``. + import_free_surfaces : bool, optional + Either to import free surfaces parts. The default is ``False``. + point_coicidence_tolerance : float, optional + Tolerance on point. Default is ``1e-6``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Import + """ + + if str(healing) in ["0", "1"]: + warnings.warn( + "Assigning `0` or `1` to `healing` option is deprecated. Assign `True` or `False` instead.", + DeprecationWarning, + ) + vArg1 = ["NAME:NativeBodyParameters"] + vArg1.append("HealOption:="), vArg1.append(int(healing)) + vArg1.append("Options:="), vArg1.append("-1") + vArg1.append("FileType:="), vArg1.append("UnRecognized") + vArg1.append("MaxStitchTol:="), vArg1.append(-1) + vArg1.append("ImportFreeSurfaces:="), vArg1.append(import_free_surfaces) + vArg1.append("GroupByAssembly:="), vArg1.append(group_by_assembly) + vArg1.append("CreateGroup:="), vArg1.append(create_group) + vArg1.append("STLFileUnit:="), vArg1.append("Auto") + vArg1.append("MergeFacesAngle:="), vArg1.append(-1) + vArg1.append("PointCoincidenceTol:="), vArg1.append(point_coicidence_tolerance) + vArg1.append("CreateLightweightPart:="), vArg1.append(create_lightweigth_part) + vArg1.append("ImportMaterialNames:="), vArg1.append(import_materials) + vArg1.append("SeparateDisjointLumps:="), vArg1.append(separate_disjoints_lumped_object) + vArg1.append("SourceFile:="), vArg1.append(filename) + self.oeditor.Import(vArg1) + if refresh_all_ids: + self.refresh_all_ids() + self.logger.info("Step file {} imported".format(filename)) + return True + + @pyaedt_function_handler() + def import_spaceclaim_document(self, SCFile): + """Import a SpaceClaim document. + + Parameters + ---------- + SCFile : + Full path and name of the SpaceClaim file. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateUserDefinedModel + """ + environlist = os.environ + latestversion = "" + for l in environlist: + if "AWP_ROOT" in l: + if l > latestversion: + latestversion = l + if not latestversion: + self.logger.error("SpaceClaim is not found.") + else: + scdm_path = os.path.join(os.environ[latestversion], "scdm") + self.oeditor.CreateUserDefinedModel( + [ + "NAME:UserDefinedModelParameters", + [ + "NAME:Definition", + [ + "NAME:UDMParam", + "Name:=", + "GeometryFilePath", + "Value:=", + '"' + SCFile + '"', + "DataType:=", + "String", + "PropType2:=", + 0, + "PropFlag2:=", + 1, + ], + [ + "NAME:UDMParam", + "Name:=", + "IsSpaceClaimLinkUDM", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + ], + [ + "NAME:Options", + [ + "NAME:UDMParam", + "Name:=", + "Solid Bodies", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Surface Bodies", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Parameters", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Parameter Key", + "Value:=", + '""', + "DataType:=", + "String", + "PropType2:=", + 0, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Named Selections", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + [ + "NAME:UDMParam", + "Name:=", + "Rendering Attributes", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Material Assignment", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Import suppressed for physics objects", + "Value:=", + "0", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 0, + ], + [ + "NAME:UDMParam", + "Name:=", + "Explode Multi-Body Parts", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + [ + "NAME:UDMParam", + "Name:=", + "SpaceClaim Installation Path", + "Value:=", + '"' + scdm_path + '"', + "DataType:=", + "String", + "PropType2:=", + 0, + "PropFlag2:=", + 8, + ], + [ + "NAME:UDMParam", + "Name:=", + "Smart CAD Update", + "Value:=", + "1", + "DataType:=", + "Int", + "PropType2:=", + 5, + "PropFlag2:=", + 8, + ], + ], + ["NAME:GeometryParams"], + "DllName:=", + "SCIntegUDM", + "Library:=", + "installLib", + "Version:=", + "2.0", + "ConnectionID:=", + "", + ] + ) + self.refresh_all_ids() + return True + + @pyaedt_function_handler() + def modeler_variable(self, value): + """Modeler variable. + + Parameters + ---------- + value : + + + Returns + ------- + + """ + if isinstance(value, str): + return value + else: + return str(value) + self.model_units + + @pyaedt_function_handler() + def break_spaceclaim_connection(self): # TODO: Need to change this name. Don't use "break". + """Disconnect from the running SpaceClaim instance. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.BreakUDMConnection + """ + args = ["NAME:Selections", "Selections:=", "SpaceClaim1"] + self.oeditor.BreakUDMConnection(args) + return True + + @pyaedt_function_handler() + def load_scdm_in_hfss(self, SpaceClaimFile): + """Load a SpaceClaim file in HFSS. + + Parameters + ---------- + SpaceClaimFile : str + Full path and name of the SpaceClaim file. + + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.CreateUserDefinedModel + >>> oEditor.BreakUDMConnection + """ + self.import_spaceclaim_document(SpaceClaimFile) + self.break_spaceclaim_connection() + return True + + @pyaedt_function_handler() + def get_faces_from_materials(self, mats): + """Select all outer faces given a list of materials. + + Parameters + ---------- + mats : list + List of materials to include in the search for outer + faces. + + Returns + ------- + list + List of all outer faces of the specified materials. + + References + ---------- + + >>> oEditor.GetObjectsByMaterial + >>> oEditor.GetFaceIDs + """ + self.logger.info("Selecting outer faces.") + + sel = [] + objs = [] + if type(mats) is str: + mats = [mats] + for mat in mats: + objs.extend(list(self.oeditor.GetObjectsByMaterial(mat.lower()))) + + for i in objs: + oFaceIDs = self.oeditor.GetFaceIDs(i) + + for face in oFaceIDs: + sel.append(int(face)) + return sel + + @pyaedt_function_handler() + def scale(self, obj_list, x=2.0, y=2.0, z=2.0): + """Scale a list of objects. + + Parameters + ---------- + obj_list : list + List of objects IDs or names. + x : float, optional + Scale factor for X. + y : float, optional + Scale factor for Y. + z : float, optional + Scale factor for Z. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Scale + """ + selections = self.convert_to_selections(obj_list, True) + arg1 = ["NAME:Selections", "Selections:=", ", ".join(selections), "NewPartsModelFlag:=", "Model"] + arg2 = ["NAME:ScaleParameters", "ScaleX:=", str(x), "ScaleY:=", str(y), "ScaleZ:=", str(z)] + self.oeditor.Scale(arg1, arg2) + return True + + @pyaedt_function_handler() + def select_allfaces_fromobjects(self, elements): + """Select all outer faces given a list of objects. + + Parameters + ---------- + elements : list + List of objects to include in the search for outer faces. + + Returns + ------- + List + List of outer faces in the given list of objects. + + References + ---------- + + >>> oEditor.GetFaceIDs + """ + self.logger.info("Selecting outer faces.") + + sel = [] + + for i in elements: + oFaceIDs = self.oeditor.GetFaceIDs(i) + + for face in oFaceIDs: + sel.append(int(face)) + return sel + + @pyaedt_function_handler() + def setunassigned_mats(self): + """Find unassagned objects and set them to non-model. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.SetPropertyValue + """ + oObjects = list(self.oeditor.GetObjectsInGroup("Solids")) + for obj in oObjects: + pro = self.oeditor.GetPropertyValue("Geometry3DAttributeTab", obj, "Material") + if pro == '""': + self.oeditor.SetPropertyValue("Geometry3DAttributeTab", obj, "Model", False) + return True + + @pyaedt_function_handler() + def automatic_thicken_sheets(self, inputlist, value, internalExtr=True, internalvalue=1): + """Create thickened sheets for a list of input faces. + + This method automatically checks the direction in which to thicken the sheets. + + Parameters + ---------- + inputlist : list + List of faces. + value : float + Value in millimeters to thicken the sheets. + internalExtr : bool, optional + Whether to extrude sheets internally. The default is ``True``. + internalvalue : float, optional + Value in millimeters to thicken the sheets internally (vgoing into the model). + The default is ``1``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.ThickenSheet + """ + aedt_bounding_box = self.get_model_bounding_box() + directions = {} + inputlist = self.convert_to_selections(inputlist, True) + for el in inputlist: + objID = self.oeditor.GetFaceIDs(el) + faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) + directionfound = False + l = 10 + while not directionfound: + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", str(l) + "mm", "BothSides:=", False], + ) + aedt_bounding_box2 = self.get_model_bounding_box() + self._odesign.Undo() + if aedt_bounding_box != aedt_bounding_box2: + directions[el] = "External" + directionfound = True + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(l) + "mm", "BothSides:=", False], + ) + aedt_bounding_box2 = self.get_model_bounding_box() + + self._odesign.Undo() + + if aedt_bounding_box != aedt_bounding_box2: + directions[el] = "Internal" + directionfound = True + else: + l = l + 10 + for el in inputlist: + objID = self.oeditor.GetFaceIDs(el) + faceCenter = self.oeditor.GetFaceCenter(int(objID[0])) + if directions[el] == "Internal": + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", "-" + str(value) + "mm", "BothSides:=", False], + ) + else: + self.oeditor.ThickenSheet( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + ["NAME:SheetThickenParameters", "Thickness:=", str(value) + "mm", "BothSides:=", False], + ) + if internalExtr: + objID2 = self.oeditor.GetFaceIDs(el) + for fid in objID2: + try: + faceCenter2 = self.oeditor.GetFaceCenter(int(fid)) + if faceCenter2 == faceCenter: + self.oeditor.MoveFaces( + ["NAME:Selections", "Selections:=", el, "NewPartsModelFlag:=", "Model"], + [ + "NAME:Parameters", + [ + "NAME:MoveFacesParameters", + "MoveAlongNormalFlag:=", + True, + "OffsetDistance:=", + str(internalvalue) + "mm", + "MoveVectorX:=", + "0mm", + "MoveVectorY:=", + "0mm", + "MoveVectorZ:=", + "0mm", + "FacesToMove:=", + [int(fid)], + ], + ], + ) + except: + self.logger.info("done") + # self.modeler_oproject.ClearMessages() + return True + + @pyaedt_function_handler() + def move_face(self, faces, offset=1.0): + """Move an input face or a list of input faces of a specific object. + + This method moves a face or a list of faces which belong to the same solid. + + Parameters + ---------- + faces : list + List of Face ID or List of :class:`pyaedt.modeler.Object3d.FacePrimitive` object or mixed. + offset : float, optional + Offset to apply in model units. The default is ``1.0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.MoveFaces + + """ + face_selection = self.convert_to_selections(faces, True) + selection = {} + for f in face_selection: + if self.oeditor.GetObjectNameByFaceID(f) in selection: + selection[self.oeditor.GetObjectNameByFaceID(f)].append(f) + else: + selection[self.oeditor.GetObjectNameByFaceID(f)] = [f] + + arg1 = [ + "NAME:Selections", + "Selections:=", + self.convert_to_selections(list(selection.keys()), False), + "NewPartsModelFlag:=", + "Model", + ] + arg2 = ["NAME:Parameters"] + for el in list(selection.keys()): + arg2.append( + [ + "NAME:MoveFacesParameters", + "MoveAlongNormalFlag:=", + True, + "OffsetDistance:=", + str(offset) + self.model_units, + "MoveVectorX:=", + "0mm", + "MoveVectorY:=", + "0mm", + "MoveVectorZ:=", + "0mm", + "FacesToMove:=", + selection[el], + ] + ) + self.oeditor.MoveFaces(arg1, arg2) + return True + + @pyaedt_function_handler() + def move_edge(self, edges, offset=1.0): + """Move an input edge or a list of input edges of a specific object. + + This method moves an edge or a list of edges which belong to the same solid. + + Parameters + ---------- + edges : list + List of Edge ID or List of :class:`pyaedt.modeler.Object3d.EdgePrimitive` object or mixed. + offset : float, optional + Offset to apply in model units. The default is ``1.0``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.MoveEdges + + """ + edge_selection = self.convert_to_selections(edges, True) + selection = {} + for f in edge_selection: + if self.oeditor.GetObjectNameByEdgeID(f) in selection: + selection[self.oeditor.GetObjectNameByEdgeID(f)].append(f) + else: + selection[self.oeditor.GetObjectNameByEdgeID(f)] = [f] + + arg1 = [ + "NAME:Selections", + "Selections:=", + self.convert_to_selections(list(selection.keys()), False), + "NewPartsModelFlag:=", + "Model", + ] + arg2 = ["NAME:Parameters"] + for el in list(selection.keys()): + arg2.append( + [ + "NAME:MoveEdgesParameters", + "MoveAlongNormalFlag:=", + True, + "OffsetDistance:=", + str(offset) + self.model_units, + "MoveVectorX:=", + "0mm", + "MoveVectorY:=", + "0mm", + "MoveVectorZ:=", + "0mm", + "EdgesToMove:=", + selection[el], + ] + ) + self.oeditor.MoveEdges(arg1, arg2) + return True + + @pyaedt_function_handler() + def create_group(self, objects=None, components=None, groups=None, group_name=None): + """Group objects or groups into one group. + + At least one between ``objects``, ``components``, ``groups`` has to be defined. + + Parameters + ---------- + objects : list, optional + List of objects. The default is ``None``, in which case a group + with all objects is created. + components : list, optional + List of 3d components to group. The default is ``None``. + groups : list, optional + List of groups. The default is ``None``. + group_name : str, optional + Name of the new group. The default is ``None``. + It is not possible to choose the name but a name is + assigned automatically. + + Returns + ------- + str + Name assigned to the new group. + + References + ---------- + + >>> oEditor.CreateGroup + """ + if components is None and groups is None and objects is None: + raise AttributeError("At least one between ``objects``, ``components``, ``groups`` has to be defined.") + + all_objects = self.object_names + if objects: + object_selection = self.convert_to_selections(objects, return_list=False) + else: + object_selection = "" + if groups: + group_selection = self.convert_to_selections(groups, return_list=False) + else: + group_selection = "" + if components: + component_selection = self.convert_to_selections(components, return_list=False) + else: + component_selection = "" + + arg = [ + "NAME:GroupParameter", + "ParentGroupID:=", + "Model", + "Parts:=", + object_selection, + "SubmodelInstances:=", + component_selection, + "Groups:=", + group_selection, + ] + assigned_name = self.oeditor.CreateGroup(arg) + if group_name and group_name not in all_objects: + self.oeditor.ChangeProperty( + [ + "NAME:AllTabs", + [ + "NAME:Attributes", + ["NAME:PropServers", assigned_name], + ["NAME:ChangedProps", ["NAME:Name", "Value:=", group_name]], + ], + ] + ) + return group_name + else: + return assigned_name + + @pyaedt_function_handler() + def ungroup(self, groups): + """Ungroup one or more groups. + + Parameters + ---------- + groups : list + List of group names. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.Ungroup + """ + group_list = self.convert_to_selections(groups, return_list=True) + arg = ["Groups:=", group_list] + self.oeditor.Ungroup(arg) + return True + + @pyaedt_function_handler() + def flatten_assembly(self): + """Flatten the assembly, removing all group trees. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oEditor.FlattenGroup + """ + self.oeditor.FlattenGroup(["Groups:=", ["Model"]]) + return True + + @pyaedt_function_handler() + def wrap_sheet(self, sheet_name, object_name, imprinted=False): + """Execute the sheet wrapping around an object. + If wrapping produces an unclassified operation it will be reverted. + + Parameters + ---------- + sheet_name : str, :class:`pyaedt.modeler.Object3d.Object3d` + Sheet name or sheet object. + object_name : str, :class:`pyaedt.modeler.Object3d.Object3d` + Object name or solid object. + imprinted : bool, optional + Either if imprint or not over the sheet. Default is ``False``. + + Returns + ------- + bool + Command execution status. + """ + sheet_name = self.convert_to_selections(sheet_name, False) + object_name = self.convert_to_selections(object_name, False) + + if sheet_name not in self.sheet_names: + self.logger.error("{} is not a valid sheet.".format(sheet_name)) + return False + if object_name not in self.solid_names: + self.logger.error("{} is not a valid solid body.".format(object_name)) + return False + unclassified = [i for i in self.unclassified_objects] + self.oeditor.WrapSheet( + ["NAME:Selections", "Selections:=", "{},{}".format(sheet_name, object_name)], + ["NAME:WrapSheetParameters", "Imprinted:=", imprinted], + ) + is_unclassified = [i for i in self.unclassified_objects if i not in unclassified] + if is_unclassified: + self.logger.error("Failed to Wrap sheet. Reverting to original objects.") + self._odesign.Undo() + return False + if imprinted: + self.cleanup_objects() + return True + + @pyaedt_function_handler() + def heal_objects( + self, + input_objects_list, + auto_heal=True, + tolerant_stitch=True, + simplify_geometry=True, + tighten_gaps=True, + heal_to_solid=False, + stop_after_first_stitch_error=False, + max_stitch_tolerance=0.001, + explode_and_stitch=True, + geometry_simplification_tolerance=1, + maximum_generated_radius=1, + simplify_type=0, + tighten_gaps_width=0.00001, + remove_silver_faces=True, + remove_small_edges=True, + remove_small_faces=True, + silver_face_tolerance=1, + small_edge_tolerance=1, + small_face_area_tolerance=1, + bounding_box_scale_factor=0, + remove_holes=True, + remove_chamfers=True, + remove_blends=True, + hole_radius_tolerance=1, + chamfer_width_tolerance=1, + blend_radius_tolerance=1, + allowable_surface_area_change=5, + allowable_volume_change=5, + ): + """Repair invalid geometry entities for the selected objects within the specified tolerance settings. + + Parameters + ---------- + input_objects_list : str + List of object names to analyze. + auto_heal : bool, optional + Auto heal option. Default value is ``True``. + tolerant_stitch : bool, optional + Tolerant stitch for manual healing. The default is ``True``. + simplify_geometry : bool, optional + Simplify geometry for manual healing. The default is ``True``. + tighten_gaps : bool, optional + Tighten gaps for manual healing. The default is ``True``. + heal_to_solid : bool, optional + Heal to solid for manual healing. The default is ``False``. + stop_after_first_stitch_error : bool, optional + Stop after first stitch error for manual healing. The default is ``False``. + max_stitch_tolerance : float, str, optional + Max stitch tolerance for manual healing. The default is ``0.001``. + explode_and_stitch : bool, optional + Explode and stitch for manual healing. The default is ``True``. + geometry_simplification_tolerance : float, str, optional + Geometry simplification tolerance for manual healing in mm. The default is ``1``. + maximum_generated_radius : float, str, optional + Maximum generated radius for manual healing in mm. The default is ``1``. + simplify_type : int, optional + Simplify type for manual healing. The default is ``0`` which refers to ``Curves``. + Other available values are ``1`` for ``Surfaces`` and ``2`` for ``Both``. + tighten_gaps_width : float, str, optional + Tighten gaps width for manual healing in mm. The default is ``0.00001``. + remove_silver_faces : bool, optional + Remove silver faces for manual healing. The default is ``True``. + remove_small_edges : bool, optional + Remove small edges faces for manual healing. The default is ``True``. + remove_small_faces : bool, optional + Remove small faces for manual healing. The default is ``True``. + silver_face_tolerance : float, str, optional + Silver face tolerance for manual healing in mm. The default is ``1``. + small_edge_tolerance : float, str, optional + Silver face tolerance for manual healing in mm. The default is ``1``. + small_face_area_tolerance : float, str, optional + Silver face tolerance for manual healing in mm^2. The default is ``1``. + bounding_box_scale_factor : int, optional + Bounding box scaling factor for manual healing. The default is ``0``. + remove_holes : bool, optional + Remove holes for manual healing. The default is ``True``. + remove_chamfers : bool, optional + Remove chamfers for manual healing. The default is``True``. + remove_blends : bool, optional + Remove blends for manual healing. The default is ``True``. + hole_radius_tolerance : float, str, optional + Hole radius tolerance for manual healing in mm. The default is ``1``. + chamfer_width_tolerance : float, str, optional + Chamfer width tolerance for manual healing in mm. The default is ``1``. + blend_radius_tolerance : float, str, optional + Blend radius tolerance for manual healing in mm. The default is ``1``. + allowable_surface_area_change : float, str, optional + Allowable surface area for manual healing in mm. The default is ``1``. + allowable_volume_change : float, str, optional + Allowable volume change for manual healing in mm. The default is ``1``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + if not input_objects_list: + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif not isinstance(input_objects_list, str): + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif "," in input_objects_list: + input_objects_list = input_objects_list.strip() + if ", " in input_objects_list: + input_objects_list_split = input_objects_list.split(", ") + else: + input_objects_list_split = input_objects_list.split(",") + for obj in input_objects_list_split: + if obj not in self.object_names: + self.logger.error("Provide an object name or a list of object names that exists in current design.") + return False + objects_selection = ",".join(input_objects_list_split) + else: + objects_selection = input_objects_list + + if simplify_type not in [0, 1, 2]: + self.logger.error("Invalid simplify type.") + return False + + selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] + healing_parameters = [ + "NAME:ObjectHealingParameters", + "Version:=", + 1, + "AutoHeal:=", + auto_heal, + "TolerantStitch:=", + tolerant_stitch, + "SimplifyGeom:=", + simplify_geometry, + "TightenGaps:=", + tighten_gaps, + "HealToSolid:=", + heal_to_solid, + "StopAfterFirstStitchError:=", + stop_after_first_stitch_error, + "MaxStitchTol:=", + max_stitch_tolerance, + "ExplodeAndStitch:=", + explode_and_stitch, + "GeomSimplificationTol:=", + geometry_simplification_tolerance, + "MaximumGeneratedRadiusForSimplification:=", + maximum_generated_radius, + "SimplifyType:=", + simplify_type, + "TightenGapsWidth:=", + tighten_gaps_width, + "RemoveSliverFaces:=", + remove_silver_faces, + "RemoveSmallEdges:=", + remove_small_edges, + "RemoveSmallFaces:=", + remove_small_faces, + "SliverFaceTol:=", + silver_face_tolerance, + "SmallEdgeTol:=", + small_edge_tolerance, + "SmallFaceAreaTol:=", + small_face_area_tolerance, + "SpikeTol:=", + -1, + "GashWidthBound:=", + -1, + "GashAspectBound:=", + -1, + "BoundingBoxScaleFactor:=", + bounding_box_scale_factor, + "RemoveHoles:=", + remove_holes, + "RemoveChamfers:=", + remove_chamfers, + "RemoveBlends:=", + remove_blends, + "HoleRadiusTol:=", + hole_radius_tolerance, + "ChamferWidthTol:=", + chamfer_width_tolerance, + "BlendRadiusTol:=", + blend_radius_tolerance, + "AllowableSurfaceAreaChange:=", + allowable_surface_area_change, + "AllowableVolumeChange:=", + allowable_volume_change, + ] + self.oeditor.HealObject(selections_args, healing_parameters) + return True + + @pyaedt_function_handler() + def simplify_objects( + self, + input_objects_list, + simplify_type="Polygon Fit", + extrusion_axis="Auto", + clean_up=True, + allow_splitting=True, + separate_bodies=True, + clone_body=True, + generate_primitive_history=False, + interior_points_on_arc=5, + length_threshold_percentage=25, + create_group_for_new_objects=False, + ): + """Simplify command to converts complex objects into simpler primitives which are easy to mesh and solve. + + Parameters + ---------- + input_objects_list : str + List of object names to simplify. + simplify_type : str, optional + Simplify type. The default is ``"Polygon Fit"``. Options are + ``"Bounding Box"``, ``"Polygon Fit"``, and ``"Primitive Fit"`. + extrusion_axis : str, optional + Extrusion axis. The default is ``"Auto"``. + Options are ``"Auto"``, ``"X"``, ``"Y"``, and ``"Z"``. + clean_up : bool, optional + Whether to clean up. The default is ``True``. + allow_splitting : bool, optional + Whether to allow splitting. The default is ``True``. + separate_bodies : bool, optional + Whether to separate bodies. The default is ``True``. + clone_body : bool, optional + Whether to clone the body. The default is ``True``. + generate_primitive_history : bool, optional + Whether to generate primitive history. The default is ``False``. + If ``True``, the history for the selected objects is purged. + ``` + interior_points_on_arc : float, optional + Number points on curve. The default is ``5``. + length_threshold_percentage : float, optional + Length threshold percentage. The default is ``25``. + create_group_for_new_objects : bool, optional + Create group for new objects. The default is ``False``. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + """ + if not input_objects_list: + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif not isinstance(input_objects_list, str): + self.logger.error("Provide an object name or a list of object names as a string.") + return False + elif "," in input_objects_list: + input_objects_list = input_objects_list.strip() + if ", " in input_objects_list: + input_objects_list_split = input_objects_list.split(", ") + else: + input_objects_list_split = input_objects_list.split(",") + for obj in input_objects_list_split: + if obj not in self.object_names: + self.logger.error("Provide an object name or a list of object names that exists in current design.") + return False + objects_selection = ",".join(input_objects_list_split) + else: + objects_selection = input_objects_list + + if simplify_type not in ["Polygon Fit", "Primitive Fit", "Bounding Box"]: + self.logger.error("Invalid simplify type.") + return False - @property - def modeler(self): - """Modeler.""" - return self._modeler + if extrusion_axis not in ["Auto", "X", "Y", "Z"]: + self.logger.error("Invalid extrusion axis.") + return False - @property - def model_units(self): - """Model units.""" - return self.modeler.model_units + selections_args = ["NAME:Selections", "Selections:=", objects_selection, "NewPartsModelFlag:=", "Model"] + simplify_parameters = [ + "NAME:SimplifyParameters", + "Type:=", + simplify_type, + "ExtrusionAxis:=", + extrusion_axis, + "Cleanup:=", + clean_up, + "Splitting:=", + allow_splitting, + "SeparateBodies:=", + separate_bodies, + "CloneBody:=", + clone_body, + "Generate Primitive History:=", + generate_primitive_history, + "NumberPointsCurve:=", + interior_points_on_arc, + "LengthThresholdCurve:=", + length_threshold_percentage, + ] + groups_for_new_object = ["CreateGroupsForNewObjects:=", create_group_for_new_objects] - @property - def model_objects(self): - """List of the names of all model objects.""" - return self._get_model_objects(model=True) + try: + self.oeditor.Simplify(selections_args, simplify_parameters, groups_for_new_object) + return True + except: + self.logger.error("Simplify objects failed.") + return False - @property - def non_model_objects(self): - """List of objects of all non-model objects.""" - return list(self.oeditor.GetObjectsInGroup("Non Model")) + @pyaedt_function_handler + def get_face_by_id(self, id): + """Get the face object given its ID. - @property - def model_consistency_report(self): - """Summary of detected inconsistencies between the AEDT modeler and PyAEDT structures. + Parameters + ---------- + id : int + ID of the face to retrieve. Returns ------- - dict + modeler.cad.elements3d.FacePrimitive + Face object. """ - obj_names = self.object_names - missing = [] - for name in obj_names: - if name not in self._object_names_to_ids: - missing.append(name) - non_existent = [] - for name in self._object_names_to_ids: - if name not in obj_names and name not in self.unclassified_names: - non_existent.append(name) - report = {"Missing Objects": missing, "Non-Existent Objects": non_existent} - return report + obj = [o for o in self.object_list for face in o.faces if face.id == id] + if obj: + face_obj = [face for face in obj[0].faces if face.id == id][0] + return face_obj + else: + return False @pyaedt_function_handler() def create_point(self, position, name=None, color="(143 175 143)"): @@ -446,7 +5660,7 @@ def create_plane( @pyaedt_function_handler() def _change_component_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -458,7 +5672,7 @@ def _change_component_property(self, vPropChange, names_list): @pyaedt_function_handler() def _change_geometry_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -472,7 +5686,7 @@ def _change_geometry_property(self, vPropChange, names_list): @pyaedt_function_handler() def _change_point_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -486,7 +5700,7 @@ def _change_point_property(self, vPropChange, names_list): @pyaedt_function_handler() def _change_plane_property(self, vPropChange, names_list): - names = self._app.modeler.convert_to_selections(names_list, True) + names = self.convert_to_selections(names_list, True) vChangedProps = ["NAME:ChangedProps", vPropChange] vPropServers = ["NAME:PropServers"] for el in names: @@ -608,6 +5822,30 @@ def create_region(self, pad_percent=300, is_percentage=True): References ---------- + >>> oEditor.CreateRegion + """ + return self._create_region(pad_percent=pad_percent, is_percentage=is_percentage) + + @pyaedt_function_handler() + def _create_region(self, pad_percent=300, is_percentage=True): + """Create an air region. + + Parameters + ---------- + pad_percent : float, str, list of floats or list of str, optional + Same padding is applied if not a list. The default is ``300``. + If a list of floats or str, interpret as adding for ``["+X", "+Y", "+Z", "-X", "-Y", "-Z"]``. + is_percentage : bool, optional + Region definition in percentage or absolute value. The default is `True``. + + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + Region object. + + References + ---------- + >>> oEditor.CreateRegion """ if "Region" in self.object_names: @@ -633,13 +5871,13 @@ def create_region(self, pad_percent=300, is_percentage=True): units = decompose_variable_value(pad_percent[i])[1] if not units and pad_percent[i].isnumeric(): if not is_percentage: - units = self.modeler.model_units + units = self.model_units pad_percent[i] += units elif is_percentage: self.logger.error("Percentage input must not have units") return False elif not is_percentage: - units = self.modeler.model_units + units = self.model_units pad_percent[i] = str(pad_percent[i]) pad_percent[i] += units arg.append(str(pad_percent[i])) @@ -1248,298 +6486,93 @@ def delete_objects_containing(self, contained_string, case_sensitive=True): Returns ------- - bool - ``True`` when successful, ``False`` when failed. - - References - ---------- - - >>> oEditor.Delete - - """ - objnames = self._object_names_to_ids - num_del = 0 - for el in objnames: - if case_sensitive: - if contained_string in el: - self.delete(el) - num_del += 1 - else: - if contained_string.lower() in el.lower(): - self.delete(el) - num_del += 1 - self.logger.info("Deleted %s objects", num_del) - return True - - @pyaedt_function_handler() - def get_model_bounding_box(self): - """Retrieve the model's bounding box. - - Returns - ------- - list - List of 6 float values ``[min_x, min_y, min_z, max_x, max_y, max_z]`` - for the bounding box. - - References - ---------- - - >>> oEditor.GetModelBoundingBox - """ - return self._app.modeler.get_model_bounding_box() - - @pyaedt_function_handler() - def get_obj_id(self, objname): - """Return the object ID from an object name. - - Parameters - ---------- - objname : str - Name of the object. - - Returns - ------- - int - Object ID. - - """ - if objname in self._object_names_to_ids: - return self._object_names_to_ids[objname] - return None - - @pyaedt_function_handler() - def get_object_from_name(self, objname): - """Return the object from an object name. - - Parameters - ---------- - objname : str - Name of the object. - - Returns - ------- - :class:`pyaedt.modeler.cad.object3d.Object3d` - 3D object returned. - - """ - if objname in self._object_names_to_ids: - object_id = self.get_obj_id(objname) - return self.objects[object_id] - - @pyaedt_function_handler() - def get_objects_w_string(self, stringname, case_sensitive=True): - """Retrieve all objects with a given string in their names. - - Parameters - ---------- - stringname : str - String to search object names for. - case_sensitive : bool, optional - Whether the string is case-sensitive. The default is ``True``. - - Returns - ------- - list - List of object names with the given string. - - """ - list_objs = [] - for name in list(self.objects_by_name.keys()): - if case_sensitive: - if stringname in name: - list_objs.append(name) - else: - if stringname.lower() in name.lower(): - list_objs.append(name) - return list_objs - - @pyaedt_function_handler() - def refresh(self): - """Refresh this object.""" - self._solids = [] - self._sheets = [] - self._lines = [] - self._points = [] - self._unclassified = [] - self._all_object_names = [] - self.objects = {} - self.user_defined_components = {} - self._object_names_to_ids = {} - self._currentId = 0 - self._refresh_object_types() - self._refresh_all_ids_from_aedt_file() - self.refresh_all_ids() - - @property - def objects_by_name(self): - """Object dictionary organized by name. - - Returns - ------- - dict - """ - obj_dict = {} - for _, v in self.objects.items(): - obj_dict[v._m_name] = v - return obj_dict - - @pyaedt_function_handler() - def cleanup_objects(self): - """Clean up objects that no longer exist in the modeler because - they were removed by previous operations. - - This method also updates object IDs that may have changed via - a modeler operation such as :func:`pyaedt.modeler.Model3D.Modeler3D.unite` - or :func:`pyaedt.modeler.Model2D.Modeler2D.unite`. - - Returns - ------- - dict - Dictionary of updated object IDs. - - """ - new_object_dict = {} - new_object_id_dict = {} - new_points_dict = {} - - all_objects = self.object_names - all_unclassified = self.unclassified_names - all_objs = all_objects + all_unclassified - for old_id, obj in self.objects.items(): - if obj.name in all_objs: - # Check if ID can change in boolean operations - # updated_id = obj.id # By calling the object property we get the new id - new_object_id_dict[obj.name] = old_id - new_object_dict[old_id] = obj - for old_id, obj in self.points.items(): - if obj.name in self._points: - new_points_dict[obj.name] = obj - self.objects = new_object_dict - self._object_names_to_ids = new_object_id_dict - self.points = new_points_dict - - @pyaedt_function_handler() - def find_new_objects(self): - """Find any new objects in the modeler that were created - by previous operations. - - Returns - ------- - dict - Dictionary of new objects. - - """ - new_objects = [] - for obj_name in self.object_names: - if obj_name not in self._object_names_to_ids: - new_objects.append(obj_name) - return new_objects - - @pyaedt_function_handler() - def add_new_objects(self): - """Add objects that have been created in the modeler by - previous operations. - - Returns - ------- - list - List of added objects. + bool + ``True`` when successful, ``False`` when failed. - """ - # TODO: Need to improve documentation for this method. - added_objects = [] + References + ---------- - for obj_name in self.object_names: - if obj_name not in self._object_names_to_ids: - self._create_object(obj_name) - added_objects.append(obj_name) - for obj_name in self.unclassified_names: - if obj_name not in self._object_names_to_ids: - self._create_object(obj_name) - added_objects.append(obj_name) - for obj_name in self.point_names: - if obj_name not in self.points.keys(): - self._create_object(obj_name) - added_objects.append(obj_name) - return added_objects + >>> oEditor.Delete + + """ + objnames = self._object_names_to_ids + num_del = 0 + for el in objnames: + if case_sensitive: + if contained_string in el: + self.delete(el) + num_del += 1 + else: + if contained_string.lower() in el.lower(): + self.delete(el) + num_del += 1 + self.logger.info("Deleted %s objects", num_del) + return True @pyaedt_function_handler() - def add_new_user_defined_component(self): - """Add 3D components and user-defined models that have been created in the modeler by - previous operations. + def get_obj_id(self, objname): + """Return the object ID from an object name. + + Parameters + ---------- + objname : str + Name of the object. Returns ------- - list - List of added components. + int + Object ID. """ - added_component = [] - for comp_name in self.user_defined_component_names: - if comp_name not in self.user_defined_components: - self._create_user_defined_component(comp_name) - added_component.append(comp_name) - return added_component + if objname in self._object_names_to_ids: + return self._object_names_to_ids[objname] + return None - # TODO Eliminate this - check about import_3d_cad - # Should no longer be a problem @pyaedt_function_handler() - def refresh_all_ids(self): - """Refresh all IDs.""" + def get_object_from_name(self, objname): + """Return the object from an object name. - self.add_new_objects() - self.add_new_user_defined_component() - self.cleanup_objects() + Parameters + ---------- + objname : str + Name of the object. - return len(self.objects) + Returns + ------- + :class:`pyaedt.modeler.cad.object3d.Object3d` + 3D object returned. + + """ + if objname in self._object_names_to_ids: + object_id = self.get_obj_id(objname) + return self.objects[object_id] @pyaedt_function_handler() - def get_objects_by_material(self, materialname=None): - """Retrieve a list of objects either of a specified material or classified by material. + def get_objects_w_string(self, stringname, case_sensitive=True): + """Retrieve all objects with a given string in their names. Parameters ---------- - materialname : str - Name of the material. The default is ``None``. + stringname : str + String to search object names for. + case_sensitive : bool, optional + Whether the string is case-sensitive. The default is ``True``. Returns ------- - list of class:`pyaedt.modeler.cad.object3d.Object3d` - If a material name is not provided, the method returns - a list of dictionaries where keys are material names - of conductors, dielectrics, gases and liquids respectively - in the design and values are objects assigned to these materials. - If a material name is provided, the method returns a list - of objects assigned to the material. - - References - ---------- - - >>> oEditor.GetObjectsByMaterial + list + List of object names with the given string. """ - obj_lst = [] - if materialname is not None: - for obj in self.object_list: - if obj and ("[" in obj.material_name or "(" in obj.material_name) and obj.object_type == "Solid": - material = ( - self._app.odesign.GetChildObject("3D Modeler") - .GetChildObject(obj.name) - .GetPropEvaluatedValue("Material") - .lower() - ) - if materialname.lower() == material: - obj_lst.append(obj) - elif obj and (obj.material_name == materialname or obj.material_name == materialname.lower()): - obj_lst.append(obj) - else: - obj_lst = [ - self._get_object_dict_by_material(self.materials.conductors), - self._get_object_dict_by_material(self.materials.dielectrics), - self._get_object_dict_by_material(self.materials.gases), - self._get_object_dict_by_material(self.materials.liquids), - ] - return obj_lst + list_objs = [] + for name in list(self.objects_by_name.keys()): + if case_sensitive: + if stringname in name: + list_objs.append(name) + else: + if stringname.lower() in name.lower(): + list_objs.append(name) + return list_objs @pyaedt_function_handler() def find_closest_edges(self, start_obj, end_obj, port_direction=0): @@ -1766,7 +6799,7 @@ def get_equivalent_parallel_edges(self, edgelist, portonplane=True, axisdir=0, s if portonplane: vect[divmod(axisdir, 3)[1]] = 0 # TODO: can we avoid this translate operation - is there another way to check ? - self.modeler.move(second_edge, vect) + self.move(second_edge, vect) p_check = second_edge.vertices[0].position p_check2 = second_edge.vertices[1].position # elif len(ver2) == 1: # for circular edges with one vertex @@ -2164,6 +7197,9 @@ def get_bodynames_from_position(self, position, units=None, include_non_model=Tr >>> oEditor.GetBodyNamesByPosition """ + if not isinstance(position, (self.Position, list)): + # self.logger.error("A list of point has to be provided") + return [] XCenter, YCenter, ZCenter = self._pos_with_arg(position, units) vArg1 = ["NAME:Parameters"] vArg1.append("XPosition:="), vArg1.append(XCenter) @@ -2673,7 +7709,7 @@ def get_closest_edgeid_to_position(self, position, units=None): """ if isinstance(position, list): - position = self.modeler.Position(position) + position = self.Position(position) bodies = self.get_bodynames_from_position(position, units) # the function searches in all bodies, not efficient @@ -2892,106 +7928,6 @@ def _create_object(self, name, pid=0, use_cached=False): self._object_names_to_ids[o.name] = new_id return o - @pyaedt_function_handler() - def _get_commands(self, name): - try: - return self.oeditor.GetChildObject(name).GetChildNames() - except: - return [] - - @pyaedt_function_handler() - def _create_user_defined_component(self, name): - if name not in list(self.user_defined_components.keys()): - native_component_properties = self._get_native_component_properties(name) - if native_component_properties: - component_type = native_component_properties["NativeComponentDefinitionProvider"]["Type"] - o = UserDefinedComponent(self, name, native_component_properties, component_type) - else: - o = UserDefinedComponent(self, name) - self.user_defined_components[name] = o - else: - o = self.user_defined_components[name] - return o - - @pyaedt_function_handler() - def _create_point(self, name): - point = Point(self, name) - self.refresh_all_ids() - - return point - - @pyaedt_function_handler() - def _refresh_all_ids_from_aedt_file(self): - if not self._app.design_properties or "ModelSetup" not in self._app.design_properties: - return False - - try: - groups = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["Groups"]["Group"] - except KeyError: - groups = [] - if not isinstance(groups, list): - groups = [groups] - try: - self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ - "GeometryPart" - ] - except KeyError: - return 0 - for el in self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["ToplevelParts"][ - "GeometryPart" - ]: - if isinstance(el, (OrderedDict, dict)): - attribs = el["Attributes"] - operations = el.get("Operations", None) - else: - attribs = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ - "ToplevelParts" - ]["GeometryPart"]["Attributes"] - operations = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ - "ToplevelParts" - ]["GeometryPart"]["Operations"] - if attribs["Name"] in self._all_object_names: - pid = 0 - - if operations and isinstance(operations.get("Operation", None), (OrderedDict, dict)): - try: - pid = operations["Operation"]["ParentPartID"] - except: # pragma: no cover - pass - elif operations and isinstance(operations.get("Operation", None), list): - try: - pid = operations["Operation"][0]["ParentPartID"] - except: - pass - o = self._create_object(name=attribs["Name"], pid=pid, use_cached=True) - o._part_coordinate_system = attribs["PartCoordinateSystem"] - if "NonModel" in attribs["Flags"]: - o._model = False - else: - o._model = True - if "Wireframe" in attribs["Flags"]: - o._wireframe = True - else: - o._wireframe = False - groupname = "" - for group in groups: - if attribs["GroupId"] == group["GroupID"]: - groupname = group["Attributes"]["Name"] - - o._m_groupName = groupname - try: - o._color = tuple(int(x) for x in attribs["Color"][1:-1].split(" ")) - except: - o._color = None - o._surface_material = attribs.get("SurfaceMaterialValue", None) - if o._surface_material: - o._surface_material = o._surface_material[1:-1].lower() - if "MaterialValue" in attribs: - o._material_name = attribs["MaterialValue"][1:-1].lower() - - o._is_updated = True - return len(self.objects) - @pyaedt_function_handler() def _default_object_attributes(self, name=None, matname=None, flags=""): if not matname: @@ -3177,9 +8113,9 @@ def _get_native_component_properties(self, name): if name in self.oeditor.Get3DComponentInstanceNames(comp3d): component_name = comp3d break - if self._app.design_properties and self._app.design_properties.get("ModelSetup", None) and component_name: + if self._design_properties and self._design_properties.get("ModelSetup", None) and component_name: try: - native_comp_entry = self._app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ + native_comp_entry = self._design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"][ "SubModelDefinitions" ]["NativeComponentDefinition"] if native_comp_entry: @@ -3216,27 +8152,47 @@ def _get_object_dict_by_material(self, material): return obj_dict @pyaedt_function_handler() - def __getitem__(self, partId): - """Get the object ``Object3D`` for a given object ID or object name. + def convert_segments_to_line(self, object_name): + """Convert a CreatePolyline list of segments to lines. + + This method applies to splines and 3-point arguments. Parameters ---------- - partId : int or str - Object ID or object name from the 3D modeler. + object_name : int, str, or :class:`pyaedt.modeler.cad.object3d.Object3d` + Specified for the object. Returns ------- - :class:`pyaedt.modeler.cad.object3d.Object3d` - Returns None if the part ID or the object name is not found. + bool + ``True`` if successful, ``False`` if it fails. + + References + ---------- + + >>> oEditor.ChangeProperty + + Examples + -------- + + >>> from pyaedt import Hfss + >>> aedtapp = Hfss() + >>> edge_object = aedtapp.modeler.create_object_from_edge("my_edge") + >>> aedtapp.modeler.generate_object_history(edge_object) + >>> aedtapp.modeler.convert_segments_to_line(edge_object.name) """ - if isinstance(partId, int): - if partId in self.objects: - return self.objects[partId] - elif partId in self._object_names_to_ids: - return self.objects[self._object_names_to_ids[partId]] - elif partId in self.user_defined_components: - return self.user_defined_components[partId] - elif isinstance(partId, Object3d) or isinstance(partId, UserDefinedComponent): - return partId - return None + this_object = self._resolve_object(object_name) + edges = this_object.edges + for i in reversed(range(len(edges))): + self.oeditor.ChangeProperty( + [ + "NAME:AllTabs", + [ + "NAME:Geometry3DPolylineTab", + ["NAME:PropServers", this_object.name + ":CreatePolyline:1:Segment" + str(i)], + ["NAME:ChangedProps", ["NAME:Segment Type", "Value:=", "Line"]], + ], + ] + ) + return True diff --git a/pyaedt/modeler/cad/Primitives2D.py b/pyaedt/modeler/cad/Primitives2D.py index a3c39c618af..5ed587365b4 100644 --- a/pyaedt/modeler/cad/Primitives2D.py +++ b/pyaedt/modeler/cad/Primitives2D.py @@ -1,8 +1,8 @@ from pyaedt.generic.general_methods import pyaedt_function_handler -from pyaedt.modeler.cad.Primitives import Primitives +from pyaedt.modeler.cad.Primitives import GeometryModeler -class Primitives2D(Primitives, object): +class Primitives2D(GeometryModeler, object): """Manages primitives in 2D tools. This class is inherited in the caller application and is accessible through the primitives variable part @@ -27,8 +27,8 @@ def plane2d(self): plane = "Y" return plane - def __init__(self): - Primitives.__init__(self) + def __init__(self, application): + GeometryModeler.__init__(self, application, is3d=False) @pyaedt_function_handler() def create_circle(self, position, radius, num_sides=0, is_covered=True, name=None, matname=None, non_model=False): @@ -289,4 +289,4 @@ def create_region(self, pad_percent=300, is_percentage=True): if self._app.design_type == "2D Extractor" or self._app.design_type == "Maxwell 2D": pad_percent = [pad_percent[0], pad_percent[1], 0, pad_percent[2], pad_percent[3], 0] - return Primitives.create_region(self, pad_percent, is_percentage) + return self._create_region(pad_percent, is_percentage) diff --git a/pyaedt/modeler/cad/Primitives3D.py b/pyaedt/modeler/cad/Primitives3D.py index 45c352abd12..29d29d9e97f 100644 --- a/pyaedt/modeler/cad/Primitives3D.py +++ b/pyaedt/modeler/cad/Primitives3D.py @@ -23,11 +23,11 @@ from pyaedt.modeler.advanced_cad.actors import Vehicle from pyaedt.modeler.advanced_cad.multiparts import Environment from pyaedt.modeler.advanced_cad.multiparts import MultiPartComponent -from pyaedt.modeler.cad.Primitives import Primitives +from pyaedt.modeler.cad.Primitives import GeometryModeler from pyaedt.modeler.geometry_operators import GeometryOperators -class Primitives3D(Primitives, object): +class Primitives3D(GeometryModeler): """Manages primitives in 3D tools. This class is inherited in the caller application and is @@ -36,7 +36,7 @@ class Primitives3D(Primitives, object): Parameters ---------- - application : str + application : object Name of the application. Examples @@ -48,8 +48,8 @@ class Primitives3D(Primitives, object): >>> prim = aedtapp.modeler """ - def __init__(self): - Primitives.__init__(self) + def __init__(self, application): + GeometryModeler.__init__(self, application, is3d=True) self.multiparts = [] @pyaedt_function_handler() @@ -1139,52 +1139,6 @@ def create_helix( del self.objects[self._object_names_to_ids[polyline_name]] return self._create_object(polyline_name) - @pyaedt_function_handler() - def convert_segments_to_line(self, object_name): - """Convert a CreatePolyline list of segments to lines. - - This method applies to splines and 3-point arguments. - - Parameters - ---------- - object_name : int, str, or :class:`pyaedt.modeler.cad.object3d.Object3d` - Specified for the object. - - Returns - ------- - bool - ``True`` if successful, ``False`` if it fails. - - References - ---------- - - >>> oEditor.ChangeProperty - - Examples - -------- - - >>> from pyaedt import Hfss - >>> aedtapp = Hfss() - >>> edge_object = aedtapp.modeler.create_object_from_edge("my_edge") - >>> aedtapp.modeler.generate_object_history(edge_object) - >>> aedtapp.modeler.convert_segments_to_line(edge_object.name) - - """ - this_object = self._resolve_object(object_name) - edges = this_object.edges - for i in reversed(range(len(edges))): - self.oeditor.ChangeProperty( - [ - "NAME:AllTabs", - [ - "NAME:Geometry3DPolylineTab", - ["NAME:PropServers", this_object.name + ":CreatePolyline:1:Segment" + str(i)], - ["NAME:ChangedProps", ["NAME:Segment Type", "Value:=", "Line"]], - ], - ] - ) - return True - @pyaedt_function_handler() def create_udm( self, @@ -1383,8 +1337,8 @@ def _create_reference_cs_from_3dcomp(self, udm_obj, password): os.rmdir(temp_folder) phi, theta, psi = GeometryOperators.quaternion_to_euler_zxz(q) cs_name = udm_obj.name + "_" + wcs + "_ref" - if cs_name not in [i.name for i in self.modeler.coordinate_systems]: - self.modeler.create_coordinate_system( + if cs_name not in [i.name for i in self.coordinate_systems]: + self.create_coordinate_system( mode="zxz", origin=o, name=cs_name, @@ -1745,7 +1699,7 @@ def insert_layout_component( aedt_component_name = self._app.o_component_manager.Add(compInfo) - if not name or name in self.modeler.user_defined_component_names: + if not name or name in self.user_defined_component_names: name = generate_unique_name("LC") # Open Layout component and get information diff --git a/pyaedt/modeler/cad/component_array.py b/pyaedt/modeler/cad/component_array.py new file mode 100644 index 00000000000..bacf6f5cdc7 --- /dev/null +++ b/pyaedt/modeler/cad/component_array.py @@ -0,0 +1,720 @@ +from __future__ import absolute_import + +from collections import OrderedDict +import os +import re + +from pyaedt import pyaedt_function_handler +from pyaedt.generic.general_methods import _uname +from pyaedt.generic.general_methods import read_csv + + +class ComponentArray(object): + """Manages object attributes for a 3D component array. + + Parameters + ---------- + app : :class:`pyaedt.Hfss` + HFSS PyAEDT object. + name : str, optional + Array name. The default is ``None``, in which case a random name is assigned. + + Examples + -------- + Basic usage demonstrated with an HFSS design with an existing array: + + >>> from pyaedt import Hfss + >>> aedtapp = Hfss(projectname="Array.aedt") + >>> array_names = aedtapp.component_array_names[0] + >>> array = aedtapp.component_array[array_names[0]] + """ + + def __init__(self, app, name=None): + # Public attributes + self.logger = app.logger + self.update_cells = True + + # Private attributes + self.__app = app + if name is None: + name = _uname("Array_") + self.__name = name + + # Leverage csv file if possible (aedt version > 2023.2) + if self.__app.settings.aedt_version > "2023.2": # pragma: no cover + self.export_array_info(array_path=None) + self.__array_info_path = os.path.join(self.__app.toolkit_directory, "array_info.csv") + else: + self.__app.save_project() + self.__array_info_path = None + + # Data that cannot be obtained from CSV + try: + self.__cs_id = app.design_properties["ArrayDefinition"]["ArrayObject"]["ReferenceCSID"] + except AttributeError: # pragma: no cover + self.__cs_id = 1 + + self.__omodel = self.__app.get_oo_object(self.__app.odesign, "Model") + self.__oarray = self.__app.get_oo_object(self.__omodel, name) + self.__cells = None + self.__post_processing_cells = {} + + @pyaedt_function_handler() + def __getitem__(self, key): + """Get cell object corresponding to a key (row, column). + + Parameters + ---------- + key : tuple(int,int) + Row and column associated to the cell. + + Returns + ------- + :class:`pyaedt.modeler.cad.component_array.CellArray` + """ + + if key[0] > self.a_size or key[1] > self.b_size: + self.logger.error("Specified cell does not exist.") + return False + + if key[0] <= 0 or key[1] <= 0: + self.logger.error("Row and column index start with ``1``.") + return False + + return self.cells[key[0] - 1][key[1] - 1] + + @property + def component_names(self): + """List of component names.""" + return self.properties["component"] + + @property + def cells(self): + """List of :class:`pyaedt.modeler.cad.component_array.CellArray` objects.""" + if not self.update_cells: + return self.__cells + + if self.__app.settings.aedt_version > "2023.2": # pragma: no cover + self.export_array_info(array_path=None) + else: + self.__app.save_project() + + self.__cells = [[None for _ in range(self.b_size)] for _ in range(self.a_size)] + array_props = self.properties + component_names = self.component_names + for row_cell in range(0, self.a_size): + for col_cell in range(0, self.b_size): + self.__cells[row_cell][col_cell] = CellArray(row_cell, col_cell, array_props, component_names, self) + return self.__cells + + @property + def name(self): + """Name of the array.""" + return self.__name + + @name.setter + def name(self, array_name): + if array_name not in self.__app.component_array_names: + if array_name != self.__name: + self.__oarray.SetPropValue("Name", array_name) + self.__app.component_array.update({array_name: self}) + self.__app.component_array_names = list(self.__app.omodelsetup.GetArrayNames()) + del self.__app.component_array[self.__name] + self.__name = array_name + else: # pragma: no cover + self.logger.warning("Name %s already assigned in the design", array_name) + + @property + def properties(self): + """Ordered dictionary of the properties of the component array.""" + # From 2024R1, array information can be loaded from a CSV + if self.__array_info_path and os.path.exists(self.__array_info_path): # pragma: no cover + res = self.parse_array_info_from_csv(self.__array_info_path) + else: + res = self.__get_properties_from_aedt() + return res + + @property + def post_processing_cells(self): + """Dictionary of each component's postprocessing cells.""" + if not self.__post_processing_cells: + self.__post_processing_cells = {} + component_info = {} + for row, row_info in enumerate(self.cells, start=1): + for col, col_info in enumerate(row_info, start=1): + name = col_info.component + component_info.setdefault(name, []).append([row, col]) + + for component_name, component_cells in component_info.items(): + if component_name not in self.__post_processing_cells.keys() and component_name is not None: + self.__post_processing_cells[component_name] = component_cells[0] + + return self.__post_processing_cells + + @post_processing_cells.setter + def post_processing_cells(self, val): + if isinstance(val, dict): + self.__post_processing_cells = val + self.edit_array() + else: # pragma: no cover + self.logger.error("Dictionary with component names and cell is not correct.") + + @property + def visible(self): + """Flag indicating if the array is visible.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "Visible") + + @visible.setter + def visible(self, val): + self.__oarray.SetPropValue("Visible", val) + + @property + def show_cell_number(self): + """Flag indicating if the array cell number is shown.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "Show Cell Number") + + @show_cell_number.setter + def show_cell_number(self, val): + self.__oarray.SetPropValue("Show Cell Number", val) + + @property + def render_choices(self): + """List of rendered name choices.""" + return list(self.__oarray.GetPropValue("Render/Choices")) + + @property + def render(self): + """Array rendering.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "Render") + + @render.setter + def render(self, val): + if val not in self.render_choices: + self.logger.warning("Render value is not available.") + else: + self.__oarray.SetPropValue("Render", val) + + @property + def render_id(self): + """Array rendering ID.""" + res = self.render_choices.index(self.render) + return res + + @property + def a_vector_choices(self): + """List of name choices for vector A.""" + return list(self.__app.get_oo_property_value(self.__omodel, self.name, "A Vector/Choices")) + + @property + def b_vector_choices(self): + """List of name choices for vector B.""" + return list(self.__app.get_oo_property_value(self.__omodel, self.name, "B Vector/Choices")) + + @property + def a_vector_name(self): + """Name of vector A.""" + return self.__app.get_oo_property_value(self.__omodel, self.name, "A Vector") + + @a_vector_name.setter + def a_vector_name(self, val): + if val in self.a_vector_choices: + self.__oarray.SetPropValue("A Vector", val) + else: + self.logger.warning("A vector name not available") + + @property + def b_vector_name(self): + """Name of vector B.""" + return self.__oarray.GetPropValue("B Vector") + + @b_vector_name.setter + def b_vector_name(self, val): + if val in self.b_vector_choices: + self.__oarray.SetPropValue("B Vector", val) + else: + self.logger.warning("B vector name not available") + + @property + def a_size(self): + """Number of cells in the vector A direction.""" + return int(self.__app.get_oo_property_value(self.__omodel, self.name, "A Cell Count")) + + @a_size.setter + def a_size(self, val): # pragma: no cover + # Bug in 2024.1, not possible to change cell count. + # self._oarray.SetPropValue("A Cell Count", val) + self.logger.warning("A size cannot be modified.") + + @property + def b_size(self): + """Number of cells in the vector B direction.""" + return int(self.__app.get_oo_property_value(self.__omodel, self.name, "B Cell Count")) + + @b_size.setter + def b_size(self, val): # pragma: no cover + # Bug in 2024.1, not possible to change cell count. + # self._oarray.SetPropValue("B Cell Count", val) + self.logger.warning("B size cannot be modified.") + + @property + def padding_cells(self): + """Number of padding cells.""" + return int(self.__app.get_oo_property_value(self.__omodel, self.name, "Padding")) + + @padding_cells.setter + def padding_cells(self, val): + self.__oarray.SetPropValue("Padding", val) + + @property + def coordinate_system(self): + """Coordinate system name.""" + cs_dict = self.__map_coordinate_system_to_id() + res = "Global" + for name, cs_id in cs_dict.items(): + if cs_id == self.__cs_id: + res = name + if res == "Global": + self.logger.warning("Coordinate system is not loaded. Save the project.") + return res + + @coordinate_system.setter + def coordinate_system(self, name): + cs_dict = self.__map_coordinate_system_to_id() + if name not in cs_dict: + self.logger.warning("Coordinate system is not loaded. Save the project.") + else: + self.__cs_id = cs_dict[name] + self.edit_array() + + @pyaedt_function_handler() + def update_properties(self): + """Update component array properties. + + Returns + ------- + dict + Ordered dictionary of the properties of the component array. + """ + # From 2024R1, array information can be loaded from a CSV, and this method is not needed. + if self.__app.settings.aedt_version > "2023.2": # pragma: no cover + self.export_array_info(array_path=None) + else: + self.__app.save_project() + new_properties = self.properties + # TODO : post_processing_cells property can not be retrieved, so if the length of the components and the + # property is different, the method will reset the property. + if len(new_properties["component"]) != len(self.post_processing_cells): + self.__post_processing_cells = {} + new_properties = self.properties + return new_properties + + @pyaedt_function_handler() + def delete(self): + """Delete the component array. + + References + ---------- + + >>> oModule.DeleteArray + + """ + self.__app.omodelsetup.DeleteArray() + del self.__app.component_array[self.name] + self.__app.component_array_names = list(self.__app.get_oo_name(self.__app.odesign, "Model")) + + @pyaedt_function_handler() + def export_array_info(self, array_path=None): # pragma: no cover + """Export array information to a CSV file. + + Returns + ------- + str + Path of the CSV file. + + References + ---------- + + >>> oModule.ExportArray + + """ + if self.__app.settings.aedt_version < "2024.1": # pragma: no cover + self.logger.warning("This feature is not available in {}.".format(str(self.__app.settings.aedt_version))) + return False + + if not array_path: # pragma: no cover + array_path = os.path.join(self.__app.toolkit_directory, "array_info.csv") + self.__app.omodelsetup.ExportArray(self.name, array_path) + return array_path + + @pyaedt_function_handler() + def parse_array_info_from_csv(self, csv_file): # pragma: no cover + """Parse component array information from the CSV file. + + Parameters + ---------- + csv_file : str + Name of the CSV file. + + Returns + ------- + dict + Ordered dictionary of the properties of the component array. + + Examples + -------- + >>> from pyaedt import Hfss + >>> aedtapp = Hfss(projectname="Array.aedt") + >>> array_names = aedtapp.component_array_names[0] + >>> array = aedtapp.component_array[array_names[0]] + >>> array_csv = array.export_array_info() + >>> array_info = array.array_info_parser(array_csv) + """ + + info = read_csv(csv_file) + if not info: + self.logger.error("Data from CSV file is not loaded.") + return False + + components = {} + array_matrix = [] + array_matrix_rotation = [] + array_matrix_active = [] + + # Components + start_str = ["Component Index", "Component Name"] + end_str = ["Source Row", "Source Column", "Source Name", "Magnitude", "Phase"] + + capture_data = False + line_cont = 0 + for element_data in info: + if element_data == start_str: + capture_data = True + elif element_data == end_str: + break + elif capture_data: + components[int(float(element_data[0]))] = element_data[1] + line_cont += 1 + + # Array matrix + start_str = ["Array", "Format: Component_index:Rotation_angle:Active_or_Passive"] + capture_data = False + + for element_data in info[line_cont + 1 :]: + if capture_data: + rows = element_data[:-1] + component_index = [] + rotation = [] + active_passive = [] + + for row in rows: + split_elements = row.split(":") + + # Check for non-empty strings + if split_elements[0]: + component_index.append(int(split_elements[0])) + else: + component_index.append(-1) + + # Some elements might not have the rotation and active/passive status, so we check for their + # existence + if split_elements[0] and len(split_elements) > 1: + string_part = re.findall("[a-zA-Z]+", split_elements[1]) + if string_part and string_part[0] == "deg": + rot = re.findall(r"[+-]?\d+\.\d+", split_elements[1]) + rotation.append(int(float(rot[0]))) + if len(split_elements) > 2: + active_passive.append(bool(int(split_elements[2]))) + else: + active_passive.append(True) + else: + active_passive.append(False) + rotation.append(0) + elif split_elements[0]: + active_passive.append(True) + rotation.append(0) + else: + active_passive.append(False) + rotation.append(0) + + array_matrix.append(component_index) + array_matrix_rotation.append(rotation) + array_matrix_active.append(active_passive) + elif element_data == start_str: + capture_data = True + res = OrderedDict() + res["component"] = components + res["active"] = array_matrix_active + res["rotation"] = array_matrix_rotation + res["cells"] = array_matrix + return res + + @pyaedt_function_handler() + def edit_array(self): + """Edit component array. + + Returns + ------- + bool + ``True`` when successful, ``False`` when failed. + + References + ---------- + + >>> oModule.EditArray + """ + + args = [ + "NAME:" + self.name, + "Name:=", + self.name, + "UseAirObjects:=", + True, + "RowPrimaryBnd:=", + self.a_vector_name, + "ColumnPrimaryBnd:=", + self.b_vector_name, + "RowDimension:=", + self.a_size, + "ColumnDimension:=", + self.b_size, + "Visible:=", + self.visible, + "ShowCellNumber:=", + self.show_cell_number, + "RenderType:=", + self.render_id, + "Padding:=", + self.padding_cells, + "ReferenceCSID:=", + self.__cs_id, + ] + + cells = ["NAME:Cells"] + component_info = {} + cells_obj = self.cells[:] + for row, row_info in enumerate(cells_obj, start=1): + for col, col_info in enumerate(row_info, start=1): + name = col_info.component + component_info.setdefault(name, []).append([row, col]) + + for component_name, component_cells in component_info.items(): + if component_name: + cells.append(component_name + ":=") + component_cells_str = ", ".join(str(item) for item in component_cells) + cells.append([component_cells_str]) + + rotations = ["NAME:Rotation"] + component_rotation = {} + for row, row_info in enumerate(cells_obj, start=1): + for col, col_info in enumerate(row_info, start=1): + component_rotation.setdefault(col_info.rotation, []).append([row, col]) + + for rotation, rotation_cells in component_rotation.items(): + rotations.append(str(rotation) + " deg:=") + component_cells_str = ", ".join(str(item) for item in rotation_cells) + rotations.append([component_cells_str]) + + args.append(cells) + args.append(rotations) + + args.append("Active:=") + + component_active = [] + for row, row_info in enumerate(cells_obj, start=1): + for col, col_info in enumerate(row_info, start=1): + if col_info.is_active: + component_active.append([row, col]) + + if component_active: + args.append(", ".join(str(item) for item in component_active)) + else: # pragma: no cover + args.append("All") + + post = ["NAME:PostProcessingCells"] + for component_name, values in self.post_processing_cells.items(): + post.append(component_name + ":=") + post.append([str(values[0]), str(values[1])]) + args.append(post) + args.append("Colors:=") + col = [] + args.append(col) + self.__app.omodelsetup.EditArray(args) + return True + + @pyaedt_function_handler() + def get_cell(self, row, col): + """Get cell object corresponding to a row and column. + + Returns + ------- + :class:`pyaedt.modeler.cad.component_array.CellArray` + + """ + return self[row, col] + + @pyaedt_function_handler() + def lattice_vector(self): + """Get model lattice vector. + + Returns + ------- + list + List of starting point coordinates paired with ending point coordinates. + + References + ---------- + >>> oModule.GetLatticeVectors() + + """ + return self.__app.omodelsetup.GetLatticeVectors() + + @pyaedt_function_handler() + def __get_properties_from_aedt(self): + """Get array properties from an AEDT file. + + Returns + ------- + dict + Ordered dictionary of the properties of the component array. + + """ + props = self.__app.design_properties + component_id = {} + user_defined_models = props["ModelSetup"]["GeometryCore"]["GeometryOperations"]["UserDefinedModels"][ + "UserDefinedModel" + ] + if not isinstance(user_defined_models, list): + user_defined_models = [user_defined_models] + for component_defined in user_defined_models: + component_id[component_defined["ID"]] = component_defined["Attributes"]["Name"] + + components_map = props["ArrayDefinition"]["ArrayObject"]["ComponentMap"] + components = {} + for c in components_map: + m = re.search(r"'(\d+)'=(\d+)", c) + components[int(m.group(1))] = component_id[int(m.group(2))] + res = OrderedDict() + res["component"] = components + res["active"] = props["ArrayDefinition"]["ArrayObject"]["Active"]["matrix"] + res["rotation"] = props["ArrayDefinition"]["ArrayObject"]["Rotation"]["matrix"] + res["cells"] = props["ArrayDefinition"]["ArrayObject"]["Cells"]["matrix"] + return res + + @pyaedt_function_handler() + def __map_coordinate_system_to_id(self): + """Map coordinate system to ID. + + Returns + ------- + dict + Coordinate system ID. + """ + res = {"Global": 1} + if self.__app.design_properties and "ModelSetup" in self.__app.design_properties: # pragma: no cover + cs = self.__app.design_properties["ModelSetup"]["GeometryCore"]["GeometryOperations"]["CoordinateSystems"] + for _, val in cs.items(): + try: + if isinstance(val, dict): + val = [val] + for ite in val: + name = ite["Attributes"]["Name"] + cs_id = ite["ID"] + res[name] = cs_id + except AttributeError: + pass + return res + + +class CellArray(object): + """Manages object attributes for a 3D component and a user-defined model. + + Parameters + ---------- + row : int + Row index of the cell. + col : int + Column index of the cell. + array_props : dict + Dictionary containing the properties of the array. + component_names : list + List of component names in the array. + array_obj : class:`pyaedt.modeler.cad.component_array.ComponentArray` + Instance of the array containing the cell. + + """ + + def __init__(self, row, col, array_props, component_names, array_obj): + self.__row = row + 1 + self.__col = col + 1 + self.__array_obj = array_obj + self.__cell_props = OrderedDict( + { + "component": array_props["cells"][row][col], + "active": array_props["active"][row][col], + "rotation": array_props["rotation"][row][col], + } + ) + self.__rotation = self.__cell_props["rotation"] + self.__is_active = self.__cell_props["active"] + + component_index = self.__cell_props["component"] + if component_index == -1: + self.__component = None + else: + self.__component = component_names[component_index] + + @property + def rotation(self): + """Rotation value of the cell object.""" + return self.__rotation + + @rotation.setter + def rotation(self, val): + if val in [0, 90, 180, 270]: + self.__rotation = val + self.__array_obj.update_cells = False + self.__array_obj.edit_array() + self.__array_obj.update_cells = True + else: + self.__array_obj.logger.error("Rotation must be an integer. 0, 90, 180, and 270 degrees are available.") + + @property + def component(self): + """Component name of the cell object.""" + return self.__component + + @component.setter + def component(self, val): + component_names = self.__array_obj.component_names + if val in component_names.values() or val is None: + self.__array_obj.update_cells = False + if val is None: + post_processing_cells = self.__array_obj.post_processing_cells + for values in post_processing_cells: + if (values[0], values[1]) == (self.__row, self.__col): + flat_cell_list = [item for sublist in self.__array_obj.cells for item in sublist] + for cell in flat_cell_list: + if cell.component == self.component and cell.col != self.__col or cell.row != self.__row: + self.__array_obj.post_processing_cells[self.component] = [cell.row, cell.col] + break + break + self.__component = val + self.__array_obj.edit_array() + self.__array_obj.update_cells = True + else: # pragma: no cover + self.__array_obj.logger.error("Component must be defined.") + + @property + def is_active(self): + """Flag indicating if the cell object is active or passive.""" + return self.__is_active + + @is_active.setter + def is_active(self, val): + if isinstance(val, bool): + self.__is_active = val + self.__array_obj.update_cells = False + self.__array_obj.edit_array() + self.__array_obj.update_cells = True + else: + self.__array_obj.logger.error("Only Boolean type is allowed.") diff --git a/pyaedt/modeler/cad/components_3d.py b/pyaedt/modeler/cad/components_3d.py index d418a7895a9..3d643cfebb1 100644 --- a/pyaedt/modeler/cad/components_3d.py +++ b/pyaedt/modeler/cad/components_3d.py @@ -478,7 +478,7 @@ def delete(self): """ arg = ["NAME:Selections", "Selections:=", self._m_name] self._m_Editor.Delete(arg) - del self._primitives.modeler.user_defined_components[self.name] + del self._primitives.user_defined_components[self.name] self._primitives.cleanup_objects() self.__dict__ = {} @@ -505,7 +505,7 @@ def duplicate_and_mirror(self, position, vector): >>> oEditor.DuplicateMirror """ - return self._primitives.modeler.duplicate_and_mirror( + return self._primitives.duplicate_and_mirror( self.name, position, vector, is_3d_comp=True, duplicate_assignment=True ) @@ -533,11 +533,11 @@ def mirror(self, position, vector): >>> oEditor.Mirror """ if self.is3dcomponent: - if self._primitives.modeler.mirror(self.name, position=position, vector=vector): + if self._primitives.mirror(self.name, position=position, vector=vector): return self else: for part in self.parts: - self._primitives.modeler.mirror(part, position=position, vector=vector) + self._primitives.mirror(part, position=position, vector=vector) return self return False @@ -567,11 +567,11 @@ def rotate(self, cs_axis, angle=90.0, unit="deg"): >>> oEditor.Rotate """ if self.is3dcomponent: - if self._primitives.modeler.rotate(self.name, cs_axis=cs_axis, angle=angle, unit=unit): + if self._primitives.rotate(self.name, cs_axis=cs_axis, angle=angle, unit=unit): return self else: for part in self.parts: - self._primitives.modeler.rotate(part, cs_axis=cs_axis, angle=angle, unit=unit) + self._primitives.rotate(part, cs_axis=cs_axis, angle=angle, unit=unit) return self return False @@ -595,11 +595,11 @@ def move(self, vector): >>> oEditor.Move """ if self.is3dcomponent: - if self._primitives.modeler.move(self.name, vector=vector): + if self._primitives.move(self.name, vector=vector): return self else: for part in self.parts: - self._primitives.modeler.move(part, vector=vector) + self._primitives.move(part, vector=vector) return self return False @@ -631,7 +631,7 @@ def duplicate_around_axis(self, cs_axis, angle=90, nclones=2, create_new_objects """ if self.is3dcomponent: - ret, added_objects = self._primitives.modeler.duplicate_around_axis( + ret, added_objects = self._primitives.duplicate_around_axis( self.name, cs_axis, angle, nclones, create_new_objects, True ) return added_objects @@ -670,10 +670,8 @@ def duplicate_along_line(self, vector, nclones=2, attach_object=False, **kwargs) attach_object = kwargs["attachObject"] if self.is3dcomponent: - old_component_list = self._primitives.modeler.user_defined_component_names - _, added_objects = self._primitives.modeler.duplicate_along_line( - self.name, vector, nclones, attach_object, True - ) + old_component_list = self._primitives.user_defined_component_names + _, added_objects = self._primitives.duplicate_along_line(self.name, vector, nclones, attach_object, True) return list(set(added_objects) - set(old_component_list)) self._logger.warning("User-defined models do not support this operation.") return False diff --git a/pyaedt/modeler/cad/elements3d.py b/pyaedt/modeler/cad/elements3d.py index 07beef5235a..06a86996415 100644 --- a/pyaedt/modeler/cad/elements3d.py +++ b/pyaedt/modeler/cad/elements3d.py @@ -232,11 +232,11 @@ def position(self): except Exception as e: return None - def __repr__(self): - return "Vertex " + str(self.id) - def __str__(self): - return "Vertex " + str(self.id) + return str(self.id) + + def __repr__(self): + return str(self.id) class EdgePrimitive(EdgeTypePrimitive, object): @@ -267,10 +267,12 @@ def segment_info(self): ------- list Segment info if available.""" + autosave = self._object3d._primitives._app.odesktop.GetAutosaveEnabled() try: self.oeditor.GetChildNames() except: # pragma: no cover return {} + self._object3d._primitives._app.autosave_disable() ll = list(self.oeditor.GetObjectsInGroup("Lines")) self.oeditor.CreateObjectFromEdges( ["NAME:Selections", "Selections:=", self._object3d.name, "NewPartsModelFlag:=", "NonModel"], @@ -296,6 +298,7 @@ def segment_info(self): segment[prop] = val self._object3d._primitives._odesign.Undo() self._object3d._primitives._odesign.Undo() + self._object3d._primitives._app.odesktop.EnableAutoSave(True if autosave else False) return segment @property @@ -342,13 +345,6 @@ def midpoint(self): """ return [float(i) for i in self.oeditor.GetEdgePositionAtNormalizedParameter(self.id, 0.5)] - # if len(self.vertices) == 2: - # midpoint = GeometryOperators.get_mid_point(self.vertices[0].position, self.vertices[1].position) - # return list(midpoint) - # elif len(self.vertices) == 1: - # return self.vertices[0].position - # else: - # return [float(i) for i in self.oeditor.GetEdgePositionAtNormalizedParameter(self.id, 0)] @property def length(self): @@ -370,11 +366,11 @@ def length(self): except: return False - def __repr__(self): - return "EdgeId " + str(self.id) - def __str__(self): - return "EdgeId " + str(self.id) + return str(self.id) + + def __repr__(self): + return str(self.id) @pyaedt_function_handler() def create_object(self, non_model=False): @@ -424,11 +420,11 @@ def move_along_normal(self, offset=1.0): class FacePrimitive(object): """Contains the face object within the AEDT Desktop Modeler.""" - def __repr__(self): - return "FaceId " + str(self.id) - def __str__(self): - return "FaceId " + str(self.id) + return str(self.id) + + def __repr__(self): + return str(self.id) def __init__(self, object3d, obj_id): """ @@ -440,6 +436,7 @@ def __init__(self, object3d, obj_id): """ self._id = obj_id self._object3d = object3d + self._is_planar = None @property def oeditor(self): @@ -567,11 +564,15 @@ def is_planar(self): ------- bool """ - + if self._is_planar is not None: + return self._is_planar try: self.oeditor.GetFaceCenter(self.id) + self._is_planar = True return True except: + self.logger.clear_messages() + self._is_planar = False return False @property @@ -595,10 +596,10 @@ def center(self): >>> oEditor.GetFaceCenter """ - try: + if self.is_planar: return [float(i) for i in self.oeditor.GetFaceCenter(self.id)] - except: # pragma: no cover - self.logger.clear_messages() + else: # pragma: no cover + # self.logger.clear_messages() vtx = self.vertices[:] if len(vtx) > 1: return GeometryOperators.get_polygon_centroid([pos.position for pos in vtx]) @@ -607,7 +608,7 @@ def center(self): try: edge = self.edges[0] except IndexError: - self.logger.error("At least one edge is needed to compute face center.") + # self.logger.error("At least one edge is needed to compute face center.") return centroid = GeometryOperators.get_polygon_centroid( [ @@ -757,7 +758,7 @@ def is_on_bounding(self, tol=1e-9): """ b = [float(i) for i in list(self.oeditor.GetModelBoundingBox())] c = self.center - if ( + if c and ( abs(c[0] - b[0]) < tol or abs(c[1] - b[1]) < tol or abs(c[2] - b[2]) < tol diff --git a/pyaedt/modeler/cad/object3d.py b/pyaedt/modeler/cad/object3d.py index 599f29ed725..592e3303c66 100644 --- a/pyaedt/modeler/cad/object3d.py +++ b/pyaedt/modeler/cad/object3d.py @@ -82,6 +82,8 @@ def __init__(self, primitives, name=None): self._object_type = None self._mass = 0.0 self._volume = 0.0 + self._faces = [] + self._face_ids = [] @pyaedt_function_handler() def _bounding_box_unmodel(self): @@ -363,11 +365,15 @@ def faces(self): """ if self.object_type == "Unclassified": return [] - faces = [] + face_ids = list(self._oeditor.GetFaceIDs(self.name)) + if set(face_ids) == set(self._face_ids): + return self._faces + self._face_ids = face_ids + self._faces = [] for face in list(self._oeditor.GetFaceIDs(self.name)): face = int(face) - faces.append(FacePrimitive(self, face)) - return faces + self._faces.append(FacePrimitive(self, face)) + return self._faces @property def faces_on_bounding_box(self): @@ -1389,8 +1395,8 @@ def unite(self, object_list): >>> oEditor.Unite """ - unite_list = [self.name] + self._primitives.modeler.convert_to_selections(object_list, return_list=True) - self._primitives.modeler.unite(unite_list) + unite_list = [self.name] + self._primitives.convert_to_selections(object_list, return_list=True) + self._primitives.unite(unite_list) return self @pyaedt_function_handler() @@ -1414,8 +1420,8 @@ def intersect(self, theList, keep_originals=False): >>> oEditor.Intersect """ - theList = [self.name] + self._primitives.modeler.convert_to_selections(theList, return_list=True) - self._primitives.modeler.intersect(theList, keep_originals) + theList = [self.name] + self._primitives.convert_to_selections(theList, return_list=True) + self._primitives.intersect(theList, keep_originals) return self @pyaedt_function_handler() @@ -1442,7 +1448,7 @@ def split(self, plane, sides="Both"): >>> oEditor.Split """ - return self._primitives.modeler.split(self.name, plane, sides) + return self._primitives.split(self.name, plane, sides) @pyaedt_function_handler() def mirror(self, position, vector, duplicate=False): @@ -1468,7 +1474,7 @@ def mirror(self, position, vector, duplicate=False): >>> oEditor.Mirror """ - if self._primitives.modeler.mirror(self.id, position=position, vector=vector, duplicate=duplicate): + if self._primitives.mirror(self.id, position=position, vector=vector, duplicate=duplicate): return self return False @@ -1497,7 +1503,7 @@ def rotate(self, cs_axis, angle=90.0, unit="deg"): >>> oEditor.Rotate """ - if self._primitives.modeler.rotate(self.id, cs_axis=cs_axis, angle=angle, unit=unit): + if self._primitives.rotate(self.id, cs_axis=cs_axis, angle=angle, unit=unit): return self return False @@ -1523,7 +1529,7 @@ def move(self, vector): ---------- >>> oEditor.Move """ - if self._primitives.modeler.move(self.id, vector=vector): + if self._primitives.move(self.id, vector=vector): return self return False @@ -1552,9 +1558,7 @@ def duplicate_around_axis(self, cs_axis, angle=90, nclones=2, create_new_objects >>> oEditor.DuplicateAroundAxis """ - ret, added_objects = self._primitives.modeler.duplicate_around_axis( - self, cs_axis, angle, nclones, create_new_objects - ) + _, added_objects = self._primitives.duplicate_around_axis(self, cs_axis, angle, nclones, create_new_objects) return added_objects @pyaedt_function_handler() @@ -1581,7 +1585,7 @@ def duplicate_along_line(self, vector, nclones=2, attachObject=False): >>> oEditor.DuplicateAlongLine """ - ret, added_objects = self._primitives.modeler.duplicate_along_line(self, vector, nclones, attachObject) + _, added_objects = self._primitives.duplicate_along_line(self, vector, nclones, attachObject) return added_objects @pyaedt_function_handler() @@ -1609,7 +1613,7 @@ def sweep_along_vector(self, sweep_vector, draft_angle=0, draft_type="Round"): >>> oEditor.SweepAlongVector """ - self._primitives.modeler.sweep_along_vector(self, sweep_vector, draft_angle, draft_type) + self._primitives.sweep_along_vector(self, sweep_vector, draft_angle, draft_type) return self @pyaedt_function_handler() @@ -1643,7 +1647,7 @@ def sweep_along_path( >>> oEditor.SweepAlongPath """ - self._primitives.modeler.sweep_along_path( + self._primitives.sweep_along_path( self, sweep_object, draft_angle, draft_type, is_check_face_intersection, twist_angle ) return self @@ -1672,7 +1676,7 @@ def sweep_around_axis(self, cs_axis, sweep_angle=360, draft_angle=0): >>> oEditor.SweepAroundAxis """ - self._primitives.modeler.sweep_around_axis(self, cs_axis, sweep_angle, draft_angle) + self._primitives.sweep_around_axis(self, cs_axis, sweep_angle, draft_angle) return self @pyaedt_function_handler() @@ -1699,7 +1703,7 @@ def section(self, plane, create_new=True, section_cross_object=False): >>> oEditor.Section """ - self._primitives.modeler.section(self, plane, create_new, section_cross_object) + self._primitives.section(self, plane, create_new, section_cross_object) return self @pyaedt_function_handler() @@ -1717,7 +1721,7 @@ def clone(self): >>> oEditor.Clone """ - new_obj_tuple = self._primitives.modeler.clone(self.id) + new_obj_tuple = self._primitives.clone(self.id) success = new_obj_tuple[0] assert success, "Could not clone the object {}.".format(self.name) new_name = new_obj_tuple[1][0] @@ -1746,7 +1750,7 @@ def subtract(self, tool_list, keep_originals=True): >>> oEditor.Subtract """ - self._primitives.modeler.subtract(self.name, tool_list, keep_originals) + self._primitives.subtract(self.name, tool_list, keep_originals) return self @pyaedt_function_handler() @@ -1883,10 +1887,4 @@ def _change_property(self, vPropChange): return self._primitives._change_geometry_property(vPropChange, self._m_name) def __str__(self): - return """ - name: {} id: {} object_type: {} - """.format( - self.name, - self.id, - self._object_type, - ) + return self.name diff --git a/pyaedt/modeler/cad/polylines.py b/pyaedt/modeler/cad/polylines.py index 14f76457ec5..6cd574fc210 100644 --- a/pyaedt/modeler/cad/polylines.py +++ b/pyaedt/modeler/cad/polylines.py @@ -198,7 +198,7 @@ def __init__( if not isinstance(position_list, list): raise TypeError("The position_list argument must be a list of positions with at least one point.") # convert the points if they are defined as modeler.Position - if isinstance(position_list[0], self._primitives._app.modeler.Position): + if isinstance(position_list[0], self._primitives.Position): position_list = [[i for i in j] for j in position_list] if not segment_type: if len(position_list) < 2: diff --git a/pyaedt/modeler/circuits/PrimitivesEmit.py b/pyaedt/modeler/circuits/PrimitivesEmit.py index e3ce1f18486..a9843eb5426 100644 --- a/pyaedt/modeler/circuits/PrimitivesEmit.py +++ b/pyaedt/modeler/circuits/PrimitivesEmit.py @@ -86,7 +86,8 @@ def design_type(self): @pyaedt_function_handler() def __getitem__(self, compname): - """ + """Get a component by its name. + Parameters ---------- compname : str diff --git a/pyaedt/modeler/modeler2d.py b/pyaedt/modeler/modeler2d.py index ebdbfe77bf4..cf5f0d47848 100644 --- a/pyaedt/modeler/modeler2d.py +++ b/pyaedt/modeler/modeler2d.py @@ -2,7 +2,6 @@ from warnings import warn from pyaedt.generic.general_methods import pyaedt_function_handler -from pyaedt.modeler.cad.Modeler import GeometryModeler from pyaedt.modeler.cad.Modeler import Modeler from pyaedt.modeler.cad.Primitives2D import Primitives2D @@ -31,7 +30,7 @@ def oeditor(self): return self._app.oeditor -class Modeler2D(GeometryModeler, Primitives2D): +class Modeler2D(Primitives2D): """Provides the Modeler 2D application interface. This class is inherited in the caller application and is accessible through the modeler variable @@ -49,8 +48,7 @@ class Modeler2D(GeometryModeler, Primitives2D): """ def __init__(self, application): - GeometryModeler.__init__(self, application, is3d=False) - Primitives2D.__init__(self) + Primitives2D.__init__(self, application) self._primitives = self self.logger.info("Modeler2D class has been initialized!") @@ -135,11 +133,11 @@ def radial_split_2D(self, radius, name): ``True`` when successful, ``False`` when failed. """ - cir = self.modeler.create_circle([0, 0, 0], 3, name=name + "_split", matname="vacuum") + cir = self.create_circle([0, 0, 0], 3, name=name + "_split", matname="vacuum") self.oeditor.Copy(["NAME:Selections", "Selections:=", name]) - objects = [i for i in self.modeler.object_names] + objects = [i for i in self.object_names] self.oeditor.Paste() - name1 = [i for i in self.modeler.object_names if i not in objects] + name1 = [i for i in self.object_names if i not in objects] self.intersect([name1[0], cir.name], keep_originals=False) self.subtract(name, name1[0]) return True diff --git a/pyaedt/modeler/modeler3d.py b/pyaedt/modeler/modeler3d.py index 48ed3f6288b..7ebb7fccb7a 100644 --- a/pyaedt/modeler/modeler3d.py +++ b/pyaedt/modeler/modeler3d.py @@ -10,12 +10,11 @@ from pyaedt.generic.general_methods import GrpcApiError from pyaedt.generic.general_methods import generate_unique_name from pyaedt.generic.general_methods import pyaedt_function_handler -from pyaedt.modeler.cad.Modeler import GeometryModeler from pyaedt.modeler.cad.Primitives3D import Primitives3D from pyaedt.modeler.geometry_operators import GeometryOperators -class Modeler3D(GeometryModeler, Primitives3D, object): +class Modeler3D(Primitives3D): """Provides the Modeler 3D application interface. @@ -35,8 +34,7 @@ class Modeler3D(GeometryModeler, Primitives3D, object): def __init__(self, application): application.logger.reset_timer() - GeometryModeler.__init__(self, application, is3d=True) - Primitives3D.__init__(self) + Primitives3D.__init__(self, application) application.logger.info_timer("Modeler3D class has been initialized!") def __get__(self, instance, owner): @@ -122,8 +120,9 @@ def create_3dcomponent( password_type : str, optional Password type. Options are ``UserSuppliedPassword`` and ``InternalPassword``. The default is ``UserSuppliedPassword``. - hide_contents : bool, optional - Whether to hide contents. The default is ``False``. + hide_contents : bool or list, optional + List of object names to hide when the component is encrypted. + If set to an empty list or ``False``, all objects are visible. replace_names : bool, optional Whether to replace objects and material names. The default is ``False``. @@ -163,6 +162,7 @@ def create_3dcomponent( return False if component_outline not in ["BoundingBox", "None"]: return False + hide_contents_flag = is_encrypted and isinstance(hide_contents, list) arg = [ "NAME:CreateData", "ComponentName:=", @@ -202,7 +202,7 @@ def create_3dcomponent( "PasswordType:=", password_type, "HideContents:=", - hide_contents, + hide_contents_flag, "ReplaceNames:=", replace_names, "ComponentOutline:=", @@ -211,9 +211,7 @@ def create_3dcomponent( if object_list: objs = object_list else: - native_objs = [ - obj.name for _, v in self.modeler.user_defined_components.items() for _, obj in v.parts.items() - ] + native_objs = [obj.name for _, v in self.user_defined_components.items() for _, obj in v.parts.items()] objs = [obj for obj in self.object_names if obj not in native_objs] if not native_components and native_objs: self.logger.warning( @@ -224,7 +222,11 @@ def create_3dcomponent( if "CreateRegion:1" in self.oeditor.GetChildObject(el).GetChildNames(): objs.remove(el) arg.append("IncludedParts:="), arg.append(objs) - arg.append("HiddenParts:="), arg.append([]) + arg.append("HiddenParts:=") + if not hide_contents_flag: + arg.append([]) + else: + arg.append(hide_contents) if included_cs: allcs = included_cs else: @@ -296,7 +298,7 @@ def create_3dcomponent( if isinstance(item, str): mesh_comp.append(item) else: - mesh_comp.append(self.modeler.objects[item].name) + mesh_comp.append(self.objects[item].name) if all(included_obj in objs for included_obj in mesh_comp): used_mesh_ops.append(self._app.mesh.meshoperations[mesh].name) arg2.append("MeshOperations:="), arg2.append(used_mesh_ops) @@ -441,9 +443,7 @@ def replace_3dcomponent( if object_list: objs = object_list else: - native_objs = [ - obj.name for _, v in self.modeler.user_defined_components.items() for _, obj in v.parts.items() - ] + native_objs = [obj.name for _, v in self.user_defined_components.items() for _, obj in v.parts.items()] objs = [obj for obj in self.object_names if obj not in native_objs] if native_objs: self.logger.warning( @@ -525,7 +525,7 @@ def replace_3dcomponent( if isinstance(item, str): mesh_comp.append(item) else: - mesh_comp.append(self.modeler.objects[item].name) + mesh_comp.append(self.objects[item].name) if all(included_obj in objs for included_obj in mesh_comp): used_mesh_ops.append(self._app.mesh.meshoperations[mesh].name) arg2.append("MeshOperations:="), arg2.append(used_mesh_ops) @@ -1339,7 +1339,7 @@ def objects_segmentation( segmentation_thickness = obj_axial_length / segments_number elif segmentation_thickness: segments_number = round(obj_axial_length / segmentation_thickness) - face_object = self.modeler.create_object_from_face(obj.bottom_face_z) + face_object = self.create_object_from_face(obj.bottom_face_z) # segment sheets segment_sheets[obj.name] = face_object.duplicate_along_line( ["0", "0", segmentation_thickness], segments_number @@ -1427,7 +1427,7 @@ def change_region_padding(self, padding_data, padding_type, direction=None, regi self.logger.error("{} does not exist.".format(region)) return False create_region_name = region.GetChildNames()[0] - self.modeler.oeditor.ChangeProperty( + self.oeditor.ChangeProperty( list( [ "NAME:AllTabs", diff --git a/pyaedt/modules/Material.py b/pyaedt/modules/Material.py index 86bc7c9b9b4..a768baacb9a 100644 --- a/pyaedt/modules/Material.py +++ b/pyaedt/modules/Material.py @@ -366,7 +366,7 @@ def value(self): def value(self, val): if isinstance(val, list) and isinstance(val[0], list): self._property_value[0].value = val - self.set_non_linear() + self._set_non_linear() elif isinstance(val, list) and self.type != "vector": if len(val) == 3: self.type = "anisotropic" @@ -825,8 +825,9 @@ def add_thermal_modifier_closed_form( return self._material.update() @pyaedt_function_handler() - def set_non_linear(self, x_unit=None, y_unit=None): - """Enable Non Linear Material. + def _set_non_linear(self, x_unit=None, y_unit=None): + """Enable non-linear material. + This is a private method, and should not be used directly. Parameters ---------- @@ -839,6 +840,17 @@ def set_non_linear(self, x_unit=None, y_unit=None): ------- bool `True` if succeeded. + + Examples + -------- + >>> from pyaedt import Hfss + >>> hfss = Hfss(specified_version="2023.2") + >>> B_value = [0.0, 0.1, 0.3, 0.4, 0.48, 0.55, 0.6, 0.61, 0.65] + >>> H_value = [0.0, 500.0, 1000.0, 1500.0, 2000.0, 2500.0, 3500.0, 5000.0, 10000.0] + >>> mat = hfss.materials.add_material("newMat") + >>> b_h_dataset = [[b, h] for b, h in zip(B_value, H_value)] + >>> mat.permeability = b_h_dataset + """ if self.name not in ["permeability", "conductivity", "permittivity"]: self.logger.error( @@ -1120,6 +1132,14 @@ def __init__(self, materials, name, props=None): self.mod_since_lib = self._props["ModSinceLib"] del self._props["ModSinceLib"] + @property + def is_used(self): + """Checks if a project material is in use.""" + is_used = self._omaterial_manager.IsUsed(self.name) + if is_used == 0: + return False + return True + @property def coordinate_system(self): """Material coordinate system.""" @@ -2266,6 +2286,52 @@ def is_dielectric(self, threshold=100000): """ return not self.is_conductor(threshold) + @pyaedt_function_handler + def set_djordjevic_sarkar_model( + self, + dk=4, + df=0.02, + i_freq=1e9, + sigma_dc=1e-12, + freq_hi=159.15494e9, + ): + """Set Djordjevic-Sarkar model. + + Parameters + ---------- + dk : int, float, str, optional + Dielectric constant at input frequency. + df : int, float, str, optional + Loss tangent at input frequency. + i_freq : int, float, optional. + Input frequency in Hz. + sigma_dc : int, float, optional + Conductivity at DC. + freq_hi : int, float, optional + High Frequency corner in Hz. + + Returns + ------- + bool + ``True`` if successful, ``False`` otherwise. + """ + + # K = f"({dk} * {df} - {sigma_dc} / (2 * pi * {i_freq} * e0)) / atan({freq_hi} / {i_freq})" + K = "({} * {} - {} / (2 * pi * {} * e0)) / atan({} / {})".format(dk, df, sigma_dc, i_freq, freq_hi, i_freq) + epsilon_inf = "({} - {} / 2 * ln({}**2 / {}**2 + 1))".format(dk, K, freq_hi, i_freq) + freq_low = "({} / exp(10 * {} * {} / ({})))".format(freq_hi, df, epsilon_inf, K) + + ds_er = "{} + {} / 2 * ln(({}**2 + Freq**2) / ({}**2 + Freq**2))".format(epsilon_inf, K, freq_hi, freq_low) + cond = "{} + 2 * pi * Freq * e0 * ({}) * (atan(Freq / ({})) - atan(Freq / {}))".format( + sigma_dc, K, freq_low, freq_hi + ) + # ds_tande = "{} / (e0 * {} * 2 * pi * Freq)".format(cond, ds_er) + + self.conductivity = cond + self.permittivity = ds_er + + return self.update() + @pyaedt_function_handler() def update(self): """Update the material in AEDT. diff --git a/pyaedt/modules/MeshIcepak.py b/pyaedt/modules/MeshIcepak.py index fd6510e54e5..2c9870a5b0d 100644 --- a/pyaedt/modules/MeshIcepak.py +++ b/pyaedt/modules/MeshIcepak.py @@ -697,18 +697,61 @@ def add_priority(self, entity_type, obj_list=None, comp_name=None, priority=3): self._priorities_args.append(prio) args += self._priorities_args elif entity_type == 2: - prio = [ - "NAME:PriorityListParameters", - "EntityType:=", - "Component", - "EntityList:=", - comp_name, - "PriorityNumber:=", - i, - "PriorityListType:=", - "3D", - ] - self._priorities_args.append(prio) + o = self.modeler.user_defined_components[comp_name] + if (all(part.is3d for part in o.parts.values()) is False) and ( + any(part.is3d for part in o.parts.values()) is True + ): + prio_3d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "3D", + ] + prio_2d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "2D", + ] + self._priorities_args.append(prio_3d) + self._priorities_args.append(prio_2d) + elif all(part.is3d for part in o.parts.values()) is True: + prio_3d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "3D", + ] + self._priorities_args.append(prio_3d) + else: + prio_2d = [ + "NAME:PriorityListParameters", + "EntityType:=", + "Component", + "EntityList:=", + comp_name, + "PriorityNumber:=", + i, + "PriorityListType:=", + "2D", + ] + self._priorities_args.append(prio_2d) + args += self._priorities_args self.modeler.oeditor.UpdatePriorityList(["NAME:UpdatePriorityListData"]) self.modeler.oeditor.UpdatePriorityList(args) diff --git a/pyaedt/sbrplus/hdm_parser.py b/pyaedt/sbrplus/hdm_parser.py index c3ea95e6179..444ea9b7054 100644 --- a/pyaedt/sbrplus/hdm_parser.py +++ b/pyaedt/sbrplus/hdm_parser.py @@ -26,7 +26,7 @@ class Parser: """ def __init__(self, filename): - """Initializes parser object with the interpreted header and a pointer to the binary data""" + """Initialize parser object with the interpreted header and a pointer to the binary data.""" self.parser_types = {} self.parser_flags = {} self.parser_enums = {} @@ -42,11 +42,11 @@ def __init__(self, filename): self.binarycontent = binarycontent def parse_message(self): - """Parses the binary content of the HDM file""" + """Parse the binary content of the HDM file.""" return self._parse(self.message["type"]) def _parse(self, type_name): - """Generic parser method, dispatches to specialized ones""" + """Use a generic parser method, which dispatches to appropriate and specialized parsers.""" if self.parser_types[type_name]["type"] == "object": return self._parse_object(type_name) elif self.parser_types[type_name]["type"] == "internal": @@ -86,9 +86,9 @@ def _parse_simple_base_type(self, format="i", size=4, how_many=1, final_type=Non def _parse_list(self, type=None, base=None, size=1): """ - Parser for vector or list. 'vector's are to be interpreted in the linear algebra sense, - and converted to numpy.array. 'list's are Python lists. Only simple base types can be - interpreted as a numpy array + Parser for vector or list. A vector is interpreted in the linear algebra sense + and converted to a NumPy array. A list is converted to a Python list. Only simple base types can be + interpreted as a NumPy array. """ assert base != None res = [] @@ -115,7 +115,7 @@ def _parse_list(self, type=None, base=None, size=1): return res def _parse_object(self, name): - """Parser for an object message""" + """Parser for an object message.""" namesdict = {} for l in self.parser_types[name]["layout"]: type_to_parse = l["type"] @@ -163,7 +163,7 @@ def _parse_object(self, name): return self.objects[name](namesdict) def _read_header(self): - """Parses the header and prepares all data structures to interpret the binary content""" + """Parse the header and prepare all data structures to interpret the binary content.""" def build_type(self, key, val): type_i = val["type"] diff --git a/pyproject.toml b/pyproject.toml index 1bdb802b20a..6bd31d0a1f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ tests = [ "matplotlib==3.8.0; python_version > '3.8'", "numpy==1.21.6; python_version <= '3.9'", "numpy==1.26.0; python_version > '3.9'", + "mock", "openpyxl==3.1.2", "osmnx", "pandas==1.3.5; python_version == '3.7'",