(matrix)
| 24128 | |
| 24129 | |
| 24130 | def util_invert_matrix(matrix): |
| 24131 | if 0: |
| 24132 | # Use MuPDF's fz_invert_matrix(). |
| 24133 | if isinstance( matrix, (tuple, list)): |
| 24134 | matrix = mupdf.FzMatrix( *matrix) |
| 24135 | elif isinstance( matrix, mupdf.fz_matrix): |
| 24136 | matrix = mupdf.FzMatrix( matrix) |
| 24137 | elif isinstance( matrix, Matrix): |
| 24138 | matrix = mupdf.FzMatrix( matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f) |
| 24139 | assert isinstance( matrix, mupdf.FzMatrix), f'{type(matrix)=}: {matrix}' |
| 24140 | ret = mupdf.fz_invert_matrix( matrix) |
| 24141 | if ret == matrix and (0 |
| 24142 | or abs( matrix.a - 1) >= sys.float_info.epsilon |
| 24143 | or abs( matrix.b - 0) >= sys.float_info.epsilon |
| 24144 | or abs( matrix.c - 0) >= sys.float_info.epsilon |
| 24145 | or abs( matrix.d - 1) >= sys.float_info.epsilon |
| 24146 | ): |
| 24147 | # Inversion not possible. |
| 24148 | return 1, () |
| 24149 | return 0, (ret.a, ret.b, ret.c, ret.d, ret.e, ret.f) |
| 24150 | # Do inversion in python. |
| 24151 | src = JM_matrix_from_py(matrix) |
| 24152 | a = src.a |
| 24153 | det = a * src.d - src.b * src.c |
| 24154 | if det < -sys.float_info.epsilon or det > sys.float_info.epsilon: |
| 24155 | dst = mupdf.FzMatrix() |
| 24156 | rdet = 1 / det |
| 24157 | dst.a = src.d * rdet |
| 24158 | dst.b = -src.b * rdet |
| 24159 | dst.c = -src.c * rdet |
| 24160 | dst.d = a * rdet |
| 24161 | a = -src.e * dst.a - src.f * dst.c |
| 24162 | dst.f = -src.e * dst.b - src.f * dst.d |
| 24163 | dst.e = a |
| 24164 | return 0, (dst.a, dst.b, dst.c, dst.d, dst.e, dst.f) |
| 24165 | |
| 24166 | return 1, () |
| 24167 | |
| 24168 | |
| 24169 | def util_measure_string( text, fontname, fontsize, encoding): |
no test coverage detected
searching dependent graphs…