//------------------------------------------------------------------------------------- void CoordinateSystem::moveNodeZ(CoordinateNode* pNode, float pz, CoordinateNode* pCurrNode) { if(pCurrNode != NULL) { if(pCurrNode->z() > pz) { CoordinateNode* pPreNode = pCurrNode->pPrevZ(); pCurrNode->pPrevZ(pNode); if(pPreNode) { pPreNode->pNextZ(pNode); if(pNode == first_z_coordinateNode_ && pNode->pNextZ()) first_z_coordinateNode_ = pNode->pNextZ(); } else { first_z_coordinateNode_ = pNode; } if(pNode->pPrevZ()) pNode->pPrevZ()->pNextZ(pNode->pNextZ()); if(pNode->pNextZ()) pNode->pNextZ()->pPrevZ(pNode->pPrevZ()); pNode->pPrevZ(pPreNode); pNode->pNextZ(pCurrNode); } else { CoordinateNode* pNextNode = pCurrNode->pNextZ(); if(pNextNode != pNode) { pCurrNode->pNextZ(pNode); if(pNextNode) pNextNode->pPrevZ(pNode); if(pNode->pPrevZ()) pNode->pPrevZ()->pNextZ(pNode->pNextZ()); if(pNode->pNextZ()) { pNode->pNextZ()->pPrevZ(pNode->pPrevZ()); if(pNode == first_z_coordinateNode_) first_z_coordinateNode_ = pNode->pNextZ(); } pNode->pPrevZ(pCurrNode); pNode->pNextZ(pNextNode); } } } }
//------------------------------------------------------------------------------------- CoordinateSystem::~CoordinateSystem() { dels_.clear(); dels_count_ = 0; if(first_x_coordinateNode_) { CoordinateNode* pNode = first_x_coordinateNode_; while(pNode != NULL) { CoordinateNode* pNextNode = pNode->pNextX(); if (pNextNode) pNextNode->pPrevX(NULL); pNode->pCoordinateSystem(NULL); pNode->pPrevX(NULL); pNode->pNextX(NULL); pNode->pPrevY(NULL); pNode->pNextY(NULL); pNode->pPrevZ(NULL); pNode->pNextZ(NULL); delete pNode; pNode = pNextNode; } // 上面已经销毁过了 first_x_coordinateNode_ = NULL; first_y_coordinateNode_ = NULL; first_z_coordinateNode_ = NULL; } releaseNodes(); }