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(); }
//==== 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(); }
//==== Destructor =====// PropGeom::~PropGeom() { DeleteAllFoilsAndSects(); //for ( int i = 0 ; i < (int)sectVec.size() ; i++ ) // delete sectVec[i].foil; }