コード例 #1
0
        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);
        }
コード例 #2
0
        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;
        }
コード例 #3
0
    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")
        }
    }
コード例 #4
0
 private void ViewportActivated(object sender, System.EventArgs e)
 {
     mViewer = (MG_CS_BasicViewer)sender;
 }