using DataRWDAL; using HxEnum; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using XCommon; using XHandler.Class.DataEx; namespace XImagingXhandler.XDAL { /// /// 耗材孔位坐标计算类 /// public class WellCalc { #region 根据labwareId获取耗材孔基本坐标数据(孔位与零点同向) /// /// 根据labwareId获取耗材孔基本坐标数据(孔位与零点同向) /// /// 耗材实体 /// 板位实体 /// 耗材孔基本坐标数据表 public DataTable GenerateWellBaseCoordinate(Labware labware, Lattice lattice) { DataTable dt = new DataTable(); DataColumn dc = new DataColumn(); dc.ColumnName = "lattice_id";//板位Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "labware_id";//孔板Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "wellname";//孔名称 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_X";//板内x轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Y";//板内y轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Z";//板内底部高z轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "well_top_shape";//板内孔口形状;1:圆形;2:方形 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_r";//孔半径或者半边长度 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "isUsed";//如果是吸头则表示吸头是否被用过;1;用过;0:未用过 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "lattice_num";//板位编号 dt.Columns.Add(dc); ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } if (labware1.Count == 1) { if (labware1[0].labware_tubeshelf_type == 1)// 异形管架单个孔位计算 { labware1[0].labwareWellInfoList = DataRWDAL.LabwareDB.GetSpecialLabwareWellInfo(labware1[0].labware_id); foreach (LabwareWellInfo l in labware1[0].labwareWellInfoList) { DataRow dr = dt.NewRow(); dr["lattice_id"] = lattice.lattice_id; dr["labware_id"] = l.labware_id; dr["wellname"] = l.labware_well_name; dr["axis_b_X"] = l.labware_well_center_x; dr["axis_b_Y"] = l.labware_well_center_y; if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tube).ToString()) // 孔板 { dr["axis_b_Z"] = labware1[0].labware_height-l.labware_well_deepval; } dr["well_top_shape"] = labware1[0].well_shape; if (labware1[0].well_shape == 1) // 孔洞形状,1:圆柱体 { dr["axis_b_r"] = labware1[0].well_mouth_radius; } else { dr["axis_b_r"] = (labware1[0].well_top_x / 2); if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) // 试剂槽 { dr["axis_b_X"] = (float)Convert.ToDouble(dr["axis_b_X"]) + (float)Convert.ToDouble(dr["axis_b_r"]); dr["axis_b_Y"] = (float)Convert.ToDouble(dr["axis_b_Y"]) + 1f; } } dr["isUsed"] = 0; dr["lattice_num"] = lattice.lattice_num; dt.Rows.Add(dr); } } else { double a1DistanceX = 0; // A1孔中心距短边的距离 double a1DistanceY = 0; // A1孔中心距长边的距离 for (int nCol = 1; nCol < (int)labware1[0].number_column + 1; nCol++) { for (int nRow = 1; nRow < labware1[0].number_row + 1; nRow++) { string rowName = ComUtility.GetRowChar(nRow - 1); a1DistanceX = (double)labware1[0].a1_distance_x; a1DistanceY = (double)labware1[0].a1_distance_y; // A1 string wellName = rowName + nCol.ToString(); DataRow dr = dt.NewRow(); dr["lattice_id"] = lattice.lattice_id; dr["labware_id"] = labware1[0].labware_id; dr["wellname"] = wellName; dr["axis_b_X"] = a1DistanceX + ((nCol - 1) * labware1[0].a1_a2_distance) * Math.Cos((double)lattice.lattice_lp_X); dr["axis_b_Y"] = a1DistanceY + ((nRow - 1) * labware1[0].a1_b1_distance) * Math.Cos((double)lattice.lattice_lp_Y); if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Plate).ToString() || labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tube).ToString()) // 孔板 { dr["axis_b_Z"] = labware1[0].well_bottom_height; } else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.TipsBox).ToString()) // 吸头盒 { dr["axis_b_Z"] = labware1[0].labware_height - labware1[0].press_tip_depth; // 加载Tip头的高度 } else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) // 试剂槽 { dr["axis_b_Z"] = labware1[0].well_bottom_height; } else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.CircularDish).ToString()) // 圆形皿 { dr["axis_b_Z"] = labware1[0].labware_round_bottom_outheight - labware1[0].labware_round_bottom_inheight; } dr["well_top_shape"] = labware1[0].well_shape; if (labware1[0].well_shape == 1) // 孔洞形状,1:圆柱体 { dr["axis_b_r"] = labware1[0].well_mouth_radius; } else { dr["axis_b_r"] = (labware1[0].well_top_x / 2); if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) // 试剂槽 { dr["axis_b_X"] = (float)Convert.ToDouble(dr["axis_b_X"]) + (float)Convert.ToDouble(dr["axis_b_r"]); dr["axis_b_Y"] = (float)Convert.ToDouble(dr["axis_b_Y"]) + 1f; } } dr["isUsed"] = 0; dr["lattice_num"] = lattice.lattice_num; dt.Rows.Add(dr); } } } } return dt; } #endregion #region 根据labwareId获取耗材孔基本坐标数据——正常摆放 /// /// 根据labwareId获取耗材孔基本坐标数据——正常摆放 /// /// 耗材实体 /// 板位实体 /// 耗材孔基本坐标数据表 public DataTable GenerateWellBaseCoordinateNormal(Labware labware, Lattice lattice) { DataTable dt = new DataTable(); DataColumn dc = new DataColumn(); dc.ColumnName = "lattice_id";//板位Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "labware_id";//孔板Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "wellname";//孔名称 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_X";//板内x轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Y";//板内y轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Z";//板内底部高z轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "well_top_shape";//板内孔口形状;1:圆形;2:方形 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_r";//孔半径或者半边长度 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "isUsed";//如果是吸头则表示吸头是否被用过;1;用过;0:未用过 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "lattice_num";//板位编号 dt.Columns.Add(dc); ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } if (labware1.Count == 1) { double baseX = 0; double baseY = 0; //竖着摆放 for (int i = 1; i < (int)labware1[0].number_row + 1; i++) { string rowName = ComUtility.GetRowChar(i - 1); for (int j = 1; j < labware1[0].number_column + 1; j++) { baseX = (double)labware1[0].a1_distance_y; baseY = (double)labware1[0].a1_distance_x; string wellName = rowName + j.ToString(); //alWell.Add(wellName); DataRow dr = dt.NewRow(); dr[0] = lattice.lattice_id; dr[1] = labware.labware_id; dr[2] = wellName; dr[3] = baseX + ((j - 1) * labware1[0].a1_b1_distance) * Math.Cos((double)lattice.lattice_lp_X); dr[4] = baseY + ((i - 1) * labware1[0].a1_a2_distance) * Math.Cos((double)lattice.lattice_lp_Y); dr[5] = labware1[0].labware_height - labware1[0].well_depth; dr[6] = labware1[0].well_shape; if (labware1[0].well_shape == 1) { dr[7] = labware1[0].well_mouth_radius; } else { dr[7] = (labware1[0].well_top_x / 2); } dr[8] = 0; dr[9] = lattice.lattice_num; dt.Rows.Add(dr); } } } return dt; } #endregion #region 根据labwareId获取耗材孔基本坐标数据——X1摆放 /// /// 根据labwareId获取耗材孔基本坐标数据——X1摆放 /// /// 耗材实体 /// 板位实体 /// 耗材孔基本坐标数据 public DataTable GenerateWellBaseCoordinateX1(Labware labware, Lattice lattice) { DataTable dt = new DataTable(); DataColumn dc = new DataColumn(); dc.ColumnName = "lattice_id";//板位Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "labware_id";//孔板Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "wellname";//孔名称 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_X";//板内x轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Y";//板内y轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Z";//板内底部高z轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "well_top_shape";//板内孔口形状;1:圆形;2:方形 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_r";//孔半径或者半边长度 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "isUsed";//如果是吸头则表示吸头是否被用过;1;用过;0:未用过 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "lattice_num";//板位编号 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "row_num";//板位行号 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "column_num";//板位列号 dt.Columns.Add(dc); ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } if (labware1.Count == 1) { double baseX = 0; double baseY = 0; //竖着摆放 for (int i = 1; i < (int)labware1[0].number_row + 1; i++) { string rowName = ComUtility.GetRowChar(i - 1); for (int j = 1; j < labware1[0].number_column + 1; j++) { baseX = (double)labware1[0].a1_distance_x; baseY = (double)labware1[0].a1_distance_y; string wellName = rowName + j.ToString(); //alWell.Add(wellName); DataRow dr = dt.NewRow(); dr[0] = lattice.lattice_id; dr[1] = labware1[0].labware_id; dr[2] = wellName; dr[3] = baseX + ((j - 1) * labware1[0].a1_a2_distance) * Math.Cos((double)lattice.lattice_lp_X); dr[4] = baseY + ((i - 1) * labware1[0].a1_b1_distance) * Math.Cos((double)lattice.lattice_lp_Y); // 孔板 if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Plate).ToString() || labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tube).ToString()) { dr[5] = labware1[0].well_bottom_height; } // 吸头盒 else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.TipsBox).ToString()) { if (labware1[0].press_tip_power != 0)//利用功率下压 { dr[5] = labware1[0].labware_height; } else { dr[5] = labware1[0].labware_height - labware1[0].press_tip_depth; //加载Tip头的高度 } } // 试剂槽 else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) { dr[5] = labware1[0].well_bottom_height; } // 圆形皿 else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.CircularDish).ToString()) { dr[5] = labware1[0].labware_round_bottom_outheight - labware1[0].labware_round_bottom_inheight; } dr[6] = labware1[0].well_shape; // 孔洞形状,1:圆柱体;2:立方体 if (labware1[0].well_shape == 1) { dr[7] = labware1[0].well_mouth_radius; } else { dr[7] = (labware1[0].well_top_x / 2); // 试剂槽 if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) { dr[3] = (float)Convert.ToDouble(dr[3]) + (float)Convert.ToDouble(dr[7]); dr[4] = (float)Convert.ToDouble(dr[4]) + 4f; } } dr[8] = 0; dr[9] = lattice.lattice_num; dr[10] = i; dr[11] = j; dt.Rows.Add(dr); } } } return dt; } #endregion #region 根据labwareId获取耗材孔基本坐标数据——X1摆放,垂直孔 /// /// 根据labwareId获取耗材孔基本坐标数据——X1摆放,垂直孔 /// /// 耗材实体 /// 板位实体 /// 耗材孔基本坐标数据 public DataTable GenerateWellBaseCoordinateX1SortVertical(Labware labware, Lattice lattice) { DataTable dt = new DataTable(); DataColumn dc = new DataColumn(); dc.ColumnName = "lattice_id";//板位Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "labware_id";//孔板Id dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "wellname";//孔名称 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_X";//板内x轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Y";//板内y轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_Z";//板内底部高z轴 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "well_top_shape";//板内孔口形状;1:圆形;2:方形 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "axis_b_r";//孔半径或者半边长度 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "isUsed";//如果是吸头则表示吸头是否被用过;1;用过;0:未用过 dt.Columns.Add(dc); dc = new DataColumn(); dc.ColumnName = "lattice_num";//板位编号 dt.Columns.Add(dc); ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } if (labware1.Count == 1) { double baseX = 0; double baseY = 0; //竖着摆放 for (int i = 1; i < (int)labware1[0].number_column + 1; i++) { for (int j = 1; j < labware1[0].number_row + 1; j++) { string rowName = ComUtility.GetRowChar(j - 1); baseX = (double)labware1[0].a1_distance_x; baseY = (double)labware1[0].a1_distance_y; string wellName = rowName + i.ToString(); //alWell.Add(wellName); DataRow dr = dt.NewRow(); dr[0] = lattice.lattice_id; dr[1] = labware1[0].labware_id; dr[2] = wellName; dr[3] = baseX + ((i - 1) * labware1[0].a1_a2_distance) * Math.Cos((double)lattice.lattice_lp_X); dr[4] = baseY + ((j - 1) * labware1[0].a1_b1_distance) * Math.Cos((double)lattice.lattice_lp_Y); // 孔板 if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Plate).ToString() || labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Tube).ToString()) { dr[5] = labware1[0].well_bottom_height; } // 吸头盒 else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.TipsBox).ToString()) { if (labware1[0].press_tip_power != 0)//利用功率下压 { dr[5] = labware1[0].labware_height; } else { dr[5] = labware1[0].labware_height - labware1[0].press_tip_depth; //加载Tip头的高度 } } // 试剂槽 else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) { dr[5] = labware1[0].well_bottom_height; //加载Tip头的高度 } // 圆形皿 else if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.CircularDish).ToString()) { dr[5] = labware1[0].labware_round_bottom_outheight - labware1[0].labware_round_bottom_inheight; } dr[6] = labware1[0].well_shape; if (labware1[0].well_shape == 1) { dr[7] = labware1[0].well_mouth_radius; } else { dr[7] = (labware1[0].well_top_x / 2); // 试剂槽 if (labware1[0].labware_type_id == EnumManagement.GetEnumValue(ConsumableTypeEnum.Through).ToString()) { dr[3] = (float)Convert.ToDouble(dr[3]) + (float)Convert.ToDouble(dr[7]); dr[4] = (float)Convert.ToDouble(dr[4]) + 4f; } } dr[8] = 0; dr[9] = lattice.lattice_num; dt.Rows.Add(dr); } } } return dt; } #endregion #region 根据labwareId获取当前板位上耗材的孔坐标数据--孔板(供给上层调用) /// /// 根据labwareId获取当前板位上耗材的孔坐标数据--孔板(供给上层调用) /// /// 耗材实体 /// 板位实体 /// A1孔摆放模式:1左上角;2右上角; /// 当前板位上耗材的孔坐标数据表 public DataTable GenerateWellCoordinate(Labware labware, Lattice lattice, int posVal) { ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } DataTable dt = new DataTable(); if (posVal == 1) { dt = this.GenerateWellBaseCoordinateNormal(labware, lattice); } else if (posVal == 2) { dt = this.GenerateWellBaseCoordinate(labware, lattice); } else if (posVal == 3) { dt = this.GenerateWellBaseCoordinateX1(labware, lattice); } else if (posVal == 4) { dt = this.GenerateWellBaseCoordinateX1SortVertical(labware, lattice); } Lattice lattice1 = LatticeDB.GetLatticeDataByIdFromdb(lattice.lattice_id); for (int i = 0; i < dt.Rows.Count; i++) { if (posVal != 3 && posVal != 4) { dt.Rows[i]["axis_b_X"] = lattice1.lattice_X + Convert.ToDouble(dt.Rows[i]["axis_b_X"]); dt.Rows[i]["axis_b_Y"] = Convert.ToDouble(dt.Rows[i]["axis_b_Y"]) + lattice1.lattice_Y; dt.Rows[i]["axis_b_Z"] = lattice1.lattice_Z - Convert.ToDouble(dt.Rows[i]["axis_b_Z"]); } else if (posVal == 3 || posVal == 4) { dt.Rows[i]["axis_b_X"] = lattice1.lattice_X - Convert.ToDouble(dt.Rows[i]["axis_b_X"]); dt.Rows[i]["axis_b_Y"] = Convert.ToDouble(dt.Rows[i]["axis_b_Y"]) + lattice1.lattice_Y; dt.Rows[i]["axis_b_Z"] = lattice1.lattice_Z - Convert.ToDouble(dt.Rows[i]["axis_b_Z"]); } dt.Rows[i][5] = (double)(Convert.ToDouble(dt.Rows[i][5]) + (labware.press_tip_power - labware.press_tipinto_depth));//装枪下压实际高度重新补差 } return dt; } #endregion #region 根据labwareId获取当前台面上布局的所有同类耗材的孔坐标数据--吸头盒子(供给上层调用) /// /// 根据labwareId获取当前台面上布局的所有同类耗材的孔坐标数据--吸头盒子(供给上层调用) /// /// 耗材实体对象 /// 当前台面上具有此耗材的台面板位集合 /// 孔板放置方向 /// 同类型耗材在当前板位上所有孔位坐标数据表 public DataTable GenerateCurrentTablayoutWellCoordinate(Labware labware, List lattices, int posVal) { DataTable dtResult = new DataTable(); for (int k = 0; k < lattices.Count; k++) { ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } DataTable dt = new DataTable(); if (posVal == 1) { dt = this.GenerateWellBaseCoordinateNormal(labware, lattices[k]); } else if (posVal == 2) { dt = this.GenerateWellBaseCoordinate(labware, lattices[k]); } else if (posVal == 3) { dt = this.GenerateWellBaseCoordinateX1(labware, lattices[k]); } else if (posVal == 4) { dt = this.GenerateWellBaseCoordinateX1SortVertical(labware, lattices[k]); } Lattice lattice1 = LatticeDB.GetLatticeDataByIdFromdb(lattices[k].lattice_id); for (int i = 0; i < dt.Rows.Count; i++) { if (posVal != 3 && posVal != 4) { dt.Rows[i][3] = Convert.ToDouble(dt.Rows[i][3]) + lattice1.lattice_X; dt.Rows[i][4] = Convert.ToDouble(dt.Rows[i][4]) + lattice1.lattice_Y; dt.Rows[i][5] = lattice1.lattice_Z - Convert.ToDouble(dt.Rows[i][5]); } else if (posVal == 3 || posVal == 4) { dt.Rows[i][3] = lattice1.lattice_X - Convert.ToDouble(dt.Rows[i][3]); dt.Rows[i][4] = Convert.ToDouble(dt.Rows[i][4]) + lattice1.lattice_Y; dt.Rows[i][5] = lattice1.lattice_Z - Convert.ToDouble(dt.Rows[i][5]); } } if (k == 0) { for (int n = 0; n < dt.Columns.Count; n++) { dtResult.Columns.Add(dt.Columns[n].ColumnName); } } if (dtResult != null) { for (int j = 0; j < dt.Rows.Count; j++) { dtResult.ImportRow(dt.Rows[j]); } } } return dtResult; } #endregion #region 化学工作站专用 #region 根据labwareId获取当前板位上耗材的孔坐标数据--孔板(供给上层调用) /// /// 根据labwareId获取当前板位上耗材的孔坐标数据--孔板(供给上层调用) /// /// 耗材实体 /// 板位实体 /// A1孔摆放模式:1左上角;2右上角; /// 当前板位上耗材的孔坐标数据表 public DataTable GenerateWellCoordinateForChemsitry(Labware labware, Lattice lattice, int posVal) { ObservableCollection labware1 = LabwareDB.GetLabware(1, labware.labware_id); if (labware1.Count == 0) { labware1 = LabwareDB.GetLabware(0, labware.labware_id); } DataTable dt = new DataTable(); if (posVal == 2) { dt = this.GenerateWellBaseCoordinate(labware, lattice); } else if (posVal == 3) { dt = this.GenerateWellBaseCoordinateX1(labware, lattice); } //Lattice lattice1 = LatticeDB.GetLatticeDataByIdFromdb(lattice.lattice_id); for (int i = 0; i < dt.Rows.Count; i++) { if (posVal != 3 && posVal != 4) { dt.Rows[i]["axis_b_X"] = lattice.lattice_X + Convert.ToDouble(dt.Rows[i]["axis_b_X"]); dt.Rows[i]["axis_b_Y"] = Convert.ToDouble(dt.Rows[i]["axis_b_Y"]) + lattice.lattice_Y; dt.Rows[i]["axis_b_Z"] = lattice.lattice_Z - Convert.ToDouble(dt.Rows[i]["axis_b_Z"]); } else if (posVal == 3 || posVal == 4) { dt.Rows[i]["axis_b_X"] = lattice.lattice_X - Convert.ToDouble(dt.Rows[i]["axis_b_X"]); dt.Rows[i]["axis_b_Y"] = Convert.ToDouble(dt.Rows[i]["axis_b_Y"]) + lattice.lattice_Y; dt.Rows[i]["axis_b_Z"] = lattice.lattice_Z - Convert.ToDouble(dt.Rows[i]["axis_b_Z"]); } dt.Rows[i][5] = (double)(Convert.ToDouble(dt.Rows[i][5]) + (labware.press_tip_power - labware.press_tipinto_depth));//装枪下压实际高度重新补差 } return dt; } #endregion #endregion } }