Exemple #1
0
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;

}
Exemple #2
0
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 );
}