Exemplo n.º 1
0
void dtransmission(SOCKET csock, SOCKET csock2){

    int net_taille_chaine, nb_fichiers, net_nb_fichiers, taille_chaine, dossier_fichier, i;
    char *nom_fichier = NULL, fin;
    
    
    recv(csock, (char *)&net_nb_fichiers, sizeof(int), 0);
    send(csock2, (char *)&net_nb_fichiers, sizeof(int), 0);
    nb_fichiers = ntohl(net_nb_fichiers);
    
    for (i = 1 ; i < nb_fichiers ; i++){
        recv(csock, (char *)&net_taille_chaine, sizeof(int), 0);   
        send(csock2, (char *)&net_taille_chaine, sizeof(int), 0);
        
        taille_chaine = ntohl(net_taille_chaine);
        nom_fichier = malloc(taille_chaine);
        
        recv(csock, nom_fichier, taille_chaine, 0);
        send(csock2, nom_fichier, taille_chaine, 0);
        
        recv(csock2, &fin, sizeof(char), 0);
        send(csock, &fin, sizeof(char), 0);
        
        recv(csock, (char *)&dossier_fichier, sizeof(int), 0);
        send(csock2, (char *)&dossier_fichier, sizeof(int), 0);
        
        if (ntohl(dossier_fichier)){
            transmission(csock, csock2);
        }
    }
}
Exemplo n.º 2
0
FreeSSM::~FreeSSM()
{
	disconnect( _dump_action, SIGNAL( triggered() ), this, SLOT( dumpCUdata() ) );
	disconnect( engine_pushButton, SIGNAL( released() ), this, SLOT( engine() ) );
	disconnect( transmission_pushButton, SIGNAL( released() ), this, SLOT( transmission() ) );
	disconnect( absvdc_pushButton, SIGNAL( released() ), this, SLOT( abs() ) );
	disconnect( cruisecontrol_pushButton, SIGNAL( released() ), this, SLOT( cruisecontrol() ) );
	disconnect( aircon_pushButton, SIGNAL( released() ), this, SLOT( aircon() ) );
	disconnect( preferences_pushButton, SIGNAL( released() ), this, SLOT( preferences() ) );
	disconnect( help_pushButton, SIGNAL( released() ), this, SLOT( help() ) );
	disconnect( about_pushButton, SIGNAL( released() ), this, SLOT( about() ) );
	disconnect( exit_pushButton, SIGNAL( released() ), this, SLOT( close() ) );
	delete _dump_action;
#ifndef SMALL_RESOLUTION
	delete _progtitle_label;
#endif
	if (_translator != NULL)
	{
		QApplication::removeTranslator(_translator);
		delete _translator;
	}
	if (_qt_translator != NULL)
	{
		QApplication::removeTranslator(_qt_translator);
		delete _qt_translator;
	}
}
Mat ChromaticPrior::computePrior(Mat image, int patchsize , Vec3f veil)
{


        //[y x ~] = size(I);
        //J = zeros(y, x);

        // add some space around the edges

        int sizeY = image.rows;
        int sizeX = image.cols;

        cout << sizeX << endl;
        cout << sizeY << endl;
        Mat transmission(sizeY,sizeX,CV_64F);


        cout << image(Range(sizeY-1,sizeY-1),Range(sizeX-1,sizeX-1)) << endl;
        for(int i=0; i < sizeY;i++){
            for(int j=0;j < sizeX;j++){
                //cout << j + patchsize << " " << image.cols << endl;

                Mat tile = image(Range(i, min(i + patchsize, image.rows)), Range(j, min(j + patchsize, image.cols))).clone();

                //Mat tileCopy =transmission(Range(i, min(i + patchsize, transmission.rows)), Range(j, min(j + patchsize, transmission.cols)));

                //cout << tile.channels() << endl;
                //cout << i << " " << j << endl;

                double priorValue = prior(tile,veil);
                //cout << tile.rows << " " << tile.cols << endl;
                //cout << i << " " << j << endl;
                //cout << transmission.rows << " " <<  transmission.cols << endl;
                //cout << Rect(i,j, tile.rows ,tile.cols) << endl;
                 // Yes, the rectangle is inverted with matrix when you access
               // Mat tileCopy = transmission(Rect(j,i, tile.cols ,tile.rows));
                transmission.at<double>(i,j) = priorValue;
                //cout <<  tileCopy.rows << " " << tileCopy.cols << endl;
                //tileCopy =  Mat( tile.rows,tile.cols, CV_64F, cvScalar(priorValue));
                //tileCopy.copyTo(transmission(Rect(j,i, tile.cols ,tile.rows)));
                //cout << "prior" << endl;
                //cout << priorValue << endl;
                //cout << transmission.at<double>(i,j) << endl;
                //cout << priorValue << " ";
                //tileCopy =

            }
            //cout << i  << endl;
        }


    return transmission;
}
Exemplo n.º 4
0
bool LightScheme::GetLightIter(TracingInstance* pLocalData, const KVec2& samplePos, UINT32 lightIdx, const ShadingContext* shadingCtx,  const IntersectContext* hit_ctx, LightIterator& out_iter) const
{
	const ILightObject* pLightObj = GetLightPtr(lightIdx);
		
	KVec3 lightPos_f;
	KVec3d lightPos;
	KColor litClr;
	if (pLightObj->EvaluateLighting(samplePos, shadingCtx->position, lightPos_f, out_iter)) {

		lightPos = ToVec3d(lightPos_f);
		bool isOccluded = false;
		KColor transmission(out_iter.intensity);
		{
			KVec3d adjustedPos = ToVec3d(shadingCtx->position);
			KVec3d lightDir = lightPos - adjustedPos;
			float l_n = ToVec3f(lightDir) * shadingCtx->normal;
			float l_fn = ToVec3f(lightDir) * shadingCtx->face_normal;

			if (l_n > 0 && l_fn < 0) 
				AdjustHitPos(pLocalData, *hit_ctx, *shadingCtx, adjustedPos);

			KVec3d temp_light_pos(lightPos);
			lightDir = adjustedPos - temp_light_pos;
					
			KRay ray;
			lightDir = temp_light_pos - adjustedPos;
			ray.Init(adjustedPos, lightDir, NULL);
			ray.mExcludeBBoxNode = hit_ctx->bbox_node_idx;
			ray.mExcludeTriID = hit_ctx->tri_id;

			KColor trans_coefficent;
			pLocalData->ComputeLightTransimission(ray, 1.0f, trans_coefficent);
			transmission.Modulate(trans_coefficent);

		}

		if (transmission.Luminance() > 0) {
			out_iter.intensity = transmission;
			return true;
		}
	}

	return false;
}
Exemplo n.º 5
0
int main(int argc, char **argv) {
  
  int gate;
  int port;
  char port_number;
  int readed;

  printf("Give me the port, where the server is runnig!\n");
  scanf("%s", &port_number);

  port = atoi(&port_number); // Konvert számmá

  gate = client(port); // Csatlakozás

  if ((readed = transmission(gate)) < 1) {
    close(gate);
    exit(0);
  }
  
  return 0;
}
Exemplo n.º 6
0
int main(void)
{
	unsigned char dev1_access, dev2_access, dev3_access, dev4_access, dev5_access, dev6_access, dev7_access, dev8_access;						// Indique si les informations ont bien été prise du capteur

	init();									// Initialisations globales
	
	dev1_access = initDS7505(ADD1_DS7505);	// Initialiser le capteur de T° n°1
	dev2_access = initDS7505(ADD2_DS7505);	// Initialiser le capteur de T° n°2
	dev3_access = initDS7505(ADD3_DS7505);	// Initialiser le capteur de T° n°3
	dev4_access = initDS7505(ADD4_DS7505);	// Initialiser le capteur de T° n°4
	dev5_access = initDS7505(ADD5_DS7505);	// Initialiser le capteur de T° n°5
	dev6_access = initDS7505(ADD6_DS7505);	// Initialiser le capteur de T° n°6
	dev7_access = initDS7505(ADD7_DS7505);	// Initialiser le capteur de T° n°7
	dev8_access = initDS7505(ADD8_DS7505);	// Initialiser le capteur de T° n°8


	/* boucle infinie */
	for(;;)
	{	
		if( data[0] != 0x00 ) // Envoie des informations à la foxboard
		{
			switch(data[0])
			{
				case CMD_INCLINAISON : // Envoie les informations d'inclinaisons du sous-marin
					transmission(CMD_INCLINAISON, ACCL, ACCH);
					break;

				case CMD_HYGROMETRE1 : // Envoie les informations d'humidité du premier capteur hygrométrique
					transmission(CMD_HYGROMETRE1, HUM1L, HUM1H);
					break;

				case CMD_HYGROMETRE2 : // Envoie les informations d'humidité du deuxième capteur hygrométrique
					transmission(CMD_HYGROMETRE2, HUM2L, HUM2H);
					break;

				case CMD_BALLAST : // Envoie les informations de la position du ballast
					transmission(CMD_BALLAST, IMP1L, IMP1H);
					break;

				case CMD_SYSTEME_BALLAST : // Envoie les informations de la position du chariot portant le ballast
					transmission(CMD_SYSTEME_BALLAST, IMP2L, IMP2H);
					break;

				case CMD_TEMP1 : // Envoie les informations de température du premier capteur
					dev1_access = get_DS7505_Devices(ADD1_DS7505, listTemp); // Récupérer T° capteur n°1
					convertTemp(listTemp, tempResult);

					TEMP1H = tempResult[0];
					TEMP1L = tempResult[1];

					transmission(CMD_TEMP1, TEMP1L, TEMP1H);
					break;

				case CMD_TEMP2 : // Envoie les informations de température du deuxième capteur
					dev2_access = get_DS7505_Devices(ADD3_DS7505, listTemp); // Récupérer T° capteur n°2
					
					convertTemp(listTemp, tempResult);

					TEMP2H = tempResult[0];
					TEMP2L = tempResult[1];

					transmission(CMD_TEMP2, TEMP2L, TEMP2H);
					break;

				case CMD_TEMP3 : // Envoie les informations de température du troisième capteur
					dev3_access = get_DS7505_Devices(ADD3_DS7505, listTemp); // Récupérer T° capteur n°3
					
					convertTemp(listTemp, tempResult);

					TEMP3H = tempResult[0];
					TEMP3L = tempResult[1];

					transmission(CMD_TEMP3, TEMP3L, TEMP3H);
					break;

				case CMD_TEMP4 : // Envoie les informations de température du quatrième capteur
					dev4_access = get_DS7505_Devices(ADD4_DS7505, listTemp); // Récupérer T° capteur n°3
					
					convertTemp(listTemp, tempResult);

					TEMP4H = tempResult[0];
					TEMP4L = tempResult[1];

					transmission(CMD_TEMP4,TEMP4L, TEMP4H);
					break;

				case CMD_TEMP5 : // Envoie les informations de température du cinquième capteur
					dev5_access = get_DS7505_Devices(ADD5_DS7505, listTemp); // Récupérer T° capteur n°3
					
					convertTemp(listTemp, tempResult);

					TEMP5H = tempResult[0];
					TEMP5L = tempResult[1];

					transmission(CMD_TEMP5, TEMP5L, TEMP5H);
					break;

				case CMD_TEMP6 : // Envoie les informations de température du sixième capteur
					dev6_access = get_DS7505_Devices(ADD6_DS7505, listTemp); // Récupérer T° capteur n°3
					
					convertTemp(listTemp, tempResult);

					TEMP6H = tempResult[0];
					TEMP6L = tempResult[1];

					transmission(CMD_TEMP6, TEMP6L, TEMP6H);
					break;

				case CMD_TEMP7 : // Envoie les informations de température du septième capteur
					dev7_access = get_DS7505_Devices(ADD7_DS7505, listTemp); // Récupérer T° capteur n°3
					
					convertTemp(listTemp, tempResult);

					TEMP7H = tempResult[0];
					TEMP7L = tempResult[1];

					transmission(CMD_TEMP7, TEMP7L, TEMP7H);
					break;

				case CMD_TEMP8 :  // Envoie les informations de température du huitième capteur
					dev8_access = get_DS7505_Devices(ADD8_DS7505, listTemp); // Récupérer T° capteur n°3
					
					convertTemp(listTemp, tempResult);

					TEMP8H = tempResult[0];
					TEMP8L = tempResult[1];

					transmission(CMD_TEMP8, TEMP8L, TEMP8H);
					break;
				
				case CMD_PROFONDEUR : // Envoie les informations de pression reçue par le capteur de pression comme indicatif de la profondeur
					StartADC(0);
					ReadADC(listTemp);
					ADC1L = listTemp[0];
					ADC1H = listTemp[1];
					transmission(CMD_PROFONDEUR, ADC1L, ADC1H);
					cbiBF(PORTD,2);
					cbiBF(PORTD,3);
					sbiBF(PORTD,4);
					break;

				case CMD_ADC2 : // Envoie les informations du deuxième convertisseur ADC
					StartADC(1);
					ReadADC(listTemp);
					ADC2L = listTemp[0];
					ADC2H = listTemp[1];
					transmission(CMD_ADC2, ADC2L, ADC2H);
					sbiBF(PORTD,2);
					cbiBF(PORTD,3);
					sbiBF(PORTD,4);
					break;

				case CMD_ADC3 : // Envoie les informations du troisième convertisseur ADC
					StartADC(2);
					ReadADC(listTemp);
					ADC3L = listTemp[0];
					ADC3H = listTemp[1];
					transmission(CMD_ADC3, ADC3L, ADC3H);
					cbiBF(PORTD,2);
					sbiBF(PORTD,3);
					sbiBF(PORTD,4);
					break;

				case CMD_ADC4 : // Envoie les informations du quatrième convertisseur ADC
					StartADC(3);
					ReadADC(listTemp);
					ADC4L = listTemp[0];
					ADC4H = listTemp[1];
					transmission(CMD_ADC4, ADC4L, ADC4H);
					sbiBF(PORTD,2);
					sbiBF(PORTD,3);
					sbiBF(PORTD,4);
					break;

				case CMD_SENS_0_POSITIF :
					Sens_0 = 1 ;
					transmission(CMD_SENS_0_POSITIF,Conf_sens0p, 0x00 );
					break;

				case CMD_SENS_0_NEGATIF :
					Sens_0 = 0 ;
					transmission(CMD_SENS_0_NEGATIF,Conf_sens0n, 0x00 );
					break;

				case CMD_SENS_1_POSITIF :
					Sens_1 = 1 ;
					transmission(CMD_SENS_1_POSITIF,Conf_sens1p, 0x00 );
					break;

				case CMD_SENS_1_NEGATIF :
					Sens_1 = 0 ;
					transmission(CMD_SENS_1_NEGATIF, Conf_sens1n, 0x00 );
					break;

				default :
					asm("nop");
			}

			for(decalage=0;decalage<=4;decalage++) // Décale les demandes pour supprimer la première et passer au traitement de la demande suivante
			{
				data[decalage]=data[decalage+1];	
			}
			data[4] = 0x00 ;
		}
		else
		{
			asm("nop");
		}
	}
	return 0;	
}
Exemplo n.º 7
0
int transmission (int gate) {

  char buffer[BUFFER_SIZE]; // Szerver üznete
  int reader; // Hiba kód kezelő
  char answer[BUFFER_SIZE]; // Kliens üzenete

  memset(buffer, 0, BUFFER_SIZE); // Buffer kinullázása
  if ((reader = read(gate, buffer, BUFFER_SIZE)) > 0) { // Ha sikeres az olvasás, akkor :
    if (strncmp(buffer, "welcome", 7) == 0) { 
      printf("Welcome\n");
      printf("Valid step format is : x,y\n");
      printf("If you can't step : 'pass' \n");
      printf("If you want to give up : 'give_up'\n");
      printf("START\n");
      printf("Waiting...\n");
      transmission (gate);
      
    } else if (strncmp(buffer, "loose", 5) == 0) {
      printf("You loose!\n");
      write(gate, answer, BUFFER_SIZE);
      transmission(gate);
      
    } else if(strncmp(buffer, "winner", 6) == 0) {
      printf("You won!\n");
      write(gate, answer, BUFFER_SIZE);
      transmission(gate);
      
    } else if(strncmp(buffer, "draw", 4) == 0) {
      printf("Draw!\n");
      write(gate, answer, BUFFER_SIZE);
      transmission(gate);
      
    } else if(buffer[63] != '\0' && buffer[64] == '\0') { // pálya
      print_board(buffer);
      write(gate, answer, BUFFER_SIZE);
      transmission(gate);
      
    } else if(buffer[4] != '\0' && buffer[5] == '\0') { // eredmény
      print_result(buffer);
      write(gate, answer, BUFFER_SIZE);
      transmission(gate);
      
    } else if(strncmp(buffer, "active", 6) == 0) {
      printf("You turn:");
      scanf("%s", answer);
      write(gate, answer , BUFFER_SIZE);
      transmission(gate);

    } else if(strncmp(buffer, "passive", 7) == 0) {
      printf ("Waiting...\n");
      transmission (gate);
      
    } else if(strncmp(buffer, "invalid_step", 12) == 0) {
      printf("Invalid step!\n");
      printf("Try again: ");
      scanf("%s", answer);
      write(gate, answer, BUFFER_SIZE);
      transmission(gate);
      
    } else if(strncmp(buffer, "wrong_answer", 12) == 0) {
      printf("Wrong answer!\n");
      printf("Try again: ");
      scanf("%s", answer);
      write(gate, answer, BUFFER_SIZE);
      transmission (gate);

    } else {
      printf("%s\n", buffer);
      transmission(gate);
    }
    return 0;
  }
  return reader;
}
Exemplo n.º 8
0
FreeSSM::FreeSSM(QApplication *app)
{
	_qt_translator = NULL;
	_translator = NULL;
	_iface_type = AbstractDiagInterface::interface_serialPassThrough;
	_iface_filename = "";
	_language = "en";	// default language
	_dumping = false;
	QString appsPath( QCoreApplication::applicationDirPath() );
	// SETUP GUI:
	setupUi(this);
	setWindowFlags( windowFlags() & ~Qt::WindowMaximizeButtonHint );	// only necessary for MS Windows
#ifndef SMALL_RESOLUTION
	// LOAD BACKGROUND PICTURE:
	background_label->setPixmap(appsPath + "/background.png");
	// SHOW PROGRAM TITEL + VERSION:
	QFont titlefont = this->font();
	titlefont.setPointSize(20);
	titlefont.setBold(true);
	_progtitle_label = new QLabel(this);
	_progtitle_label->setGeometry(20, 17, 315, 34);
	_progtitle_label->setFont( titlefont );
	_progtitle_label->setText("FreeSSM " + QApplication::applicationVersion());
	this->setWindowTitle("FreeSSM " + QApplication::applicationVersion());
	// PLACE WINDOW IN THE CENTER OF THE SCREEN:
	QDesktopWidget desktop;
	int x = (desktop.width() - size().width()) / 2;
	int y = (desktop.height() - size().height()) / 2 - 50;
	this->move ( x, y );
#endif
	// LOAD PREFERENCES FROM FILE:
	QString savedinterfacefilename = "";
	QString savedlanguage = "";
	QString savedGUIstyle = "";
	QString savedinterfacetype = "";
	QFile prefsfile(QDir::homePath() + "/FreeSSM.prefs");
	if (prefsfile.open(QIODevice::ReadOnly | QIODevice::Text))
	{
		QByteArray line;
		if (!prefsfile.atEnd())
		{
			// Load interface type settings:
			line = prefsfile.readLine();
			line.truncate(line.length()-1);	// truncate newline-character
			savedinterfacefilename = static_cast<QString>(line);
		}
		if (!prefsfile.atEnd())
		{
			// Load language settings:
			line = prefsfile.readLine();
			line.truncate(line.length()-1);
			savedlanguage = static_cast<QString>(line);
		}
		if (!prefsfile.atEnd())
		{
			// Load GUI-style settings:
			line = prefsfile.readLine();
			line.truncate(line.length()-1);
			savedGUIstyle = static_cast<QString>(line);
		}
		if (!prefsfile.atEnd())
		{
			// Load interface file name settings:
			line = prefsfile.readLine();
			line.truncate(line.length()-1);
			savedinterfacetype = static_cast<QString>(line);
		}
		prefsfile.close();
	}
	// SET PREFERRED GUI-Style:
	if (savedGUIstyle.size())
	{
		QStyle *qstyle = QStyleFactory::create( savedGUIstyle );
		if (qstyle)
			QApplication::setStyle( qstyle );
	}
	// CHECK SAVED LANGUAGE:
	bool sl_valid = false;
	QLocale loc = QLocale(savedlanguage);
	if ((loc != QLocale::C) && (__supportedLocales.indexOf( loc ) > -1))
	{
		_language = savedlanguage;
		sl_valid = true;
	}
	// TRY TO SELECT SYSTEM LANGUAGE, IF SAVED LANGUAGE IS INVALID:
	if (!sl_valid)
	{
		if (__supportedLocales.indexOf( QLocale::system() ) > -1)
			_language = QLocale::system().name().section('_', 0, 0);
	}
	// SET TRANSLATOR AND RETRANSLATE:
	_translator = new QTranslator;
	bool langfileerror = false;
	langfileerror = !_translator->load("FreeSSM_" + _language + ".qm", appsPath);
	if (langfileerror && (_language != "en"))
	{
		// Fallback to English
		_language = "en";
		langfileerror = !_translator->load("FreeSSM_en.qm", appsPath);
		// Display error message about missing language file:
		QMessageBox msg( QMessageBox::Critical, tr("Error"), tr("Error:\n- Language file missing or damaged -"), QMessageBox::Ok, this);
		QFont msgfont = msg.font();
		msgfont.setPointSize(9);
		msg.setFont( msgfont );
		msg.show();
		msg.exec();
		msg.close();
	}
	if (!langfileerror)
	{
		app->installTranslator(_translator);
		retranslateUi(this);
	}
	else
	{
		delete _translator;
		_translator = NULL;
	}
	// SET Qt-TRANSLATOR (if necessary and available):
	if (_language != "en")
	{
		QString qt_ts_path = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
		if (qt_ts_path.isEmpty())
			qt_ts_path = QCoreApplication::applicationDirPath();
		_qt_translator = new QTranslator;
		if (_qt_translator->load("qt_" + _language, qt_ts_path))
			app->installTranslator(_qt_translator);
		else
		{
			delete _qt_translator;
			_qt_translator = NULL;
		}
	}
	// CHECK THE SAVED INTERFACE SETTINGS AND CORRECT IF NECESSARY:
	if (savedinterfacetype == QString::number(AbstractDiagInterface::interface_J2534))	// J2534-Pass-Through
	{
		_iface_type = AbstractDiagInterface::interface_J2534;
		const std::vector<J2534Library> J2534libs = J2534_API::getAvailableJ2534Libs();
		if (J2534libs.size())
		{
			if (!savedinterfacefilename.isEmpty())
			{
				for (const J2534Library& lib : J2534libs)
				{
					if (savedinterfacefilename == QString::fromStdString(lib.path))
					{
						_iface_filename = savedinterfacefilename;
						break;
					}
				}
			}
			if (_iface_filename.isEmpty())
				_iface_filename = QString::fromStdString(J2534libs.at(0).path);
		}
		// NOTE: otherwise _iface_filename remains empty
	}
	else	// Serial Pass-Through, AT-comand controlled (e.g. ELM, AGV, Diamex) or invalid
	{
		if (savedinterfacetype == QString::number(AbstractDiagInterface::interface_ATcommandControlled))
			_iface_type = AbstractDiagInterface::interface_ATcommandControlled;
		else
			_iface_type = AbstractDiagInterface::interface_serialPassThrough;
		std::vector<std::string> portlist;
		portlist = serialCOM::GetAvailablePorts();
		if (portlist.size())
		{
			if (!savedinterfacetype.isEmpty() && !savedinterfacefilename.isEmpty())
			{
				for (unsigned int k=0; k<portlist.size(); k++)
				{
					if (savedinterfacefilename == QString::fromStdString(portlist.at(k)))
					{
						_iface_filename = savedinterfacefilename;
						break;
					}
				}
			}
			if (_iface_filename.isEmpty())
				_iface_filename = QString::fromStdString(portlist.at(0));
		}
		// NOTE: otherwise _iface_filename remains empty
	}
	// CREATE ACTION FOR DUMPING CONTROL UNIT ID-DATA TO FILE:
	_dump_action = new QAction(this);
	_dump_action->setShortcut( QKeySequence("Ctrl+Alt+Return") );
	this->addAction(_dump_action);
	// CONNECT SIGNALS/SLOTS:
	connect( engine_pushButton, SIGNAL( released() ), this, SLOT( engine() ) );
	connect( transmission_pushButton, SIGNAL( released() ), this, SLOT( transmission() ) );
	connect( absvdc_pushButton, SIGNAL( released() ), this, SLOT( abs() ) );
	connect( cruisecontrol_pushButton, SIGNAL( released() ), this, SLOT( cruisecontrol() ) );
	connect( aircon_pushButton, SIGNAL( released() ), this, SLOT( aircon() ) );
	connect( preferences_pushButton, SIGNAL( released() ), this, SLOT( preferences() ) );
	connect( help_pushButton, SIGNAL( released() ), this, SLOT( help() ) );
	connect( about_pushButton, SIGNAL( released() ), this, SLOT( about() ) );
	connect( exit_pushButton, SIGNAL( released() ), this, SLOT( close() ) );
	// NOTE: using released() instead of pressed() as workaround for a Qt-Bug occuring under MS Windows
	connect( _dump_action, SIGNAL(triggered()), this, SLOT(dumpCUdata()) );
}
Exemplo n.º 9
0
bool LightScheme::GetLightIter(TracingInstance* pLocalData, const KVec2& samplePos, UINT32 lightIdx, const ShadingContext* shadingCtx,  const IntersectContext* hit_ctx, LightIterator& out_iter) const
{
	const ILightObject* pLightObj = GetLightPtr(lightIdx);
		
	KVec3 lightPos_f;
	KVec3d lightPos;
	KColor litClr;
	if (pLightObj->EvaluateLighting(samplePos, shadingCtx->position, lightPos_f, out_iter)) {

		lightPos = ToVec3d(lightPos_f);
		bool isOccluded = false;
		KColor transmission(out_iter.intensity);
		{
			KVec3d adjustedPos = ToVec3d(shadingCtx->position);
			KVec3d lightDir = lightPos - adjustedPos;
			float l_n = ToVec3f(lightDir) * shadingCtx->normal;
			float l_fn = ToVec3f(lightDir) * shadingCtx->face_normal;
			if (l_n > 0) {

				if (l_fn < 0) 
					AdjustHitPos(pLocalData, *hit_ctx, *shadingCtx, adjustedPos);

				KVec3d temp_light_pos(lightPos);
				lightDir = adjustedPos - temp_light_pos;
					
				// Clamp the shadow ray if the light source is out of the scene's bounding box.
				// Doing so can improve the floating point precision.
				const KBBox& sceneBBox = pLocalData->GetScenePtr()->GetSceneBBox();
				bool needClampRay = !sceneBBox.IsInside(ToVec3f(temp_light_pos));
				if (needClampRay) {
					KRay ray;
					ray.Init(temp_light_pos, lightDir, NULL);
					double t0, t1;
					if (IntersectBBox(ray, sceneBBox, t0, t1)) {
						temp_light_pos = ray.GetOrg() + ray.GetDir() * t0;
					}

				}
					
				KRay ray;
				lightDir = adjustedPos - temp_light_pos;
				ray.Init(temp_light_pos, lightDir, NULL);
				ray.mExcludeBBoxNode = INVALID_INDEX;
				ray.mExcludeTriID = INVALID_INDEX;

				float lum = 1.0f;
				while (lum > 0) {
					IntersectContext test_ctx;
					test_ctx.ray_t = 1.0;
					isOccluded = pLocalData->CastRay(ray, test_ctx);
					if (isOccluded) {
						if (test_ctx.bbox_node_idx == hit_ctx->bbox_node_idx && test_ctx.tri_id == hit_ctx->tri_id)
							break;

						// Calculate how much light can pass through the hit surface
						KColor temp_trans;
						ShadingContext shading_context;
						pLocalData->CalcuShadingContext(ray, test_ctx, shading_context);
						TransContext& transCtx = pLocalData->GetCurrentTransCtxStorage();
						pLocalData->ConvertToTransContext(test_ctx, shading_context, transCtx);
						shading_context.surface_shader->ShaderTransmission(transCtx, temp_trans);
						transmission.Modulate(temp_trans);

						lum = transmission.Luminance();
						if (lum > 0.001f) {
							KVec3d go_dis = lightDir*test_ctx.ray_t;
							temp_light_pos += (go_dis * 1.00001);
							lightDir -= (go_dis * 0.9999);
							ray.Init(temp_light_pos, lightDir, NULL);
							ray.mExcludeBBoxNode = test_ctx.bbox_node_idx;
							ray.mExcludeTriID = test_ctx.tri_id; 

						}
						else {
							transmission.Clear();
							break;
						}
					}
					else 
						break;

				}
			}
			else
				transmission.Clear();

		}

		if (transmission.Luminance() > 0) {
			out_iter.intensity = transmission;
			return true;
		}
	}

	return false;
}
Exemplo n.º 10
0
Color Raytracer::trace(Scene *scene, Ray ray, int depth)
{
    if (depth >= m_max_depth)
    {
        return scene->background();
    }

    Intersection *intersection = get_closest_intersection(scene, ray);

    // If this ray hits nothing, return the background color
    if (intersection == nullptr)
    {
        return scene->background();
    }

    // local illumination
    Color rv = m_phong_shader.shade(scene, intersection);

    float kr = intersection->intersected_shape()->reflective_constant();
    float kt = intersection->intersected_shape()->transmissive_constant();

    // spawn reflection ray
    if (kr > 0)
    {
        Ray reflection = make_reflection_ray(intersection->normal(), ray,
                                           intersection->intersection_point());
        rv += trace(scene, reflection, depth + 1) * kr;
    }

    // spawn transmission ray
    if (kt > 0)
    {
        float alpha;
        bool insideShape =
            (dot_product(negate_vector(ray.direction()), intersection->normal()) < 0);

        if (insideShape)
        {
            intersection->set_normal(negate_vector(intersection->normal()));
            alpha = intersection->intersected_shape()->refraction_index();
        }
        else
        {
            alpha = 1.0 / intersection->intersected_shape()->refraction_index();
        }

        float cosine = dot_product(negate_vector(ray.direction()), intersection->normal());

        float discriminant = 1.0 + ( (alpha * alpha) *
            ((cosine * cosine) - 1.0) );

        bool total_internal_reflection = (discriminant < 0);

        if (total_internal_reflection)
        {
            // use the reflection ray with the kt value
            Ray reflection = make_reflection_ray(intersection->normal(), ray,
                                               intersection->intersection_point());
            rv += trace(scene, reflection, depth + 1) * kt;
        }
        else
        {
            // spawn a transmission ray
            Ray transmission(intersection->intersection_point(),
                             normalize(
                                vector_add(scalar_multiply(ray.direction(), alpha),
                                    scalar_multiply(intersection->normal(),
                                        (alpha * cosine) -
                                            sqrt(discriminant)))));

            rv += trace(scene, transmission, depth + 1) * kt;
        }
    }
    delete intersection;

    return rv;
}
Exemplo n.º 11
0
//=================================================================================================
int main(int argc, char *argv[])
{
	std::string binary_name(argv[0]);
    Options options(binary_name);

    srand(WsgcUtils::timenow_usec_hour());

    if (options.get_options(argc,argv))
    {
        std::ostringstream os;
        options.print_options(os);
        std::cout << os.str() << std::endl;

        unsigned int nb_message_symbols;

#ifdef _CCSOFT
        if (options.fec_scheme == Options::OptionFEC_CCSoft)
        {
            unsigned int tmp_n, tmp_k, tmp_m;
            ccsoft::get_cc_parameters<unsigned int>(options.cc_k_constraints, 
                options.cc_generator_polys,
                tmp_n,
                tmp_k,
                tmp_m);
            nb_message_symbols = 1<<tmp_n;
        }
        else
        {
            nb_message_symbols = options.nb_message_symbols;
        }
#else
        nb_message_symbols = options.nb_message_symbols;
#endif

        GoldCodeGenerator gc_generator(options.gc_nb_stages, nb_message_symbols, options.nb_service_symbols, options.nb_training_symbols, options.g1_poly_powers, options.g2_poly_powers);
        Transmission transmission(options, gc_generator);
        transmission.generate_samples(options.prns);
        wsgc_complex *faded_source_samples = transmission.get_samples();
        unsigned int nb_faded_source_samples = transmission.get_nb_samples();

        if (faded_source_samples)
        {
            if (options.transmission_scheme == Options::OptionTrans_MFSK)
            {
                Reception_MFSK reception_MFSK(options, gc_generator);
                reception_MFSK.message_processing(faded_source_samples, nb_faded_source_samples);
            }
            else if (options.transmission_scheme == Options::OptionTrans_WSGC)
            {
                Reception_WSGC reception_WSGC(options, gc_generator);

                if (options.simulate_training)
                {
                    reception_WSGC.training_processing(faded_source_samples, nb_faded_source_samples);
                }
                else
                {
                    reception_WSGC.message_processing(faded_source_samples, nb_faded_source_samples);
                }
            }
            else if (options.transmission_scheme == Options::OptionTrans_WSGCE)
            {
                Reception_WSGCE reception_WSGCE(options, gc_generator);

                if (options.simulate_training)
                {
                    std::cerr << "Simulating training sequence is not implemented" << std::endl;
                }
                else
                {
                    reception_WSGCE.message_processing(faded_source_samples, nb_faded_source_samples);
                }
            }
            else if (options.transmission_scheme == Options::OptionTrans_WSGCO)
            {
                Reception_WSGCO reception_WSGCO(options, gc_generator);
                
                if (options.simulate_training)
                {
                    reception_WSGCO.training_processing(faded_source_samples, nb_faded_source_samples);
                }
                else
                {
                    reception_WSGCO.message_processing(faded_source_samples, nb_faded_source_samples);
                }
            }
            else if (options.transmission_scheme == Options::OptionTrans_WSGCD)
            {
                Reception_WSGCD reception_WSGCD(options, gc_generator);
                
                if (options.simulate_training)
                {
                    reception_WSGCD.training_processing(faded_source_samples, nb_faded_source_samples);
                }
                else
                {
                    reception_WSGCD.message_processing(faded_source_samples, nb_faded_source_samples);
                }
            }
            else
            {
                std::cout << "Unknown or undefined transmission scheme" << std::endl;
            }
        }
        else
        {
            std::cout << "No samples" << std::endl;
        }

        return 0;
    }
    else
    {
        std::cout << "Incorrect options. Please correct and re-submit" << std::endl;
        return -1;
    }
}