private void cmbDhRefresh(int nNum) { if ((nNum >= 0) && (nNum < cmbDh.Items.Count)) { Ojw.CEncryption.SetEncrypt("OJW5014"); // 암호화 해제는 보안이 필요 String strForward = Encoding.Default.GetString(Ojw.CEncryption.Encryption(false, m_C3d.GetHeader_pSEncryptKinematics_encryption()[nNum].byteEncryption)); if (strForward != null) { CDhParamAll CDh = new CDhParamAll(); if (strForward.Length > 0) { Ojw.CKinematics.CForward.MakeDhParam(strForward, out CDh); SetDHString(strForward);//CDh); } } Ojw.CEncryption.SetEncrypt("OJW5014"); // 암호화 해제는 보안이 필요 txtInverseKinematics.Text = Encoding.Default.GetString(Ojw.CEncryption.Encryption(false, m_C3d.GetHeader_pSEncryptInverseKinematics_encryption()[nNum].byteEncryption)); txtGroupName.Text = m_C3d.GetHeader_pstrGroupName()[nNum]; cmbDh.SelectedIndex = nNum; cmbSecret.SelectedIndex = m_C3d.GetHeader_pnSecret()[nNum]; cmbKinematicsType.SelectedIndex = m_C3d.GetHeader_pnType()[nNum]; } }
private void SetDHString(CDhParamAll CDh) { m_bMiddleOfInserting = true; m_CGridView.Clear(); m_CGridView.Add(CDh.GetCount()); for (int i = 0; i < CDh.GetCount(); i++) { m_CGridView.SetEnable(i, true); m_CGridView.Set(i, 0, CDh.GetData(i).dA); // A m_CGridView.Set(i, 1, CDh.GetData(i).dD); // D m_CGridView.Set(i, 2, CDh.GetData(i).dTheta); // Theta m_CGridView.Set(i, 3, CDh.GetData(i).dAlpha); // Alpha m_CGridView.Set(i, 4, CDh.GetData(i).nAxisNum); // Axis m_CGridView.Set(i, 5, CDh.GetData(i).nAxisDir); // Dir } m_bMiddleOfInserting = false; }
private void MoveToDhPosition(float fSize, float fAlpha, Color cColor) { int i; CDhParamAll COjwDhParamAll = new CDhParamAll(); Ojw.CKinematics.CForward.MakeDhParam(txtForwardKinematics.Text, out COjwDhParamAll); double dX, dY, dZ; double[] dcolX; double[] dcolY; double[] dcolZ; double[] adMot = new double[256]; Array.Clear(adMot, 0, adMot.Length); for (i = 0; i < m_C3d.GetHeader_nMotorCnt(); i++) { adMot[i] = (double)m_C3d.GetData(i); //Ojw.CConvert.StrToDouble(m_txtAngle[i].Text); } Ojw.CKinematics.CForward.CalcKinematics(COjwDhParamAll, adMot, out dcolX, out dcolY, out dcolZ, out dX, out dY, out dZ); String strResult; // 만들어진 수식을 알고 싶다면 여기 결과값을 리턴받는다. Ojw.CKinematics.CForward.CalcKinematics_ToString(COjwDhParamAll, adMot, out strResult); txtKinematicsString.Text = strResult; m_C3d.SetTestDh_Size(fSize); m_C3d.SetTestDh_Color(cColor); m_C3d.SetTestDh_Alpha(fAlpha); m_C3d.SetTestDh_Pos((float)dX, (float)dY, (float)dZ); lbTestDh.Text = "[x=" + Ojw.CConvert.DoubleToStr((double)Math.Round(dX, 3)) + ", y=" + Ojw.CConvert.DoubleToStr((double)Math.Round(dY, 3)) + ", z=" + Ojw.CConvert.DoubleToStr((double)Math.Round(dZ, 3)) + "]"; #region Checking Direction // 방향 확인 float[] afX = new float[3]; float[] afY = new float[3]; float[] afZ = new float[3]; double dLength = 30.0; dX = dLength; dY = 0.0f; dZ = 0.0f; for (i = 0; i < 3; i++) { afX[i] = (float)(dcolX[i] * dX + dcolY[i] * dY + dcolZ[i] * dZ); } dX = 0.0f; dY = dLength; dZ = 0.0f; for (i = 0; i < 3; i++) { afY[i] = (float)(dcolX[i] * dX + dcolY[i] * dY + dcolZ[i] * dZ); } dX = 0.0f; dY = 0.0f; dZ = dLength; for (i = 0; i < 3; i++) { afZ[i] = (float)(dcolX[i] * dX + dcolY[i] * dY + dcolZ[i] * dZ); } m_C3d.SetTestDh_Angle(afX, afY, afZ); #endregion Checking Direction }