Probably more of a C++ question than ARX, and I'm sorry ahead of time, but can anyone tell me what is going wrong here? The code below will compile and run when I pass in an AcGePoint3dArray of several points, but the array is unchanged after it runs...
int pointSortByX(const void *p1, const void *p2){ return ((AcGePoint3d*)p1)->x - ((AcGePoint3d*)p2)->x;} int pointSortByY(const void *p1, const void *p2){ return ((AcGePoint3d*)p1)->y - ((AcGePoint3d*)p2)->y;} void sortPoints(AcGePoint3dArray allIntersPts) { /*the first two elements are the start and endpoints. Use them to determine if the array should be sorted by x or y values. */ double distInX = abs(allIntersPts.at(0).x - allIntersPts.at(1).x); double distInY = abs(allIntersPts.at(0).y - allIntersPts.at(1).y); //if the line is more vertical, then sort by the y-coords if(distInY > distInX) std::qsort(allIntersPts.asArrayPtr(), allIntersPts.length(), sizeof(AcGePoint3d), pointSortByY); //else the line is more horizontal, then sort by the x-coords else std::qsort(allIntersPts.asArrayPtr(), allIntersPts.length(), sizeof(AcGePoint3d), pointSortByX); return; } AcGePoint3dArray allIntersPts; /*code to append some points*/ acutPrintf(_T("\nBefore sort:")); for(int i = 0; i < allIntersPts.logicalLength(); i++) acutPrintf(_T("\n%d: %.3f, %.3f"), i, allIntersPts.at(i).x, allIntersPts.at(i).y); sortPoints(allIntersPts); acutPrintf(_T("\nAfter sort:")); for(int i = 0; i < allIntersPts.logicalLength(); i++) acutPrintf(_T("\n%d: %.3f, %.3f"), i, allIntersPts.at(i).x, allIntersPts.at(i).y);
TIA,
Ralph Gaston
It looks like you intended to pass the argument to sortPoints() by reference instead of by value.
That appears to have fixed it. Thanks to both of you. I thought I was passing in the address just because it was an array. Pretty embarrassing, but no telling how much time it saved me. Thanks again!