コード例 #1
0
ファイル: propGeom.cpp プロジェクト: amgary/OpenVSP
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();

}
コード例 #2
0
ファイル: propGeom.cpp プロジェクト: CarltonFraley/OpenVSP
//==== Read External File ====//
void PropGeom::read(xmlNodePtr root)
{
  int i;

  xmlNodePtr node;

  //===== Read General Parameters =====//
  node = xmlGetNode( root, "General_Parms", 0 );
  if ( node )
    read_general_parms( node );

  //===== Read Fuse Parameters =====//
  node = xmlGetNode( root, "Prop_Parms", 0 );
  if ( node )
  {
	numBlades   =  xmlFindInt( node, "NumBlades", numBlades );
	smoothFlag  =  xmlFindInt( node, "SmoothFlag", smoothFlag );
	numU        =  xmlFindInt( node, "NumU", numU );
	numW        =  xmlFindInt( node, "NumW", numW );

	diameter    =  xmlFindDouble( node, "Diameter", diameter() );
	cone_angle  =  xmlFindDouble( node, "ConeAngle", diameter() );
	pitch       =  xmlFindDouble( node, "Pitch", diameter() );

	int num_sects = xmlGetNumNames( node, "Sect_Parms" );

	if ( num_sects >= 2 )
	{
		//==== Delete Old Sect Vec ====//
		DeleteAllFoilsAndSects();

		//for ( i = 0 ; i < (int)sectVec.size() ; i++ )
		//{
		//	RemoveFoilParmReferences( sectVec[i].foil );
		//	delete sectVec[i].foil;
		//}

		sectVec.resize( num_sects );

		for ( i = 0 ; i < (int)sectVec.size() ; i++ )
		{
			xmlNodePtr sect_node = xmlGetNode( node, "Sect_Parms", i );

			sectVec[i].chord = xmlFindDouble( sect_node, "Chord", sectVec[i].chord() );
			sectVec[i].x_off = xmlFindDouble( sect_node, "X_Off", sectVec[i].x_off() );
			sectVec[i].y_off = xmlFindDouble( sect_node, "Y_Off", sectVec[i].y_off() );
			sectVec[i].twist = xmlFindDouble( sect_node, "Twist", sectVec[i].twist() );

			sectVec[i].foil = new Af(this);
			sectVec[i].foil->init_script(Stringc("prop_foil"));

			xmlNodePtr af_node = xmlGetNode( sect_node, "Airfoil", 0 );
			if ( af_node )
				sectVec[i].foil->read( af_node);
			sectVec[i].foil->set_num_pnts( numPnts.iget() );
			sectVec[i].foil->generate_airfoil();
			sectVec[i].foil->load_name();
		}
	}

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

  currSectID = 0;

  generate();
  parmLinkMgrPtr->RebuildAll();

}
コード例 #3
0
ファイル: propGeom.cpp プロジェクト: CarltonFraley/OpenVSP
//==== Destructor =====//
PropGeom::~PropGeom()
{
	DeleteAllFoilsAndSects();
	//for ( int i = 0 ; i < (int)sectVec.size() ; i++ )
	//	delete sectVec[i].foil;
}