PDFLIB_API void PDFLIB_CALL PDF_setmatrix(PDF *p, float a, float b, float c, float d, float e, float f) { static const char fn[] = "PDF_setmatrix"; pdc_matrix m; float det = a * d - b * c; if (!pdf_enter_api(p, fn, pdf_state_content, "(p[%p], %g, %g, %g, %g, %g, %g)\n", (void *) p, a, b, c, d, e, f)) { return; } if (fabs(det) < (float) PDF_SMALLREAL) pdc_error(p->pdc, PDC_E_ILLARG_MATRIX, pdc_errprintf(p->pdc, "%f %f %f %f %f %f", a, b, c, d, e, f), 0, 0, 0); pdc_invert_matrix(p->pdc, &m, &p->gstate[p->sl].ctm); pdf_concat_raw(p, &m); m.a = (float) a; m.b = (float) b; m.c = (float) c; m.d = (float) d; m.e = (float) e; m.f = (float) f; pdf_concat_raw(p, &m); }
void pdf_setmatrix_e(PDF *p, pdc_matrix *n) { pdc_matrix m; pdc_invert_matrix(p->pdc, &m, &p->curr_ppt->gstate[p->curr_ppt->sl].ctm); pdc_multiply_matrix(n, &m); pdf_concat_raw(p, &m); }
void pdf_get_mbox_rectangle(PDF *p, pdf_mbox *mbox, pdc_vector *polyline) { pdc_matrix ctminv; pdc_invert_matrix(p->pdc, &ctminv, &p->curr_ppt->gstate[p->curr_ppt->sl].ctm); pdc_multiply_matrix(&mbox->ctm, &ctminv); pdc_rect2polyline(&ctminv, &mbox->rect, polyline); }
void pdf__initgraphics(PDF *p) { pdc_matrix inv_ctm; pdf_reset_gstate(p); pdc_invert_matrix(p->pdc, &inv_ctm, &p->gstate[p->sl].ctm); pdf_concat_raw(p, &inv_ctm); /* This also resets the CTM which guards against rounding artifacts. */ pdf_init_gstate(p); }
void pdf__setmatrix(PDF *p, pdc_matrix *n) { pdc_matrix m; float det = n->a * n->d - n->b * n->c; if (fabs(det) < (float) PDF_SMALLREAL) pdc_error(p->pdc, PDC_E_ILLARG_MATRIX, pdc_errprintf(p->pdc, "%f %f %f %f %f %f", n->a, n->b, n->c, n->d, n->e, n->f), 0, 0, 0); pdc_invert_matrix(p->pdc, &m, &p->gstate[p->sl].ctm); pdf_concat_raw(p, &m); pdf_concat_raw(p, n); }