https://bitbucket.org/ingword/mindstream/src/1db98fbc5815c7da5a4f54d922add1d78fdf814a/AbstractShapes/msSVGShape.pas?at=B43
Смотрим код:
Вроде код как код.
Но! Что тут "необычного"?
Во-первых строчка:
Тут складываются две ТОЧКИ (TPointF) и результат делится пополам. И ОПЯТЬ получается ТОЧКА (таким образом мы получаем точку, которая содержит перенос начала координат в середину начального прямоугольника).
Раньше такое делать было нельзя.
Теперь - МОЖНО. Приятно :-)
Во-вторых строчка:
В этой строчке - тоже есть - во-первых:
Создаётся динамический массив из одного элемента - [(l_P - l_Mid) + l_StartPoint]. В синтаксисе похожем на "множество" (set of).
И во-вторых:
Складываются ДВА ДИНАМИЧЕСКИХ массива:
Result := Result + ... Через операцию + (ПЛЮС).
Такого - ТОЖЕ раньше не было. И тоже - приятно:-)
Т.е. избавляемся от множества написания вызовов GetLength/SetLength/Item[i].
Т.е. динамические массивы всё больше и больше становятся похожими на строки.
"Синтаксический сахар"? Конечно! Но! Всё равно - приятно.
Смотрим код:
function TmsSVGShape.GetPolygon: TPolygon;
var
l_PolygonSVG : TPolygon;
l_SVG_String: string;
l_PD: TPathData;
{l_Point: TPointF;}
l_R : TRectF;
l_P : TPointF;
l_Mid : TPointF;
l_StartPoint : TPointF;
begin
l_PD := TPathData.Create;
try
l_SVG_String := GetPolygonSVG;
l_PD.Data := l_SVG_String;
{l_Point:= }l_PD.FlattenToPolygon(l_PolygonSVG);
l_R := PolygonBounds(l_PolygonSVG);
l_StartPoint := StartPoint;
Result := nil;
for l_P in l_PolygonSVG do
begin
l_Mid := (l_R.BottomRight + l_R.TopLeft) / 2;
Result := Result + [(l_P - l_Mid) + l_StartPoint];
end;//for l_P in l_PolygonSVG
finally
FreeAndNil(l_PD);
end;//try..finally
end;
Вроде код как код.
Но! Что тут "необычного"?
Во-первых строчка:
l_Mid := (l_R.BottomRight + l_R.TopLeft) / 2;
Тут складываются две ТОЧКИ (TPointF) и результат делится пополам. И ОПЯТЬ получается ТОЧКА (таким образом мы получаем точку, которая содержит перенос начала координат в середину начального прямоугольника).
Раньше такое делать было нельзя.
Теперь - МОЖНО. Приятно :-)
Во-вторых строчка:
Result := Result + [(l_P - l_Mid) + l_StartPoint];
В этой строчке - тоже есть - во-первых:
Создаётся динамический массив из одного элемента - [(l_P - l_Mid) + l_StartPoint]. В синтаксисе похожем на "множество" (set of).
И во-вторых:
Складываются ДВА ДИНАМИЧЕСКИХ массива:
Result := Result + ... Через операцию + (ПЛЮС).
Такого - ТОЖЕ раньше не было. И тоже - приятно:-)
Т.е. избавляемся от множества написания вызовов GetLength/SetLength/Item[i].
Т.е. динамические массивы всё больше и больше становятся похожими на строки.
"Синтаксический сахар"? Конечно! Но! Всё равно - приятно.
Комментариев нет:
Отправить комментарий