PathDataString returns the string representation of the path data
(data []PathData)
| 837 | |
| 838 | // PathDataString returns the string representation of the path data |
| 839 | func PathDataString(data []PathData) string { |
| 840 | sz := len(data) |
| 841 | if sz == 0 { |
| 842 | return "" |
| 843 | } |
| 844 | var sb strings.Builder |
| 845 | var rp, cp, xp, ctrl math32.Vector2 |
| 846 | for i := 0; i < sz; { |
| 847 | cmd, n := PathDataNextCmd(data, &i) |
| 848 | sb.WriteString(fmt.Sprintf("%c ", PathCmdToRune[cmd])) |
| 849 | switch cmd { |
| 850 | case PcM, Pcm: |
| 851 | cp = PathDataNextVector(data, &i) |
| 852 | sb.WriteString(fmt.Sprintf("%g,%g ", cp.X, cp.Y)) |
| 853 | for np := 1; np < n/2; np++ { |
| 854 | cp = PathDataNextVector(data, &i) |
| 855 | sb.WriteString(fmt.Sprintf("%g,%g ", cp.X, cp.Y)) |
| 856 | } |
| 857 | case PcL, Pcl: |
| 858 | for np := 0; np < n/2; np++ { |
| 859 | rp = PathDataNextVector(data, &i) |
| 860 | sb.WriteString(fmt.Sprintf("%g,%g ", rp.X, rp.Y)) |
| 861 | } |
| 862 | case PcH, Pch, PcV, Pcv: |
| 863 | for np := 0; np < n; np++ { |
| 864 | cp.Y = PathDataNext(data, &i) |
| 865 | sb.WriteString(fmt.Sprintf("%g ", cp.Y)) |
| 866 | } |
| 867 | case PcC, Pcc: |
| 868 | for np := 0; np < n/6; np++ { |
| 869 | xp = PathDataNextVector(data, &i) |
| 870 | sb.WriteString(fmt.Sprintf("%g,%g ", xp.X, xp.Y)) |
| 871 | ctrl = PathDataNextVector(data, &i) |
| 872 | sb.WriteString(fmt.Sprintf("%g,%g ", ctrl.X, ctrl.Y)) |
| 873 | cp = PathDataNextVector(data, &i) |
| 874 | sb.WriteString(fmt.Sprintf("%g,%g ", cp.X, cp.Y)) |
| 875 | } |
| 876 | case Pcs, PcS: |
| 877 | for np := 0; np < n/4; np++ { |
| 878 | xp = PathDataNextVector(data, &i) |
| 879 | sb.WriteString(fmt.Sprintf("%g,%g ", xp.X, xp.Y)) |
| 880 | cp = PathDataNextVector(data, &i) |
| 881 | sb.WriteString(fmt.Sprintf("%g,%g ", cp.X, cp.Y)) |
| 882 | } |
| 883 | case PcQ, Pcq: |
| 884 | for np := 0; np < n/4; np++ { |
| 885 | ctrl = PathDataNextVector(data, &i) |
| 886 | sb.WriteString(fmt.Sprintf("%g,%g ", ctrl.X, ctrl.Y)) |
| 887 | cp = PathDataNextVector(data, &i) |
| 888 | sb.WriteString(fmt.Sprintf("%g,%g ", cp.X, cp.Y)) |
| 889 | } |
| 890 | case PcT, Pct: |
| 891 | for np := 0; np < n/2; np++ { |
| 892 | cp = PathDataNextVector(data, &i) |
| 893 | sb.WriteString(fmt.Sprintf("%g,%g ", cp.X, cp.Y)) |
| 894 | } |
| 895 | case PcA, Pca: |
| 896 | for np := 0; np < n/7; np++ { |
no test coverage detected