public frmViewer() { InitializeComponent(); mViewer = this.MG_Viewer1; MG_CS_BasicViewer.OnStatus += new MG_CS_BasicViewer.OnStatusEventHandler(mViewer_OnStatus); mSetup.LoadAllMachines(System.IO.Directory.GetCurrentDirectory() + "\\Data"); mProcessor.Init(mSetup.Machine); }
public frmViewer() { InitializeComponent(); getSerialPorts(); mViewer = this.MG_Viewer1; mProcessor.OnAddBlock += new clsProcessor.OnAddBlockEventHandler(mProcessor_OnAddBlock); MG_CS_BasicViewer.OnSelection += new MG_CS_BasicViewer.OnSelectionEventHandler(mViewer_OnSelection); MG_CS_BasicViewer.MouseLocation += new MG_CS_BasicViewer.MouseLocationEventHandler(mViewer_MouseLocation); mSetup.MachineActivated += new clsSettings.MachineActivatedEventHandler(mSetup_MachineActivated); mSetup.LoadAllMachines(System.IO.Directory.GetCurrentDirectory() + "\\Data"); mProcessor.Init(mSetup.Machine); cancelled = false; workThread = null; sw = new Stopwatch(); currentMode = eMode.DISCONNECTED; setMode(currentMode); UpdateInterval = 200; // 5 updates sec doStatusUpdates = false; // when enabled feedHold = false; }
private void Arc_Center() { float side_opposite = 0; float meanX = 0; float meanY = 0; float centerVector = 0; float quarterArc = 0; switch (mPlane) { case Motion.XY_PLN: //This is for an arc or helix that uses an R insdead of I,J,K, //Radius move with R if (mBlockAddresses[(int)letters.R] & (mMode > Motion.LINE)) { quarterArc = (float)(Math.PI / 2); //|------- Calculate arc center position -------| //A "-R" is used to specify big arc if (mArcRad < 0) { quarterArc = -quarterArc; //Total angle > 180 deg } //Total angle is always <180 if "+R" //this is a full arc if (mPrevX == mXpos & mPrevY == mYpos) { quarterArc = 0; } mRad = System.Math.Abs(mArcRad); //calculate side opposite 'hypotenuse side_opposite = (float)System.Math.Abs((Math.Pow(mRad, 2)) - (Math.Pow((MG_CS_BasicViewer.VectorLength(mPrevX, mPrevY, 0, mXpos, mYpos, 0) / 2), 2))); side_opposite = (float)System.Math.Sqrt(side_opposite); //find mid point of start and end of arc start and end points meanX = (mPrevX + mXpos) / 2; meanY = (mPrevY + mYpos) / 2; if (mMode == Motion.CCARC) { centerVector = MG_CS_BasicViewer.AngleFromPoint(mXpos - mPrevX, mYpos - mPrevY, false) - quarterArc; if (centerVector < 0) { centerVector = ONE_RADIAN + centerVector; } } if (mMode == Motion.CWARC) { centerVector = MG_CS_BasicViewer.AngleFromPoint(mXpos - mPrevX, mYpos - mPrevY, false) + quarterArc; if (centerVector > ONE_RADIAN) { centerVector = centerVector - ONE_RADIAN; } } mXcentr = (float)(meanX - (side_opposite * System.Math.Cos(centerVector))); mYcentr = (float)(meanY - (side_opposite * System.Math.Sin(centerVector))); //Calculate start and end angle mSang = MG_CS_BasicViewer.AngleFromPoint(mPrevX - mXcentr, mPrevY - mYcentr, false); mEang = MG_CS_BasicViewer.AngleFromPoint(mXpos - mXcentr, mYpos - mYcentr, false); } else { if (mCurMachine.AbsArcCenter) { mI = mI - mPrevX; mJ = mJ - mPrevY; } mRad = (float)System.Math.Sqrt(Math.Pow(mI, 2) + Math.Pow(mJ, 2)); //calculate rad mXcentr = mPrevX + mI; //Arc origins mYcentr = mPrevY + mJ; mZcentr = mPrevZ + mK; mSang = MG_CS_BasicViewer.AngleFromPoint(mPrevX - mXcentr, mPrevY - mYcentr, false); mEang = MG_CS_BasicViewer.AngleFromPoint(mXpos - mXcentr, mYpos - mYcentr, false); } break; //InStr(codeline, "R") case Motion.XZ_PLN: //This is for an arc or helix that uses an R insdead of I,J,K, //Radius move with R if (mBlockAddresses[(int)letters.R] & mMode > Motion.LINE) { quarterArc = (float)(Math.PI / 2); //|------- Calculate arc center position -------| //A "-R" is used to specify big arc if (mArcRad < 0) { quarterArc = -quarterArc; //Total angle > 180 deg } //Total angle is always <180 if "+R" //this is a full arc if (mPrevX == mXpos & mPrevZ == mZpos) { quarterArc = 0; } mRad = System.Math.Abs(mArcRad); //calculate side opposite 'hypotenuse side_opposite = (float)System.Math.Abs((Math.Pow(mRad, 2)) - (Math.Pow((MG_CS_BasicViewer.VectorLength(mPrevX, mPrevZ, 0, mXpos, mZpos, 0) / 2), 2))); side_opposite = (float)System.Math.Sqrt(side_opposite); //find mid point of start and end of arc start and end points meanX = (mPrevX + mXpos) / 2; meanY = (mPrevZ + mZpos) / 2; if (mMode == Motion.CCARC) { centerVector = MG_CS_BasicViewer.AngleFromPoint(mXpos - mPrevX, mZpos - mPrevZ, false) - quarterArc; if (centerVector < 0) { centerVector = ONE_RADIAN + centerVector; } } if (mMode == Motion.CWARC) { centerVector = MG_CS_BasicViewer.AngleFromPoint(mXpos - mPrevX, mZpos - mPrevZ, false) + quarterArc; if (centerVector > ONE_RADIAN) { centerVector = centerVector - ONE_RADIAN; } } mXcentr = (float)(meanX - (side_opposite * System.Math.Cos(centerVector))); mZcentr = (float)(meanY - (side_opposite * System.Math.Sin(centerVector))); //Calculate start and end angle mSang = MG_CS_BasicViewer.AngleFromPoint(mPrevX - mXcentr, mPrevZ - mZcentr, false); mEang = MG_CS_BasicViewer.AngleFromPoint(mXpos - mXcentr, mZpos - mZcentr, false); } else { if (mCurMachine.AbsArcCenter) { mI = mI - mPrevX; mK = mK - mPrevZ; } mRad = (float)System.Math.Sqrt(Math.Pow(mI, 2) + Math.Pow(mK, 2)); //calculate rad mXcentr = mPrevX + mI; mYcentr = mPrevY + mJ; //Arc origins mZcentr = mPrevZ + mK; mSang = MG_CS_BasicViewer.AngleFromPoint(mPrevX - mXcentr, mPrevZ - mZcentr, false); mEang = MG_CS_BasicViewer.AngleFromPoint(mXpos - mXcentr, mZpos - mZcentr, false); } break; //InStr(codeline, "R") case Motion.YZ_PLN: //This is for an arc or helix that uses an R insdead of I,J,K, //Radius move with R if (mBlockAddresses[(int)letters.R] & mMode > Motion.LINE) { quarterArc = (float)(Math.PI / 2); //|------- Calculate arc center position -------| //A "-R" is used to specify big arc if (mArcRad < 0) { quarterArc = -quarterArc; //Total angle > 180 deg } //Total angle is always <180 if "+R" //this is a full arc if (mPrevY == mYpos & mPrevZ == mZpos) { quarterArc = 0; } mRad = System.Math.Abs(mArcRad); //calculate side opposite 'hypotenuse side_opposite = (float)System.Math.Abs((Math.Pow(mRad, 2)) - (Math.Pow((MG_CS_BasicViewer.VectorLength(mPrevY, mPrevZ, 0, mYpos, mZpos, 0) / 2), 2))); side_opposite = (float)System.Math.Sqrt(side_opposite); //find mid point of start and end of arc start and end points meanX = (mPrevY + mYpos) / 2; meanY = (mPrevZ + mZpos) / 2; if (mMode == Motion.CCARC) { centerVector = MG_CS_BasicViewer.AngleFromPoint(mYpos - mPrevY, mZpos - mPrevZ, false) - quarterArc; if (centerVector < 0) { centerVector = ONE_RADIAN + centerVector; } } if (mMode == Motion.CWARC) { centerVector = MG_CS_BasicViewer.AngleFromPoint(mYpos - mPrevY, mZpos - mPrevZ, false) + quarterArc; if (centerVector > ONE_RADIAN) { centerVector = centerVector - ONE_RADIAN; } } mYcentr = (float)(meanX - (side_opposite * System.Math.Cos(centerVector))); mZcentr = (float)(meanY - (side_opposite * System.Math.Sin(centerVector))); //Calculate start and end angle mSang = MG_CS_BasicViewer.AngleFromPoint(mPrevY - mYcentr, mPrevZ - mZcentr, false); mEang = MG_CS_BasicViewer.AngleFromPoint(mYpos - mYcentr, mZpos - mZcentr, false); } else { if (mCurMachine.AbsArcCenter) { mJ = mJ - mPrevY; mK = mK - mPrevZ; } mRad = (float)System.Math.Sqrt(Math.Pow(mJ, 2) + Math.Pow(mK, 2)); //calculate rad mXcentr = mPrevX + mI; mYcentr = mPrevY + mJ; //Arc origins mZcentr = mPrevZ + mK; mSang = MG_CS_BasicViewer.AngleFromPoint(mPrevY - mYcentr, mPrevZ - mZcentr, false); mEang = MG_CS_BasicViewer.AngleFromPoint(mYpos - mYcentr, mZpos - mZcentr, false); } break; //InStr(codeline, "R") } }
private void ViewportActivated(object sender, System.EventArgs e) { mViewer = (MG_CS_BasicViewer)sender; }