void YsShellExt_SweepInfo::MakeInfo( const YsShellExt &shl, YSSIZE_T nPl,const YsShellPolygonHandle plHdArray[], YSSIZE_T nCe,const YsShellExt::ConstEdgeHandle ceHdArray[]) { CleanUp(); YsShellExt_BoundaryInfo::MakeInfo(*(const YsShell *)&shl,nPl,plHdArray); allSrcVtHd.SetShell((const YsShell &)shl); for(YSSIZE_T idx=0; idx<nPl; ++idx) { YsArray <YsShellVertexHandle,4> plVtHd; shl.GetPolygon(plVtHd,plHdArray[idx]); for(auto vtHd : plVtHd) { allSrcVtHd.AddVertex(vtHd); } } for(YSSIZE_T idx=0; idx<nCe; ++idx) { YsArray <YsShellVertexHandle,4> ceVtHd; YSBOOL isLoop; shl.GetConstEdge(ceVtHd,isLoop,ceHdArray[idx]); for(auto vtHd : ceVtHd) { allSrcVtHd.AddVertex(vtHd); } } for(YSSIZE_T ceIdx=0; ceIdx<nCe; ++ceIdx) { YSBOOL isLoop; YsArray <YsShellVertexHandle,16> ceVtHd; shl.GetConstEdge(ceVtHd,isLoop,ceHdArray[ceIdx]); if(2<=ceVtHd.GetN()) { if(YSTRUE==isLoop) { YsShellVertexHandle first=ceVtHd[0]; ceVtHd.Append(first); } for(int edIdx=0; edIdx<ceVtHd.GetN()-1; ++edIdx) { if(YSTRUE!=visited.IsIncluded(ceVtHd[edIdx],ceVtHd[edIdx+1])) { visited.AddEdge(ceVtHd[edIdx],ceVtHd[edIdx+1]); srcEdVtHd.Append(ceVtHd[edIdx]); srcEdVtHd.Append(ceVtHd[edIdx+1]); } } } } }
YSRESULT YsShellExt_RoundUtil::SetUpRoundConstEdge(const YsShellExt &shl,YsShellExt::ConstEdgeHandle ceHd,const YsShellVertexStore *roundVtx) { YsArray <YsShellVertexHandle> ceVtHd; YSBOOL isLoop; shl.GetConstEdge(ceVtHd,isLoop,ceHd); if(YSTRUE==isLoop && 3>ceVtHd.GetN()) { return YSERR; } else if(YSTRUE!=isLoop && 2>ceVtHd.GetN()) { return YSERR; } if(YSTRUE==isLoop) { ceVtHd.Append(ceVtHd[0]); ceVtHd.Append(ceVtHd[1]); } for(YSSIZE_T idx=1; idx<ceVtHd.GetN()-1; ++idx) { if(NULL==roundVtx || YSTRUE==roundVtx->IsIncluded(ceVtHd[idx])) { const YsShellVertexHandle toVtHd[2]={ceVtHd[idx-1],ceVtHd[idx+1]}; AddRoundCorner((const YsShell &)shl,ceVtHd[idx],toVtHd); } } targetCeKeyArray.Append(shl.GetSearchKey(ceHd)); return YSOK; }