Overview
MIDAS CIVIL NX pursues user-friendly engineering solutions and provides various data in tables.
The “post/table” command is intended to develop and extract various data efficiently and easily. However, it contains a lot of tables, and the user might not fully understand them; I will provide usage details and additional information here. This content focuses on people familiar with CIVIL or CIVIL NX but unfamiliar with APIs.
Pre-Process Table
The Pre-Process Tables were excluded from development in the Initial planning stage because they are almost the same as the DB data.
For example, nodes can be viewed using the db/node command(API), and the product in the table is similar.
Of course, API data formats and product tables are quite different, and we need some conversion. I will show you a Python example that converts API Response data to a table format.
Python Example Code
import pandas as pd def json_to_dataframe_with_units(data, unit_data): """ Converts JSON data into a Pandas DataFrame and dynamically updates headers with unit information. """ # Extract the main key dynamically (e.g., "NODE") main_key = list(data.keys())[0] nested_dict = data[main_key] # Convert the nested dictionary into a DataFrame df = pd.DataFrame.from_dict(nested_dict, orient='index') # Set index name dynamically df.index.name = main_key # Extract unit dictionary dynamically unit_main_key = list(unit_data.keys())[0] # e.g., "UNIT" units = unit_data[unit_main_key]["1"] # Get unit mappings # Identify the correct unit for distance-related columns dist_unit = units.get("DIST", "").lower() # Get DIST unit if available # Update column names dynamically based on matching keys in unit_data df.rename(columns={col: f"{col}({dist_unit})" for col in df.columns}, inplace=True) return df # Example usage data = { "NODE": { "1": {"X": 0, "Y": 0, "Z": 0}, "2": {"X": 1, "Y": 0, "Z": 0}, "3": {"X": 2, "Y": 0, "Z": 0}, "4": {"X": 6.25, "Y": 0, "Z": 0}, } } unit_data = { "UNIT": { "1": { "FORCE": "KN", "DIST": "M", "HEAT": "J", "TEMPER": "C" } } } # Convert JSON to DataFrame with dynamic header updates df_final = json_to_dataframe_with_units(data, unit_data) # Display updated DataFrame print(df_final) # Save as CSV df_final.to_csv('output.csv')
Python Results
1,0.0,0,0
2,1.0,0,0
3,2.0,0,0
4,6.25,0,0
Some of the Pre-Process Tables were developed when,
• In the case of non-DB data (i.g, Mass summary)
• Present DB data but print additional information (i.g, Section, Material)
Based on these rules, we developed 20 tables; you can find the link below.
MIDAS API Online Manual – MIDAS Support
Post-Process Table
Printing the analyzed results is the most crucial function within API commands, and we focused on developing as many functions as possible.
For that, we now provide 147 tables, as below, and we’re still developing the rest.
• Analysis Result Table (89)
• Time History Result Table (52)
• Heat of Hydration Result Table (6)
We tried to maintain user experiences that enabled extracting basic results and accessing advanced functions in the table(Select Tendon, CS, etc.).
JSON Structure
The table command can have various JSON Structures because 147 tables use only one Endpoint, and it is essential to know the structure. The structure can be changed depending on the table, and we provide each table's structure. When you fully understand its structure, you can expand your usability.
For this reason, I will write each "key" notion from this part.
Before moving on to the JSON Structure, be well-acquainted with JSON.
Terminology: JSON(JavaScript Object Notation) - MIDAS Support
TABLE_NAME
Key: TABLE_NAME
Value Type: String
Required: No
Example:
"TABLE_NAME": "TABLE"
The user can name an arbitrary “TABLE_NAME” and locate it at the top of the Response. It is not an essential key. The Response will print an “empty” message if the user inputs nothing.
TABLE_TYPE
Key: TABLE_TYPE
Value Type: String (Enum)
Required: Yes
Example:
"TABLE_TYPE": "ELEMENTWEIGHT"
The “TABLE_TYPE” is a significant key for specifying tables. Each table has matched string data(value); the user can find it in the API manual on the support website.
EXPORT_PATH
Key: EXPORT_PATH
Value Type: String (Directory Path)
Required: No
Example:
"EXPORT_PATH": "C:\\MIDAS\\Result\\Elements.json"
The “EXPORT_PATH” key can save the Response JSON data. The direction Path and file extension should follow the JSON format.
UNIT
Key: UNIT
Value Type: Object
Required: No
Keys within UNIT:
᛫ FORCE, String, Enum: ["N", "KN", "KGF", "TONF", "LBF", "KIPS"]
᛫ DIST, String, Enum: ["M", "CM", "MM", "FT", "IN"]
᛫ HEAT, String, Enum: ["CAL", "KCAL", "J", "KJ", "BTU"]
᛫ TEMP, String, Enum: ["C", "F"]
Example:
"UNIT": {
"FORCE": "KN",
"DIST": "MM",
"HEAT": "J",
"TEMP": "C"
}
For tables that need units, the user can choose four units. The “UNIT” key has the same structure as “DB/UNIT.” (Reference: Unit System—MIDAS Support) If the user inputs nothing, the API will generate a Response based on the product unit.
STYLES
Key: STYLES
Value Type: Object
Required: No
Keys within STYLES:
᛫ FORMAT, String, Enum: ["Default", "Fixed", "Scientific", "General"]
᛫ PLACE, Integer, Range 0 to 15
Example:
"STYLES": {
"FORMAT": "Fixed",
"PLACE": 3
}
The “STYLES” key acts like the Style Dialog function(in the product). The user can print in a customized format and decimal when the type is a real number(refer to the figure below). One thing is different: the user can set up each row in the product, but the API sets the whole table.
COMPONENTS
Key: COMPONENTS
Value Type: Array[String], Enum: Depend on the TABLE_TYPE
Required: No
Example:
"COMPONENTS": [
"Elem",
"Load",
"Part",
"Axial"
]
The “Components” is setting print components in the Response. There are basic rules as follows:
• When omitting the “Components” key or emptying the value([ ]), print all data
• The “HEAD” key prints the selected columns among the Response JSON keys.
• The “Index” of “HEAD” is a default value indicating row numbers.
• When the header has more than a double array, the header name expresses “/” separately.
• In the case of a double(or higher) array header, the top header is a standard. Even if you specify only one of several, all applicable columns will be printed.
• Systems of units don’t appear on the header.
This key would be rarely used, so it was not contained in the manual, even if it is an Enum data. I highly recommend creating the minimum input data, requesting the COMPONENTS in the empty status, and copying it from the Response when needed.
NODE_ELEMS
Key: NODE_ELEMS
Value Type: Object
Required: No
Key within NODE_ELEMS:
᛫ KEYS, Array[Integer]
᛫ TO, String
᛫ STRUCTURE_GROUP_NAME, String
Example:
"NODE_ELEMS": {
"KEYS": [
101, 102, 103, 104, 105
]
}
or
"NODE_ELEMS": {
"TO": "101to105"
}
or
"NODE_ELEMS": {
"STRUCTURE_GROUP_NAME": "Group1"
}
This key is used for tables to select nodes or elements. Over half of the tables use this key; the user can input it as shown below in the product.
To maintain user experience and convenience, the user can use three different formats.
• “KEYS” → Request specific nodes or elements as an Integer array to print.
• “TO” → Request range of print nodes or elements.
• “STRUCTRUE_GROUP_NAME” → Designate structure group to print.
The Response shows all data if a specific node or element is not designated.
LOAD_CASE_NAMES
Key: LOAD_CASE_NAMES
Value Type: Array[String]
Required: No
Example:
"LOAD_CASE_NAMES": [
"DC(ST)",
"LC1(CB)",
"LC2(CB:all)",
"LC2(CB:max)",
"LC2(CB:min)",
"X-dir(RS)",
"MV_All(MV:all)",
"MV_All(MV:max)",
"MV_All(MV:min)",
"Settle(SM:all)",
"Settle(SM:max)",
"Settle(SM:min)",
]
This key is used when tables need to consider load cases or load combinations. It is one of the essential keys, so over 80% of tables use it. This key indicated data on the product as follows.
Print all available cases if the user doesn’t designate any cases or the value is empty.
The user must obtain the case name through the DB and write the additional string that matches the case in parentheses to create the final string for the load case name.
Load Case |
Additional String |
Related API Manual |
---|---|---|
Static Load Cases |
(ST) |
|
Moving Load Cases |
(MV:all), (MV:max), (MV:min) |
|
Settlement Load Cases |
(SM:all), (SM:max), (SM:min) |
|
Response Spectrum Load Cases |
(RS) |
|
Construction Stage |
(CS) |
- |
Time History Load Cases |
(TH:all), (TH:max), (TH:min) |
|
Load Combinations-General |
(CB), (CB:all), (CB:max), (CB:min) |
|
Load Combinations-Steel |
(CBS), (CBS:all), (CBS:max), (CBS:min) |
|
Load Combinations-Concrete |
(CBC), (CBC:all), (CBC:max), (CBC:min) |
|
Load Combinations-SRC |
(CBR), (CBR:all), (CBR:max), (CBR:min) |
|
Load Combinations-Composite Steel Girder |
(CBSC), (CBSC:all), (CBSC:max), (CBSC:min) |
Load Combinations - Composite Steel Girder Design - MIDAS Support |
Load Combinations-Sesimic |
(CBSM), (CBSM:all), (CBSM:max), (CBSM:min) |
The challenging part lies in handling Load Combination Cases. If a load combination does not include envelope cases, it can only be output as (CB). However, if envelope cases (e.g., load cases or combinations represented as envelopes) are included, the output must be (CB:all), (CB:max), or (CB:min).
An additional key "bCB" is inserted into the Load Combinations database to distinguish these scenarios. When querying a load combination:
• “bCB”: false indicates no envelope involvement (CB).
• “bCB”: true indicates envelope-based combinations (CB:all/max/min).
The product uses the load case names specifically designated for construction stages. Additionally, it can utilize the Dead Load for C.S. specified in the Construction Stage Analysis Control Data (Construction Stage Analysis Control Data - MIDAS Support).
The product's Record Activation Dialog is the most reliable method to verify this. Users familiar with the product should be able to utilize this feature efficiently.
TH_LOAD_CASE_NAMES
Key: TH_LOAD_CASE_NAMES
Value Type: Array[String]
Required: No
Example:
"TH_LOAD_CASE_NAMES": [
"DL(TH:all)",
"DL(TH:max)",
"DL(TH:min)",
]
This feature is used to query the results of Inelastic Hinges and Fiber Sections during Time History Analysis.
This key has characteristics similar to the LOAD_CASE_NAMES key.
MODES
Key: MODES
Value Type: Array[String], Enum: ["Mode 1", "Mode 2", ….., "Mode N"]
Required: No
Example:
"MODES": [
"Mode 1",
"Mode 2"
]
This is used to query tables related to vibration, bucketing mode shape, or nodal results for RS.
If no specific modes are specified or an empty array is requested, data for all available modes will be output.
PARTS
Key: PARTS
Value Type: Array[String], Enum: ["Part I", "Part 1/4", "Part 2/4", "Part 3/4", "Part J"]
Required: No
Example:
"PARTS": [
"Part I",
"Part 1/4",
"Part 2/4",
"Part 3/4",
"Part J",
]
This feature is used to request table data related to Beam element results.
If not specified or requested with an empty array, data for all available Parts will be output.
SECTION_POSITION
Key: SECTION_POSITION
Value Type: Array[String], Enum: ["Pos-1", "Pos-2", …. , "Pos-16", "Max", "Max", "All"]
Required: No
Example:
"SECTION_POSITION": [
"Pos-1",
"Pos-2",
"Max"
]
This feature requests table data related to stress results for Beam elements.
If not specified or requested with an empty array, data for all available Section Positions will be output.
Depending on the table types, they have different section positions indicating names, so please be careful. (Checking it in the manual or product)
AVERAGE_NODAL_RESULT
Key: AVERAGE_NODAL_RESULT
Value Type: Boolean
Required: No
Example:
"AVERAGE_NODAL_RESULT": true
This feature is used for querying result tables for elements of two dimensions or higher, including Plate, Plane Stress, Plane Strain, Axisymmetric, and Solid elements. The default value is False.
NODE_FLAG
Key: NODE_FLAG
Value Type: Object
Required: No
Keys within NODE_FLAG:
᛫ CENTER, Boolean
᛫ NODES, Boolean
Example:
"NODE_FLAG": {
"CENTER": false,
"NODES": true
}
This feature queries result tables for Heat of Hydration and elements of two dimensions or higher, including Plate, Plane Stress, Plane Strain, Axisymmetric, and Solid elements. The default value is False.
OPT_CS
Key: OPT_CS
Value Type: Boolean
Required: No
Example:
"OPT_CS": true
This key is used to query result tables for construction stages.
To understand its functionality, let's consider the product's behavior:
-
After analysis, the Model View automatically sets to "POST CS" state.
-
In this state, we can view results from the post-construction stage.
-
Construction stage results are available through Load Combinations, but these represent the final results of the last stage.
To view results for specific construction stages or elements not active in POST CS:
-
The Model View must be set to an arbitrary construction stage.
-
Regardless of which construction stage Model View is selected, results for any desired stage can be obtained.
Thus, all results can be accessed by toggling between POST CS and any construction stage.
Key functionality:
-
It sets the internal state to either the construction or post-construction stages, independent of the visible Model View.
-
When False: The product internally enters "POST CS" state.
-
When True: The product internally switches to the first construction stage state.
-
This change is internal and doesn't affect the product's external appearance.
Usage note:
• The default value is false.
• This key must be explicitly set to true to query construction stage results.
This approach allows engineers to analyze structural behavior at various construction stages, which is crucial for planning safe and efficient construction processes.
STAGE_STEP
Key: STAGE_STEP
Value Type: Array[String]
Required: No
Example:
"STAGE_STEP": [
"CS1:001(first)",
"CS1:002(last)"
]
This feature is activated when OPT_CS is true—input the construction stage name for access. If not specified or requested with an empty array, data for all available Construction Stages will be output.
The construction stage designated name is given automatically based on the Construction Stage setting.
Define Construction Stage - MIDAS Support
Let’s look into this rule. (CIVIL users would be familiar with it.)
There are three kinds of data involved in composing a name.
᛫ NAME
᛫ bSV_STEP
᛫ ADD_STEP
If you create several datasets considering several cases, it would be helpful to understand the naming rule.
“NAME” is essential, and let it be a fixed value; change bSV_STEP and ADD_STEP.
-
In the case of only having NAME
-
In the case of having NAME and vSV_STEP
-
In the case of having NAME and ADD_STEP
-
In the case of having all data
To summarize, “NAME” and “:” are essential components and follow numbers and a string of construction stages. “(last)” is always activated. In front of the number, the total number will be decided by the number of total ADD_STEP, adding 1. If the duration day is 0, “001(last)” is created. When ADD_STEP exists, the stage of ADD_STEP is set as (user i), and the number will be designated 1+i.
DISP_OPT
Key: DISP_OPT
Value Type: String, Enum: ["Accumulative", "Current", "Real"]
Required: No
Example:
"DISP_OPT": "Real"
This key checks the node displacement results in the construction stages. Only two tables use this key.
Displacements - Analysis Result Table - MIDAS Support
ITEM_TO_DISPLAY
Key: ITEM_TO_DISPLAY
Value Type: Array[String], Enum: depends on the TABLE_TYPE
Required: No
Example:
"ITEM_TO_DISPLAY": [
"Axial",
"Shear-y",
"Shear-z",
]
It uses tables that can generate a View by Max Value. The accessible items depend on the table type; please check the available keys in the manual or product.
ADDITIONAL
Key: ADDITIONAL
Value Type: Object
Required: Yes
Keys within ADDITIONAL:
᛫ SET_TENDON_PARAMS, Object
᛫ TENDON_GROUP, String
᛫ STAGE, String
᛫ SET_STAGE, Object
᛫ STAGE, String
Example:
"ADDITIONAL": {
"SET_TENDON_PARAMS": {
"TENDON_GROUP": "TD01",
"STAGE": "CS16"
}
}
or
"ADDITIONAL": {
"SET_STAGE": {
"STAGE": "CS16"
}
}
This key controls the data query setting for the tendon-related tables Arrangement, Loss Force/Stress, and Element Properties at Each Stage. The user's request must include this key to access results.
PART
Key: PART
Value Type: Array[String], Enum: ["I", "J"]
Required: No
Example:
"PART": [
"I", "J"
]
This key is only used when accessing the Beam Section Properties at the Last Stage table. (It is different from the PARTS key, notice it)
It prints all available parts when no components are designated or a request is made with an empty array.
Beam Section Properties at Last Stage - Analysis Result Table - MIDAS Support
FIBER_CELL_MINMAX
Key: FIBER_CELL_MINMAX
Value Type: Boolean
Required: No
Example:
"FIBER_CELL_MINMAX": true
This key is only used for the Japanese version to access the Time History result of the Fiber Section.
Fiber Section Maximum Strain of The Cell - TH Result Table - MIDAS Support
SECT_POSITION
Key: SECT_POSITION
Value Type: String
Required: No
Example:
"SECT_POSITION": “1to2”
This key is only used for the Japanese version to access the Time History result of the Fiber Section.
Fiber Section Maximum Strain of The Cell - TH Result Table - MIDAS Support
Fiber Section Event Step - TH Result Table - MIDAS Support
Fiber Section Average Compression Strain - TH Result Table - MIDAS Support
OUTPUT_STEP
Key: OUTPUT_STEP
Value Type: String
Required: No
Example:
"OUTPUT_STEP": “1,3”
This key is only used for the Japanese version to access the Time History result of the Fiber Section.
Fiber Section Average Compression Strain - TH Result Table - MIDAS Support
Conclusion
As reviewed above, the functionality of POST/TABLE has been designed to reflect the user experience of our product closely.
Of course, providing additional convenience features (e.g., fetching a list of available output cases) is expected to make the system even more accessible. These convenience features are always part of our development plan, and we are committed to delivering them as quickly as possible.