Example #1
0
        private void Transform(List <segment> polyLine, List <GCodeToken> newToolPath)
        {
            uint lnr = 0;

            double[] ijk = new Vector3(-_knifeTipOffset, 0d, 0d).Array;

            Vector3 end = polyLine[0].P1;

            segment prev = new segment();

            prev.P1 = new Vector3(polyLine[0].P1);
            prev.P2 = new Vector3(polyLine[0].P1 + StartDirection * _knifeTipOffset);

            for (int i = 0; i < polyLine.Count; i++)
            {
                var cp1   = prev.P2 - prev.P1;
                var cp2   = polyLine[i].P2 - polyLine[i].P1;
                var n1    = cp1.NormalizeOrDefault();
                var n2    = cp2.NormalizeOrDefault();
                var angle = cp2.Angle(cp1) * (180d / Math.PI);

                if (i == 0)
                {
                    end = prev.P1 + n1 * _knifeTipOffset;
                    newToolPath.Add(new GCLinearMotion(Commands.G0, lnr++, ToPos(end), AxisFlags.XY));
                    newToolPath.Add(new GCLinearMotion(Commands.G1, lnr++, ToPos(end + new Vector3(0d, 0d, _cutDepth)), AxisFlags.Z));
                }

                if (Math.Abs(angle) > (i == 0 ? 1d : _swivelAngle) && cp2.Magnitude >= _dentLength)
                {
                    //           end = polyLine[i].P1 + offset2;
                    var end1 = polyLine[i].P1 + n2 * _knifeTipOffset;
                    var dir  = (i == 0 ? prev.P1 : prev.P2) - end;
                    StartDirection = dir;
                    end            = end1;
                    var arcdir = n1.X * n2.Y - n1.Y * n2.X;
                    newToolPath.Add(new GCArc(arcdir < 0d ? Commands.G2 : Commands.G3, lnr++, ToPos(end), AxisFlags.XY, ToPos(dir), IJKFlags.I | IJKFlags.J, 0d, IJKMode.Incremental));
                }
                if (cp2.Magnitude > _knifeTipOffset)
                {
                    end = polyLine[i].P2 + n2 * _knifeTipOffset;
                }
                else
                {
                    end += cp2;
                }

                newToolPath.Add(new GCLinearMotion((i & 1) == 1 ? Commands.G1 : Commands.G1, lnr++, ToPos(end), AxisFlags.XY));
                prev = polyLine[i];

                if (i == polyLine.Count - 1)
                {
                    newToolPath.Add(new GCLinearMotion(Commands.G0, lnr++, ToPos(end + new Vector3(0d, 0d, -_cutDepth)), AxisFlags.Z));
                }
            }
        }
        private bool TryToIntersect(ref segment currentSegment, segment newSegment)
        {
            var copySegment = new segment(Math.Max(currentSegment.Begin, newSegment.Begin), Math.Min(currentSegment.End, newSegment.End));

            if (copySegment.Begin > copySegment.End)
            {
                return(false);
            }
            currentSegment = copySegment;
            return(true);
        }
Example #3
0
    void setSegments()
    {
        time    += Time.deltaTime;
        segments = new List <segment>();
        for (int i = 0; i < numberOfSegments; i++)
        {
            segment s = new segment();
            s.direction = (Quaternion.Euler(Mathf.Cos(time) * i * 2, Mathf.Sin(time) * i * 2, 0) * Vector3.forward).normalized;
            s.scale     = Vector3.one / (scaleDown * (i + 1));
            s.lenght    = spacing;
            s.rotation  = new Quaternion();

            segments.Add(s);
        }
    }
Example #4
0
        public static line segment_to_line(segment s)
        {
            line l = new line();
	        if (eq (s.x1, s.x2))
	        {
		        l.a = 1;
		        l.b = 0;
		        l.c = - s.x1;
	        }
	        else
	        {
		        l.a = - (s.y1 - s.y2) / (s.x1 - s.x2);
		        l.b = 1;
		        l.c = - (l.a * s.x1 + l.b * s.y1);
	        }
            return l;
        }
