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].
Т.е. динамические массивы всё больше и больше становятся похожими на строки.
"Синтаксический сахар"? Конечно! Но! Всё равно - приятно.
Комментариев нет:
Отправить комментарий