Exemple #1
0
void ISegChain::MergeInteriorIPnts()
{
	for ( int i = 1 ; i < (int)m_ISegDeque.size() ; i++ )
	{
		IPnt* ipe = m_ISegDeque[i-1]->m_IPnt[1];
		IPnt* ipb = m_ISegDeque[i]->m_IPnt[0];

#ifdef DEBUG_CFD_MESH
		static double max_dist = 0.0;
		double d = dist( ipe->m_Pnt, ipb->m_Pnt );

		if ( d > max_dist )
		{
			max_dist = d;
			fprintf( cfdMeshMgrPtr->m_DebugFile, "ISegChain::MergeInteriorIPnts Max Dist = %10.10f \n", max_dist );
		}
#endif

		m_ISegDeque[i]->m_IPnt[0] = ipe;
		ipe->AddSegRef( m_ISegDeque[i] ); 

//		delete ipb;
	}

}
Exemple #2
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 #3
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 );
}
Exemple #4
0
void ISegChain::Draw()
{
	//glBegin( GL_LINES );
	//deque< ISeg* >::iterator s;
	//for ( s = m_ISegDeque.begin() ; s != m_ISegDeque.end(); s++ )
	//{
	//	(*s)->Draw();
	//}
	//glEnd();

	//ISeg* backSeg  = m_ISegDeque.back();
	//ISeg* frontSeg = m_ISegDeque.front();


	//glBegin( GL_POINTS );
	//	glVertex3dv( backSeg->m_IPnt[1]->m_Pnt.data() );
	//	glVertex3dv( frontSeg->m_IPnt[0]->m_Pnt.data() );
	//glEnd();

	//glColor3ub( 255, 255, 0 );
	//m_ACurve.Draw();
	//glColor3ub( 0, 255, 255 );
	//m_BCurve.Draw();

//	glColor3ub( 255, 0, 255 );
	glLineWidth(1.0);
	glBegin( GL_LINE_STRIP );
	for ( int i = 0 ; i < (int)m_TessVec.size() ; i++ )
	{
		IPnt* ip = m_TessVec[i];
		vec2d uw = ip->GetPuw( m_SurfA )->m_UW;
		vec3d p = m_SurfA->CompPnt( uw[0], uw[1] );
		glVertex3dv( p.data() );
	}
	glEnd();
	glPointSize(4.0);
	glBegin( GL_POINTS );
	for ( int i = 0 ; i < (int)m_TessVec.size() ; i++ )
	{
		IPnt* ip = m_TessVec[i];
		vec2d uw = ip->GetPuw( m_SurfA )->m_UW;
		vec3d p = m_SurfA->CompPnt( uw[0], uw[1] );
		glVertex3dv( p.data() );
	}
	glEnd();

	//ISeg* backSeg  = m_ISegDeque.back();
	//ISeg* frontSeg = m_ISegDeque.front();

	//glPointSize(4.0);
	//glBegin( GL_POINTS );
	//	vec2d uw = frontSeg->m_AUW[0];
	//	vec3d p = frontSeg->m_SurfA->CompPnt( uw[0], uw[1] );
	//	glVertex3dv(p.data() );
	//	uw = backSeg->m_AUW[1];
	//	p = backSeg->m_SurfA->CompPnt( uw[0], uw[1] );
	//	glVertex3dv(p.data() );

	//glEnd();

	////glPointSize(5.0);
	////glColor3ub( 0, 255, 255 );
	////glBegin( GL_POINTS );
	////for ( int i = 0 ; i < (int)m_SplitVec.size() ; i++ )
	////{
	////	glVertex3dv(m_SplitVec[i].m_Pnt.data() );
	////}
	////glEnd();



}