Example #5
0
    private void SpawnSpecialTransition()
    {
        List <segment> possibleSpecialTransition = specialTransitions.FindAll(x => x.beginY1 == y1 || x.beginY2 == y2 || x.beginY3 == y3);
        int            id = UnityEngine.Random.Range(0, possibleSpecialTransition.Count);

        segment s = GetSpecialSegment(id, true);

        y1 = s.endY1;
        y2 = s.endY2;
        y3 = s.endY3;

        s.transform.SetParent(transform);
        s.transform.localPosition = Vector3.forward * currentSpawnZ;

        currentSpawnZ += s.length;
        amountOfActiveSegments++;
        s.Spawn();
    }
Example #6
0
        public static line segment_to_line(segment s)
        {
            line l = new line();

            if (eq(s.x1, s.x2))
            {
                l.a = 1;
                l.b = 0;
                l.c = -s.x1;
            }
            else
            {
                l.a = -(s.y1 - s.y2) / (s.x1 - s.x2);
                l.b = 1;
                l.c = -(l.a * s.x1 + l.b * s.y1);
            }
            return(l);
        }
    void load(int index)
    {
        Debug.Log ("Loading " + index);
        // Load file
        usaveRef.slot = index;
        usaveRef.allResize (0);
        usaveRef.loadFile (true);

        // Create segment
        segment newSegment = new segment (usaveRef.sarray[0], usaveRef.iarray, usaveRef.farray, usaveRef.varray[0]);

        // Insert segment into array
        var oldArray = segmentPool;
        segment[] newArray;
        newArray = new segment[oldArray.Length + 1];
        for(int x=0;x<oldArray.Length;x++)
            newArray[x] = oldArray[x];
        newArray [oldArray.Length] = newSegment;
        segmentPool = newArray;
    }
        private segment ParseSegment(string line)
        {
            string[] lines = line.Split(' ');
            segment  currentSegment;

            if (lines.Length < 2)
            {
                throw new Exception("Uncorrect segment in input file");
            }
            currentSegment = new segment(Convert.ToInt32(lines[0]), Convert.ToInt32(lines[1]));
            for (int i = 1; i < lines.Length / 2; i++)
            {
                segment newSegment = new segment(Convert.ToInt32(lines[2 * i]), Convert.ToInt32(lines[2 * i + 1]));
                if (!TryToIntersect(ref currentSegment, newSegment))
                {
                    throw new Exception("Uncorrect segment in input file");
                }
            }
            return(currentSegment);
        }
Example #9
0
    public segment GetSpecialSegment(int id, bool transition)
    {
        segment s = null;

        s = segments.Find(x => x.segID == id && x.transition == transition && !x.gameObject.activeSelf);
        if (s == null)
        {
            GameObject go = Instantiate((transition) ? specialTransitions[id].gameObject : availableSegments[id].gameObject) as GameObject;
            s            = go.GetComponent <segment>();
            s.segID      = id;
            s.transition = transition;
            segments.Insert(0, s);
        }
        else
        {
            segments.Remove(s);
            segments.Insert(0, s);
        }
        return(s);
    }
        private bool TryToCompare(segment first, segment second, out int ans)
        {
            segment delta = new segment(first.Begin - second.Begin, first.End - second.End);

            if (delta.Begin == 0 && delta.End == 0)
            {
                ans = 0;
                return(true);
            }
            if (delta.Begin <= 0 && delta.End >= 0)
            {
                ans = 1;
                return(true);
            }
            if (delta.Begin >= 0 && delta.End <= 0)
            {
                ans = -1;
                return(true);
            }
            ans = 0;
            return(false);
        }
 public SegmentAndEffortData(segment segment, entry leaderBoardEntry)
 {
     Segment = segment;
     Effort  = leaderBoardEntry;
 }
