csharp
if (build == true)
{
// 声明变量
int ret;
int Numit = 0;
int[] ObjType = new int[0];
string[] ObjName = new string[0];
string sauto = "";
string propname = "";
string point1 = "";
string point2 = "";
double x1 = 0;
double y1 = 0;
double z1 = 0;
double x2 = 0;
double y2 = 0;
double z2 = 0;
List<Point3d> _pnt1 = new List<Point3d>();
List<Point3d> _pnt2 = new List<Point3d>();
List<string> _prof = new List<string>();
// 连接到正在运行的 SAP2000
cOAPI mySapObject = null;
mySapObject = (cOAPI) System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
cSapModel mySapModel;
mySapModel = mySapObject.SapModel;
// 获取选中的对象
ret = mySapModel.SelectObj.GetSelected(ref Numit, ref ObjType, ref ObjName);
// 遍历选中的对象
for (int i = 0; i < ObjName.Length; i++)
{
// 获取框架对象的起点和终点
ret = mySapModel.FrameObj.GetPoints(ObjName[i], ref point1, ref point2);
// 获取起点的坐标
ret = mySapModel.PointObj.GetCoordCartesian(point1, ref x1, ref y1, ref z1);
// 获取终点的坐标
ret = mySapModel.PointObj.GetCoordCartesian(point2, ref x2, ref y2, ref z2);
// 创建起点和终点的 Point3d 对象
Point3d pt1 = new Point3d(x1, y1, z1);
Point3d pt2 = new Point3d(x2, y2, z2);
// 添加起点和终点到相应的列表
_pnt1.Add(pt1);
_pnt2.Add(pt2);
// 将起点、终点和截面名称列表赋值给输出参数
p1 = _pnt1;
p2 = _pnt2;
// 获取框架对象的截面名称
ret = mySapModel.FrameObj.GetSection(ObjName[i], ref propname, ref sauto);
// 添加截面名称到列表
_prof.Add(propname);
Profile = _prof;
}
}
调整代码编写,让变量在定义参数的时候才声明,并在附近编写。更容易理解。
csharp
if (build == true)
{
// 连接到正在运行的 SAP2000
cOAPI mySapObject = (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
cSapModel mySapModel = mySapObject.SapModel;
// 获取选中的对象
int Numit = 0;
int[] ObjType = new int[0];
string[] ObjName = new string[0];
int ret = mySapModel.SelectObj.GetSelected(ref Numit, ref ObjType, ref ObjName);
// 声明点和截面名称列表
List<Point3d> _pnt1 = new List<Point3d>();
List<Point3d> _pnt2 = new List<Point3d>();
List<string> _prof = new List<string>();
// 遍历选中的对象
for (int i = 0; i < ObjName.Length; i++)
{
// 获取框架对象的起点和终点
string point1 = "";
string point2 = "";
ret = mySapModel.FrameObj.GetPoints(ObjName[i], ref point1, ref point2);
// 获取起点的坐标
double x1 = 0;
double y1 = 0;
double z1 = 0;
ret = mySapModel.PointObj.GetCoordCartesian(point1, ref x1, ref y1, ref z1);
// 获取终点的坐标
double x2 = 0;
double y2 = 0;
double z2 = 0;
ret = mySapModel.PointObj.GetCoordCartesian(point2, ref x2, ref y2, ref z2);
// 创建起点和终点的 Point3d 对象
Point3d pt1 = new Point3d(x1, y1, z1);
Point3d pt2 = new Point3d(x2, y2, z2);
// 添加起点和终点到相应的列表
_pnt1.Add(pt1);
_pnt2.Add(pt2);
// 获取框架对象的截面名称
string propname = "";
string sauto = "";
ret = mySapModel.FrameObj.GetSection(ObjName[i], ref propname, ref sauto);
// 添加截面名称到列表
_prof.Add(propname);
}
// 将起点、终点和截面名称列表赋值给输出参数
p1 = _pnt1;
p2 = _pnt2;
Profile = _prof;
}
做了以下改变:
-
将变量声明移动到了它们第一次被使用的位置附近,使代码更加紧凑和易于理解。
-
将点和截面名称列表的声明移动到了循环之前,使它们的作用域更加清晰。
-
将输出参数的赋值移动到了循环之后,使代码的逻辑更加清晰。
这样调整后的代码结构更加清晰,变量的声明和使用更加紧密,提高了代码的可读性和可维护性。