Răsfoiți Sursa

#495 checking for EmptyPointF, no fill if size 0

circular17 3 ani în urmă
părinte
comite
f6c30b03dd

+ 6 - 4
lazpaint/tools/utoolvectorial.pas

@@ -1605,6 +1605,8 @@ var
   r: TRect;
   matrix: TAffineMatrix;
 begin
+  if isEmptyPointF(ABounds.TopLeft) or isEmptyPointF(ABounds.BottomRight) then
+    raise exception.Create('Unexpected empty point');
   toolDest := GetToolDrawingLayer;
   matrix := VectorTransform(false);
   r := (matrix*TAffineBox.AffineBox(ABounds)).RectBounds;
@@ -2131,10 +2133,10 @@ begin
       if s.y > 0 then FQuickDefineEndPoint.y := FQuickDefineStartPoint.y + avg else FQuickDefineEndPoint.y := FQuickDefineStartPoint.y - avg;
     end;
     FShape.BeginUpdate;
-      QuickDefineShape(FQuickDefineStartPoint, FQuickDefineEndPoint);
-      FLastShapeTransform := AffineMatrixInverse(VectorTransform(false));
-      FShape.Transform(FLastShapeTransform);
-      AssignShapeStyle(FLastShapeTransform, true);
+    QuickDefineShape(FQuickDefineStartPoint, FQuickDefineEndPoint);
+    FLastShapeTransform := AffineMatrixInverse(VectorTransform(false));
+    FShape.Transform(FLastShapeTransform);
+    AssignShapeStyle(FLastShapeTransform, true);
     FShape.EndUpdate;
     result := OnlyRenderChange;
   end else

+ 2 - 0
lazpaintcontrols/lcvectororiginal.pas

@@ -1976,6 +1976,8 @@ begin
   if FUpdateCount = 0 then
   begin
     FBoundsBeforeUpdate := GetRenderBounds(InfiniteRect, AffineMatrixIdentity);
+    if isEmptyPointF(FBoundsBeforeUpdate.TopLeft) or isEmptyPointF(FBoundsBeforeUpdate.BottomRight) then
+      raise exception.Create('Unexpected empty point');
     Inc(FRenderIteration);
   end;
   inc(FUpdateCount);

+ 2 - 1
lazpaintcontrols/lcvectorrectshapes.pas

@@ -988,7 +988,7 @@ var
   i: Integer;
 begin
   pts := GetAffineBox(AMatrix, true).AsPolygon;
-  If GetBackVisible then
+  If GetBackVisible and (Width <> 0) and (Height <> 0) then
   begin
     if (BackFill.FillType = vftSolid) then backScan := nil
     else backScan := BackFill.CreateScanner(AMatrix, ADraft);
@@ -1101,6 +1101,7 @@ begin
       begin
         pts := ComputeStroke(GetAffineBox(AMatrix, false).AsPolygon, true, AMatrix);
         for i := 0 to high(pts) do
+        if not IsEmptyPointF(pts[i]) then
         begin
           if pts[i].x < result.Left then result.Left := pts[i].x;
           if pts[i].x > result.Right then result.Right := pts[i].x;