mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-12 00:02:25 -04:00
Use std::vector instead of raw pointer array
This commit is contained in:
parent
4351c30fa5
commit
fc64c3fa3c
@ -688,8 +688,8 @@ std::size_t FeaturePart::createCandidatesAlongLineNearStraightSegments( std::vec
|
|||||||
}
|
}
|
||||||
|
|
||||||
// calculate lengths of segments, and work out longest straight-ish segment
|
// calculate lengths of segments, and work out longest straight-ish segment
|
||||||
double *segmentLengths = new double[ numberNodes - 1 ]; // segments lengths distance bw pt[i] && pt[i+1]
|
std::vector< double > segmentLengths( numberNodes - 1 ); // segments lengths distance bw pt[i] && pt[i+1]
|
||||||
double *distanceToSegment = new double[ numberNodes ]; // absolute distance bw pt[0] and pt[i] along the line
|
std::vector< double > distanceToSegment( numberNodes ); // absolute distance bw pt[0] and pt[i] along the line
|
||||||
double totalLineLength = 0.0;
|
double totalLineLength = 0.0;
|
||||||
QVector< double > straightSegmentLengths;
|
QVector< double > straightSegmentLengths;
|
||||||
QVector< double > straightSegmentAngles;
|
QVector< double > straightSegmentAngles;
|
||||||
@ -730,8 +730,6 @@ std::size_t FeaturePart::createCandidatesAlongLineNearStraightSegments( std::vec
|
|||||||
|
|
||||||
if ( totalLineLength < labelWidth )
|
if ( totalLineLength < labelWidth )
|
||||||
{
|
{
|
||||||
delete[] segmentLengths;
|
|
||||||
delete[] distanceToSegment;
|
|
||||||
return 0; //createCandidatesAlongLineNearMidpoint will be more appropriate
|
return 0; //createCandidatesAlongLineNearMidpoint will be more appropriate
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -768,8 +766,8 @@ std::size_t FeaturePart::createCandidatesAlongLineNearStraightSegments( std::vec
|
|||||||
while ( currentDistanceAlongLine + labelWidth < distanceToEndOfSegment )
|
while ( currentDistanceAlongLine + labelWidth < distanceToEndOfSegment )
|
||||||
{
|
{
|
||||||
// calculate positions along linestring corresponding to start and end of current label candidate
|
// calculate positions along linestring corresponding to start and end of current label candidate
|
||||||
line->getPointByDistance( segmentLengths, distanceToSegment, currentDistanceAlongLine, &candidateStartX, &candidateStartY );
|
line->getPointByDistance( segmentLengths.data(), distanceToSegment.data(), currentDistanceAlongLine, &candidateStartX, &candidateStartY );
|
||||||
line->getPointByDistance( segmentLengths, distanceToSegment, currentDistanceAlongLine + labelWidth, &candidateEndX, &candidateEndY );
|
line->getPointByDistance( segmentLengths.data(), distanceToSegment.data(), currentDistanceAlongLine + labelWidth, &candidateEndX, &candidateEndY );
|
||||||
|
|
||||||
candidateLength = std::sqrt( ( candidateEndX - candidateStartX ) * ( candidateEndX - candidateStartX ) + ( candidateEndY - candidateStartY ) * ( candidateEndY - candidateStartY ) );
|
candidateLength = std::sqrt( ( candidateEndX - candidateStartX ) * ( candidateEndX - candidateStartX ) + ( candidateEndY - candidateStartY ) * ( candidateEndY - candidateStartY ) );
|
||||||
|
|
||||||
@ -861,8 +859,6 @@ std::size_t FeaturePart::createCandidatesAlongLineNearStraightSegments( std::vec
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] segmentLengths;
|
|
||||||
delete[] distanceToSegment;
|
|
||||||
return lPos.size();
|
return lPos.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -885,8 +881,8 @@ std::size_t FeaturePart::createCandidatesAlongLineNearMidpoint( std::vector< std
|
|||||||
std::vector< double > &x = line->x;
|
std::vector< double > &x = line->x;
|
||||||
std::vector< double > &y = line->y;
|
std::vector< double > &y = line->y;
|
||||||
|
|
||||||
double *segmentLengths = new double[nbPoints - 1]; // segments lengths distance bw pt[i] && pt[i+1]
|
std::vector< double > segmentLengths( nbPoints - 1 ); // segments lengths distance bw pt[i] && pt[i+1]
|
||||||
double *distanceToSegment = new double[nbPoints]; // absolute distance bw pt[0] and pt[i] along the line
|
std::vector< double >distanceToSegment( nbPoints ); // absolute distance bw pt[0] and pt[i] along the line
|
||||||
|
|
||||||
double totalLineLength = 0.0; // line length
|
double totalLineLength = 0.0; // line length
|
||||||
for ( int i = 0; i < line->nbPoints - 1; i++ )
|
for ( int i = 0; i < line->nbPoints - 1; i++ )
|
||||||
@ -927,8 +923,8 @@ std::size_t FeaturePart::createCandidatesAlongLineNearMidpoint( std::vector< std
|
|||||||
while ( currentDistanceAlongLine < totalLineLength - labelWidth )
|
while ( currentDistanceAlongLine < totalLineLength - labelWidth )
|
||||||
{
|
{
|
||||||
// calculate positions along linestring corresponding to start and end of current label candidate
|
// calculate positions along linestring corresponding to start and end of current label candidate
|
||||||
line->getPointByDistance( segmentLengths, distanceToSegment, currentDistanceAlongLine, &candidateStartX, &candidateStartY );
|
line->getPointByDistance( segmentLengths.data(), distanceToSegment.data(), currentDistanceAlongLine, &candidateStartX, &candidateStartY );
|
||||||
line->getPointByDistance( segmentLengths, distanceToSegment, currentDistanceAlongLine + labelWidth, &candidateEndX, &candidateEndY );
|
line->getPointByDistance( segmentLengths.data(), distanceToSegment.data(), currentDistanceAlongLine + labelWidth, &candidateEndX, &candidateEndY );
|
||||||
|
|
||||||
if ( currentDistanceAlongLine < 0 )
|
if ( currentDistanceAlongLine < 0 )
|
||||||
{
|
{
|
||||||
@ -1017,11 +1013,6 @@ std::size_t FeaturePart::createCandidatesAlongLineNearMidpoint( std::vector< std
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//delete line;
|
|
||||||
|
|
||||||
delete[] segmentLengths;
|
|
||||||
delete[] distanceToSegment;
|
|
||||||
|
|
||||||
return lPos.size();
|
return lPos.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user