MCPcopy Create free account
hub / github.com/MapServer/MapServer / msPolylineLabelPointExtended

Function msPolylineLabelPointExtended

mapprimitive.c:1564–1609  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1562}
1563
1564pointObj** 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
1611void 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)

Callers 2

msDrawShapeFunction · 0.85
msPolylineLabelPointFunction · 0.85

Calls 3

msSmallMallocFunction · 0.85

Tested by

no test coverage detected