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
|
{
|
/// <summary>
|
/// 耗材孔位坐标计算类
|
/// </summary>
|
public class WellCalc
|
{
|
#region 根据labwareId获取耗材孔基本坐标数据(孔位与零点同向)
|
/// <summary>
|
/// 根据labwareId获取耗材孔基本坐标数据(孔位与零点同向)
|
/// </summary>
|
/// <param name="labware">耗材实体</param>
|
/// <param name="lattice">板位实体</param>
|
/// <returns>耗材孔基本坐标数据表</returns>
|
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<Labware> 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获取耗材孔基本坐标数据——正常摆放
|
/// <summary>
|
/// 根据labwareId获取耗材孔基本坐标数据——正常摆放
|
/// </summary>
|
/// <param name="labware">耗材实体</param>
|
/// <param name="lattice">板位实体</param>
|
/// <returns>耗材孔基本坐标数据表</returns>
|
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<Labware> 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摆放
|
/// <summary>
|
/// 根据labwareId获取耗材孔基本坐标数据——X1摆放
|
/// </summary>
|
/// <param name="labware">耗材实体</param>
|
/// <param name="lattice">板位实体</param>
|
/// <returns>耗材孔基本坐标数据</returns>
|
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<Labware> 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摆放,垂直孔
|
/// <summary>
|
/// 根据labwareId获取耗材孔基本坐标数据——X1摆放,垂直孔
|
/// </summary>
|
/// <param name="labware">耗材实体</param>
|
/// <param name="lattice">板位实体</param>
|
/// <returns>耗材孔基本坐标数据</returns>
|
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<Labware> 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获取当前板位上耗材的孔坐标数据--孔板(供给上层调用)
|
/// <summary>
|
/// 根据labwareId获取当前板位上耗材的孔坐标数据--孔板(供给上层调用)
|
/// </summary>
|
/// <param name="labware">耗材实体</param>
|
/// <param name="lattice">板位实体</param>
|
/// <param name="posVal">A1孔摆放模式:1左上角;2右上角;</param>
|
/// <returns>当前板位上耗材的孔坐标数据表</returns>
|
public DataTable GenerateWellCoordinate(Labware labware, Lattice lattice, int posVal)
|
{
|
ObservableCollection<Labware> 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获取当前台面上布局的所有同类耗材的孔坐标数据--吸头盒子(供给上层调用)
|
/// <summary>
|
/// 根据labwareId获取当前台面上布局的所有同类耗材的孔坐标数据--吸头盒子(供给上层调用)
|
/// </summary>
|
/// <param name="labware">耗材实体对象</param>
|
/// <param name="lattices">当前台面上具有此耗材的台面板位集合</param>
|
/// <param name="posVal">孔板放置方向</param>
|
/// <returns>同类型耗材在当前板位上所有孔位坐标数据表</returns>
|
public DataTable GenerateCurrentTablayoutWellCoordinate(Labware labware, List<Lattice> lattices, int posVal)
|
{
|
DataTable dtResult = new DataTable();
|
for (int k = 0; k < lattices.Count; k++)
|
{
|
ObservableCollection<Labware> 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获取当前板位上耗材的孔坐标数据--孔板(供给上层调用)
|
/// <summary>
|
/// 根据labwareId获取当前板位上耗材的孔坐标数据--孔板(供给上层调用)
|
/// </summary>
|
/// <param name="labware">耗材实体</param>
|
/// <param name="lattice">板位实体</param>
|
/// <param name="posVal">A1孔摆放模式:1左上角;2右上角;</param>
|
/// <returns>当前板位上耗材的孔坐标数据表</returns>
|
public DataTable GenerateWellCoordinateForChemsitry(Labware labware, Lattice lattice, int posVal)
|
{
|
ObservableCollection<Labware> 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
|
}
|
}
|