Example #12
0
        public static pt segments_intersection(segment s1, segment s2)
        {
            line l1 = segment_to_line(s1);
            line l2 = segment_to_line(s2);

            pt result = intersect(l1, l2);

            if (result == null)
            {
                return(null);
            }

            int x = (int)Math.Round(result.x);
            int y = (int)Math.Round(result.y);

            int x1 = 0;
            int x2 = 0;
            int x3 = 0;
            int x4 = 0;
            int y1 = 0;
            int y2 = 0;
            int y3 = 0;
            int y4 = 0;

            if ((int)s1.x1 < (int)s1.x2)
            {
                x1 = (int)s1.x1;
                x2 = (int)s1.x2;
            }
            else
            {
                x1 = (int)s1.x2;
                x2 = (int)s1.x1;
            }

            if ((int)s1.y1 < (int)s1.y2)
            {
                y1 = (int)s1.y1;
                y2 = (int)s1.y2;
            }
            else
            {
                y1 = (int)s1.y2;
                y2 = (int)s1.y1;
            }

            if ((int)s2.x1 < (int)s2.x2)
            {
                x3 = (int)s2.x1;
                x4 = (int)s2.x2;
            }
            else
            {
                x3 = (int)s2.x2;
                x4 = (int)s2.x1;
            }

            if ((int)s2.y1 < (int)s2.y2)
            {
                y3 = (int)s2.y1;
                y4 = (int)s2.y2;
            }
            else
            {
                y3 = (int)s2.y2;
                y4 = (int)s2.y1;
            }

            if (((x >= x1) && (x <= x2) && (x >= x3) && (x <= x4)) && ((y >= y1) && (y <= y2) && (y >= y3) && (y <= y4)))
            {
                return(result);
            }
            else
            {
                return(null);
            }
        }
Example #13
0
    public void BuildLock(int numRings, Safe s)
    {
        playerLevel = FindObjectOfType <PlayerController>().skill;

        ActiveRing = 0;

        mSafe = s;

        rings   = new List <Transform>();
        offsets = new List <int>();

        segment[,] segs = new segment[numRings, 8];

        // rings[0] is the outer ring. rings[size-1] is the innermost ring.

        for (int i = 0; i < 8; i++)
        {
            segs[0, i] = (segment)Random.Range(0, 2);
        }

        for (int i = 1; i < numRings; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                if (segs[i - 1, j] == segment.TOOTH || segs[i - 1, j] == segment.BOTH)
                {
                    segs[i, j] = (segment)Random.Range(2, 4);
                }
                else
                {
                    segs[i, j] = (segment)Random.Range(0, 2);
                }
            }
        }

        float ringScale = 1.0f;

        for (int i = 0; i < numRings; i++)
        {
            GameObject r = new GameObject();
            for (int j = 0; j < 8; j++)
            {
                GameObject temp;

                switch (segs[i, j])
                {
                case segment.PLAIN:
                    temp = plain;
                    break;

                case segment.TOOTH:
                    temp = tooth;
                    break;

                case segment.HOLE:
                    temp = hole;
                    break;

                case segment.BOTH:
                    temp = both;
                    break;

                default:
                    temp = plain;
                    break;
                }

                GameObject n = Instantiate(temp, r.transform);
                n.transform.Rotate(new Vector3(0.0f, 0.0f, j * 45.0f));
            }

            r.transform.localScale = new Vector3(ringScale, ringScale, 0.2f);

            int offset = Random.Range(1, 7);

            int rando = Random.Range(1, 11);

            Debug.Log(playerLevel);
            Debug.Log(rando);


            if (rando <= playerLevel)
            {
                offset = 0;
            }

            r.transform.Rotate(0.0f, 0.0f, 45.0f * offset);

            Debug.Log(offset);

            offsets.Add(offset);


            ringScale *= 0.65f;

            rings.Add(r.transform);
        }



        ActiveTransform = rings[0];
    }
Example #14
0
 Write(segment, copyMemory);
