Public Member Functions | |
CBSPNode2v (const CPlane &plane, CVector p0, CVector p1, uint v0, uint v1) | |
CBSPNode2v () | |
void | insert (CBSPNode2v *node) |
bool | intersect (const CVector &p0, const CVector &p1, uint v0, uint v1) const |
~CBSPNode2v () | |
Data Fields | |
CBSPNode2v * | Back |
CBSPNode2v * | Front |
CVector | P0 |
CVector | P1 |
CBSPNode2v * | Parent |
CPlane | Plane |
uint | V0 |
uint | V1 |
|
Definition at line 198 of file polygon.cpp. Referenced by insert().
|
|
Definition at line 203 of file polygon.cpp.
|
|
Definition at line 211 of file polygon.cpp.
|
|
Definition at line 219 of file polygon.cpp. References CBSPNode2v(), NLMISC::CPlane::intersect(), P0, P1, Parent, Plane, V0, and V1. Referenced by NLMISC::CPolygon::toConvexPolygonsLocalAndBSP().
00220 { 00221 // Front ? 00222 bool p0Front = (Plane * node->P0) > 0; 00223 bool p1Front = (Plane * node->P1) > 0; 00224 if (p0Front && p1Front) 00225 { 00226 // Front child ? 00227 if (Front) 00228 Front->insert (node); 00229 else 00230 { 00231 // Link left 00232 Front = node; 00233 node->Parent = this; 00234 } 00235 } 00236 else if ((!p0Front) && (!p1Front)) 00237 { 00238 // Back child ? 00239 if (Back) 00240 Back->insert (node); 00241 else 00242 { 00243 // Link left 00244 Back = node; 00245 node->Parent = this; 00246 } 00247 } 00248 else 00249 { 00250 // Split vertex 00251 CVector newVertex = Plane.intersect (node->P0, node->P1); 00252 00253 // New node 00254 CBSPNode2v *newNode = new CBSPNode2v (node->Plane, node->P0, newVertex, node->V0, node->V1); 00255 00256 // Old node 00257 node->P0 = newVertex; 00258 00259 // Insert child 00260 CBSPNode2v **p0Parent; 00261 CBSPNode2v **p1Parent; 00262 00263 // Get insertion pointer 00264 if (p0Front) 00265 { 00266 p0Parent = &Front; 00267 p1Parent = &Back; 00268 } 00269 else 00270 { 00271 p0Parent = &Back; 00272 p1Parent = &Front; 00273 } 00274 00275 // Insert children 00276 if (*p0Parent) 00277 { 00278 (*p0Parent)->insert (newNode); 00279 } 00280 else 00281 { 00282 *p0Parent = newNode; 00283 newNode->Parent = this; 00284 } 00285 00286 // Insert children 00287 if (*p1Parent) 00288 { 00289 (*p1Parent)->insert (node); 00290 } 00291 else 00292 { 00293 *p1Parent = node; 00294 node->Parent = this; 00295 } 00296 } 00297 } |
|
Definition at line 299 of file polygon.cpp. Referenced by NLMISC::CPolygon::chain(), and NLMISC::CPolygon::toConvexPolygonsDiagonal().
00300 { 00301 // Front ? 00302 bool p0Front = (Plane * p0) > 0; 00303 bool p1Front = (Plane * p1) > 0; 00304 00305 if (p0Front != p1Front) 00306 if ( (v0 != V0) && (v0 != V1) && (v1 != V0) && (v1 != V1) ) 00307 if (CPolygon::toConvexPolygonsEdgeIntersect ((CVector2f) P0, (CVector2f) P1, (CVector2f) p0, (CVector2f) p1)) 00308 return true; 00309 00310 if (p0Front || p1Front) 00311 { 00312 if (Front) 00313 if (Front->intersect (p0, p1, v0, v1)) 00314 return true; 00315 } 00316 00317 if ((!p0Front) || (!p1Front)) 00318 { 00319 if (Back) 00320 if (Back->intersect (p0, p1, v0, v1)) 00321 return true; 00322 } 00323 00324 return false; 00325 } |
|
Definition at line 327 of file polygon.cpp. |
|
Definition at line 327 of file polygon.cpp. |
|
Definition at line 329 of file polygon.cpp. Referenced by insert(). |
|
Definition at line 330 of file polygon.cpp. Referenced by insert(). |
|
Definition at line 327 of file polygon.cpp. Referenced by insert(). |
|
Definition at line 328 of file polygon.cpp. Referenced by insert(). |
|
Definition at line 331 of file polygon.cpp. Referenced by CBSPNode2v(), insert(), and intersect(). |
|
Definition at line 332 of file polygon.cpp. Referenced by CBSPNode2v(), insert(), and intersect(). |