Autodesk ObjectARX
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
AcGePoint3 d sorting
Options
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
118 Views, 3 Replies
08-27-2012 01:12 PM
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
Re: AcGePoint3 d sorting
Options
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
08-27-2012 03:44 PM in reply to:
cadproman
You need to pass the array by reference so that you are operating on the original array not a copy.
Re: AcGePoint3 d sorting
Options
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
08-27-2012 03:45 PM in reply to:
cadproman
It looks like you intended to pass the argument to sortPoints() by reference instead of by value.
--
Owen Wengerd
ManuSoft
Owen Wengerd
ManuSoft
Re: AcGePoint3 d sorting
Options
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
08-28-2012 07:04 AM in reply to:
cadproman
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!
