////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// * Initializes the edge-list. * \param create [in] edge-list creation structure * \return true if success. */ ///////////////////////////////////////////////////////////////////////////////////////////
| 95 | */ |
| 96 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| 97 | bool Gu::EdgeListBuilder::init(const EDGELISTCREATE& create) |
| 98 | { |
| 99 | bool FacesToEdges = create.Verts ? true : create.FacesToEdges; |
| 100 | bool EdgesToFaces = create.Verts ? true : create.EdgesToFaces; |
| 101 | |
| 102 | // "FacesToEdges" maps each face to three edges. |
| 103 | if(FacesToEdges && !createFacesToEdges(create.NbFaces, create.DFaces, create.WFaces)) |
| 104 | return false; |
| 105 | |
| 106 | // "EdgesToFaces" maps each edge to the set of faces sharing this edge |
| 107 | if(EdgesToFaces && !createEdgesToFaces(create.NbFaces, create.DFaces, create.WFaces)) |
| 108 | return false; |
| 109 | |
| 110 | // Create active edges |
| 111 | if(create.Verts && !computeActiveEdges(create.NbFaces, create.DFaces, create.WFaces, create.Verts, create.Epsilon)) |
| 112 | return false; |
| 113 | |
| 114 | // Get rid of useless data |
| 115 | if(!create.FacesToEdges) |
| 116 | { |
| 117 | PX_FREE_AND_RESET(mData.mEdgeFaces); |
| 118 | } |
| 119 | if(!create.EdgesToFaces) |
| 120 | { |
| 121 | PX_FREE_AND_RESET(mData.mEdgeToTriangles); |
| 122 | PX_FREE_AND_RESET(mData.mFacesByEdges); |
| 123 | } |
| 124 | |
| 125 | return true; |
| 126 | } |
| 127 | |
| 128 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| 129 | /** |