Esempio n. 1
0
void PropGeom::copy( Geom* fromGeom )
{
	int i;
	Geom::copy( fromGeom );						// Copy Base Stuff

	if ( fromGeom->getType() != PROP_GEOM_TYPE )
		return;

	PropGeom* g = (PropGeom*)fromGeom;			// Upcast

	numU = g->getNumU();
	numW = g->getNumW();
	numBlades = g->getNumBlades();
	bladeVec.resize( numBlades );

	surfVec.clear();
	for ( i = 0 ; i < (int)bladeVec.size() ; i++ )
		surfVec.push_back( &bladeVec[i] );

	diameter.set( g->get_diameter()->get() );
	cone_angle.set( g->get_cone_angle()->get() );
	pitch.set( g->get_pitch()->get() );

	//==== Delete Current Foils ====//
	DeleteAllFoilsAndSects();
	//for ( i = 0 ; i < (int)sectVec.size() ; i++ )
	//	delete sectVec[i].foil;

	vector<Section> sVec = g->getSectVec();	

	sectVec = sVec;

	for ( i = 0 ; i < (int)sectVec.size() ; i++ )
	{
		sectVec[i].foil = new Af(this);
		sectVec[i].foil->init_script(Stringc("prop_foil"));
		*(sectVec[i].foil) = *(sVec[i].foil);
		sectVec[i].foil->set_geom( this );
	}

	currSectID = 0;
	chord  = sectVec[currSectID].chord;
	loc    = sectVec[currSectID].x_off;
	offset = sectVec[currSectID].y_off;
	twist  = sectVec[currSectID].twist;

	for ( int i = 0 ; i < (int)sectVec.size() ; i++ )
		sectVec[i].SetGeomPtr( this );

	setCurrSectID( currSectID );
	compose_model_matrix();
	generate();

}
Esempio n. 2
0
//==== Parm Has Changed ReGenerate Fuse Component ====//
void PropGeom::parm_changed(Parm* p)
{

	if ( p->get_update_grp() == UPD_XFORM )
	{
		if ( p == &xLoc || p == &yLoc || p == &zLoc || 
			 p == &xRot || p == &yRot || p == &zRot )
			updateAttach(1);
		else
			updateAttach(0);
	}
	else if ( p->get_update_grp() == UPD_NUM_PNT_XSEC )
	{
		numPnts  = 4*((int)numPnts()/4)+1;

		for ( int i = 0 ; i < (int)sectVec.size() ; i++ )
		{
			sectVec[i].foil->set_num_pnts( numPnts.iget() );
		}
	}
	else if ( p->get_update_grp() == AF_UPDATE_GROUP )
	{
		for ( int i = 0 ; i < (int)sectVec.size() ; i++ )
		{
			sectVec[i].foil-> generate_airfoil();
			sectVec[i].foil-> load_name();
		}
		//get_af_ptr()->generate_airfoil();
		//get_af_ptr()->load_name();
	}


	if ( p == &scaleFactor )	
	{
		scale();
	}


	generate();
	updateAttach(0);

	compose_model_matrix();

	//==== Tell Aircraft You Have Changed ====//
	airPtr->geomMod( this );
}