{"id":14959607,"url":"https://github.com/rpakishore/ak_sap","last_synced_at":"2025-05-02T12:31:54.455Z","repository":{"id":208528165,"uuid":"721302212","full_name":"rpakishore/ak_sap","owner":"rpakishore","description":"Python Wrapper for SAP2000. Generate/Analyze/Extract complex structural models using python.","archived":false,"fork":false,"pushed_at":"2025-05-01T19:48:49.000Z","size":3517,"stargazers_count":22,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-01T20:34:42.574Z","etag":null,"topics":["building-design","concrete","python","reinforced-concrete","sap2000","steel","streamlit","structural-analysis","structural-engineering"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rpakishore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-11-20T19:22:22.000Z","updated_at":"2025-04-30T21:39:44.000Z","dependencies_parsed_at":"2024-02-13T22:23:20.801Z","dependency_job_id":"e0dd81cc-a0f7-4855-aa9f-d89690ed5cc7","html_url":"https://github.com/rpakishore/ak_sap","commit_stats":{"total_commits":87,"total_committers":1,"mean_commits":87.0,"dds":0.0,"last_synced_commit":"54a3126b1a957ccfd156d6c67e901bcf5ee6bddc"},"previous_names":["rpakishore/ak_sap"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpakishore%2Fak_sap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpakishore%2Fak_sap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpakishore%2Fak_sap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rpakishore%2Fak_sap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rpakishore","download_url":"https://codeload.github.com/rpakishore/ak_sap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252038206,"owners_count":21684652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["building-design","concrete","python","reinforced-concrete","sap2000","steel","streamlit","structural-analysis","structural-engineering"],"created_at":"2024-09-24T13:20:12.737Z","updated_at":"2025-05-02T12:31:54.444Z","avatar_url":"https://github.com/rpakishore.png","language":"Python","readme":"\u003c!--- Heading ---\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eAk_SAP\u003c/h1\u003e\n  \u003cp\u003e\n    \u003ch2\u003ePython wrapper for SAP2000. \u003c/h2\u003e\n\n    Generate, analyze, and extract complex structural models using Python.\n  \u003c/p\u003e\n\n\u003cimg src=\"https://img.shields.io/github/last-commit/rpakishore/ak_sap\"\u003e\u003cimg src=\"https://github.com/rpakishore/ak_sap/actions/workflows/test.yml/badge.svg?branch=main\"\u003e\n\n\u003c/div\u003e\n\u003cbr /\u003e\n\n\u003c!-- Table of Contents --\u003e\n\u003ch2\u003eTable of Contents\u003c/h2\u003e\n\n- [Getting Started](#getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n- [Usage](#usage)\n  - [Initialization](#initialization)\n    - [Example Code](#example-code)\n  - [Working with SAP2000](#working-with-sap2000)\n    - [Basic Operations](#basic-operations)\n  - [Streamlit GUI](#streamlit-gui)\n- [Module Overview](#module-overview)\n  - [Layout Map](#layout-map)\n  - [Initialize](#initialize)\n  - [Parent Level](#parent-level)\n  - [Sub-Modules](#sub-modules)\n    - [Model](#model)\n    - [Element](#element)\n      - [Point](#point)\n      - [Frame](#frame)\n    - [Database](#database)\n    - [Select](#select)\n    - [Loads](#loads)\n      - [Load Patterns](#load-patterns)\n      - [Load Cases](#load-cases)\n      - [Modal](#modal)\n    - [Analyze](#analyze)\n    - [Results](#results)\n    - [Material](#material)\n      - [Rebar](#rebar)\n- [Roadmap](#roadmap)\n- [License](#license)\n- [Contact](#contact)\n\n\u003c!-- Getting Started --\u003e\n## Getting Started\n\nThis section will guide you through the basic setup and first steps with `ak_sap`.\n\n\u003c!-- Prerequisites --\u003e\n### Prerequisites\n\nBefore you begin, ensure you have the following software installed:\n\n1. [**UV**](https://docs.astral.sh/uv/getting-started/installation/): An extremely fast Python package and project manager, written in Rust.\n2. **SAP2000**: Version 24 or higher\n\n\u003c!-- Installation --\u003e\n### Installation\n\nTo install the `ak_sap` package, you can clone the repository and set it up locally:\n\n0. Make sure uv is [installed](https://docs.astral.sh/uv/getting-started/installation/) or install it using pypi as below:\n   ```bash\n   pip install uv\n   ```\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/rpakishore/ak_sap.git\n   cd ak_sap\n   ```\n\n2. Install the necessary dependencies. The package requires `uv` to manage virtual environments:\n   ```bash\n   uv sync\n   ```\n\n   - Alternatively, If you want the basic package without the GUI, run:\n     \n     ```bash\n     uv sync --no-group gui\n     ```\n\n\u003c!-- Usage --\u003e\n## Usage\n\nThis section covers how to use `ak_sap`.\n\n### Initialization\n\nTo start using `ak_sap`, initialize the SAP2000 wrapper as follows:\n\n#### Example Code\n\n```python\nfrom ak_sap import debug, Sap2000Wrapper\n\ndebug(status=False)  # Turn off debug mode\n\n# Initialize SAP2000 connection\nsap = Sap2000Wrapper(attach_to_exist=True)  # Attach to an existing model\n# For a new model, set attach_to_exist=False\n```\n\n### Working with SAP2000\n\nOnce you have set up the SAP2000 wrapper, you can interact with it through various functionalities:\n\n#### Basic Operations\n\n- To hide or unhide the SAP2000 application:\n    ```python\n    sap.hide()  # Hides the SAP2000 window\n    sap.unhide()  # Unhides the SAP2000 window\n    ```\n\n- To get the version of SAP2000:\n    ```python\n    version = sap.version\n    api_version = sap.api_version\n    ```\n\n- To save your current model:\n    ```python\n    sap.save(r'path\\to\\save\\file.sdb')\n    ```\n\n### Streamlit GUI\n\n`ak_sap` provides a Streamlit GUI as an optional feature for ease of access. To use it:\n\n1. Make sure your SAP Model is open.\n2. Run the Streamlit application:\n   ```bash\n   uv run streamlit run Start_Here.py\n   ```\n\n3. Click on \"Attach to Model\" after opening the SAP2000 model you want to control.\n\nFor detailed usage instructions with the GUI, refer to the [GUI Documentation](./documentation/Usage/GUI.md).\n\n\n## Module Overview\n\nHere’s an outline of the core modules within `ak_sap`:\n\n- **Model**: Control changes applied to the overall model.\n- **Object**: Manipulate various structural elements (points, frames, etc.).\n- **Database**: Access and modify database values.\n- **Load**: Manage loads and load cases.\n- **Analyze**: Run analyses and control analysis settings.\n- **Results**: Extract and manipulate results from the analyses.\n- **Material**: Define and manage material properties.\n\nFor comprehensive details about each module and their methods, please check the [Layout Documentation](./documentation/Layout.md).\n\n\u003c!-- Layout START --\u003e\n### Layout Map\n\n```mermaid\ngraph TB\n    %% Styles and classes\n    classDef interface fill:#3498db,stroke:#2980b9,color:white\n    classDef core fill:#2ecc71,stroke:#27ae60,color:white\n    classDef module fill:#f1c40f,stroke:#f39c12,color:black\n    classDef processing fill:#e67e22,stroke:#d35400,color:white\n    classDef utility fill:#95a5a6,stroke:#7f8c8d,color:white\n    classDef api fill:#9b59b6,stroke:#8e44ad,color:white\n\n    %% Interface Layer\n    subgraph Interface\n        GUI[\"GUI Interface\"]:::interface\n        CLI[\"CLI Interface\"]:::interface\n        API[\"Python API\"]:::interface\n    end\n\n    %% Core Layer\n    subgraph Core\n        Wrapper[\"SAP2000 Wrapper\"]:::core\n        Auth[\"Authentication\"]:::core\n    end\n\n    %% SAP2000 API\n    SAP[\"SAP2000 API\"]:::api\n\n    %% Functional Modules Layer\n    subgraph Modules\n        direction TB\n        ModelMgmt[\"Model Management\"]:::module\n        LoadMgmt[\"Load Management\"]:::module\n        ObjMgmt[\"Object Management\"]:::module\n        ResultProc[\"Results Processing\"]:::module\n        MatMgmt[\"Material Management\"]:::module\n        DBOps[\"Database Operations\"]:::module\n        Analysis[\"Analysis Operations\"]:::module\n    end\n\n    %% Modal Analysis Submodules\n    subgraph ModalAnalysis\n        direction TB\n        Modal[\"Modal Analysis\"]:::module\n        Eigen[\"Eigen Analysis\"]:::module\n        Ritz[\"Ritz Analysis\"]:::module\n    end\n\n    %% Relationships\n    GUI \u0026 CLI \u0026 API --\u003e Wrapper\n    Wrapper --\u003e SAP\n    Auth --\u003e Wrapper\n    \n    ModelMgmt \u0026 LoadMgmt \u0026 ObjMgmt \u0026 ResultProc \u0026 MatMgmt \u0026 DBOps \u0026 Analysis \u003c--\u003e Wrapper\n    LoadMgmt --\u003e Modal\n    Modal --\u003e Eigen \u0026 Ritz\n\n    %% Click events for component mapping\n    click GUI \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/gui/\"\n    click CLI \"https://github.com/rpakishore/ak_sap/blob/main/src/ak_sap/cli/cli_app.py\"\n    click Wrapper \"https://github.com/rpakishore/ak_sap/blob/main/src/ak_sap/wrapper.py\"\n    click Auth \"https://github.com/rpakishore/ak_sap/blob/main/src/ak_sap/utils/credentials.py\"\n    click ModelMgmt \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Model/\"\n    click LoadMgmt \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Loads/\"\n    click ObjMgmt \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Object/\"\n    click ResultProc \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Results/\"\n    click MatMgmt \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Material/\"\n    click DBOps \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Database/\"\n    click Analysis \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Analyze/\"\n    click Modal \"https://github.com/rpakishore/ak_sap/tree/main/src/ak_sap/Loads/Modal/\"\n    click Eigen \"https://github.com/rpakishore/ak_sap/blob/main/src/ak_sap/Loads/Modal/Eigen/main.py\"\n    click Ritz \"https://github.com/rpakishore/ak_sap/blob/main/src/ak_sap/Loads/Modal/Ritz/main.py\"\n\n    %% Legend\n    subgraph Legend\n        L1[\"User Interface\"]:::interface\n        L2[\"Core Component\"]:::core\n        L3[\"Module\"]:::module\n        L4[\"Processing\"]:::processing\n        L5[\"Utility\"]:::utility\n        L6[\"External API\"]:::api\n    end\n```\n### Initialize\n\nUsage Examples:\n\n```python\nfrom ak_sap import debug, Sap2000Wrapper\ndebug(status=False)\n\n#Initialize\nsap = Sap2000Wrapper(attach_to_exist=True)      #Attach to existing opened model\nsap = Sap2000Wrapper(attach_to_exist=False)     #Create new blank model from latest SAP2000\n## Create blank model from a custom version of SAP2000\nsap = Sap2000Wrapper(attach_to_exist=False, program_path=r'Path\\to\\SAP2000.exe')\n```\n\n### Parent Level\n\nUsage Examples:\n\n```python\nsap.hide()                                  #Hide the SAP2000 window\nsap.unhide()                                #Unhides SAP2000 window\nsap.ishidden                                #Check if window is hidden\nsap.version                                 #Returns SAP2000 version number\nsap.api_version                             #Returns Sap0API version number\nsap.exit(save=False)                        #Exit the application\n\nsap.save(r'\\Path\\to\\save\\file.sdb')\n```\n\n### Sub-Modules\n#### Model\n\nCollection of methods and attributes that control changes to the model as a whole\n\nUsage Examples:\n\n```python\nsap.Model.units                             #Returns current model units\nsap.Model.units_database                    #Returns Internal Database units\nsap.Model.set_units(value='N_m_C')          #Changes the present units of model\n\nsap.Model.merge_tol                         #retrieves the value of the program auto merge tolerance\nsap.Model.set_merge_tol(0.05)               #sets the program auto merge tolerance\n\nsap.Model.filepath                          #Returns filepath of current file\n\nsap.Model.is_locked                         #Returns if the model is locked\nsap.Model.lock()                            #Locks the model\nsap.Model.unlock()                          #Unlocks the model\n\nsap.Model.project_info                      #Returns a dict of Project Info\n##Set project info, use `.project_info` to see available keys\nsap.Model.set_project_info({'Design Code': 'BCBC 2018'})\n\nsap.Model.logs                              #Retrieve user comments and logs\nsap.Model.set_logs('Add this comment')      #Adds user comments/logs\n```\n\n#### Element\n\nCollection of methods and attributes that apply changes to elements in the model\n\nUsage Examples:\n\n```python\nobject = sap.Object\nobject.move_selected(dx=0.5, dy=0, dz=1.0)  #Move selected object\nobject.copy(dx=0.5, dy=0, dz=0, num=10)#copy selected object\n\n#Mirror and create object\nfrom ak_sap import Coord\npt1 = Coord(x=10, y=20, z=0)\np2 = Coord(x=10, y=30, z=0)\nobject.mirror(plane='Z', coord1=pt1, coord2=pt2)    #Mirror replicate selected obj.\n```\n\n##### Point\n\nManipulate Point Elements\n\nUsage Examples:\n\n```python\npoints = sap.Object.Point\nlen(points)                                 #list number of points in model\npoints.add_by_coord((1,2,3))                #Add point to model\npoints.is_selected(name='1')                #Check if point is selected\npoints.selected()                           #Yields selected points\npoints.all()                                #Lists all defined points\npoints.rename(old_name='1', new_name='1_1') #Rename point\npoints.check_obj_legal(name='1')            #Asserts point's existance\npoints.delete(name='1')                     #Delete point\n\n#Manipilate\npoints.deselect_all()                       #Deselect all points\npoints.select(name='1')                     #Select a single point\npoints.align(axis='Z', ordinate = 100)      #Align selected points\npoints.deselect(name='1')                   #Deselect a single point\n\n# Extrude point to frame\npoints.extrude(\n    point_name='3',\n    property_name='FSec1',\n    dx=0, dy=144, dz=0,\n    num_frames=3\n)\npoints.merge(tolerance=2)                   #Merge points that are within tol\npoints.change_coord(name='1', x=0, y=0, z=0)#Change point coordinate\n\n\n# Assign Loads\npoints.setLoadForce(name=\"1\", loadpattern=\"DEAD\", f1=5, replace=True, coord_sys=\"Global\")\npoints.setLoadDisplacement(name=\"1\", loadpattern=\"Settlement\", u1=5, replace=True, coord_sys=\"Global\")\n\n# Get Loads and Displacement Assigns\npoints.getLoadDisplacement(name=\"3\")\npoints.getLoadForce(name=\"pt1\")\n```\n\n##### Frame\n\nManipulate Frame Elements\n\nUsage Examples:\n\n```python\nframes = sap.Object.Frame\nlen(frames)                                 #list number of frames in model\nframes.is_selected(name='1')                #Check if frame is selected\nframes.selected()                           #Yields selected frames\nframes.all()                                #Lists all defined frames\nframes.rename(old_name='1', new_name='1_1') #Rename frame\nframes.check_obj_legal(name='1')            #Asserts frame's existance\nframes.get_section(name='1')          #Get the assigned Section name\nframes.get_points(name='1')           #Get points connected to frame\n\n#Manipulation\nframes.delete(name='1')                     #Delete frame\nframes.divide_by_distance(name='1',\n    dist=0.5,Iend=True)                     #Divide frame by distance\nframes.divide_by_intersection(name='2')   #Divide at selected intersections\nframes.divide_by_ratio(name='3',ratio=0.3)#Divide at selected ratio\nframes.join('2','3')                  #Join Colinear frames\nframes.change_points(name='1', point1='1', point2='3')  #Change connected points of frame\n\n# Extrude frames to area\nframes.extrude(\n    frame_name='8',\n    property_name='Default',\n    dx=0, dy=144, dz=0,\n    num_areas=3,\n    del_frame=True\n)\n\n# Get frame properties\nframes.Prop.rename(old_name=\"FSEC1\", new_name=\"MySection\")  #Rename frame property\nframes.Prop.total()                         #Total # of defined frame properties\n```\n\n#### Database\n\nControl the database values\n\nUsage Examples:\n\n```python\ntables = sap.Table\ntables.list_available()                              #Lists available database tables\ntables.list_all()                                    #Lists all database tables\ntables.get_table_fields('Analysis Options')          #Get table Field Info\ntables.get(TableKey='Load Case Definitions', dataframe=False)     #Get Table data in `list[dict]` format\ndf = tables.get('Material Properties 01 - General')                 #Get Table data in pandas dataframe\n\n# Update Table\ndf.iloc[0,0] = 'New Value'\ntables.update(TableKey='Material Properties 01 - General', data=df, apply=True)\n```\n\n#### Select\n\nUsage Examples:\n\n```python\nselect = sap.Select\n\nselect.all()                                    #Select all objects\nselect.clear()                                  #Deselect all objects\n\nselect.constraint(name='Diaph1')                #Select points in constraint\nselect.constraint(name='Diaph1', reverse=True)  #Deselect points in constraint\n\nselect.invert()                 #Invert selections\nselect.selected                 #Returns list of selected objects\nselect.previous()               #restores the previous selection\n\n#Selection based on plane\nselect.in_plane(pointname='1', plane='XY')                  #Select in XY plane\nselect.in_plane(pointname='2', plane='YZ', reverse=False)   #Deselect\n\n#Select by property\nselect.property(type='Area', name='ASEC1')\nselect.property(type='Cable', name='CAB1', reverse=True)\nselect.property(type='Frame', name='FSEC1')\nselect.property(type='Link', name='GAP1', reverse=True)\nselect.property(type='Material', name='A992Fy50')\nselect.property(type='Solid', name='SOLID1', reverse=True)\nselect.property(type='Tendon', name='TEN1')\n```\n\n#### Loads\n\nControl the definition and assignments of loads.\n##### Load Patterns\n\nUsage Examples:\n\n```python\npattern = sap.Load.Pattern\nlen(pattern)                   # List the number of load patterns defined\npattern.list_all()             #List defined load patterns\npattern.rename('Dead', 'Live') #Rename previously defined pattern\npattern.delete(name='Dead')    #Delete a load pattern\n\npattern.get_selfwt_multiplier('DEAD')           #Get defined self weight multiplier\npattern.set_selfwt_multiplier('DEAD', 1.15)     #Set self weight multiplier\n\npattern.get_loadtype('DEAD')                        #Get the defined load type\npattern.set_loadtype('DEAD', pattern_type='LIVE')   #Set the defined load type\n\n#Add a Live load case with name \"Custom Live\", a 1.15x self weight multiplier and also generate an accompanying load case\npattern.add(name='Custom Live', pattern_type='LIVE', \n            selfwt_multiplier=1.15, add_case=True)\n```\n\n##### Load Cases\n\nUsage Examples:\n\n```python\ncases = sap.Load.Case\nlen(cases)                      #returns total # of defined cases\ncases.total(casetype='MODAL')   #Get # of modal load cases\ncases.list_all()                #List all load cases\ncases.rename('DEAD','WATER')    #Rename existing load case\ncases.case_info(name='DEAD')    #Get the Case type information\ncases.set_type(name='DEAD', casetype='LINEAR_STATIC')   #Change the case type of existing load case\n```\n\n##### Modal\n\n`sap.Load.Modal`\n\n**Eigen**\n\nUsage Examples:\n\n```python\neigen = sap.Load.Modal.Eigen\neigen.set_case(case_name=\"LCASE1\")          #Set a Eigen Modal case\n\neigen.set_initial_case(case_name='LCASE1', initial_case='DEAD')    #Set initial stiffness case\neigen.get_initial_case(case_name=\"LCASE1\")  #Get the Initial Case\n\neigen.get_loads(case_name='LCASE1')         #Get the load data\n\n#Set Eigen parameters\neigen.set_parameters(\n    case_name='LCASE1',\n    EigenShiftFreq=0.05,    #cyc/s\n    EigenCutOff=0.0001,     #cyc/s\n    EigenTolerance=0.00000001,\n    AllowAutoFreqShift=True\n)\neigen.get_parameters(case_name='LCASE1')    #Get Parameters\n\neigen.set_number_modes(case_name='LCASE1', max=10, min=5)   #set number of modes\neigen.get_number_modes(case_name='LCASE1')                  #get number of modes\n```\n\n**Ritz**\n\nUsage Examples:\n\n```python\nritz = sap.Load.Modal.Ritz\nritz.set_case(case_name=\"LCASE1\")          #Set a Eigen Modal case\n\nritz.set_initial_case(case_name='LCASE1', initial_case='DEAD')    #Set initial stiffness case\nritz.get_initial_case(case_name=\"LCASE1\")  #Get the Initial Case\n\nritz.get_loads(case_name='LCASE1')         #Get the load data\n\nritz.set_number_modes(case_name='LCASE1', max=10, min=5)   #set number of modes\nritz.get_number_modes(case_name='LCASE1')                  #get number of modes\n```\n\n#### Analyze\n\nUsage Examples:\n\n```python\nanalyze = sap.Analyze\nanalyze.create_model()                      #Create analysis model\nanalyze.run()                               #Runs the analysis\nanalyze.case_status()                       #retrieves the status for all load cases.\nanalyze.get_run_flag()                      #retrieves the run flags for all cases\nanalyze.set_run_flag(case='MODAL', status=True) # Set case to run\nanalyze.get_solver()                        #Get solver info\n\n#Set solver options\nanalyze.set_solver(\n    SolverType='Standard',\n    SolverProcessType='Auto',\n    NumberParallelRuns=0,\n    StiffCase=''\n)                    \n```\n\n#### Results\n\nManipulate Results from SAP2000\n\nUsage Examples:\n\n```python\nresults = sap.Results\n\nsetup = sap.Results.Setup\nsetup.clear_casecombo()                     #Deselect all Case\u0026Combo for results\nsetup.select_case(casename='DEAD')          #sets an load case selected for output flag.\nsetup.is_selected_case(casename='DEAD')     #checks if an load case is selected for output.\nsetup.select_combo(comboname='DEAD')        #sets an load combo selected for output flag.\nsetup.is_selected_combo(comboname='COMB1')  #checks if an load combo is selected for output.\nsetup.set_rxn_loc_get(x=0.5, y=0.5, z=5)    #sets coordinates of the locn at which the base reactions are reported.               \nsetup.base_rxn_loc_get()                    #retrieves coordinates of the locn at which the base reactions are reported.\n\nresults.joint_reactions(jointname='1')      #Get Joint reactions as list of dict\nresults.joint_displacements(jointname='1')      #Get Joint displacements as list of dict\nresults.joint_accelerations(jointname='1')  #Get joint accelerations\nresults.joint_velocities(jointname='1')     #Get joint velocities\n\nresults.delete('MODAL')                     #Delete results of `MODAL` case\nresults.delete('All')                       #Delete results of all cases\n```\n\n#### Material\n\nUsage Examples:\n\n```python\nmaterial = sap.Material\nmaterial.rename(old=\"4000Psi\", new=\"MatConc\")   #Rename existing material\nmaterial.total()                                #Total # of defined material properties\nmaterial.delete(name='4000Psi')                 #Delete existing material property\nmaterial.list_all()                             #List all defined Material Properties\nmaterial.get_props(name='4000Psi')              #Returns basic material property data\nmaterial.add(name='Steel', material_type='Steel')           #Initialze Material Property\nmaterial.set_isotropic(name='Steel', E=29500, poisson=0.25, thermal_coeff=6e-06)    #Set isotropic material properties\nmaterial.set_density(name='Steel', mass_per_vol=0.00029)    #set density\n```\n\n##### Rebar\n\nUsage Examples:\n\n```python\nrebar = sap.Material.Rebar\nrebar.rename(old='R1', new='MyRebar')           #Rename rebar\nrebar.total()                                   #Total # of defined rebar properties\nrebar.delete(name='R1')                         #Delete existing rebar property\nrebar.list_all()                                #List all defined rebar Properties\nrebar.set_prop(name='MyRebar2', area=1.05, dia=1.0) #Define a rebar property\nrebar.get_prop(name='MyRebar2')                 #Get rebar property\n```\n\n\u003c!-- Layout END --\u003e\n\n\u003c!-- Roadmap --\u003e\n## Roadmap\n\n- [x] Generate Load Patterns\n- [x] Generate Load Cases\n- [ ] Apply Loads\n  - [x] Points\n  - [ ] Area\n  - [ ] Line\n- [x] Export joint reactions to Hilti-Profis file\n\n\u003c!-- License --\u003e\n## License\n\nThis project is licensed under the Mozilla Public License Version 2.0. For more details, see the [LICENSE](./LICENSE) file.\n\n\u003c!-- Contact --\u003e\n## Contact\n\nFor any inquiries, feature requests, or bug reports, feel free to contact **Arun Kishore** at [pypi@rpakishore.co.in](mailto:pypi@rpakishore.co.in).\n\nProject Link: [https://github.com/rpakishore/ak_sap](https://github.com/rpakishore/ak_sap)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frpakishore%2Fak_sap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frpakishore%2Fak_sap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frpakishore%2Fak_sap/lists"}