Example #15
0
        public void Apply()
        {
            if (new DragKnifeDialog(this)
            {
                Owner = Application.Current.MainWindow
            }.ShowDialog() != true)
            {
                return;
            }

            using (new UIUtils.WaitCursor())
            {
                GCodeEmulator emu = new GCodeEmulator();

                //          emu.SetStartPosition(Machine.StartPosition);
                List <segment>    polyLine    = new List <segment>();
                List <GCodeToken> newToolPath = new List <GCodeToken>();

                newToolPath.Add(new GCComment(Commands.Comment, 0, "Drag knife transform applied"));

                StartDirection = new Vector3(1d, 0d, 0d);

                foreach (var cmd in emu.Execute(GCode.File.Tokens))
                {
                    switch (cmd.Token.Command)
                    {
                    case Commands.G0:
                        if (polyLine.Count > 0)
                        {
                            polyLine[polyLine.Count - 1].Last = true;
                            Transform(polyLine, newToolPath);
                            polyLine.Clear();
                        }
                        newToolPath.Add(cmd.Token);
                        break;

                    case Commands.G1:
                        segment s = new segment();
                        s.P1 = new Vector3(cmd.Start.X, cmd.Start.Y, 0d);
                        s.P2 = new Vector3(cmd.End.X, cmd.End.Y, 0d);
                        if (!s.P1.Equals(s.P2))
                        {
                            polyLine.Add(s);
                        }
                        break;

                    default:
                        newToolPath.Add(cmd.Token);
                        break;
                    }
                }

                List <string> gc = GCodeParser.TokensToGCode(newToolPath, AppConfig.Settings.Base.AutoCompress);
                //            GCodeParser.Save(@"C:\Users\terjeio\Desktop\Probing\knife.nc", gc);

                GCode.File.AddBlock(string.Format("Drag knife transform applied: {0}", GCode.File.Model.FileName), CNC.Core.Action.New);

                foreach (string block in gc)
                {
                    GCode.File.AddBlock(block, CNC.Core.Action.Add);
                }

                GCode.File.AddBlock("", CNC.Core.Action.End);
            }
        }
Example #16
0
 // Use this for initialization
 void Start()
 {
     vertexList = new List<Vector3>();
     uvList = new List<Vector2>();
     triangleList = new List<int>();
     currentRingVertexIndex = 0;
     lastRingVertexIndex = 0;
     buffSegments = new segment[nSegments];
     segActual = 1;
     buffSegments [0] = new segment();
     buffSegments [0].length = longi;
     buffSegments [0].origen = new llesca();
     buffSegments [0].desti = new llesca();
     buffSegments [0].origen.normal = new Quaternion();
     buffSegments [0].origen.centre = origen;
     buffSegments [0].desti.normal = new Quaternion();
     buffSegments [0].desti.centre = origen;
     for (int i = 1; i < nSegments; ++i) {
         buffSegments [i] = new segment();
         buffSegments [i].origen = new llesca();
         buffSegments [i].desti = new llesca();
     }
     for (int i = 0; i < nSegments; ++i) addSegment();
     SetMesh ();
 }
Example #17
0
 select(segment, checkSegment))
Example #18
0
        public static pt segments_intersection (segment s1, segment s2)
        {
            line l1 = segment_to_line(s1);
            line l2 = segment_to_line(s2);

            pt result = intersect(l1, l2);
            if (result == null) return null;

            int x = (int)Math.Round(result.x);
            int y = (int) Math.Round(result.y);

            int x1 = 0;
            int x2 = 0;
            int x3 = 0;
            int x4 = 0;
            int y1 = 0;
            int y2 = 0;
            int y3 = 0;
            int y4 = 0;

            if ((int)s1.x1 < (int)s1.x2)
            {
                x1 = (int)s1.x1;
                x2 = (int)s1.x2;
            }
            else
            {
                x1 = (int)s1.x2;
                x2 = (int)s1.x1;
            }

            if ((int)s1.y1 < (int)s1.y2)
            {
                y1 = (int)s1.y1;
                y2 = (int)s1.y2;
            }
            else
            {
                y1 = (int)s1.y2;
                y2 = (int)s1.y1;
            }

            if ((int)s2.x1 < (int)s2.x2)
            {
                x3 = (int)s2.x1;
                x4 = (int)s2.x2;
            }
            else
            {
                x3 = (int)s2.x2;
                x4 = (int)s2.x1;
            }

            if ((int)s2.y1 < (int)s2.y2)
            {
                y3 = (int)s2.y1;
                y4 = (int)s2.y2;
            }
            else
            {
                y3 = (int)s2.y2;
                y4 = (int)s2.y1;
            }

            if(((x>=x1)&&(x<=x2)&&(x>=x3)&&(x<=x4))&&((y>=y1)&&(y<=y2)&&(y>=y3)&&(y<=y4))) 
            {
                return result;
            }
            else
	            return null;
        }
 public SegmentAndEffortData(segment segment, entry leaderBoardEntry, searchMetaData searchMetaData)
 {
     Segment        = segment;
     Effort         = leaderBoardEntry;
     SearchMetaData = searchMetaData;
 }