/** @def This function move a particle over the mesh */ void MoveParticle(Particle<CMeshO> &info,CMeshO::VertexPointer p,float l,int t,Point3f dir,Point3f g,float a){ if(CheckFallPosition(info.face,g,a)){ p->SetS(); return; } float time=t; if(dir.Norm()==0) dir=getRandomDirection(); Point3f new_pos; Point3f current_pos; Point3f int_pos; CMeshO::FacePointer current_face=info.face; CMeshO::FacePointer new_face; new_face=current_face; current_pos=p->P(); new_pos=StepForward(current_pos,info.v,info.mass,current_face,g+dir,l,time); while(!IsOnFace(new_pos,current_face)){ int edge=ComputeIntersection(current_pos,new_pos,current_face,new_face,int_pos); if(edge!=-1){ Point3f n = new_face->N(); if(CheckFallPosition(new_face,g,a)) p->SetS(); float elapsed_time=GetElapsedTime(current_pos,int_pos,new_pos,time); info.v=GetNewVelocity(info.v,current_face,new_face,g+dir,g,info.mass,elapsed_time); time=time-elapsed_time; current_pos=int_pos; current_face->Q()+=elapsed_time*5; current_face=new_face; new_pos=int_pos; if(time>0){ if(p->IsS()) break; new_pos=StepForward(current_pos,info.v,info.mass,current_face,g+dir,l,time); } current_face->C()=Color4b::Green;//Just Debug!!!! }else{ //We are on a border new_pos=int_pos; current_face=new_face; p->SetS(); break; } } p->P()=new_pos; info.face=current_face; }
/* virtual */ void reset() { reader_.reset(); eof_ = false; StepForward(); }
QmitkActiveSurfaceToolGUI::QmitkActiveSurfaceToolGUI() :QmitkToolGUI() { //std::cout << "hi from " << __FUNCSIG__ << std::endl; // create the visible widgets QBoxLayout* verticalLayout = new QVBoxLayout( this ); m_HorizontalLayout = new QHBoxLayout(); verticalLayout->addLayout(m_HorizontalLayout); m_HorizontalLayout1 = new QHBoxLayout(); verticalLayout->addLayout(m_HorizontalLayout1); m_HorizontalLayout2 = new QHBoxLayout(); verticalLayout->addLayout(m_HorizontalLayout2); m_SelectSurfaceBox = new QComboBox(); m_HorizontalLayout->addWidget(m_SelectSurfaceBox); connect(m_SelectSurfaceBox, SIGNAL(activated(int)), this, SLOT(SelectSurface(int))); m_PbtnSelectSurfaceViaMouse = new QPushButton(); QIcon icn_OpenFile; icn_OpenFile.addFile(":/threeDEditing/res/threeDEditing/mousepointer.png"); m_PbtnSelectSurfaceViaMouse->setIcon(icn_OpenFile); m_PbtnSelectSurfaceViaMouse->setFixedSize(22,22); m_HorizontalLayout->addWidget(m_PbtnSelectSurfaceViaMouse); connect(m_PbtnSelectSurfaceViaMouse, SIGNAL(clicked()), this, SLOT(SelectSurfaceViaMouse())); m_PbtnReinitSelection = new QPushButton(); m_PbtnReinitSelection->setText("Reinit Selection"); m_PbtnReinitSelection->setCheckable(true); m_HorizontalLayout1->addWidget(m_PbtnReinitSelection); connect(m_PbtnReinitSelection, SIGNAL(clicked()), this, SLOT(ReinitSelection())); m_PbtnJumpToPosition = new QPushButton(); m_PbtnJumpToPosition->setText("Jump to Position"); m_PbtnJumpToPosition->setCheckable(true); m_HorizontalLayout1->addWidget(m_PbtnJumpToPosition); connect(m_PbtnJumpToPosition, SIGNAL(clicked()), this, SLOT(JumpToPosition())); QLabel* label = new QLabel( "Radius", this ); QFont f = label->font(); f.setBold(false); label->setFont( f ); m_HorizontalLayout2->addWidget(label); m_RadiusSlider = new QSlider(Qt::Horizontal); m_RadiusSlider->setSliderPosition(20); m_HorizontalLayout2->addWidget(m_RadiusSlider); QObject::connect(m_RadiusSlider, SIGNAL(sliderMoved(int)), this, SLOT(RadiusChanged(int))); // Tool Specific QBoxLayout* horizontalLayout3 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout3); QBoxLayout* horizontalLayout4 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout4); QBoxLayout* horizontalLayout5 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout5); QBoxLayout* horizontalLayout6 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout6); QBoxLayout* horizontalLayout7 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout7); QBoxLayout* horizontalLayout8 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout8); QBoxLayout* horizontalLayout9 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout9); QBoxLayout* horizontalLayout10 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout10); QBoxLayout* horizontalLayout11 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout11); QBoxLayout* horizontalLayout12 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout12); QBoxLayout* horizontalLayout13 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout13); QBoxLayout* horizontalLayout14 = new QHBoxLayout(); verticalLayout->addLayout(horizontalLayout14); QFrame *frame = new QFrame( this ); frame->setFrameStyle( QFrame::Box | QFrame::Plain ); frame->setLineWidth(10); frame->setFixedSize(200,10); QColor color(214,247,202); QPalette colorPalette(color); colorPalette.setColor(QPalette::Foreground, color); frame->setPalette(colorPalette); horizontalLayout3->addWidget(frame); QLabel* label2 = new QLabel( "Select feature image:", this ); QFont f2 = label2->font(); f2.setBold(false); label2->setFont( f2 ); horizontalLayout4->addWidget(label2); m_SelectImageBox = new QComboBox(); horizontalLayout5->addWidget(m_SelectImageBox); connect(m_SelectImageBox, SIGNAL(activated(int)), this, SLOT(SelectImage(int))); QLabel* label3 = new QLabel( "Set seed point bubble\n(left click):\nRemove bubble\n(shift + left click)", this ); QFont f3 = label3->font(); f3.setPointSize(7); f3.setBold(false); label3->setFont( f3 ); horizontalLayout6->addWidget(label3); QPushButton* pbtn_RemoveBubble = new QPushButton(); pbtn_RemoveBubble->setText("Remove Bubble"); horizontalLayout6->addWidget(pbtn_RemoveBubble); connect(pbtn_RemoveBubble, SIGNAL(clicked()), this, SLOT(RemoveBubble())); m_VCR = new std::vector<QPushButton*>; int size = 24; QPushButton* pbtn_Stop = new QPushButton(); QIcon icn_Stop; icn_Stop.addFile(":/threeDEditing/res/threeDEditing/Backward_01.png"); pbtn_Stop->setIcon(icn_Stop); pbtn_Stop->setIconSize(QSize(size,size)); horizontalLayout7->addWidget(pbtn_Stop); connect(pbtn_Stop, SIGNAL(clicked()), this, SLOT(Stop())); QPushButton* pbtn_StepBack = new QPushButton(); QIcon icn_StepBack; icn_StepBack.addFile(":/threeDEditing/res/threeDEditing/left.png"); pbtn_StepBack->setIcon(icn_StepBack); pbtn_StepBack->setIconSize(QSize(size,size)); horizontalLayout7->addWidget(pbtn_StepBack); connect(pbtn_StepBack, SIGNAL(clicked()), this, SLOT(StepBack())); QPushButton* pbtn_ReversePlay = new QPushButton(); m_VCR->push_back(pbtn_ReversePlay); QIcon icn_ReversePlay; icn_ReversePlay.addFile(":/threeDEditing/res/threeDEditing/Backward.png"); pbtn_ReversePlay->setIcon(icn_ReversePlay); pbtn_ReversePlay->setCheckable(true); pbtn_ReversePlay->setIconSize(QSize(size,size)); horizontalLayout7->addWidget(pbtn_ReversePlay); connect(pbtn_ReversePlay, SIGNAL(clicked()), this, SLOT(ReversePlay())); QPushButton* pbtn_Pause = new QPushButton(); m_VCR->push_back(pbtn_Pause); QIcon icn_Pause; icn_Pause.addFile(":/threeDEditing/res/threeDEditing/pause.png"); pbtn_Pause->setIcon(icn_Pause); pbtn_Pause->setCheckable(true); pbtn_Pause->setChecked(true); pbtn_Pause->setIconSize(QSize(size,size)); horizontalLayout7->addWidget(pbtn_Pause); connect(pbtn_Pause, SIGNAL(clicked()), this, SLOT(Pause())); QPushButton* pbtn_Play = new QPushButton(); m_VCR->push_back(pbtn_Play); QIcon icn_Play; icn_Play.addFile(":/threeDEditing/res/threeDEditing/Forward.png"); pbtn_Play->setIcon(icn_Play); pbtn_Play->setCheckable(true); pbtn_Play->setIconSize(QSize(size,size)); horizontalLayout7->addWidget(pbtn_Play); connect(pbtn_Play, SIGNAL(clicked()), this, SLOT(Play())); QPushButton* pbtn_StepForward = new QPushButton(); QIcon icn_StepForward; icn_StepForward.addFile(":/threeDEditing/res/threeDEditing/right.png"); pbtn_StepForward->setIcon(icn_StepForward); pbtn_StepForward->setIconSize(QSize(size,size)); horizontalLayout7->addWidget(pbtn_StepForward); connect(pbtn_StepForward, SIGNAL(clicked()), this, SLOT(StepForward())); QLabel* label5 = new QLabel( "Step size:", this ); QFont f5 = label5->font(); f5.setBold(false); label5->setFont( f5 ); horizontalLayout8->addWidget(label5); QSpinBox* selectStepSize = new QSpinBox(); selectStepSize->setRange(1, 50); selectStepSize->setValue(1); horizontalLayout8->addWidget(selectStepSize); connect(selectStepSize, SIGNAL(valueChanged(int)), this, SLOT(SelectStepSize(int))); QLabel* label6 = new QLabel( "Iteration:", this ); QFont f6 = label6->font(); f6.setBold(false); label6->setFont( f6 ); horizontalLayout8->addWidget(label6); numberOfIterations = new QLineEdit(this); numberOfIterations->setText("0"); numberOfIterations->setReadOnly(true); horizontalLayout8->addWidget(numberOfIterations); QFrame *frame1 = new QFrame( this ); frame1->setFrameStyle( QFrame::Box | QFrame::Plain ); frame1->setLineWidth(10); frame1->setFixedSize(200,10); frame1->setPalette(colorPalette); horizontalLayout9->addWidget(frame1); // Parameters QLabel* label7 = new QLabel( "Parameters:", this ); QFont f7 = label7->font(); f7.setBold(true); label7->setFont( f7 ); horizontalLayout10->addWidget(label7); // make the "InputMask" for values between 1.11 and 17.93 with 2 digits after the comma QValidator *inputRange = new QDoubleValidator(0.000, 100000.000, 3, this); // table layout QBoxLayout* verticalLayout1 = new QVBoxLayout(); horizontalLayout11->addLayout(verticalLayout1); QBoxLayout* verticalLayout2 = new QVBoxLayout(); horizontalLayout11->addLayout(verticalLayout2); QBoxLayout* verticalLayout3 = new QVBoxLayout(); horizontalLayout11->addLayout(verticalLayout3); QLabel* label8 = new QLabel( "Curvature\nForce:", this ); QFont f8 = label8->font(); f8.setBold(false); f8.setPointSize(7); label8->setFont( f8 ); verticalLayout1->addWidget(label8); m_CurvatureForce = new QLineEdit(this); m_CurvatureForce->setText("0"); m_CurvatureForce->setReadOnly(false); m_CurvatureForce->setValidator(inputRange); QObject::connect(m_CurvatureForce, SIGNAL(returnPressed()), this, SLOT(EditedCurvatureForce())); verticalLayout2->addWidget(m_CurvatureForce); QmitkCrossWidget* curvatureForceCross = new QmitkCrossWidget(); QPixmap pixCurvatureForce(":/threeDEditing/res/threeDEditing/CrossArrow.png"); curvatureForceCross->setPixmap(pixCurvatureForce.scaledToWidth(100)); curvatureForceCross->setFixedSize(100,20); curvatureForceCross->setToolTip("Drag with a left mouse click from the center circle to the sides."); verticalLayout3->addWidget(curvatureForceCross); connect( curvatureForceCross, SIGNAL( SignalDeltaMove( int, int ) ), this, SLOT( CurvatureForceCross( int, int ) ) ); QLabel* label10 = new QLabel( "Area\nForce:", this ); QFont f10 = label10->font(); f10.setBold(false); f10.setPointSize(7); label10->setFont( f10 ); verticalLayout1->addWidget(label10); m_AreaForce = new QLineEdit(this); m_AreaForce->setText("0"); m_AreaForce->setReadOnly(false); m_AreaForce->setValidator(inputRange); QObject::connect(m_AreaForce, SIGNAL(returnPressed()), this, SLOT(EditedAreaForce())); verticalLayout2->addWidget(m_AreaForce); QmitkCrossWidget* areaForceCross = new QmitkCrossWidget(); QPixmap pixAreaForce(":/threeDEditing/res/threeDEditing/CrossArrow.png"); areaForceCross->setPixmap(pixAreaForce.scaledToWidth(100)); areaForceCross->setFixedSize(100,20); areaForceCross->setToolTip("Drag with a left mouse click from the center circle to the sides."); verticalLayout3->addWidget(areaForceCross); connect( areaForceCross, SIGNAL( SignalDeltaMove( int, int ) ), this, SLOT( AreaForceCross( int, int ) ) ); QLabel* label11 = new QLabel( "Volume\nForce:", this ); QFont f11 = label11->font(); f11.setBold(false); f11.setPointSize(7); label11->setFont( f11 ); verticalLayout1->addWidget(label11); m_VolumeForce = new QLineEdit(this); m_VolumeForce->setText("0"); m_VolumeForce->setReadOnly(false); m_VolumeForce->setValidator(inputRange); QObject::connect(m_VolumeForce, SIGNAL(returnPressed()), this, SLOT(EditedVolumeForce())); verticalLayout2->addWidget(m_VolumeForce); QmitkCrossWidget* volumeForceCross = new QmitkCrossWidget(); QPixmap pixVolumeForce(":/threeDEditing/res/threeDEditing/CrossArrow.png"); volumeForceCross->setPixmap(pixVolumeForce.scaledToWidth(100)); volumeForceCross->setFixedSize(100,20); volumeForceCross->setToolTip("Drag with a left mouse click from the center circle to the sides."); verticalLayout3->addWidget(volumeForceCross); connect( volumeForceCross, SIGNAL( SignalDeltaMove( int, int ) ), this, SLOT( VolumeForceCross( int, int ) ) ); QFrame *frame2 = new QFrame( this ); frame2->setFrameStyle( QFrame::Box | QFrame::Plain ); frame2->setLineWidth(10); frame2->setFixedSize(200,10); frame2->setPalette(colorPalette); horizontalLayout12->addWidget(frame2); QPushButton* pbtnClosing = new QPushButton(); pbtnClosing->setText("Closing by one pixel"); pbtnClosing->setCheckable(true); horizontalLayout13->addWidget(pbtnClosing); connect(pbtnClosing, SIGNAL(clicked()), this, SLOT(Closing())); QLabel* label12 = new QLabel( "Zoom:", this ); QFont f12 = label12->font(); f12.setBold(false); //f12.setPointSize(6); label12->setFont( f12 ); horizontalLayout14->addWidget(label12); QmitkCrossWidget* zoomCross = new QmitkCrossWidget(); QPixmap pixZoom(":/threeDEditing/res/threeDEditing/CrossArrow.png"); zoomCross->setPixmap(pixZoom.scaledToWidth(100)); zoomCross->setFixedSize(100,20); zoomCross->setToolTip("Drag with a left mouse click from the center circle to the sides."); horizontalLayout14->addWidget(zoomCross); connect( zoomCross, SIGNAL( SignalDeltaMove( int, int ) ), this, SLOT( ZoomCross( int, int ) ) ); connect( this, SIGNAL(NewToolAssociated(mitk::Tool*)), this, SLOT(OnNewToolAssociated(mitk::Tool*)) ); //std::cout << "ciao from " << __FUNCSIG__ << std::endl; }