void SubSurface::UpdateDrawObjs() { if ( !m_UpdateDrawFlag ) { return; } Vehicle* veh = VehicleMgr.GetVehicle(); if ( !veh ) { return; } Geom* geom = veh->FindGeom( m_CompID ); m_DrawObjVec.clear(); if ( geom ) { vector< VspSurf > surf_vec; geom->GetSurfVec( surf_vec ); int ncopy = geom->GetNumSymmCopies(); m_DrawObjVec.resize( m_LVec.size()*ncopy, DrawObj() ); int ind = 0; for ( int ls = 0 ; ls < ( int )m_LVec.size() ; ls++ ) { int num_pnts = CompNumDrawPnts( geom ); int *num_pnts_ptr = NULL; if ( num_pnts > 0 ) { num_pnts_ptr = &num_pnts; } int isurf = m_MainSurfIndx(); vector < int > symms = geom->GetSymmIndexs( isurf ); assert( ncopy == symms.size() ); for ( int s = 0 ; s < ncopy ; s++ ) { m_LVec[ls].UpdateDrawObj( &surf_vec[symms[s]], geom, m_DrawObjVec[ind], num_pnts_ptr ); ind++; } } } }
void SSControlSurf::UpdateDrawObjs() { SubSurface::UpdateDrawObjs(); Vehicle* veh = VehicleMgr.GetVehicle(); if ( !veh ) { return; } Geom* geom = veh->FindGeom( m_CompID ); if ( geom ) { vector< VspSurf > surf_vec; geom->GetSurfVec( surf_vec ); int ncopy = geom->GetNumSymmCopies(); m_HingeDO.m_PntVec.clear(); m_HingeDO.m_LineWidth = 2.0; m_HingeDO.m_Type = DrawObj::VSP_LINES; m_HingeDO.m_GeomID = m_ID + string( "_ss_hinge" ); m_HingeDO.m_GeomChanged = true; m_ArrowDO.m_PntVec.clear(); m_ArrowDO.m_Type = DrawObj::VSP_SHADED_TRIS; m_ArrowDO.m_GeomID = m_ID + string( "_ss_arrow" ); m_ArrowDO.m_GeomChanged = true; for ( int i = 0; i < 4; i++ ) { m_ArrowDO.m_MaterialInfo.Ambient[i] = 0.2; m_ArrowDO.m_MaterialInfo.Diffuse[i] = 0.1; m_ArrowDO.m_MaterialInfo.Specular[i] = 0.7; m_ArrowDO.m_MaterialInfo.Emission[i] = 0.0; } m_ArrowDO.m_MaterialInfo.Diffuse[3] = 0.5; m_ArrowDO.m_MaterialInfo.Shininess = 5.0; int isurf = m_MainSurfIndx(); vector < int > symms = geom->GetSymmIndexs( isurf ); assert( ncopy == symms.size() ); int npt = m_UWStart.size(); for ( int s = 0 ; s < ncopy ; s++ ) { VspSurf* surf = &( surf_vec[ symms[ s ] ] ); vec3d pst, pend; for ( int i = 0; i < npt; i++ ) { pst = pst + surf->CompPnt01( m_UWStart[i].x(), m_UWStart[i].y() ); pend = pend + surf->CompPnt01( m_UWEnd[i].x(), m_UWEnd[i].y() ); } pst = pst / ( 1.0 * npt ); pend = pend / ( 1.0 * npt ); vec3d pmid = ( pst + pend ) * 0.5; vec3d dir = pend - pst; double len = dir.mag(); dir.normalize(); m_HingeDO.m_PntVec.push_back( pst ); m_HingeDO.m_PntVec.push_back( pend ); MakeCircleArrow( pmid, dir, 0.25, m_HingeDO, m_ArrowDO ); } m_ArrowDO.m_NormVec = vector <vec3d> ( m_ArrowDO.m_PntVec.size() ); } }