//-------------------------------------------------------------------- // Join path. The path is joined with the existing one, that is, // it behaves as if the pen of a plotter was always down (drawing) //template<class VertexSource> public void JoinPath(VertexStore vxs) { double x, y; int index = 0; VertexCmd cmd = vxs.GetVertex(index++, out x, out y); if (cmd == VertexCmd.NoMore) { return; } //--------------------- if (VertexHelper.IsVertextCommand(cmd)) { double x0, y0; VertexCmd flags0 = GetLastVertex(out x0, out y0); if (VertexHelper.IsVertextCommand(flags0)) { if (AggMath.calc_distance(x, y, x0, y0) > AggMath.VERTEX_DISTANCE_EPSILON) { if (VertexHelper.IsMoveTo(cmd)) { cmd = VertexCmd.LineTo; } _myvxs.AddVertex(x, y, cmd); } } else { if (VertexHelper.IsEmpty(flags0)) { cmd = VertexCmd.MoveTo; } else if (VertexHelper.IsMoveTo(cmd)) { cmd = VertexCmd.LineTo; } _myvxs.AddVertex(x, y, cmd); } } while ((cmd = vxs.GetVertex(index++, out x, out y)) != VertexCmd.NoMore) { _myvxs.AddVertex(x, y, VertexHelper.IsMoveTo(cmd) ? VertexCmd.LineTo : cmd); } }
//-------------------------------------------------------------------- // Join path. The path is joined with the existing one, that is, // it behaves as if the pen of a plotter was always down (drawing) //template<class VertexSource> public void JoinPath(VertexStoreSnap s) { double x, y; VertexSnapIter snapIter = s.GetVertexSnapIter(); VertexCmd cmd = snapIter.GetNextVertex(out x, out y); if (cmd == VertexCmd.NoMore) { return; } if (VertexHelper.IsVertextCommand(cmd)) { double x0, y0; VertexCmd flags0 = GetLastVertex(out x0, out y0); if (VertexHelper.IsVertextCommand(flags0)) { if (AggMath.calc_distance(x, y, x0, y0) > AggMath.VERTEX_DISTANCE_EPSILON) { if (VertexHelper.IsMoveTo(cmd)) { cmd = VertexCmd.LineTo; } myvxs.AddVertex(x, y, cmd); } } else { if (VertexHelper.IsEmpty(flags0)) { cmd = VertexCmd.MoveTo; } else if (VertexHelper.IsMoveTo(cmd)) { cmd = VertexCmd.LineTo; } myvxs.AddVertex(x, y, cmd); } } while ((cmd = snapIter.GetNextVertex(out x, out y)) != VertexCmd.NoMore) { myvxs.AddVertex(x, y, VertexHelper.IsMoveTo(cmd) ? VertexCmd.LineTo : cmd); } }