Index: taseries.pas
===================================================================
--- taseries.pas	(revision 21842)
+++ taseries.pas	(working copy)
@@ -140,17 +140,21 @@
     ASender: TChartSeries; ACanvas: TCanvas; AIndex: Integer;
     ACenter: TPoint) of object;
 
+  TLineType = (ltFromPrevious, ltFromOrigin);
+
   { TLineSeries }
 
   TLineSeries = class(TBasicLineSeries)
   private
     FLinePen: TPen;
+    FLineType: TLineType;
     FOnDrawPointer: TSeriesPointerDrawEvent;
     FPointer: TSeriesPointer;
     FShowLines: Boolean;
     FShowPoints: Boolean;
 
     procedure SetLinePen(AValue: TPen);
+    procedure SetLineType(const AValue: TLineType);
     procedure SetPointer(Value: TSeriesPointer);
     procedure SetShowLines(Value: Boolean);
     procedure SetShowPoints(Value: Boolean);
@@ -191,6 +195,7 @@
       read FOnDrawPointer write FOnDrawPointer;
     property Pointer: TSeriesPointer read FPointer write SetPointer;
     property SeriesColor;
+    property LineType: TLineType read FLineType write SetLineType default ltFromPrevious;
     property ShowLines: Boolean read FShowLines write SetShowLines default true;
     property ShowPoints: Boolean read FShowPoints write SetShowPoints default false;
     property Source;
@@ -344,23 +349,45 @@
   a, b: TDoublePoint;
 begin
   if FShowLines then
-    for i := 0 to Count - 2 do begin
-      a := DoublePoint(Source[i]^);
-      b := DoublePoint(Source[i + 1]^);
-      if not LineIntersectsRect(a, b, ParentChart.CurrentExtent) then continue;
-      ai := ParentChart.GraphToImage(a);
-      bi := ParentChart.GraphToImage(b);
-      ACanvas.Pen.Assign(LinePen);
-      if Depth = 0 then
-        ACanvas.Line(ai, bi)
-      else begin
-        ACanvas.Brush.Style := bsSolid;
-        ACanvas.Brush.Color := ACanvas.Pen.Color;
-        ACanvas.Pen.Color := clBlack;
-        DrawLineDepth(ACanvas, ai, bi, Depth);
+  begin
+    case FLineType of
+      ltFromPrevious :
+      for i := 0 to Count - 2 do begin
+        a := DoublePoint(Source[i]^);
+        b := DoublePoint(Source[i + 1]^);
+        if not LineIntersectsRect(a, b, ParentChart.CurrentExtent) then continue;
+        ai := ParentChart.GraphToImage(a);
+        bi := ParentChart.GraphToImage(b);
+        ACanvas.Pen.Assign(LinePen);
+        if Depth = 0 then
+          ACanvas.Line(ai, bi)
+        else begin
+          ACanvas.Brush.Style := bsSolid;
+          ACanvas.Brush.Color := ACanvas.Pen.Color;
+          ACanvas.Pen.Color := clBlack;
+          DrawLineDepth(ACanvas, ai, bi, Depth);
+        end;
       end;
+      ltFromOrigin :
+      for i := 0 to Count - 1 do begin
+        a := DoublePoint(Source[i]^);
+        b.X:= 0;
+        b.Y:= 0;
+        if not LineIntersectsRect(a, b, ParentChart.CurrentExtent) then continue;
+        ai := ParentChart.GraphToImage(a);
+        bi := ParentChart.GraphToImage(b);
+        ACanvas.Pen.Assign(LinePen);
+        if Depth = 0 then
+          ACanvas.Line(ai, bi)
+        else begin
+          ACanvas.Brush.Style := bsSolid;
+          ACanvas.Brush.Color := ACanvas.Pen.Color;
+          ACanvas.Pen.Color := clBlack;
+          DrawLineDepth(ACanvas, ai, bi, Depth);
+        end;
+      end;
     end;
-
+  end;
   DrawLabels(ACanvas, true);
 
   if FShowPoints then
@@ -479,6 +506,13 @@
   FLinePen.Assign(AValue);
 end;
 
+procedure TLineSeries.SetLineType(const AValue: TLineType);
+begin
+  if FLineType=AValue then exit;
+  FLineType:=AValue;
+  UpdateParentChart;
+end;
+
 function TLineSeries.GetColor(AIndex: Integer): TColor;
 begin
   Result := ColorOrDefault(Source[AIndex]^.Color);
