|
/***************************************************************************
* Copyright (C) 2006 by Abderrahman Taha *
* *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "IsoPanel.h"
void IsoWidget::png(){png_ok*=-1;}
void IsoWidget::jpg(){jpg_ok*=-1;}
void IsoWidget::bmp(){bmp_ok*=-1;}
void IsoWidget::quality(int c){quality_image = c;}
void IsoWidget::screenshot(){
if(jpg_ok == 1) pixmap->save("ISOscreenshot.jpg", "JPEG", quality_image);
if(png_ok == 1) pixmap->save("ISOscreenshot.png", "PNG" , quality_image);
if(bmp_ok == 1) pixmap->save("ISOscreenshot.bmp", "BMP" , quality_image);
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::lineOk(){
IsoObjet->gridtransparent *=-1;
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::nbtwistex_changed(int n)
{ oldnb_twistex = n;
IsoObjet->twistex((double)n/10, (double)oldcoeff_rayonx/10);
//update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::coeffrayonx_changed(int n)
{ oldcoeff_rayonx = n;
IsoObjet->twistex((double)oldnb_twistex/10, (double)n/10);
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::nbtwistey_changed(int n)
{ oldnb_twistey = n;
IsoObjet->twistey((double)n/10, (double)oldcoeff_rayony/10);
//update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::coeffrayony_changed(int n)
{ oldcoeff_rayony = n;
IsoObjet->twistex((double)oldnb_twistey/10, (double)n/10);
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::nbtwistez_changed(int n)
{ oldnb_twistez = n;
IsoObjet->twistez((double)n/10, (double)oldcoeff_rayonz/10);
//update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::coeffrayonz_changed(int n)
{ oldcoeff_rayonz = n;
IsoObjet->twistez((double)oldnb_twistez/10, (double)n/10);
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::scalex(int n)
{
IsoObjet->scalex(n);
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::scaley(int n)
{
IsoObjet->scaley(n);
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::scalez(int n)
{
IsoObjet->scalez(n);
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::Axes_draw(){
IsoObjet->DrawAxe_Ok *= -1 ;
if(IsoObjet->DrawAxe_Ok == 1) valueChanged();
else update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::Axes_center(){
IsoObjet->axe_center *= -1 ;
valueChanged();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::Axes_width(int n){
IsoObjet->axe_width = n ;
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::Axes_size(int n){
IsoObjet->axe_size = ((double)n)/10. ;
valueChanged();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::valueChanged(){
IsoObjet->ComputeIsoMap();
update();
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::blue(int cl)
{ switch(colortype) {
case 0: IsoObjet->frontsurfb = cl;IsoObjet->PaletteInit();
update();break;
case 1: IsoObjet->backsurfb= cl; IsoObjet->PaletteInit();
update();break;
case 4: IsoObjet->CNDsurfb= cl; IsoObjet->PaletteInit();
update();break;
case 2: IsoObjet->gridb = cl;IsoObjet->PaletteInit();
update();break;
case 3: bluebackground = cl; delete backcolor;
backcolor = new QColor(redbackground, greenbackground, bluebackground);
rgbcol = backcolor->rgb();
update();break;
};
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::red(int cl)
{ switch(colortype) {
case 0: IsoObjet->frontsurfr = cl;IsoObjet->PaletteInit();
update();break;
case 1: IsoObjet->backsurfr= cl; IsoObjet->PaletteInit();
update();break;
case 4: IsoObjet->CNDsurfr= cl; IsoObjet->PaletteInit();
update();break;
case 2: IsoObjet->gridr = cl;IsoObjet->PaletteInit();
update();break;
case 3: redbackground = cl; delete backcolor;
backcolor = new QColor(redbackground, greenbackground, bluebackground);
rgbcol = backcolor->rgb();
update();break;
};
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::green(int cl)
{ switch(colortype) {
case 0: IsoObjet->frontsurfg = cl;IsoObjet->PaletteInit();
update();break;
case 1: IsoObjet->backsurfg= cl; IsoObjet->PaletteInit();
update();break;
case 4: IsoObjet->CNDsurfg= cl; IsoObjet->PaletteInit();
update();break;
case 2: IsoObjet->gridg = cl;IsoObjet->PaletteInit();
update();break;
case 3: greenbackground = cl; delete backcolor;
backcolor = new QColor(redbackground, greenbackground, bluebackground);
rgbcol = backcolor->rgb();
update();break;
};
}
///++++++++++++++++++++++++++++++++++++++++++++///
void IsoWidget::transparence()
{
switch(colortype) {
case 0: IsoObjet->fronttrans *= -1;IsoObjet->PaletteInit();
update();break;
case 1: IsoObjet->backtrans *= -1;IsoObjet->PaletteInit();
update();break;
case 4: IsoObjet->CNDtrans *= -1;IsoObjet->PaletteInit();
update();break;
case 2: IsoObjet->gridtransparent *= -1;
update();break;
};
}
///+++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::IsoAnim(){
anim_ok *=-1;
if(anim_ok == 1) if( morph_ok != 1) start();
else if( morph_ok !=1) wait();
};
///+++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::IsoMorph(){
morph_ok *=-1;
if(morph_ok == 1) if( anim_ok != 1) start();
else if( anim_ok !=1) wait();
};
///+++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::start(){
QThread::start();
};
///+++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::run(){
while( anim_ok == 1 || morph_ok == 1 ) {
msleep(latence);
if(anim_ok == 1) {
if(morph_ok == 1) IsoObjet->AnimMorph();/// The two of them
else IsoObjet->RotateIsoMap(); /// Only rotation
}
else IsoObjet->ComputeIsoMap(); /// Only morph
update();
}
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::step_morph(int cl)
{ IsoObjet->step = (double)1/(double)cl;
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::latence_change(int cl)
{ latence = cl;
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
/// The use of mutex doesn't help to fix the crash problems...
void IsoWidget::MorphThreadSafe(){
mutex.lock();
IsoObjet->AnimMorph();update();
mutex.unlock();
};
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::CutLineIsoSurface(int cl){
IsoObjet->CutLigne = cl;
IsoObjet->CutIsoSurface();
update();
};
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::CutColonIsoSurface(int cl){
IsoObjet->CutColon = cl;
IsoObjet->CutIsoSurface();
update();
};
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::CutDepthIsoSurface(int cl){
IsoObjet->CutDepth = cl;
IsoObjet->CutIsoSurface();
update();
};
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::CutIsoSurface(int cl){
IsoObjet->CutDepth = IsoObjet->CutColon = IsoObjet->CutLigne = cl;
IsoObjet->CutIsoSurface();
update();
};
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::XGridChanged(int cl)
{
IsoObjet->nb_ligne = cl;
IsoObjet->ComputeIsoMap();
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::YGridChanged(int cl)
{
IsoObjet->nb_colon = cl;
IsoObjet->ComputeIsoMap();
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::ZGridChanged(int cl)
{
IsoObjet->nb_depth = cl;
IsoObjet->ComputeIsoMap();
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::XYZGridChanged(int cl)
{
IsoObjet->nb_depth = IsoObjet->nb_colon = IsoObjet->nb_ligne = cl;
IsoObjet->ComputeIsoMap();
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::IsoMorphCompute(){
IsoObjet->ComputeIsoMap();
update();
};
void IsoWidget::initcontrols() {
oldcoeff_rayonz = 10; oldnb_twistez = 0;
oldcoeff_rayony = 10; oldnb_twistey = 0;
oldcoeff_rayonx = 10; oldnb_twistex = 0;
}
///+++++++++++++++++++++++++++++++++++++++++++++++
IsoWidget::IsoWidget(QWidget *parent, const char *name)
: QWidget( parent, name, WNoAutoErase)
{ width = 650;
height = 650;
latence = 50;
oldcoeff_rayonz = 10; oldnb_twistez = 0;
oldcoeff_rayony = 10; oldnb_twistey = 0;
oldcoeff_rayonx = 10; oldnb_twistex = 0;
anim_ok = morph_ok = -1;
setWindowOpacity (0);
pixmap = new QPixmap(650,650);
setFixedSize ( width, height);
IsoObjet = new Iso3D();
greenbackground=0; bluebackground=0; redbackground=0;
backcolor = new QColor(redbackground, greenbackground, bluebackground);
rgbcol = backcolor->rgb();
colortype = 0;
png_ok = 1; jpg_ok = bmp_ok = -1; quality_image = 50;
//ThreadStoped = -1;
};
///+++++++++++++++++++++++++++++++++++++++++++++++
IsoWidget::~IsoWidget(){
delete IsoObjet;
delete pixmap;
}
///+++++++++++++ Mousse Events +++++++++++++++++++
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::paintEvent(QPaintEvent*)
{ pixmap->fill(rgbcol);
QPainter painter(pixmap, this);
painter.setClipRect(0, 0, width, height);
IsoObjet->DrawIsoMap(painter);
bitBlt(this, 0, 0, pixmap, 0, 0, width, height);
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::mousePressEvent( QMouseEvent * e)
{
if ( e->button() == QMouseEvent::LeftButton ) btgauche = 1;
else btgauche = 0;
if ( e->button() == QMouseEvent::RightButton ) btdroit = 1;
else btdroit = 0;
if ( e->button() == QMouseEvent::MidButton ) btmilieu = 1;
else btmilieu = 0;
IsoObjet->ancienx = e->y();
IsoObjet->ancieny = e->x();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::mouseReleaseEvent( QMouseEvent *)
{
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::mouseMoveEvent( QMouseEvent *e )
{
IsoObjet->anglex = (IsoObjet->ancienx - (double)e->y());
IsoObjet->angley = (IsoObjet->ancieny - (double)e->x()) ;
IsoObjet->ancienx = (double)e->y();
IsoObjet->ancieny = (double)e->x();
if(btgauche==1) IsoObjet->RotateIsoMap();
if(btdroit==1) {
if(IsoObjet->anglex > 0 ) IsoObjet->ScalCoeff = 1.1f;
else IsoObjet->ScalCoeff = 0.90f;
IsoObjet->ScaleIsoMap();
}
update();
}
///+++++++++++++++++++++++++++++++++++++++++++++++
void IsoWidget::keyPressEvent ( QKeyEvent *) {
/*
if(morph_ok == 1 || anim_ok ==1) {
ThreadStoped *= -1;
wait();
}
*/
}
///+++++++++++++++++++++++++++++++++++++++++++++++
/*void IsoWidget::keyReleaseEvent ( QKeyEvent *) {
if(ThreadStoped == 1) {
ThreadStoped *= -1;
start();
};
}
*/
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.