ISeg* ISeg::Split( Surf* sPtr, vec2d & uw ) { vec2d uwa, uwb; if ( sPtr == m_SurfA ) { double denom = dist( m_IPnt[0]->GetPuw( m_SurfA )->m_UW, m_IPnt[1]->GetPuw( m_SurfA )->m_UW ); double numer = dist( m_IPnt[0]->GetPuw( m_SurfA )->m_UW, uw ); double fract = 0.0; if ( denom ) { fract = numer / denom; } uwa = uw; uwb = m_IPnt[0]->GetPuw( m_SurfB )->m_UW + ( m_IPnt[1]->GetPuw( m_SurfB )->m_UW - m_IPnt[0]->GetPuw( m_SurfB )->m_UW ) * fract; } else { double denom = dist( m_IPnt[0]->GetPuw( m_SurfB )->m_UW, m_IPnt[1]->GetPuw( m_SurfB )->m_UW ); double numer = dist( m_IPnt[0]->GetPuw( m_SurfB )->m_UW, uw ); double fract = 0.0; if ( denom ) { fract = numer / denom; } uwb = uw; uwa = m_IPnt[0]->GetPuw( m_SurfA )->m_UW + ( m_IPnt[1]->GetPuw( m_SurfA )->m_UW - m_IPnt[0]->GetPuw( m_SurfA )->m_UW ) * fract; } if ( m_SurfA->ValidUW( uwa ) && m_SurfB->ValidUW( uwb ) ) { Puw* pwa = new Puw( m_SurfA, uwa ); CfdMeshMgr.AddDelPuw( pwa ); Puw* pwb = new Puw( m_SurfB, uwb ); CfdMeshMgr.AddDelPuw( pwb ); IPnt* ip = new IPnt( pwa, pwb ); CfdMeshMgr.AddDelIPnt( ip ); ip->CompPnt(); ISeg* sseg = new ISeg( m_SurfA, m_SurfB, ip, m_IPnt[1] ); m_IPnt[1] = ip; return sseg; } return NULL; }
void ISegChain::ApplyTess( ) { //==== Clear Old Tess ====// m_TessVec.clear(); vector< vec3d > tuwa = m_ACurve.GetUWTessPnts(); vector< vec3d > tuwb = m_BCurve.GetUWTessPnts(); assert( tuwa.size() == tuwb.size() ); //==== Add Other IPnts ====// for ( int i = 0 ; i < (int)tuwa.size() ; i++ ) { Puw* puwa = new Puw( m_SurfA, vec2d( tuwa[i][0], tuwa[i][1] ) ); cfdMeshMgrPtr->AddDelPuw( puwa ); Puw* puwb = new Puw( m_SurfB, vec2d( tuwb[i][0], tuwb[i][1] ) ); cfdMeshMgrPtr->AddDelPuw( puwb ); IPnt* ip = new IPnt( puwa, puwb ); m_CreatedIPnts.push_back( ip ); //m_CreatedPuws.push_back( puwa ); //m_CreatedPuws.push_back( puwb ); //vec3d pA = m_SurfA->CompPnt( tuwa[i][0], tuwa[i][1] ); //vec3d pB = m_SurfB->CompPnt( tuwb[i][0], tuwb[i][1] ); //double d = dist( pA, pB ); // printf( "%d Big D = %f \n",i, d ); ip->CompPnt(); m_TessVec.push_back( ip ); } //double d = dist( m_TessVec.front()->m_Pnt, m_TessVec.back()->m_Pnt ); //printf("Tess Chain Size = %d %f\n", m_TessVec.size(), d ); }