quint32 getPoints(QPointF **points) { quint32 size; QFile coordinatesFile("coordinates.txt"); coordinatesFile.open(QFile::ReadOnly); QTextStream stream(&coordinatesFile); stream >> size; *points = new QPointF[size]; qreal x, y; for (quint32 i = 0; i < size; ++i) { stream >> x >> y; (*points)[i] = QPointF(x, y); } coordinatesFile.close(); return size; }
TSeparatorKit* ComponentHeliostatField::CreateField() { //Define heliostat tracker for the field QVector< TTrackerFactory* > trackersFactoryList = m_pPluginManager->GetTrackerFactories(); if( trackersFactoryList.size() == 0 ) { QMessageBox::warning( 0, QString( "Campo Heliostatos" ), QString( "No se ha encontrado plugins de tipo tracker." ) ); return 0; } QVector< QString > trackerNames; for( int i = 0; i < trackersFactoryList.size(); i++ ) trackerNames<< trackersFactoryList[i]->TTrackerName(); int selectedTracker = trackerNames.indexOf( QLatin1String( "Heliostat_tracker" ) ); if( selectedTracker < 0 ) { QMessageBox::warning( 0, QString( "Campo Heliostatos" ), QString( "No se ha encontrado el plugin de tipo 'Heliostat_tracker' " ) ); return 0; } TTrackerFactory* heliostatTrackerFactory = trackersFactoryList[ selectedTracker ]; HeliostatFieldWizard wizard; if( !wizard.exec() ) { QMessageBox::information( 0, QString( "Campo Heliostatos" ), QString( "The field has not been created." ) ); return 0; } //Aiming point Point3D aimingPoint = wizard.GetHeliostatsAimingPoint(); //Read heliostat component //TSeparatorKit::initClass(); TSeparatorKit* heliostatComponentNode = OpenHeliostatComponent( wizard.GetHeliostatComponentFile() ); if( !heliostatComponentNode ) { QMessageBox::information( 0, QString( "Campo Heliostatos" ), QString( "Error al leer el componente para los heliostatos." ) ); return 0; } QFile coordinatesFile( wizard.GetCoordinatesFile() ); if( !coordinatesFile.open( QIODevice::ReadOnly ) ) { QMessageBox::information( 0, QString( "Campo Heliostatos" ), QString( "Error al leer el archivo de coordenadas de los heliostatos." ) ); return 0; } QTextStream coordIn( &coordinatesFile ); std::vector< Point3D > hCenterList; while( !coordIn.atEnd() ) { QString inLine = coordIn.readLine(); QStringList heliostat = inLine.split(QRegExp("[\\t,;]"), QString::SkipEmptyParts); if( heliostat.count() >=3 ) hCenterList.push_back( Point3D( heliostat[0].toDouble(), heliostat[1].toDouble(), heliostat[2].toDouble() ) ); } SoType separatorType = SoType::fromName( SbName ( "TSeparatorKit" ) ); /*TSeparatorKit* rootSeparator = static_cast< TSeparatorKit* > ( separatorType.createInstance() ); //TSeparatorKit* rootSeparator = new TSeparatorKit; rootSeparator->setName( "CampoHeliostatos" ); rootSeparator->ref(); SoNodeKitListPart* rootPartList = static_cast< SoNodeKitListPart* >( rootSeparator->getPart( "childList", true ) ); if( !rootPartList ) return 0; */ TSeparatorKit* heliostatsNodeSeparator = static_cast< TSeparatorKit* > ( separatorType.createInstance() ); //TSeparatorKit* heliostatsNodeSeparator = new TSeparatorKit; //rootPartList->addChild(heliostatsNodeSeparator); heliostatsNodeSeparator->setName( "Heliostatos" ); heliostatsNodeSeparator->ref(); CreateHeliostatZones( hCenterList, heliostatsNodeSeparator, heliostatTrackerFactory, aimingPoint, heliostatComponentNode, 1 ); return heliostatsNodeSeparator; }