Добрый день!
Коллеги, хочу озвучить одну из причин, из-за которой может возникать ситуация " Иногда бывает что при вставке пути в TPath, компонент его отображает некорректно"
Дело в том, что существуют сокращения в представлении данных и не все из низ TPath понимает, вот с чем столкнулся:
Есть команда 'c' - рисование кривой. не буду вдаваться в подробности, можно найти в интернете описание, скажу только то, что данная команда содержит 6 чисел. В идеале должно быть:
сX1 X2 X3 X4 X5 X6
Но очень часто (например в иконках Material Design) можно встретить:
c-1.1 0-1.99.9-1.99 2
И на этой строчке парсер TPath падает с ошибкой, так как пытается сконвертировать '-1.99.9' в число, что не верно. В реальности данная запись соответствует двум числам -1.99 и 0.9.
Для обхода проблемы я загружаю SVG в рантайме, и сроку пропускаю через корректор:
function CorrectSVG(const Value: String): String;
var
SB : TStringBuilder;
I: Integer;
C : Char;
begin
SB := TStringBuilder.Create;
try
I := 0;
for C in Value do
begin
if C='.' then
Inc(I) else
if not CharInSet(C, ['0'..'9']) then
I := 0;
if I=2 then
begin
SB.Append(' 0.');
I := 0;
end else
SB.Append(C);
end;
Result := SB.ToString;
finally
FreeAndNil(SB);
end;
end;