示例#1
0
        private static void FillLineSegments(ObjModel model, IList <string> args)
        {
            if (args.Count < 2)
            {
                return;
            }
            var segments = new LineSegments();

            foreach (var a in args)
            {
                var  numStrs = a.Trim().Split('/');
                var  vIndex  = FindIndex(model.Positions, numStrs[0]);
                uint?vtIndex = null;
                if (numStrs.Length == 2)
                {
                    if (!String.IsNullOrEmpty(numStrs[1]))
                    {
                        vtIndex = FindIndex(model.TextureCoords, numStrs[1]);
                    }
                }
                segments.Vertices.Add(new LineVertex(vIndex, vtIndex));
            }
            if (segments.Vertices.Count > 0)
            {
                model.Lines.Add(segments);
            }
        }
示例#2
0
        // construct a pathfigure from the line segments
        static PathFigure FromPointCollection(LineSegments ls)
        {
            var pc  = new PointCollection(ls);
            var pls = new PolyLineSegment(pc, true);
            var psc = new PathSegmentCollection();

            psc.Add(pls);
            return(new PathFigure(pc.First(), psc, false));
        }
        /// <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);
            }
        }
        void createRope(VerletWorld world)
        {
            // create an array of points for our rope
            var linePoints = new Vector2[10];

            for (var i = 0; i < 10; i++)
            {
                linePoints[i] = new Vector2(30 * i + 50, 10);
            }

            var line = new LineSegments(linePoints, 0.3f)
                       .pinParticleAtIndex(0);

            world.addComposite(line);
        }
示例#5
0
        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);
        }