| 1562 | } |
| 1563 | |
| 1564 | pointObj** msPolylineLabelPointExtended(shapeObj *p, int min_length, int repeat_distance, double ***angles, double ***lengths, int *numpoints, int *regularLines, int numlines, int anglemode) |
| 1565 | { |
| 1566 | double total_length, max_line_length; |
| 1567 | int i,j, max_line_index, segment_index, labelpoints_index, labelpoints_size; |
| 1568 | double** segment_lengths; |
| 1569 | double* line_lengths; |
| 1570 | pointObj** labelpoints; |
| 1571 | |
| 1572 | labelpoints_index = 0; |
| 1573 | labelpoints_size = p->numlines; // minimal array size |
| 1574 | *numpoints = 0; |
| 1575 | |
| 1576 | labelpoints = (pointObj **) msSmallMalloc(sizeof(pointObj *) * labelpoints_size); |
| 1577 | (*angles) = (double **) msSmallMalloc(sizeof(double *) * labelpoints_size); |
| 1578 | (*lengths) = (double **) msSmallMalloc(sizeof(double *) * labelpoints_size); |
| 1579 | |
| 1580 | msPolylineComputeLineSegments(p, &segment_lengths, &line_lengths, &max_line_index, &max_line_length, &segment_index, &total_length); |
| 1581 | |
| 1582 | if (repeat_distance > 0) { |
| 1583 | for(i=0; i<p->numlines; i++) |
| 1584 | if (numlines > 0) { |
| 1585 | for (j=0; j<numlines; j++) |
| 1586 | if (regularLines[j] == i) { |
| 1587 | msPolylineLabelPointLineString(p, min_length, repeat_distance, angles, lengths, segment_lengths, i, line_lengths[i], total_length, segment_index, &labelpoints_index, &labelpoints_size, &labelpoints, anglemode); |
| 1588 | break; |
| 1589 | } |
| 1590 | } else { |
| 1591 | msPolylineLabelPointLineString(p, min_length, repeat_distance, angles, lengths, segment_lengths, i, line_lengths[i], total_length, segment_index, &labelpoints_index, &labelpoints_size, &labelpoints, anglemode); |
| 1592 | } |
| 1593 | } |
| 1594 | else |
| 1595 | msPolylineLabelPointLineString(p, min_length, repeat_distance, angles, lengths, segment_lengths, max_line_index, max_line_length, total_length, segment_index, &labelpoints_index, &labelpoints_size, &labelpoints, anglemode); |
| 1596 | |
| 1597 | *numpoints = labelpoints_index; |
| 1598 | |
| 1599 | /* freeing memory: allocated by msPolylineComputeLineSegments */ |
| 1600 | if ( segment_lengths ) { |
| 1601 | for ( i = 0; i < p->numlines; i++ ) |
| 1602 | free(segment_lengths[i]); |
| 1603 | free(segment_lengths); |
| 1604 | } |
| 1605 | |
| 1606 | free(line_lengths); |
| 1607 | |
| 1608 | return labelpoints; |
| 1609 | } |
| 1610 | |
| 1611 | void msPolylineLabelPointLineString(shapeObj *p, int min_length, int repeat_distance, double ***angles, double ***lengths, double** segment_lengths, |
| 1612 | int line_index, double line_length, double total_length, int segment_index, int* labelpoints_index, int* labelpoints_size, pointObj ***labelpoints, int anglemode) |
no test coverage detected