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); }
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); } }
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; }
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(); }
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); }
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; }
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 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]; }
Write(segment, copyMemory);
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); } }
// 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 (); }
select(segment, checkSegment))
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; }