905 lines
26 KiB
C#
905 lines
26 KiB
C#
#pragma warning disable IDE1006 // 명명 스타일
|
|
|
|
using AR;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
|
|
|
namespace Project.Dialog
|
|
{
|
|
public partial class Model_Motion_Desc : Form
|
|
{
|
|
public string Value = string.Empty;
|
|
short axisIndex = 0;
|
|
eAxis axis = eAxis.Z_THETA;//
|
|
Color sbBackColor = Color.FromArgb(200, 200, 200);
|
|
DataSet1 ds;
|
|
|
|
public Model_Motion_Desc(DataSet1 ds_)
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.ds = ds_;
|
|
//this.bs.Filter = string.Empty;
|
|
//this.bsPos.Filter = string.Empty;
|
|
|
|
|
|
this.bs.DataSource = ds_;
|
|
this.bsPos.DataSource = ds_;
|
|
|
|
//this.bs.DataMember = string.Empty;
|
|
//this.bsPos.DataMember = string.Empty;
|
|
|
|
if (System.Diagnostics.Debugger.IsAttached == false)
|
|
{
|
|
// fb = new Dialog.fBlurPanel();
|
|
//fb.Show();
|
|
}
|
|
|
|
this.KeyPreview = true;
|
|
this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); };
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
this.FormClosed += __Closed;
|
|
|
|
var axlist = Enum.GetNames(typeof(eAxis));
|
|
var axvalues = Enum.GetValues(typeof(eAxis));
|
|
|
|
var preValueList = new List<ushort>();
|
|
|
|
//모터설정값을 보고 해당 모터의 목록을 표시한다.
|
|
//사용하지 않는 축은 표시하지 않는다
|
|
for (int i = 0; i < PUB.system.MotaxisCount; i++)
|
|
{
|
|
var axis = (eAxis)i;
|
|
var axisname = (eAxisName)i;
|
|
var axTitle = axisname.ToString();// axis.ToString();
|
|
|
|
if (PUB.system_mot.UseAxis(i) == false) continue;// axTitle = "Disable";
|
|
if (axTitle.Equals(i.ToString())) axTitle = "(No Name)";
|
|
this.dvMot.Rows.Add(
|
|
new string[] {
|
|
i.ToString(), axTitle, string.Empty, string.Empty, string.Empty,
|
|
string.Empty, string.Empty, string.Empty, string.Empty, string.Empty,
|
|
string.Empty
|
|
});
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private void __Load(object sender, EventArgs e)
|
|
{
|
|
this.Show();
|
|
////'Application.DoEvents();
|
|
|
|
//this.ds1.Clear();
|
|
//this.ds1.MCModel.Merge(Pub.mdm.dataSet.MCModel);
|
|
//this.ds1.MCModel.AcceptChanges();
|
|
//this.ds1.MCModel.TableNewRow += Model_TableNewRow;
|
|
|
|
this.bs.Filter = "isnull(title,'') <> ''";
|
|
this.bsPos.Filter = "isnull(title,'') = '' and isnull(motindex,-1) = -1";
|
|
this.tmDisplay.Start();
|
|
|
|
//button7.Enabled = !Pub.mot.HasHomeSetOff;
|
|
//dispal current
|
|
if (PUB.Result.isSetmModel)
|
|
{
|
|
arLabel18.Text = PUB.Result.mModel.Title;
|
|
//find data
|
|
var datas = this.ds1.MCModel.Select("", this.bs.Sort);
|
|
for (int i = 0; i < datas.Length; i++)
|
|
{
|
|
if (datas[i]["Title"].ToString() == PUB.Result.mModel.Title)
|
|
{
|
|
this.bs.Position = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else arLabel18.Text = "--";
|
|
|
|
if (this.ds1.MCModel.Rows.Count < 1)
|
|
{
|
|
var newdr = this.ds1.MCModel.NewMCModelRow();
|
|
newdr.Title = "Default";
|
|
newdr.pidx = -1;
|
|
newdr.PosIndex = -1;
|
|
newdr.idx = ds1.MCModel.Rows.Count + 1;
|
|
this.ds1.MCModel.AddMCModelRow(newdr);
|
|
}
|
|
|
|
PUB.log.RaiseMsg += log_RaiseMsg;
|
|
refreshtreen();
|
|
}
|
|
|
|
|
|
|
|
private void __Closed(object sender, FormClosedEventArgs e)
|
|
{
|
|
//if (fb != null) fb.Dispose();
|
|
this.tmDisplay.Enabled = false;
|
|
}
|
|
|
|
void log_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
private void tmDisplay_Tick(object sender, EventArgs e)
|
|
{
|
|
|
|
//this.lbMotPos.Text = $"X:{Pub.mot.GetActPos((int)eAxis.X1_TOP}";
|
|
//tabControl4.TabPages[0].Text = $"({axisIndex}) JOG";
|
|
if (PUB.joypad != null && PUB.joypad.IsOpen)
|
|
this.Text = "MODEL(MOTION) SETTING - JOYSTICK GROUP:" + PUB.Result.JoystickAxisGroup.ToString();
|
|
else
|
|
this.Text = "MODEL(MOTION) SETTING";
|
|
|
|
if (PUB.mot.IsInit == false)
|
|
{
|
|
//if (groupBox3.Enabled == true) groupBox3.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
//if (groupBox3.Enabled == false) groupBox3.Enabled = true;
|
|
|
|
//각축별 기본 상태를 표시해준다.
|
|
dvMot.SuspendLayout();
|
|
for (int r = 0; r < dvMot.RowCount; r++) // 오류수정 2111221
|
|
{
|
|
var row = this.dvMot.Rows[r];
|
|
var axis = int.Parse(row.Cells[0].Value.ToString());
|
|
row.Cells[0].Style.BackColor = PUB.mot.IsServOn(axis) ? Color.Lime : Color.Tomato;
|
|
row.Cells[2].Value = $"{PUB.mot.GetCmdPos(axis)}";
|
|
row.Cells[3].Value = $"{PUB.mot.GetActPos(axis)}";
|
|
row.Cells[4].Style.BackColor = PUB.mot.IsOrg(axis) ? Color.SkyBlue : Color.Gray;
|
|
row.Cells[5].Style.BackColor = PUB.mot.IsLimitN(axis) ? Color.Red : Color.Gray;
|
|
row.Cells[6].Style.BackColor = PUB.mot.IsLimitP(axis) ? Color.Red : Color.Gray;
|
|
row.Cells[7].Style.BackColor = PUB.mot.IsInp(axis) ? Color.SkyBlue : Color.Gray;
|
|
row.Cells[8].Style.BackColor = PUB.mot.IsServAlarm(axis) ? Color.Red : Color.Gray;
|
|
row.Cells[9].Style.BackColor = PUB.mot.IsHomeSet(axis) ? Color.Green : Color.Gray;
|
|
}
|
|
dvMot.ResumeLayout();
|
|
}
|
|
// this.tblFG.Invalidate();
|
|
}
|
|
|
|
private void dv_DataError(object sender, DataGridViewDataErrorEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void ChangeCurrentPosition(int Axis, NumericUpDown valueCtl)
|
|
{
|
|
valueCtl.Value = (decimal)PUB.mot.GetActPos(Axis);
|
|
}
|
|
/// <summary>
|
|
/// 상단목록에서 모션을 선택한 경우
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void MotAxisSelect(int axisindex)
|
|
{
|
|
|
|
|
|
RefreshMotorPosition();
|
|
}
|
|
|
|
private void bs_CurrentChanged_1(object sender, EventArgs e)
|
|
{
|
|
|
|
//BindingData();
|
|
}
|
|
void RefreshMotorPosition()
|
|
{
|
|
var drv = this.bs.Current as DataRowView;
|
|
if (drv == null) return;
|
|
if (dvMot.SelectedCells.Count < 1) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
|
|
//var rowindex = dvMot.SelectedCells[0].RowIndex;
|
|
//var row = dvMot.Rows[rowindex];
|
|
//var axisIndex = short.Parse(row.Cells[0].Value.ToString());
|
|
//var axis = (eAxis)this.axisIndex;
|
|
//var axisTitle = row.Cells[1].Value.ToString();
|
|
{
|
|
|
|
|
|
//위치정보 표시
|
|
bsPos.Filter = string.Format("pidx={0} and motindex = {1}", dr.idx, this.axisIndex);
|
|
|
|
////(위치정보) 데이터수량이 맞지 않으면 재 생성한다
|
|
//string[] list = null;
|
|
//Array val = null;
|
|
//Type axType = null;
|
|
//var axis = (eAxis)axisIndex;
|
|
|
|
//if (axis == eAxis.X2_FRT || axis == eAxis.X3_RER) axType = typeof(eX2SHTLoc);
|
|
//else if (axis == eAxis.X1_TOP) axType = typeof(eX1TOPLoc);
|
|
//else if (axis == eAxis.Y1_PIK) axType = typeof(eY1PIKLoc);
|
|
//else if (axis == eAxis.Y2_PRECLEAN) axType = typeof(eY2BRSLoc);
|
|
//else if (axis == eAxis.Y3_LASER) axType = typeof(eY3LSRLoc);
|
|
//else if (axis == eAxis.Y4_VIS) axType = typeof(eY4VISLoc); //전용으로바꿔야함
|
|
|
|
//else if (axis == eAxis.Z1_PIK) axType = typeof(eZ1PIKLoc);
|
|
//else if (axis == eAxis.Z2_PRECLEAN) axType = typeof(eZ2BRSLoc);
|
|
//else if (axis == eAxis.Z3_LASER) axType = typeof(eZ3LSRLoc);
|
|
//else if (axis == eAxis.Z4_VISION) axType = typeof(eZ4VISLoc);//전용으로바꿔야함
|
|
|
|
|
|
//else if (axis == eAxis.L_REAR || axis == eAxis.L_FRNT) axType = typeof(eLDLoc);
|
|
//else if (axis == eAxis.UR_NG || axis == eAxis.UR_OK || axis == eAxis.UF_NG || axis == eAxis.UF_OK) axType = typeof(eUDLoc);
|
|
|
|
//if (axType == null)
|
|
//{
|
|
// Util.MsgE("지정한 축에 대한 위치정보가 지정되지 않았습니다");
|
|
// return;
|
|
//}
|
|
|
|
|
|
//list = Enum.GetNames(axType);
|
|
//val = Enum.GetValues(axType);
|
|
|
|
//var sb = new System.Text.StringBuilder();
|
|
//var cntI = 0;
|
|
//var cntE = 0;
|
|
//var cntD = 0;
|
|
|
|
////posidx == -1인 데이터는 모두 소거한다
|
|
//var dellist = ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.PosIndex == -1).ToList(); //메인목록은 남겨둔다
|
|
//cntD += dellist.Count();
|
|
//foreach (var item in dellist)
|
|
// item.Delete();
|
|
//ds1.MCModel.AcceptChanges();
|
|
|
|
////모든데이터의 체크상태를 off한다.
|
|
//var alllist = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex);
|
|
//foreach (var item in alllist)
|
|
// item.Check = false;
|
|
//ds1.MCModel.AcceptChanges();
|
|
|
|
//for (int i = 0; i < list.Length; i++)
|
|
//{
|
|
// var arrTitle = list[i];
|
|
// var vv = val.GetValue(i);
|
|
// var arrIndex = (byte)vv;// ((eAxis)(val.GetValue(i)));
|
|
// if (arrIndex < 50) continue; //여기는 예약된 위치값이므로 사용하지 않는다
|
|
// var targetem = Enum.Parse(axType, vv.ToString());
|
|
|
|
// //이 값이 데이터가 없다면 추가하고, 있다면 이름을 검사해서 결과를 안내한다
|
|
// var pDr = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.PosIndex == arrIndex && t.MotIndex == axisIndex).FirstOrDefault();
|
|
// if (pDr == null)
|
|
// {
|
|
// //cntI += 1;
|
|
// //var newdr = this.ds1.MCModel.NewMCModelRow();
|
|
|
|
// //if (ds1.MCModel.Rows.Count == 0) newdr.idx = 1;
|
|
// //else newdr.idx = ds1.MCModel.Max(t => t.idx) + 1;
|
|
|
|
// //newdr.pidx = dr.idx;
|
|
// //newdr.MotIndex = this.axisIndex;
|
|
// //newdr.PosIndex = (short)arrIndex;
|
|
// //newdr.PosTitle = arrTitle;
|
|
// //newdr.Position = 0.0;
|
|
// //newdr.Speed = 50;
|
|
// //newdr.SpeedAcc = 100;
|
|
// //newdr.Check = true;
|
|
// //newdr.Description = targetem.DescriptionAttr();
|
|
// //newdr.Category = targetem.CategoryAttr();
|
|
|
|
// //this.ds1.MCModel.AddMCModelRow(newdr);
|
|
// //newdr.EndEdit();
|
|
// //sb.AppendLine("항목 추가 : " + arrTitle);
|
|
// }
|
|
// else
|
|
// {
|
|
// //이름이 다르다면 추가해준다.
|
|
// //if (pDr.PosTitle != arrTitle)
|
|
// //{
|
|
// // sb.AppendLine("(위치)항목 변경 : " + pDr.PosTitle + " => " + arrTitle);
|
|
// // cntE += 1;
|
|
// // pDr.PosTitle = arrTitle;
|
|
// //}
|
|
// ////pDr.Description = targetem.DescriptionAttr();
|
|
// ////pDr.Category = targetem.CategoryAttr();
|
|
// //pDr.EndEdit();
|
|
|
|
// pDr.Check = true;
|
|
// }
|
|
//}
|
|
|
|
////미사용개체 삭제한다
|
|
|
|
////var NotUseList = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.Check == false).ToList();
|
|
////cntD += NotUseList.Count();
|
|
////foreach (var item in NotUseList)
|
|
//// item.Delete();
|
|
//ds1.MCModel.AcceptChanges();
|
|
|
|
//if (cntI > 0) sb.AppendLine("추가수량 : " + cntI.ToString());
|
|
//if (cntE > 0) sb.AppendLine("변경수량 : " + cntE.ToString());
|
|
//if (cntD > 0) sb.AppendLine("삭제수량 : " + cntD.ToString());
|
|
|
|
////최종 확정
|
|
//this.ds1.MCModel.AcceptChanges();
|
|
|
|
//if (sb.Length > 0)
|
|
//{
|
|
// Util.MsgI(sb.ToString());
|
|
//}
|
|
}
|
|
}
|
|
|
|
private void chkJogMoveForce_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void btAdd_Click(object sender, EventArgs e)
|
|
{
|
|
var newdr = this.ds1.MCModel.NewMCModelRow();// this.bs.AddNew() as DataRowView;
|
|
newdr["Title"] = DateTime.Now.ToShortDateString();
|
|
newdr["pidx"] = -1;
|
|
newdr.PosIndex = -1;
|
|
newdr["idx"] = this.ds1.MCModel.Rows.Count + 1;
|
|
this.ds1.MCModel.AddMCModelRow(newdr);
|
|
this.bs.Position = this.bs.Count - 1;
|
|
|
|
//모터축을 자동 선택해줌
|
|
//radClick_MotAxisSelect(this.flowLayoutPanel1.Controls[0], null);
|
|
}
|
|
|
|
private void btDel_Click(object sender, EventArgs e)
|
|
{
|
|
var drv = this.bs.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dlg = UTIL.MsgQ("현재 선택된 자료를 삭제하시겠습니까?");
|
|
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
|
bs.RemoveCurrent();
|
|
this.ds1.MCModel.AcceptChanges();
|
|
}
|
|
|
|
private void btSave_Click(object sender, EventArgs e)
|
|
{
|
|
//button - save
|
|
this.dv.Focus();
|
|
this.Validate();
|
|
this.bs.EndEdit();
|
|
this.bsPos.EndEdit();
|
|
this.Validate();
|
|
|
|
this.DialogResult = DialogResult.OK;
|
|
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
//select
|
|
this.Invalidate();
|
|
this.bs.EndEdit();
|
|
var drv = this.bs.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
if (dr.Title == "") return;
|
|
this.Value = dr.Title;
|
|
DialogResult = System.Windows.Forms.DialogResult.OK;
|
|
}
|
|
|
|
private void button6_Click(object sender, EventArgs e)
|
|
{
|
|
//적용
|
|
|
|
this.bs.EndEdit();
|
|
this.bsPos.EndEdit();
|
|
this.Validate();
|
|
|
|
var drv = this.bs.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
|
|
this.Value = dr.Title;
|
|
|
|
PUB.Result.mModel.ReadValue(dr.Title, this.ds1.MCModel);
|
|
if (PUB.Result.mModel.isSet)
|
|
{
|
|
PUB.log.AddAT("모션모델선택완료 : " + PUB.Result.mModel.Title);
|
|
}
|
|
else UTIL.MsgE("적용 실패\n\n대상 모델 명이 없습니다");
|
|
}
|
|
|
|
private void button4_Click(object sender, EventArgs e)
|
|
{
|
|
var drv = this.bs.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
var dlg = UTIL.MsgQ(string.Format("다음 모델 정보를 복사하시겠습니까?\n\n모델명 : {0}", dr.Title));
|
|
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
|
|
|
var newdr = this.ds1.MCModel.NewMCModelRow();
|
|
UTIL.CopyData(dr, newdr);
|
|
newdr.Title += "-copy-";
|
|
newdr.idx = this.ds1.MCModel.OrderByDescending(t => t.idx).FirstOrDefault().idx + 1;
|
|
newdr.EndEdit();
|
|
this.ds1.MCModel.AddMCModelRow(newdr);
|
|
if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1;
|
|
}
|
|
|
|
private void arDatagridView2_CellClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
//position click
|
|
var dv = sender as DataGridView;
|
|
var col = this.dvPosition.Columns[e.ColumnIndex];
|
|
var colName = col.Name.ToLower();
|
|
if (colName == "btgo")
|
|
{
|
|
if (PUB.mot.HasHomeSetOff)
|
|
{
|
|
UTIL.MsgE("모션의 홈이 완료되지 않았습니다\n메인화면에서 '장치초기화'를 진행 하세요");
|
|
return;
|
|
}
|
|
//현재값으로 모터를 이동
|
|
//현재위치값으로 설정
|
|
var cell = dv.Rows[e.RowIndex].Cells["btpos"];
|
|
var value = (double)cell.Value;
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
var drParent = drv.Row as DataSet1.MCModelRow;
|
|
|
|
//일반 속도값을 찾는다
|
|
//var speedDr = drParent.Speed;// this.ds1.MCModel.Where(t => t.pidx == drParent.idx && t.MotIndex == axisIndex && t.PosIndex == -1 && t.SpdIndex == (int)eAxisSpeed.Normal).FirstOrDefault();
|
|
var speed = drParent.Speed;// speedDr.Speed;// (double)this.nudJogVel.Value;
|
|
var acc = drParent.SpeedAcc;// speedDr.SpeedAcc;// ; (double)nudAcc.Value;
|
|
|
|
|
|
var relative = false;
|
|
//if (ctl.motCommand == arFrame.Control.MotCommandButton.eCommand.RelativeMove)
|
|
// relative = true;
|
|
|
|
var msg = string.Format("모션의 위치를 변경 하시겠습니까\n" +
|
|
"축 : {0}\n" +
|
|
"현재위치 : {1}\n" +
|
|
"대상위치 : {2}\n" +
|
|
"이동속도 : {3}(가속도:{4})\n" +
|
|
"이동 시 충돌 가능성이 있는지 반드시 확인 하세요", axis, PUB.mot.GetActPos(axisIndex), value, speed, acc);
|
|
|
|
if (UTIL.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return;
|
|
|
|
var chkJogMoveForce = true;
|
|
if (!MOT.Move(axis, value, speed, acc, relative, !chkJogMoveForce, !chkJogMoveForce))
|
|
PUB.log.AddE("MOT:MOVE_:" + axis.ToString() + ",Msg=" + PUB.mot.ErrorMessage);
|
|
|
|
|
|
|
|
}
|
|
else if (colName == "btset")
|
|
{
|
|
if (PUB.mot.HasHomeSetOff)
|
|
{
|
|
UTIL.MsgE("모션의 홈이 완료되지 않았습니다\n메인화면에서 '장치초기화'를 진행 하세요");
|
|
return;
|
|
}
|
|
|
|
//현재위치값으로 설정
|
|
var cell = dv.Rows[e.RowIndex].Cells["btpos"];
|
|
var value = (double)cell.Value;
|
|
var nValue = Math.Round(PUB.mot.GetCmdPos(this.axisIndex), 4); //소수점4자리에서 반올림처리한다 210414
|
|
|
|
var msg1 = string.Format("모션의 설정값을 변경 하시겠습니까\n" +
|
|
"축 : {0}\n" +
|
|
"변경전 : {1}\n" +
|
|
"변경후 : {2}\n" +
|
|
"변경 후 '저장'을 눌러야 영구 기록 됩니다", this.axis, value, nValue);
|
|
|
|
if (UTIL.MsgQ(msg1) != System.Windows.Forms.DialogResult.Yes) return;
|
|
cell.Value = nValue;
|
|
}
|
|
else if (colName == "btpos")
|
|
{
|
|
//현재값 변경 팝업
|
|
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
|
var value = (double)cell.Value;
|
|
value = PUB.ChangeValuePopup(value, "위치 입력");
|
|
cell.Value = value;
|
|
}
|
|
else if (colName == "btspeed")
|
|
{
|
|
//현재값 변경 팝업
|
|
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
|
var value = (double)cell.Value;
|
|
value = PUB.ChangeValuePopup(value, "속도 입력");
|
|
cell.Value = value;
|
|
}
|
|
else if (colName == "btacc")
|
|
{
|
|
//현재값 변경 팝업
|
|
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
|
var value = (double)cell.Value;
|
|
value = PUB.ChangeValuePopup(value, "가속도 입력");
|
|
cell.Value = value;
|
|
}
|
|
else if (colName == "btdcc")
|
|
{
|
|
//현재값 변경 팝업
|
|
var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex];
|
|
if (cell.Value.ToString().isEmpty()) cell.Value = "0";
|
|
var value = (double)cell.Value;
|
|
value = PUB.ChangeValuePopup(value, "감속도 입력");
|
|
cell.Value = value;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
private void toolStripButton1_Click(object sender, EventArgs e)
|
|
{
|
|
var dlg = UTIL.MsgQ("모든 이동좌표의 속도를 일괄 변경하시겠습니까?");
|
|
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
|
var value = PUB.ChangeValuePopup(100.0, "일괄 속도 변경");
|
|
|
|
for (int i = 0; i < this.bsPos.Count; i++)
|
|
{
|
|
this.bsPos.Position = i;
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
dr.Speed = value;
|
|
dr.EndEdit();
|
|
}
|
|
}
|
|
|
|
private void toolStripButton2_Click_2(object sender, EventArgs e)
|
|
{
|
|
var dlg = UTIL.MsgQ("모든 이동좌표의 가(감)속도를 일괄 변경하시겠습니까?");
|
|
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
|
var value = PUB.ChangeValuePopup(100.0, "일괄 가(감)속도 변경");
|
|
|
|
for (int i = 0; i < this.bsPos.Count; i++)
|
|
{
|
|
this.bsPos.Position = i;
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
dr.SpeedAcc = value;
|
|
dr.EndEdit();
|
|
}
|
|
}
|
|
|
|
private void toolStripButton3_Click_1(object sender, EventArgs e)
|
|
{
|
|
var dlg = UTIL.MsgQ("모든 이동좌표의 감속도를 일괄 변경하시겠습니까?");
|
|
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
|
|
var value = PUB.ChangeValuePopup(0, "일괄 감속도 변경");
|
|
|
|
for (int i = 0; i < this.bsPos.Count; i++)
|
|
{
|
|
this.bsPos.Position = i;
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
dr.SpeedDcc = value;
|
|
dr.EndEdit();
|
|
}
|
|
}
|
|
|
|
|
|
private void dvMot_SelectionChanged(object sender, EventArgs e)
|
|
{
|
|
if (dvMot.SelectedRows.Count < 1)
|
|
{
|
|
Console.WriteLine("no selecte");
|
|
this.axisIndex = -1;
|
|
this.axis = (eAxis)axisIndex;
|
|
}
|
|
else
|
|
{
|
|
var selrow = dvMot.SelectedRows[0];
|
|
this.axisIndex = short.Parse(selrow.Cells["dvc_axis"].Value.ToString());
|
|
this.axis = (eAxis)axisIndex;
|
|
MotAxisSelect(this.axisIndex);
|
|
Console.WriteLine($"select indx {axisIndex}");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private void toolStripButton5_Click(object sender, EventArgs e)
|
|
{
|
|
this.Validate();
|
|
this.bs.EndEdit();
|
|
this.bsPos.EndEdit();
|
|
|
|
//using (var f = new Dialog.Motion_MoveToGroup(this.ds,arLabel18.Text))
|
|
//{
|
|
// if (f.ShowDialog() == DialogResult.OK)
|
|
// {
|
|
// this.bs.EndEdit();
|
|
// this.bsPos.EndEdit();
|
|
// }
|
|
//}
|
|
|
|
}
|
|
|
|
void refreshtreen()
|
|
{
|
|
//모든데이터를 가져와서 트리뷰를 처리한다.
|
|
|
|
var cat = this.ds.MCModel.GroupBy(t => t.Category).ToList();
|
|
var catorders = cat.OrderBy(t => t.Key).ToList();
|
|
|
|
//var cnt = 0;
|
|
this.treeView1.Nodes.Clear();
|
|
foreach (var item in catorders)
|
|
{
|
|
if (item.Key.isEmpty()) continue;
|
|
var catenames = item.Key.Split(',');
|
|
foreach (var catename in catenames)
|
|
{
|
|
var grpname = catename.Split('|')[0];
|
|
if (catename.Split('|').Length < 2) continue;
|
|
var itemname = catename.Split('|')[1];
|
|
if (treeView1.Nodes.ContainsKey(grpname) == false)
|
|
{
|
|
var nd = treeView1.Nodes.Add(grpname, grpname);
|
|
nd.Nodes.Add(itemname);
|
|
}
|
|
else
|
|
{
|
|
if (itemname.StartsWith("F01"))// == "F01_FSOCKET_BTM")
|
|
{
|
|
|
|
}
|
|
var nd = treeView1.Nodes[grpname];
|
|
if (nd.Nodes.ContainsKey(itemname) == false)
|
|
{
|
|
var snd = nd.Nodes.Add(itemname, itemname);
|
|
if (itemname.StartsWith("R"))
|
|
snd.ForeColor = Color.Blue;
|
|
else if (itemname.StartsWith("T"))
|
|
snd.ForeColor = Color.Magenta;
|
|
}
|
|
else
|
|
{
|
|
var snd = nd.Nodes[itemname];
|
|
if (itemname.StartsWith("R"))
|
|
snd.ForeColor = Color.Blue;
|
|
else if (itemname.StartsWith("T"))
|
|
snd.ForeColor = Color.Magenta;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
treeView1.ExpandAll();
|
|
if (treeView1.Nodes.Count > 0)
|
|
treeView1.SelectedNode = this.treeView1.Nodes[0];
|
|
|
|
}
|
|
void refreshlist()
|
|
{
|
|
this.listView1.Clear();
|
|
this.listView1.FullRowSelect = true;
|
|
this.listView1.View = View.Details;
|
|
this.listView1.Columns.Add("item");
|
|
this.listView1.Columns[0].Width = (int)(this.listView1.Width - listView1.Width * 0.1f);
|
|
this.listView1.GridLines = true;
|
|
this.listView1.AllowDrop = true;
|
|
|
|
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
if (drv == null) return;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
if (dr.Category.isEmpty()) return;
|
|
|
|
var catelist = dr.Category.Split(',');
|
|
List<string> cats = new List<string>();
|
|
|
|
|
|
foreach (var cate in catelist)
|
|
{
|
|
if (cate.isEmpty()) continue;
|
|
if (cats.Contains(cate) == false) cats.Add(cate);
|
|
}
|
|
|
|
foreach (var cate in cats.OrderBy(t=>t))
|
|
{
|
|
if (this.listView1.Items.ContainsKey(cate) == false)
|
|
{
|
|
var lv = this.listView1.Items.Add(cate, cate, 0);
|
|
}
|
|
else
|
|
{
|
|
//이미 있다.
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
private void bsPos_CurrentChanged(object sender, EventArgs e)
|
|
{
|
|
//포지션데이터가 움직이면 처리한다.
|
|
refreshlist();
|
|
}
|
|
|
|
private void toolStripButton1_Click_1(object sender, EventArgs e)
|
|
{
|
|
//트립에서 선택된 아이템을 추가한다.
|
|
var tn = this.treeView1.SelectedNode;
|
|
if (tn == null) return;
|
|
if (tn.Level != 1)
|
|
{
|
|
if (tn.Nodes.Count < 1)
|
|
{
|
|
UTIL.MsgE("하위 항목이 없습니다");
|
|
return;
|
|
}
|
|
|
|
var dlg = UTIL.MsgQ($"{tn.Nodes.Count}건의 자료를 모두 추가 할까요?");
|
|
if (dlg != DialogResult.Yes) return;
|
|
var ucnt = 0;
|
|
foreach (TreeNode node in tn.Nodes)
|
|
{
|
|
var value = node.Parent.Text + "|" + node.Text;
|
|
if (this.listView1.Items.ContainsKey(value) == false)
|
|
{
|
|
this.listView1.Items.Add(value);
|
|
ucnt += 1;
|
|
}
|
|
}
|
|
UTIL.MsgI($"{ucnt}건의 아이템이 추가 되었습니다");
|
|
//현재목록을 리스트로 만들고 업데이트한.ㄷ
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
|
|
List<string> items = new List<string>();
|
|
|
|
foreach (ListViewItem item in listView1.Items)
|
|
items.Add(item.SubItems[0].Text);
|
|
|
|
dr.Category = string.Join(",", items);
|
|
dr.EndEdit();
|
|
}
|
|
else
|
|
{
|
|
var value = tn.Parent.Text + "|" + tn.Text;
|
|
if (this.listView1.Items.ContainsKey(value) == false)
|
|
{
|
|
this.listView1.Items.Add(value);
|
|
//현재목록을 리스트로 만들고 업데이트한.ㄷ
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
|
|
List<string> items = new List<string>();
|
|
|
|
foreach (ListViewItem item in listView1.Items)
|
|
items.Add(item.SubItems[0].Text);
|
|
|
|
dr.Category = string.Join(",", items);
|
|
dr.EndEdit();
|
|
|
|
}
|
|
else UTIL.MsgE("이미 존재하는 항목 입니다.");
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
private void toolStripButton2_Click(object sender, EventArgs e)
|
|
{
|
|
//선택된 항목을 삭제한다.
|
|
if (this.listView1.FocusedItem == null) return;
|
|
this.listView1.Items.Remove(this.listView1.FocusedItem);
|
|
|
|
//현재목록을 리스트로 만들고 업데이트한.ㄷ
|
|
var drv = this.bsPos.Current as DataRowView;
|
|
var dr = drv.Row as DataSet1.MCModelRow;
|
|
|
|
List<string> items = new List<string>();
|
|
|
|
foreach (ListViewItem item in listView1.Items)
|
|
items.Add(item.SubItems[0].Text);
|
|
|
|
dr.Category = string.Join(",", items);
|
|
dr.EndEdit();
|
|
}
|
|
|
|
private void toolStripButton3_Click(object sender, EventArgs e)
|
|
{
|
|
refreshlist();
|
|
}
|
|
|
|
private void toolStripButton4_Click(object sender, EventArgs e)
|
|
{
|
|
//현재선택된 아이템의 데이터를 표시한다.
|
|
var tn = this.treeView1.SelectedNode;
|
|
if (tn == null) return;
|
|
if (tn.Level == 0)
|
|
{
|
|
bsPos.Filter = $"Category like '%{tn.Text}|%'";
|
|
}
|
|
else
|
|
{
|
|
bsPos.Filter = $"Category like '%{tn.Parent.Text}|{tn.Text}%'";
|
|
}
|
|
}
|
|
|
|
private void toolStripButton6_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void toolStripButton7_Click(object sender, EventArgs e)
|
|
{
|
|
refreshtreen();
|
|
}
|
|
|
|
private void toolStripButton8_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
var tn = treeView1.SelectedNode;
|
|
if (tn == null) return;
|
|
|
|
var old = tn.Text.Trim();
|
|
var f = new AR.Dialog.fInput("입력",tn.Text);
|
|
if (f.ShowDialog() != DialogResult.OK) return;
|
|
|
|
if (f.ValueString.isEmpty()) return;
|
|
var targetidx = tn.Level;
|
|
|
|
foreach (DataSet1.MCModelRow dr in this.ds.MCModel.Rows)
|
|
{
|
|
if (dr.RowState == DataRowState.Deleted || dr.RowState == DataRowState.Detached) continue;
|
|
|
|
if (dr.Category.isEmpty()) continue;
|
|
|
|
var cats = dr.Category.Split(',');
|
|
List<string> items = new List<string>();
|
|
foreach (var cat in cats)
|
|
{
|
|
if (cat.isEmpty()) continue;
|
|
|
|
var buffer = cat.Split('|');
|
|
|
|
if (targetidx == 0)
|
|
{
|
|
buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString);
|
|
}
|
|
else
|
|
{
|
|
//1번의 경우 변경을 하려면 0번이 일치해야한다.
|
|
if (buffer[0] == tn.Parent.Text)
|
|
{
|
|
buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString);
|
|
}
|
|
}
|
|
|
|
items.Add(string.Join("|", buffer));
|
|
}
|
|
|
|
dr.Category = string.Join(",", items.ToArray());
|
|
dr.EndEdit();
|
|
}
|
|
|
|
refreshtreen();
|
|
}
|
|
|
|
private void toolStripButton9_Click(object sender, EventArgs e)
|
|
{
|
|
dvPosition.AutoResizeColumns();
|
|
}
|
|
}
|
|
}
|
|
|