# PBSD二次开发
**Repository Path**: civilwilson/PBSD-SecondaryDevelopment
## Basic Information
- **Project Name**: PBSD二次开发
- **Description**: 基于PBSD的二次开发,功能包括:
1. 结构及构件性能评估;
2. 结构宏观分析结果:最大层间位移角,残余层间位移角,等;
3. 构件性能评估结果:构件变形、应变、需求能力比、变形限值,等;
4. 构件承载力计算及性能指标插值。
- **Primary Language**: C#
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2020-12-13
- **Last Updated**: 2024-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# PBSD二次开发
## PBSD简介
* **结构抗震性能设计软件PBSD**包含[设计指标统计](https://help.gwforu.com/PBSD/DesignData)、[地震动工具箱](https://help.gwforu.com/PBSD/GMTool)、[弹塑性分析](https://help.gwforu.com/PBSD/PERFORM3D)、[抗震性能评估](https://help.gwforu.com/PBSD/SeismicPerform)等模块功能;
* PBSD正式版于2019年底上线,截止至2021年底注册用户超1500人,涵盖国内超250所设计院及高等院校;
* 点击跳转[PBSD官方网站](http://www.wwforu.com),点击跳转[PBSD用户手册及功能介绍](https://help.gwforu.com),点击[加入官方交流群](https://help.gwforu.com/PBSD/General/afaf)。
* 为满足研究人员及高级用户的需求,开放二次开发接口,可用于且不限于:不同方案间构件性能对比、批量模型构件损伤批量提取,等。
## 二次开发接口功能简介
* 结构及构件性能评估;
* **结构宏观结果-塔楼**:最大层间位移角GetMaxDrift、最大残余层间位移角GetMaxResDrift、顶点位移GetTopDisp、底部剪力GetBottomForce、底部倾覆弯矩GetBottomMoment;
* **结构宏观结果-楼层**:最大层间位移角GetMaxDrift、残余层间位移角GetResDrift、最大位移GetMaxDisp、最大剪力GetMaxForce、最大倾覆弯矩GetMaxMoment;
* **构件性能结果-塔楼**:单元组各楼层构件性能状态占比GetStoreyDeformPerformRatio;
* **构件性能结果-楼层**:单元组楼层平均变形GetAVGDeform、单元组楼层平均变形需求能力比GetAVGDeformDCR;
* **构件性能结果-构件**:变形大小GetDeform、变形限值GetDeformLimits、变形需求能力比GetDeformDCRList、某性能的变形需求能力比GetDeformDCR、压应变GetCompressStrain、拉应变GetTensionStrain;
* **截面承载力计算与构件变形指标插值**;
* C#使用案例详见[ExampleDemo.cs](https://gitee.com/civilwilson/PBSD-SecondaryDevelopment/blob/master/PBSD_Development/PBSD_Development/ExampleDemo.cs);
## 结构及构件性能评估:C#使用说明
#### 架构与文档

#### 分析结果FEMResultObj
```C#
///
/// 构造分析结果
///
/// PF3DS所在路径或.tcl所在路径
/// 如果宏观分析结果存在,是否重新读取
FEMResultObj result = new FEMResultObj(string directPath, bool isReRead);
///
/// 反序列化构件分析结果
///
/// 是否成功
bool isSuccess = result.SetElementResult();
```
#### 工况LoadCaseObj
```C#
///
/// 地震工况列表
///
/// 工况对象列表
List loadCaseList = result.GetGroundMotionLoadCaseList();
//获得工况
LoadCaseObj loadCase = loadCaseList.First();
//获得工况名称
string loadcaseName = loadCase.Name;
```
#### 体系SystemObj
```C#
///
/// 获得体系(多塔塔楼集合)
///
/// 体系对象
SystemObj system = result.GetSystem();
///
/// 获得所有塔楼
///
/// 塔楼对象列表
List towerList = system.GetTowerList();
```
#### 塔楼TowerObj
```C#
///
/// 获得体系第一塔楼
///
/// 塔楼对象
TowerObj tower = result.GetFirstTower();
///
/// 获得体系第一塔楼
///
/// 塔楼对象
TowerObj tower = system.GetFirstTower();
///
/// 体系内塔楼查询
///
/// 塔楼编号
/// 塔楼对象
/// 是否存在
bool isExist = system.GetTower(int towerIndex, out TowerObj towerObj);
///
/// 塔楼最大层间位移角
///
/// 工况
/// X向/Y向层间位移角
/// 层间位移角
var maxDrift = tower.GetMaxDrift(LoadCaseObj loadcase, bool isX);
///
/// 塔楼最大残余层间位移角
///
/// 工况
/// X向/Y向残余层间位移角
/// 残余层间位移角
var resDrift = tower.GetMaxResDrift(LoadCaseObj loadcase, bool isX);
///
/// 塔楼最大顶点位移
///
/// 工况
/// X向/Y向顶点位移
/// 位移
var topDisp = tower.GetTopDisp(LoadCaseObj loadcase, bool isX);
///
/// 最大基底剪力
///
/// 工况
/// X向/Y向基底剪力
/// 基底剪力
var baseShear = tower.GetBottomForce(LoadCaseObj loadcase, bool isX);
///
/// 最大基底倾覆弯矩
///
/// 工况
/// X向/Y向倾覆弯矩
/// 倾覆弯矩
var baseMoment = tower.GetBottomMoment(LoadCaseObj loadcase, bool isX);
```
#### 楼层StoreyObj
```C#
///
/// 塔楼所有楼层
///
/// 楼层列表
List storeyList = tower.GetStoreyList();
///
/// 塔楼内楼层查询
///
/// 楼层编号
/// 楼层对象
/// 是否存在
bool isExist = tower.GetStorey(int storeyIndex, out StoreyObj storeyObj);
///
/// 楼层最大层间位移角
///
/// 工况
/// X向/Y向层间位移角
/// 层间位移角
var maxDrift = storeyObj.GetMaxDrift(LoadCaseObj loadcase, bool isX);
///
/// 楼层残余层间位移角
///
/// 工况
/// X向/Y向残余层间位移角
/// 残余层间位移角
var resDrift = storeyObj.GetResDrift(LoadCaseObj loadcase, bool isX);
///
/// 最大楼层位移
///
/// 工况
/// X向/Y向顶点位移
/// 位移
var topDisp = storeyObj.GetMaxDisp(LoadCaseObj loadcase, bool isX);
///
/// 最大楼层剪力
///
/// 工况
/// X向/Y向剪力
/// 剪力
var baseShear = storeyObj.GetMaxForce(LoadCaseObj loadcase, bool isX);
///
/// 最大楼层倾覆弯矩
///
/// 工况
/// X向/Y向倾覆弯矩
/// 倾覆弯矩
var baseMoment = storeyObj.GetMaxMoment(LoadCaseObj loadcase, bool isX);
```
#### 单元组集合ElementGroupSetObj
```C#
///
/// 单元组对象列表
///
/// 单元组对象
/// 是否存在构件分析结果
bool isExist = result.GetElementGroupSetObj(out ElementGroupSetObj groupSet);
///
/// 单元组描述
///
/// 单元组描述列表
List groupDescps = groupSet.GetGroupDescps();
```
#### 单元组ElementGroupObj
```C#
///
/// 获得所有单元组
///
/// 单元组对象列表
List groupObjList = groupSet.GetGroupList();
///
/// 获得所有框架单元组
///
/// 框架单元组列表
List frameGroupList = groupSet.GetFRAMEGroupList();
///
/// 获得所有墙单元组
///
/// 墙单元组列表
List wallGroupList = groupSet.GetWallGroupList();
///
/// 获得单元组
///
/// 单元组描述
/// 单元组对象
/// 是否存在
bool isExist = groupSet.GetGroup(string descp, out ElementGroupObj groupObj);
///
/// 楼层内单元组构件的平均转角
///
/// 工况
/// 楼层
/// 平均转角
float avgDeform = groupObj.GetAVGDeform(LoadCaseObj loadcase, StoreyObj storey);
///
/// 楼层内单元组构件的平均能力需求比
///
/// 工况
/// 楼层
/// 性能类型
/// 需求能力比
float avgDeformDCR = groupObj.GetAVGDeformDCR(LoadCaseObj loadcase, StoreyObj storey, DeformType deformType);
///
/// 单元组各楼层构件性能状态占比
///
/// 工况
/// 塔楼
/// 各楼层构件性能状态占比
Dictionary> deformPerformDict = groupObj.GetStoreyDeformPerformRatio(LoadCaseObj loadcase, TowerObj tower);
```
#### 单元ElementObj
```C#
///
/// 获得所有单元
///
/// 单元对象列表
List elementList = groupObj.GetElementList();
///
/// 楼层内单元组的所有单元
///
/// 楼层对象
/// 单元对象列表
List elementList = groupObj.GetElementList(StoreyObj storey);
//获得第一个单元
ElementObj element = elementList.First();
///
/// 最大压应变
///
/// 工况
/// 压应变
float compressStrain = element.GetCompressStrain(LoadCaseObj loadCase);
///
/// 最大拉应变
///
/// 工况
/// 拉应变
float tensionStrain = element.GetTensionStrain(LoadCaseObj loadCase);
///
/// 控制性能的构件变形
///
/// 工况
/// 构件变形
float deform = element.GetDeform(LoadCaseObj loadCase);
///
/// 端部构件变形
///
/// 工况
/// 端部类型
/// 构件变形
float deform = element.GetDeform(LoadCaseObj loadCase, FRAMReusltDirect direct);
///
/// 控制性能的变形限值
///
/// 工况
/// 变形限值列表
List deformLimits = element.GetDeformLimits(LoadCaseObj loadCase);
///
/// 端部变形限值
///
/// 工况
/// 端部类型
/// 变形限值列表
List deformLimits = element.GetDeformLimits(LoadCaseObj loadCase, FRAMReusltDirect direct);
///
/// 控制性能的需求能力比列表
///
/// 工况
/// 需求能力比列表
List deformDCRList = element.GetDeformDCRList(LoadCaseObj loadCase);
///
/// 端部需求能力比列表
///
/// 工况
/// 端部类型
/// 需求能力比列表
List deformDCRList = element.GetDeformLimits(LoadCaseObj loadCase, FRAMReusltDirect direct);
///
/// 控制性能的某个性能状态下的需求能力比
///
/// 工况
/// 性能类型
/// 需求能力比
float deformDCR = element.GetDeformDCR(LoadCaseObj loadCase, DeformType deformType);
///
/// 端部某个性能状态下的需求能力比
///
/// 工况
/// 端部类型
/// 性能类型
/// 需求能力比
float deformDCR = element.GetDeformDCR(LoadCaseObj loadCase, FRAMReusltDirect direct, DeformType deformType);
```
#### 节点NodeObj
```C#
///
/// 获得所有节点
///
/// 节点对象列表
List nodeList = element.GetNodeList();
//第一个节点
NodeObj node = nodeList.First();
//坐标
double x = node.X;
double y = node.Y;
double z = node.Z;
```
## 截面承载力计算及构件变形指标插值:C#使用说明
#### 基本步骤
1. 定义截面受力(剪跨、轴力)及截面尺寸;
2. 定义配筋数据(纵筋、箍筋、分布筋,等);
3. 定义材料强度;
4. 通过SetLimits完成承载力计算和变形指标插值;
4. 获得变形指标及截面抗弯、抗剪承载力,等。
#### 架构与文档

#### 框架截面构造
```C#
///
/// 构造截面
///
/// 剪跨长度 mm
/// 轴力 N
var section = new FrameSection(double shearSpan, double axialLoad = 0);
///
/// 设定矩形截面
///
/// 截面宽度
/// 截面高度
/// 保护层厚度
section.SetRCRectangularSection(double width, double height, int cover);
///
/// 工形劲截面
///
/// 截面宽度
/// 截面高度
/// 腹板厚度
/// 型钢高度
/// 翼缘宽度
/// 翼缘厚度
/// 保护层厚度
section.SetSRCRectangularSection13(double width, double height, double webThick, double steelHeight, double flangeWidth, double flangeThick, int cover);
///
/// 对称十字劲截面
///
/// 截面宽度
/// 截面高度
/// 腹板厚度
/// 型钢高度
/// 翼缘宽度
/// 翼缘厚度
/// 保护层厚度
section.SetSRCRectangularSection15(double width, double height, double webThick, double steelHeight, double flangeWidth, double flangeThick, int cover);
///
/// 设定矩形梁配筋
///
/// 顶筋-正向加载受压钢筋
/// 底筋-正向加载受拉钢筋
section.SetRectBeamReinforcement(int AsCompress, int AsTension);
///
/// 设定矩形柱截面
///
/// 角筋
/// 除角筋外的X向(宽度方向)单测配筋
/// 除角筋外的Y向(高度方向)单测配筋
section.SetRectColumnReinforcement(int Ascor, int Asx, int Asy);
///
/// 设定箍筋信息
///
/// 面积配箍率(加载方向)
/// 体积配箍率
section.SetStirrup(double sRatio, double vRatio);
```
#### 剪力墙截面构造
```C#
///
/// 构造截面
///
/// 剪跨长度 mm
/// 轴力 N
var section = new WallSection(double shearSpan, double axialLoad = 0);
///
/// 一字墙截面
///
/// 墙长
/// 墙厚
/// I端边缘构件长度
/// J端边缘构件长度
section.SetWallSection(double length, double thickness, double boundaryLengthI, double boundaryLengthJ);
///
/// 异形墙截面(L、T等)
///
/// 墙长
/// 墙厚
/// I端边缘构件长度
/// J端边缘构件长度
/// I端边缘构件面积放大系数
/// J端边缘构件面积放大系数
section.SetWallSection(double length, double thickness, double boundaryLengthI, double boundaryLengthJ, double boundaryAreaFactorI, double boundaryAreaFactorJ);
///
/// 设定剪力墙配筋信息
///
/// 竖向分布筋配筋率
/// 水平分布筋配筋率
/// I端边缘构件纵筋配筋率
/// J端边缘构件纵筋配筋率
/// 边缘构件体积配箍率
section.SetWallReinforcement(double vAsRatio, double hAsRatio, double bAsRatioI, double bAsRatioJ, double bStirrupVRatio);
///
/// 设定型钢及钢板
///
/// I端边缘构件含钢率
/// J端边缘构件含钢率
/// 钢板厚度
section.SetWallSteel(double steelRatioI, double steelRatioJ, double steelPlateThickness = 0);
```
#### 材料强度
```C#
///
/// 设定RC构件材料强度
///
/// 混凝土等级
/// 纵筋强度
/// 箍筋强度
section.SetRCMaterial(int concreteGrade, int barGrade, int stirrupGrade);
///
/// 设定SRC构件材料强度
///
/// 混凝土等级
/// 纵筋强度
/// 箍筋强度
/// 型钢强度
section.SetSRCMaterial(int concreteGrade, int barGrade, int stirrupGrade, int steelGrade);
```
#### 承载力与性能指标
```C#
///
/// 设定变形限值
///
/// 是否正向加载(剪力墙i端受拉)
/// 剪力大小(部分截面类型用于计算剪压比)
/// 是否成功
bool isSuccess = section.SetLimits(bool isPosLoading, double shearForce = 0);
///
/// 抗弯承载力
///
/// 承载力类型:设计值、标准值、平均值
/// 承载力
double momentCapacity = section.GetMomentCapacity(CapacityType capacityType);
///
/// 抗剪承载力
///
/// 承载力类型:设计值、标准值、平均值
/// 承载力
double shearCapacity = section.GetShearCapacity(CapacityType capacityType);
///
/// 变形限值
///
/// 变形限值
List limits = section.GetLimits();
///
/// 破坏形态
///
/// 破坏形态
DamageMode damageMode = section.GetDamageMode();
///
/// 性能状态
///
/// 构件变形
/// 性能状态
DeformType perform = section.GetPerform(double rotation);
//弯剪比
double msr = section.MSR;
//剪跨比
double lamda = section.Lammda;
//轴压系数
double alr = section.AxialLoadRatio;
```