723 }
else if (style.
shape != 0) {
737 switch (
mode.shape) {
741 for (
size_t seg = 1; seg < sides; seg++)
743 D[0] =
B[3 * (sides - 1) + 4];
744 D[sides] =
B[3 * (sides - 1) + 2];
749 const size_t sseg = sides - 1;
750 C[0] =
B[3 * sseg + 2];
751 C[1] =
B[3 * sseg + 4];
752 C[2].x =
C[1].x + (
C[0].x -
B[3 * sseg + 3].x);
753 C[2].y =
C[1].y + (
C[0].y -
B[3 * sseg + 3].y);
776 D[2].
x =
B[2].x + (
B[3].x -
B[4].x) / 3;
777 D[2].y =
B[2].y + (
B[3].y -
B[4].y) / 3;
778 D[3].x =
B[3].x + (
B[3].x -
B[4].x) / 3;
779 D[3].y =
B[3].y + (
B[3].y -
B[4].y) / 3;
780 for (
size_t seg = 4; seg < sides + 2; seg++)
781 D[seg] = AF[seg - 2];
808 D[1].
x = AF[0].
x - (AF[0].
x -
B[1].x) / 4;
809 D[1].y = AF[0].
y + (
B[3].y -
B[4].y) / 3;
810 D[2].x = AF[0].
x - 2 * (AF[0].
x -
B[1].x);
812 D[3].x = AF[0].
x - 2.25 * (AF[0].
x -
B[1].x);
816 for (
size_t seg = 4; seg < sides + 3; seg++)
817 D[seg] = AF[seg - 3];
835 C[0].x =
B[1].x + (
B[11].x -
B[0].x);
836 C[0].y =
B[1].y + (
B[11].y -
B[0].y);
865 D[2].
x =
B[3].x + (
B[4].x -
B[3].x);
866 D[2].y =
B[3].y + (
B[4].y -
B[3].y);
867 D[3].x =
D[2].x + (
B[3].x -
B[2].x);
868 D[3].y =
D[2].y + (
B[3].y -
B[2].y);
869 D[4].x =
D[3].x + (
B[4].x -
B[3].x);
870 D[4].y =
D[3].y + (
B[4].y -
B[3].y);
871 D[5].x =
D[4].x + (
D[2].x -
D[3].x);
872 D[5].y =
D[4].y + (
D[2].y -
D[3].y);
874 D[9].x =
B[6].x + (
B[5].x -
B[6].x);
875 D[9].y =
B[6].y + (
B[5].y -
B[6].y);
876 D[8].x =
D[9].x + (
B[6].x -
B[7].x);
877 D[8].y =
D[9].y + (
B[6].y -
B[7].y);
878 D[7].x =
D[8].x + (
B[5].x -
B[6].x);
879 D[7].y =
D[8].y + (
B[5].y -
B[6].y);
880 D[6].x =
D[7].x + (
D[9].x -
D[8].x);
881 D[6].y =
D[7].y + (
D[9].y -
D[8].y);
889 C[1].x =
D[2].x - (
D[3].x -
D[2].x);
890 C[1].y =
D[2].y - (
D[3].y -
D[2].y);
891 C[2].x =
C[1].x + (
D[4].x -
D[3].x);
892 C[2].y =
C[1].y + (
D[4].y -
D[3].y);
896 C[1].x =
D[6].x - (
D[7].x -
D[6].x);
897 C[1].y =
D[6].y - (
D[7].y -
D[6].y);
898 C[2].x =
C[1].x + (
D[8].x -
D[7].x);
899 C[2].y =
C[1].y + (
D[8].y -
D[7].y);
927 D[0].x =
mid_x(AF) + (AF[0].
x - AF[1].
x)/8;
928 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)*3/2;
929 D[1].x =
mid_x(AF) - (AF[0].
x - AF[1].
x)/4;
933 D[3].x =
D[2].x + (
B[2].x -
B[3].x)/2;
936 D[4].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y);
940 D[6].y =
D[4].y - (
B[3].y-
B[4].y)/4;
941 D[7].x =
D[6].x + (
B[2].x -
B[3].x);
942 D[7].y =
D[6].y + (
B[3].y -
B[4].y)/2;
944 D[8].y =
D[0].y + (
B[3].y -
B[4].y)/4;
951 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
974 D[0].y =
B[1].y - (
B[3].y -
B[4].y)/2;
976 D[1].y =
B[3].y - (
B[3].y -
B[4].y)/2;
978 D[2].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
980 D[3].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
981 D[4].y = AF[0].
y - (AF[0].
y - AF[3].
y)/2;
1006 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/4;
1009 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/2;
1010 D[2].x =
D[1].x + (
B[2].x-
B[3].x)/2;
1013 D[3].y =
D[2].y + (
B[3].y-
B[4].y)/2;
1014 D[4].x =
mid_x(AF) - (
B[2].x-
B[3].x)*3/4;
1018 D[6].x =
mid_x(AF) - (
B[2].x-
B[3].x)/4;
1028 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1051 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)*3/4;
1054 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/4;
1055 D[2].x =
mid_x(AF) + (
B[2].x-
B[3].x)/4;
1056 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1057 D[3].x =
mid_x(AF) - (
B[2].x-
B[3].x)/4;
1059 D[4].x =
mid_x(AF) - (
B[2].x-
B[3].x)*3/4;
1069 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1092 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x);
1093 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/4;
1094 D[1].x =
D[0].x - (
B[2].x-
B[3].x);
1095 D[1].y =
D[0].y + (
B[3].y-
B[4].y);
1097 D[2].y =
D[0].y + (
B[3].y-
B[4].y)/2;
1098 D[3].x =
mid_x(AF) - (AF[0].
x - AF[1].
x)/4;
1108 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1131 D[0].x =
mid_x(AF) + (AF[0].
x - AF[1].
x)/8 + (
B[2].x-
B[3].x)/2;
1132 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/4;
1133 D[1].x =
mid_x(AF) - (AF[0].
x - AF[1].
x)/8;
1136 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1137 D[3].x =
D[2].x - (
B[2].x-
B[3].x)/2;
1140 D[4].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)/4;
1141 D[5].x =
D[0].x - (
B[2].x-
B[3].x)/2;
1144 D[6].y =
D[5].y - (
B[3].y-
B[4].y)/2;
1153 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1160 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1184 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/8;
1185 D[1].x =
D[0].x + 2*(
B[2].x-
B[3].x);
1188 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1196 D[0].x = AF[1].
x + (
B[2].x-
B[3].x);
1197 D[0].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)*5/8;
1198 D[1].x =
D[0].x + (
B[2].x-
B[3].x);
1201 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1210 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1234 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/8;
1236 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/2;
1237 D[2].x =
D[1].x - 2*(
B[3].y-
B[4].y);
1246 D[0].x = AF[0].
x - (
B[2].x-
B[3].x);
1247 D[0].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)*5/8;
1249 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/2;
1250 D[2].x =
D[1].x - (
B[3].y-
B[4].y);
1260 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1285 D[0].x =
mid_x(AF) - (
B[2].x-
B[3].x)*9/8;
1286 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/8;
1287 D[1].x =
D[0].x + (
B[2].x-
B[3].x);
1290 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1298 D[0].x =
mid_x(AF) - (
B[2].x-
B[3].x)*9/8;
1299 D[0].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)*5/8;
1300 D[1].x =
D[0].x + (
B[2].x-
B[3].x);
1303 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1311 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/8;
1312 D[0].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)*5/8;
1313 D[1].x =
D[0].x + (
B[2].x-
B[3].x);
1316 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1324 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/8;
1325 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/8;
1326 D[1].x =
D[0].x + (
B[2].x-
B[3].x);
1329 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1338 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1342 C[0].x =
mid_x(AF) - (
B[2].x-
B[3].x)*9/8;
1345 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1367 D[0].x =
mid_x(AF) - (
B[2].x-
B[3].x);
1368 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/8;
1369 D[1].x =
D[0].x + 2*(
B[2].x-
B[3].x);
1372 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1380 D[0].x =
mid_x(AF) - (
B[2].x-
B[3].x);
1381 D[0].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)*5/8;
1382 D[1].x =
D[0].x + 2*(
B[2].x-
B[3].x);
1385 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/2;
1394 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1401 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1421 D[0].y =
B[1].y - (
B[3].y -
B[4].y)/2;
1423 D[1].y =
B[3].y - (
B[3].y -
B[4].y)/2;
1425 D[2].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
1427 D[3].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
1431 C[0].x = AF[1].
x + (
B[2].x-
B[3].x)/4;
1432 C[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/8;
1433 C[1].x =
C[0].x + (
B[2].x-
B[3].x)/4;
1434 C[1].y =
C[0].y - (
B[3].y-
B[4].y)/4;
1438 C[0].x = AF[1].
x + (
B[2].x-
B[3].x)/4;
1439 C[0].y =
mid_y(&AF[1]) - (
B[3].y-
B[4].y)/8;
1440 C[1].x =
C[0].x + (
B[2].x-
B[3].x)/4;
1441 C[1].y =
C[0].y + (
B[3].y-
B[4].y)/4;
1445 C[0].x = AF[1].
x + (
B[2].x-
B[3].x)/4;
1446 C[0].y = AF[2].
y + (
B[3].y-
B[4].y)*3/4;
1447 C[1].x = AF[0].
x - (
B[2].x-
B[3].x)/4;
1465 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/2;
1466 D[0].y =
mid_y(&AF[1]) + (
B[2].x-
B[3].x)/2;
1468 D[1].y =
mid_y(&AF[1]) - (
B[2].x-
B[3].x)/2;
1469 D[2].x =
mid_x(AF) - (
B[2].x-
B[3].x)/2;
1477 C[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)*3/4;
1478 C[0].y =
mid_y(&AF[1]) + (
B[2].x-
B[3].x)*3/4;
1480 C[1].y =
mid_y(&AF[1]) - (
B[2].x-
B[3].x)*3/4;
1481 C[2].x =
mid_x(AF) - (
B[2].x-
B[3].x)*3/4;
1489 C[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)*3/4;
1492 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1498 C[1].x =
mid_x(AF) - (
B[2].x-
B[3].x)*3/4;
1499 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1515 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/4;
1516 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/2;
1518 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/8;
1519 D[2].x =
D[0].x - (
B[2].x-
B[3].x)/8;
1520 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/8;
1522 D[3].y =
D[2].y + (
B[3].y-
B[4].y)/8;
1524 D[4].y =
D[3].y + (
B[3].y-
B[4].y)/8;
1529 D[7].x =
D[6].x - (
B[2].x-
B[3].x)/8;
1531 D[8].x =
D[7].x - (
B[2].x-
B[3].x)/8;
1535 D[10].x =
D[8].x + (
B[2].x-
B[3].x)/8;
1555 C[1].y =
C[0].y + (
B[3].y-
B[4].y)/8;
1560 C[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/4;
1562 C[1].y =
C[0].y + (
B[3].y-
B[4].y)/8;
1569 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1586 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/8;
1587 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/2;
1588 D[1].x =
D[0].x + (
B[2].x-
B[3].x)/8;
1589 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/8;
1591 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/4;
1593 D[3].y =
D[2].y + (
B[3].y-
B[4].y)/8;
1594 D[4].x =
D[3].x - (
B[2].x-
B[3].x)/4;
1596 D[5].x =
D[4].x - (
B[2].x-
B[3].x)/8;
1610 C[1].y =
C[0].y + (
B[3].y-
B[4].y)/8;
1615 C[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/4;
1617 C[1].y =
C[0].y + (
B[3].y-
B[4].y)/8;
1626 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1642 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/4;
1643 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/2;
1645 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/8;
1646 D[2].x =
D[0].x - (
B[2].x-
B[3].x)/8;
1647 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/8;
1649 D[3].y =
D[2].y + (
B[3].y-
B[4].y)/8;
1651 D[4].y =
D[3].y + (
B[3].y-
B[4].y)/8;
1656 D[7].x =
D[6].x - (
B[2].x-
B[3].x)/8;
1658 D[8].x =
D[7].x - (
B[2].x-
B[3].x)/8;
1662 D[10].x =
D[8].x + (
B[2].x-
B[3].x)/8;
1687 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1704 D[0].x =
mid_x(AF) + (
B[2].x-
B[3].x)/8;
1705 D[0].y =
mid_y(&AF[1]) + (
B[3].y-
B[4].y)/2;
1706 D[1].x =
D[0].x + (
B[2].x-
B[3].x)/8;
1707 D[1].y =
D[0].y + (
B[3].y-
B[4].y)/8;
1709 D[2].y =
D[1].y + (
B[3].y-
B[4].y)/4;
1711 D[3].y =
D[2].y + (
B[3].y-
B[4].y)/8;
1712 D[4].x =
D[3].x - (
B[2].x-
B[3].x)/4;
1714 D[5].x =
D[4].x - (
B[2].x-
B[3].x)/8;
1733 C[1].y = AF[2].
y + (AF[0].
y - AF[3].
y)/2;
1756 D[0].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1757 D[0].y =
B[1].y - (
B[3].y -
B[4].y)/2;
1759 D[1].y =
B[3].y - (
B[3].y -
B[4].y)/2;
1762 D[3].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1764 D[4].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1765 D[4].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
1766 D[5].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1767 D[5].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
1768 D[6].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1770 D[7].y = AF[0].
y - (AF[0].
y - AF[3].
y)/2;
1773 D[8].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1796 D[0].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1797 D[0].y =
B[1].y - (
B[3].y -
B[4].y)/2;
1799 D[1].y =
B[3].y - (
B[3].y -
B[4].y)/2;
1801 D[2].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
1802 D[3].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1803 D[3].y = AF[2].
y + (
B[3].y -
B[4].y)/2;
1804 D[4].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1806 D[5].y = AF[0].
y - (AF[0].
y - AF[3].
y)/2;
1809 D[6].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1831 D[0].y = AF[0].
y - (
B[3].y-
B[4].y)/2;
1832 D[1].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1833 D[1].y = AF[0].
y - (
B[3].y-
B[4].y)/2;
1834 D[2].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1837 D[3].y = AF[1].
y - (AF[1].
y - AF[2].
y)/2;
1838 D[4].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1840 D[5].y = AF[2].
y + (
B[3].y-
B[4].y)/2;
1841 D[5].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1842 D[6].y = AF[3].
y + (
B[3].y -
B[4].y)/2;
1867 D[0].y = AF[0].
y - (
B[3].y-
B[4].y)/2;
1868 D[1].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1869 D[1].y = AF[0].
y - (
B[3].y-
B[4].y)/2;
1870 D[2].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1873 D[3].y = AF[1].
y - (AF[1].
y - AF[2].
y)/2;
1874 D[4].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1876 D[5].y = AF[2].
y + (
B[3].y-
B[4].y)/2;
1877 D[5].x =
B[2].x + (
B[2].x -
B[3].x)/2;
1878 D[6].y = AF[3].
y + (
B[3].y -
B[4].y)/2;
1879 D[6].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1880 D[7].x =
B[1].x - (
B[2].x -
B[3].x)/2;
1937 char *p, *sfile, *fxd;
1938 double temp,
alpha, beta, gamma;
1939 double orientation, distortion, skew;
1940 double scalex, scaley;
1941 double width, height, marginx, marginy, spacex;
1945 bool regular = !!
ND_shape(n)->polygon->regular;
1946 size_t peripheries =
ND_shape(n)->polygon->peripheries;
1947 size_t sides =
ND_shape(n)->polygon->sides;
1948 orientation =
ND_shape(n)->polygon->orientation;
1950 distortion =
ND_shape(n)->polygon->distortion;
1966 width = height = sz;
1970 width = height =
INCH2PS(fmin(width, height));
1989 if (dimen.
x > 0 || dimen.
y > 0) {
1992 if ((p =
agget(n,
"margin"))) {
1993 marginx = marginy = 0;
1994 const int i = sscanf(p,
"%lf,%lf", &marginx, &marginy);
1995 marginx = fmax(marginx, 0);
1996 marginy = fmax(marginy, 0);
2009 spacex = dimen.
x -
ND_label(n)->dimen.x;
2014 dimen.
x =
quant(dimen.
x, temp);
2015 dimen.
y =
quant(dimen.
y, temp);
2018 imagesize.
x = imagesize.
y = 0;
2025 sfile =
agget(n,
"shapefile");
2027 if (imagesize.
x == -1 && imagesize.
y == -1) {
2029 "No or improper shapefile=\"%s\" for node \"%s\"\n",
2030 sfile ? sfile :
"<nil>",
agnameof(n));
2031 imagesize.
x = imagesize.
y = 0;
2038 }
else if ((sfile =
agget(n,
"image")) && *sfile !=
'\0') {
2040 if (imagesize.
x == -1 && imagesize.
y == -1) {
2042 "No or improper image=\"%s\" for node \"%s\"\n",
2043 sfile ? sfile :
"<nil>",
agnameof(n));
2044 imagesize.
x = imagesize.
y = 0;
2053 pointf bb = {.
x = fmax(dimen.
x, imagesize.
x),
2054 .y = fmax(dimen.
y, imagesize.
y)};
2064 p =
agget(n,
"labelloc");
2065 if (p && (p[0] ==
't' || p[0] ==
'b'))
2070 const bool isBox = sides == 4 && fabs(fmod(orientation, 90)) < 0.5
2083 if (height > temp &&
ND_label(n)->valign ==
'c') {
2087 bb.
x *= sqrt(1. / (1. -
SQR(bb.
y / height)));
2094 temp = cos(
M_PI / (
double)sides);
2108 if (*fxd ==
's' &&
streq(fxd,
"shape")) {
2109 bb = (
pointf){.
x = width, .y = height};
2110 poly->option.fixedshape =
true;
2115 "node '%s', graph '%s' size too small for label\n",
2117 bb = (
pointf){.
x = width, .y = height};
2119 bb.
x = width = fmax(width, bb.
x);
2120 bb.
y = height = fmax(height, bb.
y);
2127 width = height = bb.
x = bb.
y = fmax(bb.
x, bb.
y);
2133 ND_label(n)->space.x = fmax(dimen.
x, bb.
x) - spacex;
2135 else if (dimen.
y < bb.
y) {
2136 temp = bb.
x * sqrt(1.0 -
SQR(dimen.
y) /
SQR(bb.
y));
2137 ND_label(n)->space.x = fmax(dimen.
x, temp) - spacex;
2140 ND_label(n)->space.x = dimen.
x - spacex;
2142 ND_label(n)->space.x = dimen.
x - spacex;
2145 if (!
poly->option.fixedshape) {
2146 temp = bb.
y - min_bb.
y;
2147 if (dimen.
y < imagesize.
y)
2148 temp += imagesize.
y - dimen.
y;
2155 size_t outp = peripheries;
2156 if (peripheries < 1)
2159 if (peripheries >= 1 &&
penwidth > 0) {
2168 pointf P = {.
x = bb.
x / 2., .y = bb.
y / 2.};
2169 vertices[0] = (
pointf){.
x = -P.
x, .y = -P.
y};
2171 if (peripheries > 1) {
2172 for (
size_t j = 1, i = 2; j < peripheries; j++) {
2175 vertices[i] = (
pointf){.
x = -P.
x, .y = -P.
y};
2184 if (outp > peripheries) {
2188 size_t i = sides * peripheries;
2189 vertices[i] = (
pointf){.
x = -P.
x, .y = -P.
y};
2193 outline_bb.
x = 2. * P.
x;
2194 outline_bb.
y = 2. * P.
y;
2211 double sinx = 0, cosx = 0,
xmax,
ymax;
2219 double angle, sectorangle, sidelength, skewdist, gdistortion, gskew;
2220 sectorangle = 2. *
M_PI / (double)sides;
2221 sidelength = sin(sectorangle / 2.);
2222 skewdist = hypot(fabs(distortion) + fabs(skew), 1.);
2223 gdistortion = distortion *
SQRT2 / cos(sectorangle / 2.);
2225 angle = (sectorangle -
M_PI) / 2.;
2228 pointf R = {.
x = .5 * cosx, .y = .5 * sinx};
2230 angle += (
M_PI - sectorangle) / 2.;
2231 for (
size_t i = 0; i < sides; i++) {
2234 angle += sectorangle;
2237 R.
x += sidelength * cosx;
2238 R.
y += sidelength * sinx;
2242 .
x = R.
x * (skewdist + R.
y * gdistortion) + R.
y * gskew,
2249 P.
x = P.
y = hypot(P.
x, P.
y);
2264 vertices[1] = (
pointf){.
x = -P.
x, .y = P.
y};
2265 vertices[2] = (
pointf){.
x = -P.
x, .y = -P.
y};
2266 vertices[3] = (
pointf){.
x = P.
x, .y = -P.
y};
2278 scalex = bb.
x /
xmax;
2279 scaley = bb.
y /
ymax;
2282 for (i = 0; i < sides; i++) {
2292 for (
size_t j = 1; j < sides; j++) {
2293 Q = vertices[(i - j) % sides];
2299 beta = atan2(R.
y - Q.
y, R.
x - Q.
x);
2301 for (i = 0; i < sides; i++) {
2314 for (
size_t j = 1; j < sides; j++) {
2315 R = vertices[(i + j) % sides];
2322 beta = atan2(R.
y - Q.
y, R.
x - Q.
x);
2327 temp =
GAP / sin(gamma);
2330 sinx = sin(
alpha - gamma) * temp;
2331 cosx = cos(
alpha - gamma) * temp;
2333 assert(cosx != 0 || sinx != 0);
2338 for (
size_t j = 1; j < peripheries; j++) {
2341 vertices[i + j * sides] = Q;
2343 if (outp > peripheries) {
2347 vertices[i + peripheries * sides] = Q;
2350 for (i = 0; i < sides; i++) {
2351 pointf P = vertices[i + (peripheries - 1) * sides];
2352 bb = (
pointf){.
x = fmax(2.0 * fabs(P.
x), bb.x),
2353 .y = fmax(2.0 * fabs(P.
y), bb.y)};
2354 Q = vertices[i + (outp - 1) * sides];
2355 outline_bb = (
pointf){.
x = fmax(2.0 * fabs(Q.
x), outline_bb.x),
2356 .y = fmax(2.0 * fabs(Q.
y), outline_bb.y)};
2360 poly->regular = regular;
2361 poly->peripheries = peripheries;
2362 poly->sides = sides;
2363 poly->orientation = orientation;
2365 poly->distortion = distortion;
2366 poly->vertices = vertices;
2368 if (
poly->option.fixedshape) {
2882 unsigned char sides;
2884 if (portname[0] ==
'\0')
2887 if (compass ==
NULL)
2893 "node %s, port %s, unrecognized compass point '%s' - ignored\n",
2924 double xsize, ysize;
2931 char* fillcolor=
NULL;
2932 char* pencolor=
NULL;
2940 vertices =
poly->vertices;
2941 const size_t sides =
poly->sides;
2942 size_t peripheries =
poly->peripheries;
2953 char *clrs[2] = {0};
3011 if (peripheries == 0 && filled != 0 && pfilled) {
3018 for (j = 0; j < peripheries; j++) {
3019 for (
size_t i = 0; i < sides; i++) {
3020 P = vertices[i + j * sides];
3056 usershape_p =
false;
3059 if (
streq(name,
"custom")) {
3060 if ((name =
agget(n,
"shapefile")) && name[0])
3064 }
else if ((name =
agget(n,
"image")) && name[0]) {
3069 for (
size_t i = 0; i < sides; i++) {
3075 if (filled != 0 && pfilled) {