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
}
}