/// <summary> /// creates or adds a segment to the collections /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="startOffset"></param> /// <param name="endOffset"></param> public void CreateOrAddSegment(ComplexGeometry geometry, Dictionary <Point, LineSegments> segments, int x, int y, Vector startOffset, Vector endOffset) { Point ptMiddle = new Point(x, y); Point startPoint = ptMiddle + startOffset; Point endPoint = ptMiddle + endOffset; if (segments.ContainsKey(startPoint)) { var pc = segments[startPoint]; segments.Remove(startPoint); if (pc.First() == startPoint) { pc.Insert(0, endPoint); } else if (pc.Last() == startPoint) { pc.Add(endPoint); } if (!segments.ContainsKey(endPoint)) { segments.Add(endPoint, pc); } } else if (segments.ContainsKey(endPoint)) { var pc = segments[endPoint]; segments.Remove(endPoint); if (pc.First() == endPoint) { pc.Insert(0, startPoint); } else if (pc.Last() == endPoint) { pc.Add(startPoint); } if (!segments.ContainsKey(startPoint)) { segments.Add(startPoint, pc); } } else { var pc = new LineSegments(); pc.Add(startPoint); pc.Add(endPoint); segments.Add(startPoint, pc); segments.Add(endPoint, pc); geometry.Add(pc); } }
internal override int ReadParameters(List <string> parameters, IgesReaderBinder binder) { var index = 0; var segmentCount = Integer(parameters, ref index); ArrowHeight = Double(parameters, ref index); ArrowWidth = Double(parameters, ref index); var zDepth = Double(parameters, ref index); var x = Double(parameters, ref index); var y = Double(parameters, ref index); ArrowheadCoordinates = new Point3D(x, y, zDepth); for (int i = 0; i < segmentCount; i++) { x = Double(parameters, ref index); y = Double(parameters, ref index); LineSegments.Add(new Point3D(x, y, zDepth)); } return(segmentCount * 2 + 6); }