Beispiel #1
0
void
Kernel::computeOffDiagJacobianScalar(unsigned int jvar)
{
  DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.index(), jvar);
  MooseVariableScalar & jv = _sys.getScalarVariable(_tid, jvar);

  for (_i = 0; _i < _test.size(); _i++)
    for (_j = 0; _j < jv.order(); _j++)
      for (_qp = 0; _qp < _qrule->n_points(); _qp++)
        ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpOffDiagJacobian(jvar);
}
void qt_mac_send_modifiers_changed(quint32 modifiers, QObject *object)
{
    static quint32 cachedModifiers = 0;
    quint32 lastModifiers = cachedModifiers,
          changedModifiers = lastModifiers ^ modifiers;
    cachedModifiers = modifiers;

    //check the bits
    static qt_mac_enum_mapper modifier_key_symbols[] = {
        { shiftKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Shift) },
        { rightShiftKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Shift) }, //???
        { controlKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Meta) },
        { rightControlKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Meta) }, //???
        { cmdKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Control) },
        { optionKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Alt) },
        { rightOptionKeyBit, QT_MAC_MAP_ENUM(Qt::Key_Alt) }, //???
        { alphaLockBit, QT_MAC_MAP_ENUM(Qt::Key_CapsLock) },
        { kEventKeyModifierNumLockBit, QT_MAC_MAP_ENUM(Qt::Key_NumLock) },
        {   0, QT_MAC_MAP_ENUM(0) } };
    for (int i = 0; i <= 32; i++) { //just check each bit
        if (!(changedModifiers & (1 << i)))
            continue;
        QEvent::Type etype = QEvent::KeyPress;
        if (lastModifiers & (1 << i))
            etype = QEvent::KeyRelease;
        int key = 0;
        for (uint x = 0; modifier_key_symbols[x].mac_code; x++) {
            if (modifier_key_symbols[x].mac_code == i) {
#ifdef DEBUG_KEY_BINDINGS_MODIFIERS
                qDebug("got modifier changed: %s", modifier_key_symbols[x].desc);
#endif
                key = modifier_key_symbols[x].qt_code;
                break;
            }
        }
        if (!key) {
#ifdef DEBUG_KEY_BINDINGS_MODIFIERS
            qDebug("could not get modifier changed: %d", i);
#endif
            continue;
        }
#ifdef DEBUG_KEY_BINDINGS_MODIFIERS
        qDebug("KeyEvent (modif): Sending %s to %s::%s: %d - 0x%08x",
               etype == QEvent::KeyRelease ? "KeyRelease" : "KeyPress",
               object ? object->metaObject()->className() : "none",
               object ? object->objectName().toLatin1().constData() : "",
               key, (int)modifiers);
#endif
        QKeyEvent ke(etype, key, qt_mac_get_modifiers(modifiers ^ (1 << i)), QLatin1String(""));
        qt_sendSpontaneousEvent(object, &ke);
    }
}
Beispiel #3
0
void TaskHeader::keyReleaseEvent ( QKeyEvent * event )
{
  switch (event->key())
  {
    case Qt::Key_Down:
    {
      QKeyEvent ke(QEvent::KeyRelease, Qt::Key_Tab, 0);
      QApplication::sendEvent(this, &ke);
      return;
    }

    case Qt::Key_Up:
    {
      QKeyEvent ke(QEvent::KeyRelease, Qt::Key_Tab, Qt::ShiftModifier);
      QApplication::sendEvent(this, &ke);
      return;
    }

    default:;
  }

  BaseClass::keyReleaseEvent(event);
}
Beispiel #4
0
void
StressDivergenceTruss::computeOffDiagJacobian(unsigned int jvar)
{
  if (jvar == _var.number())
  {
    computeJacobian();
  }
  else
  {
    unsigned int coupled_component = 0;

    bool active(false);

    if ( _xdisp_coupled && jvar == _xdisp_var )
    {
      coupled_component = 0;
      active = true;
    }
    else if ( _ydisp_coupled && jvar == _ydisp_var )
    {
      coupled_component = 1;
      active = true;
    }
    else if ( _zdisp_coupled && jvar == _zdisp_var )
    {
      coupled_component = 2;
      active = true;
    }

    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar);

    if (active)
    {
      ColumnMajorMatrix stiff_global(3,3);
      computeStiffness( stiff_global );

      for (_i=0; _i<_test.size(); _i++)
      {
        for (_j=0; _j<_phi.size(); _j++)
        {
          int sign( _i == _j ? 1 : -1 );
          ke(_i,_j) += sign * stiff_global(_component, coupled_component);
        }
      }
    }
    else if ( false ) // Need some code here for coupling with temperature
    {
    }
  }
}
Beispiel #5
0
void iisTaskHeader::keyPressEvent ( QKeyEvent * event )
{
  switch (event->key())
  {
    case Qt::Key_Down:
    {
      QKeyEvent ke(QEvent::KeyPress, Qt::Key_Tab, 0);
      QApplication::sendEvent(this, &ke);
      return;
    }

    case Qt::Key_Up:
    {
      QKeyEvent ke(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
      QApplication::sendEvent(this, &ke);
      return;
    }

    default:;
  }

  QWidget::keyPressEvent(event);
}
Beispiel #6
0
void Processor<sint, sgf2n>::resp_secure_socket_internal(int client_id, const vector<int>& registers) {
  external_clients.symmetric_client_commsec_send_keys.erase(client_id);
  external_clients.symmetric_client_commsec_recv_keys.erase(client_id);
  unsigned char client_public_bytes[crypto_sign_PUBLICKEYBYTES];
  sts_msg1_t m1;
  sts_msg2_t m2;
  sts_msg3_t m3;

  external_clients.load_server_keys_once();
  external_clients.require_ed25519_keys();

  // Validate inputs and state
  if(registers.size() != 8) {
      throw "Invalid call to init_secure_socket.";
  }
  if (client_id >= (int)external_clients.external_client_sockets.size())
  {
    cerr << "No socket connection exists for client id " << client_id << endl;
    throw "No socket connection exists for client";
  }
  vector<int> client_public_key (registers.size(), 0);
  for(unsigned int i = 0; i < registers.size(); i++) {
    client_public_key[i] = (int&)get_Ci_ref(registers[i]);
  }
  external_clients.curve25519_ints_to_bytes(client_public_bytes,  client_public_key);

  // Start Station to Station Protocol for the responder
  STS ke(client_public_bytes, external_clients.server_publickey_ed25519, external_clients.server_secretkey_ed25519);
  socket_stream.reset_read_head();
  socket_stream.ReceiveExpected(external_clients.external_client_sockets[client_id],
                                32);
  socket_stream.consume(m1.bytes, sizeof m1.bytes);
  m2 = ke.recv_msg1(m1);
  socket_stream.reset_write_head();
  socket_stream.append(m2.pubkey, sizeof m2.pubkey);
  socket_stream.append(m2.sig, sizeof m2.sig);
  socket_stream.Send(external_clients.external_client_sockets[client_id]);

  socket_stream.ReceiveExpected(external_clients.external_client_sockets[client_id],
                                64);
  socket_stream.consume(m3.bytes, sizeof m3.bytes);
  ke.recv_msg3(m3);

  // Use results of STS to generate send and receive keys.
  vector<unsigned char> recvKey = ke.derive_secret(crypto_secretbox_KEYBYTES);
  vector<unsigned char> sendKey = ke.derive_secret(crypto_secretbox_KEYBYTES);
  external_clients.symmetric_client_commsec_recv_keys[client_id] = make_pair(recvKey,0);
  external_clients.symmetric_client_commsec_send_keys[client_id] = make_pair(sendKey,0);
}
Beispiel #7
0
void
ODEKernel::computeOffDiagJacobian(unsigned int jvar)
{
  if (_sys.isScalarVariable(jvar))
  {
    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar);
    MooseVariableScalar & var_j = _sys.getScalarVariable(_tid, jvar);
    for (_i = 0; _i < _var.order(); _i++)
      for (_j = 0; _j < var_j.order(); _j++)
      {
        if (jvar != _var.number())
          ke(_i, _j) += computeQpOffDiagJacobian(jvar);
      }
  }
}
Beispiel #8
0
void
TimeDerivative::computeJacobian()
{
  if (_lumping)
  {
    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());

    for (_i = 0; _i < _test.size(); _i++)
      for (_j = 0; _j < _phi.size(); _j++)
        for (_qp = 0; _qp < _qrule->n_points(); _qp++)
          ke(_i, _i) += _JxW[_qp] * _coord[_qp] * computeQpJacobian();
  }
  else
    TimeKernel::computeJacobian();
}
Beispiel #9
0
void
KernelValue::computeOffDiagJacobian(unsigned int jvar)
{
  if (jvar == _var.number())
    computeJacobian();
  else
  {
    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar);

    for (_j = 0; _j < _phi.size(); _j++)
      for (_qp = 0; _qp < _qrule->n_points(); _qp++)
        for (_i = 0; _i < _test.size(); _i++)
          ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpOffDiagJacobian(jvar);
  }
}
Beispiel #10
0
void
DiracKernel::computeJacobian()
{
  DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());

  for (_qp = 0; _qp < _qrule->n_points(); _qp++)
  {
    _current_point = _physical_point[_qp];
    if (isActiveAtPoint(_current_elem, _current_point))
      for (_i = 0; _i < _test.size(); _i++)
        for (_j = 0; _j < _phi.size(); _j++)
        {
          ke(_i, _j) += computeQpJacobian();
        }
  }
}
Beispiel #11
0
void
ODEKernel::computeJacobian()
{
  DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());

  for (_i = 0; _i < _var.order(); _i++)
    for (_j = 0; _j < _var.order(); _j++)
      ke(_i, _j) += computeQpJacobian();

  // compute off-diagonal jacobians wrt scalar variables
  const std::vector<MooseVariableScalar *> & scalar_vars = _sys.getScalarVariables(_tid);
  for (std::vector<MooseVariableScalar *>::const_iterator it = scalar_vars.begin(); it != scalar_vars.end(); ++it)
  {
    MooseVariableScalar * jvar = *it;
    computeOffDiagJacobian(jvar->number());
  }
}
Beispiel #12
0
void
StressDivergence::computeOffDiagJacobian(MooseVariableFEBase & jvar)
{
  size_t jvar_num = jvar.number();
  if (jvar_num == _var.number())
    computeJacobian();
  else
  {
    if (_volumetric_locking_correction)
    {
      // calculate volume averaged value of shape function derivative
      _avg_grad_test.resize(_test.size());
      for (_i = 0; _i < _test.size(); _i++)
      {
        _avg_grad_test[_i].resize(3);
        _avg_grad_test[_i][_component] = 0.0;
        for (_qp = 0; _qp < _qrule->n_points(); _qp++)
          _avg_grad_test[_i][_component] +=
              _grad_test[_i][_qp](_component) * _JxW[_qp] * _coord[_qp];

        _avg_grad_test[_i][_component] /= _current_elem_volume;
      }

      _avg_grad_phi.resize(jvar.phiSize());
      for (_i = 0; _i < jvar.phiSize(); _i++)
      {
        _avg_grad_phi[_i].resize(3);
        for (unsigned int component = 0; component < _mesh.dimension(); component++)
        {
          _avg_grad_phi[_i][component] = 0.0;
          for (_qp = 0; _qp < _qrule->n_points(); _qp++)
            _avg_grad_phi[_i][component] += _grad_phi[_i][_qp](component) * _JxW[_qp] * _coord[_qp];

          _avg_grad_phi[_i][component] /= _current_elem_volume;
        }
      }
    }

    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar_num);

    for (_i = 0; _i < _test.size(); _i++)
      for (_j = 0; _j < jvar.phiSize(); _j++)
        for (_qp = 0; _qp < _qrule->n_points(); _qp++)
          ke(_i, _j) += _JxW[_qp] * _coord[_qp] * computeQpOffDiagJacobian(jvar_num);
  }
}
Beispiel #13
0
 bool build(int nthreads=1) {
     size_t numElem = data_.size();
     KeyIterator<decltype(data_.begin())> kb(data_.begin());
     KeyIterator<decltype(data_.begin())> ke(data_.end());
     auto keyIt = boomphf::range(kb, ke);
     BooPHFT* ph = new BooPHFT(numElem, keyIt, nthreads);
     boophf_.reset(ph);
     std::cerr << "reordering keys and values to coincide with phf ... ";
     std::vector<size_t> inds; inds.reserve(data_.size());
     for (size_t i = 0; i < data_.size(); ++i) {
         inds.push_back(ph->lookup(data_[i].first));
     }
     reorder_destructive_(inds.begin(), inds.end(), data_.begin());
     std::cerr << "done\n";
     built_ = true;
     return built_;
 }
void
NodalEqualValueConstraint::computeJacobian()
{
    // do the diagonal block
    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());
    // put zeroes on the diagonal (we have to do it, otherwise PETSc will complain!)
    for (unsigned int i = 0; i < ke.m(); i++)
        for (unsigned int j = 0; j < ke.n(); j++)
            ke(i, j) = 0.;

    for (unsigned int k = 0; k < _value.size(); k++)
    {
        DenseMatrix<Number> & ken = _assembly.jacobianBlock(_var.number(), _val_number[k]);

        ken(k, 0) =  1.;
        ken(k, 1) = -1.;
    }
}
Beispiel #15
0
uint64_t Fujimap::getInteger(const char* kbuf, const size_t klen) const {
  string s(kbuf, klen);
  map<string, uint64_t>::const_iterator it = tmpEdges_.find(string(kbuf, klen));
  if (it != tmpEdges_.end()){
    return it->second;
  }

  const uint64_t id = getBlockID(kbuf, klen);
  for (vector< vector<FujimapBlock> >::const_reverse_iterator it2 = fbs_.rbegin();
       it2 != fbs_.rend(); ++it2){
    KeyEdge ke(kbuf, klen, 0, (*it2)[id].getSeed());
    uint64_t ret = (*it2)[id].getVal(ke);
    if (ret != NOTFOUND){
      return ret;
    }
  }

  return NOTFOUND;
}
void ntTruss::def_KG(){
	for (int i = 0; i < elementCnt; i++){
		//ELEMENT STIFFNESS MATRIX(FIG. 2.52)
		af::array ke = elements.at(i)->get_k();
		
		int row_ID;
		int col_ID;
		int r_dof = 0;
		int c_dof = 0;
		///CONFIRM THAT .span() returns number of rows or columns////////////////////////////////

		for (int j = 0; j < ke.dims(0); j++) {		///
			if (r_dof >= DOF){
				r_dof = 0;
			}
			for (int k = 0; k < ke.dims(1); k++){	///

				if (c_dof >= DOF){ 
					c_dof = 0;
				}

				if (j < DOF & k < DOF){
					row_ID = (DOF * elements.at(i)->get_nodeInd()[0]) + r_dof;
					col_ID = (DOF * elements.at(i)->get_nodeInd()[0]) + c_dof;
				} else if (j < DOF & k >= DOF){
					row_ID = (DOF * elements.at(i)->get_nodeInd()[1]) + r_dof;
					col_ID = (DOF * elements.at(i)->get_nodeInd()[0]) + c_dof;
				} else if (j >= DOF & k < DOF){
					row_ID = (DOF * elements.at(i)->get_nodeInd()[0]) + r_dof;
					col_ID = (DOF * elements.at(i)->get_nodeInd()[1]) + c_dof;
				} else if (j >= DOF & k >= DOF){
					row_ID = (DOF * elements.at(i)->get_nodeInd()[1]) + r_dof;
					col_ID = (DOF * elements.at(i)->get_nodeInd()[1]) + c_dof;
				}
				K(row_ID, col_ID) += ke(j, k);
				c_dof += 1;
			}
			r_dof += 1;
		}
	}
}
Beispiel #17
0
void
DiracKernel::computeOffDiagJacobian(unsigned int jvar)
{
  if (jvar == _var.number())
  {
    computeJacobian();
  }
  else
  {
    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar);

    for (_qp = 0; _qp < _qrule->n_points(); _qp++)
    {
      _current_point = _physical_point[_qp];
      if (isActiveAtPoint(_current_elem, _current_point))
        for (_i=0; _i<_test.size(); _i++)
          for (_j=0; _j<_phi.size(); _j++)
            ke(_i, _j) += computeQpOffDiagJacobian(jvar);
    }
  }
}
Beispiel #18
0
void
DiracKernel::computeJacobian()
{
    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), _var.number());

    const std::vector<unsigned int> * multiplicities = _drop_duplicate_points ? NULL : &_local_dirac_kernel_info.getPoints()[_current_elem].second;
    unsigned int local_qp = 0;
    Real multiplicity = 1.0;

    for (_qp = 0; _qp < _qrule->n_points(); _qp++)
    {
        _current_point = _physical_point[_qp];
        if (isActiveAtPoint(_current_elem, _current_point))
        {
            if (!_drop_duplicate_points)
                multiplicity = (*multiplicities)[local_qp++];

            for (_i = 0; _i < _test.size(); _i++)
                for (_j = 0; _j < _phi.size(); _j++)
                    ke(_i, _j) += multiplicity * computeQpJacobian();
        }
    }
}
Beispiel #19
0
/* virtual */
void KlipperPopup::keyPressEvent( QKeyEvent* e ) {
    // If alt-something is pressed, select a shortcut
    // from the menu. Do this by sending a keyPress
    // without the alt-modifier to the superobject.
    if ( e->modifiers() & Qt::AltModifier ) {
        QKeyEvent ke( QEvent::KeyPress,
                      e->key(),
                      e->modifiers() ^ Qt::AltModifier,
                      e->text(),
                      e->isAutoRepeat(),
                      e->count() );
        KMenu::keyPressEvent( &ke );
#ifdef DEBUG_EVENTS__
        kDebug() << "Passing this event to ancestor (KMenu): " << e << "->" << ke;
#endif
        if (ke.isAccepted()) {
            e->accept();
            return;
        } else {
            e->ignore();
        }
    }

    // Otherwise, send most events to the search
    // widget, except a few used for navigation:
    // These go to the superobject.
    switch( e->key() ) {
    case Qt::Key_Up:
    case Qt::Key_Down:
    case Qt::Key_Right:
    case Qt::Key_Left:
    case Qt::Key_Tab:
    case Qt::Key_Backtab:
    case Qt::Key_Escape:
    {
#ifdef DEBUG_EVENTS__
        kDebug() << "Passing this event to ancestor (KMenu): " << e;
#endif
        KMenu::keyPressEvent(e);

        break;
    }
    case Qt::Key_Return:
    case Qt::Key_Enter:
    {
        KMenu::keyPressEvent(e);
        this->hide();

        if (activeAction() ==  m_filterWidgetAction)
            setActiveAction(actions().at(TOP_HISTORY_ITEM_INDEX));

        break;
    }
    default:
    {
#ifdef DEBUG_EVENTS__
        kDebug() << "Passing this event down to child (KLineEdit): " << e;
#endif
        setActiveAction(actions().at(actions().indexOf(m_filterWidgetAction)));
        QString lastString = m_filterWidget->text();
        QApplication::sendEvent(m_filterWidget, e);

        if (m_filterWidget->text().isEmpty()) {
            if (m_filterWidgetAction->isVisible())
                m_filterWidget->setVisible(false);
                m_filterWidgetAction->setVisible(false);
        }
        else if (!m_filterWidgetAction->isVisible() )
            m_filterWidgetAction->setVisible(true);

        if (m_filterWidget->text() != lastString) {
            m_dirty = true;
            rebuild(m_filterWidget->text());
        }

        break;
    } //default:
    } //case
}
Beispiel #20
0
bool PopupMenu::event(QEvent* event)
{
  DEBUG_PRST_ROUTES(stderr, "PopupMenu::event:%p activePopupWidget:%p this:%p class:%s event type:%d\n", 
          event, QApplication::activePopupWidget(), this, metaObject()->className(), event->type()); 
   
   switch(event->type())
   {
#ifndef POPUP_MENU_DISABLE_STAY_OPEN
   case QEvent::MouseButtonDblClick:
   {
      if(_stayOpen)
      {
         QMouseEvent* e = static_cast<QMouseEvent*>(event);
         if(e->modifiers() == Qt::NoModifier)
         {
            event->accept();
            // Convert into a return press, which selects the item and closes the menu.
            // Note that with double click, it's a press followed by release followed by double click.
            // That would toggle our item twice eg on->off->on, which is hopefully OK.
            QKeyEvent ke(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier);
            //ke.ignore();   // Pass it on
            return QMenu::event(&ke);
         }
      }
   }
   break;
   
   case QEvent::KeyPress:
   {
     QKeyEvent* e = static_cast<QKeyEvent*>(event);
     switch(e->key())
     {
        case Qt::Key_Space:
          if (!style()->styleHint(QStyle::SH_Menu_SpaceActivatesItem, 0, this))
              break;
        case Qt::Key_Select:
        case Qt::Key_Return:
        case Qt::Key_Enter:
        {
          if(QAction* act = activeAction())
          {
            const bool stay_open = _stayOpen && (MusEGlobal::config.popupsDefaultStayOpen || (e->modifiers() & Qt::ControlModifier));
            // Stay open? Or does the action have a submenu, but also a checkbox of its own?
            if(stay_open || (act->isEnabled() && act->menu() && act->isCheckable()))
            {
              act->trigger();  // Trigger the action. 
              event->accept();
              if(!stay_open)
                closeUp();
              return true;     // We handled it.
            }
            // Otherwise let ancestor QMenu handle it...
          }
        }
        break;
       
        default:
        break;
     }
   }
   break;
#endif   // POPUP_MENU_DISABLE_STAY_OPEN

#ifndef POPUP_MENU_DISABLE_AUTO_SCROLL
   case QEvent::MouseMove:
   {
      if(!MusEGlobal::config.scrollableSubMenus)
      {
        QMouseEvent* e = static_cast<QMouseEvent*>(event);
        QPoint globPos = e->globalPos();
        int dw = QApplication::desktop()->width();  // We want the whole thing if multiple monitors.
        if(x() < 0 && globPos.x() <= 0)   // If on the very first pixel (or beyond)
        {
          moveDelta = 32;
          if(!timer->isActive())
              timer->start();
          event->accept();
          return true;
        }
        else
          if(x() + width() >= dw && globPos.x() >= (dw -1))   // If on the very last pixel (or beyond)
          {
              moveDelta = -32;
              if(!timer->isActive())
                timer->start();
              event->accept();
              return true;
          }

        if(timer->isActive())
          timer->stop();
      }
   }
   break;
#endif  // POPUP_MENU_DISABLE_AUTO_SCROLL

   default:
      break;
   }

   event->ignore();
   return QMenu::event(event);
}
Beispiel #21
0
void ntElement::def_ke(){
	UVW = getDirection();
	L = getLength();
	if (FE == T3){
		ke = arma::zeros(2, 2);

		ke(0, 0) =  (E*A) / L;
		ke(0, 1) = -(E*A) / L;
		ke(1, 0) = -(E*A) / L;
		ke(1, 1) =  (E*A) / L;
	
	} else if (FE == F6){
		///DEVELOP FUNCTION FOR EQUIVALENT FORCES
		ke = arma::zeros(6, 6);

		ke(0, 0) = (E*A) / L;
		ke(0, 3) =-(E*A) / L;

		ke(1, 1) = ((E*I * 12) / pow(L, 3));
		ke(1, 2) = ((E*I * 6 ) / pow(L, 2));
		ke(1, 4) =-((E*I * 12) / pow(L, 3));
		ke(1, 5) = ((E*I * 6 ) / pow(L, 2));

		ke(2, 1) = ke(1, 2);
		ke(2, 2) = ((E*I * 4) / L);
		ke(2, 4) =-((E*I * 6) / pow(L, 2));
		ke(2, 5) = ((E*I * 2) / L);

		ke(3, 0) =-(E*A) / L;
		ke(3, 3) = (E*A) / L;

		ke(4, 1) = ke(1, 4);
		ke(4, 2) = ke(2, 4);
		ke(4, 4) = ((E*I * 12) / pow(L, 3));
		ke(4, 5) = -((E*I * 6) / pow(L, 2));

		ke(5, 1) = ke(1, 5);
		ke(5, 2) = ke(2, 5);
		ke(5, 4) = ke(4, 5);
		ke(5, 5) = ((E*I * 4) / L);

		//2D BEAM INTERPOLATION FUNCTION
		//ke(0, 0) = ((E * I) / L) *  12;
		//ke(0, 1) = ((E * I) / L) *  6 * L;
		//ke(0, 2) = ((E * I) / L) * -12;
		//ke(0, 3) = ((E * I) / L) *  6 * L;
		//ke(1, 0) = ke(0, 1);
		//ke(1, 1) = ((E * I) / L) *  4 * pow(L, 2);
		//ke(1, 2) = ((E * I) / L) * -6 * L;
		//ke(1, 3) = ((E * I) / L) *  2 * pow(L, 2);
		//ke(2, 0) = ke(0, 2);
		//ke(2, 1) = ke(1, 2);
		//ke(2, 2) = ((E * I) / L) *  12;
		//ke(2, 3) = ((E * I) / L) * -6 * L;
		//ke(3, 0) = ke(0, 3);
		//ke(3, 1) = ke(1, 3);
		//ke(3, 2) = ke(2, 3);
		//ke(3, 3) = ((E * I) / L) *  4 * pow(L, 2);
	}
}
Beispiel #22
0
void
InertialForceBeam::computeOffDiagJacobian(MooseVariableFEBase & jvar)
{
  mooseAssert(_beta > 0.0, "InertialForceBeam: Beta parameter should be positive.");

  Real factor = 0.0;
  if (isParamValid("beta"))
    factor = 1.0 / (_beta * _dt * _dt) + _eta[0] * (1.0 + _alpha) * _gamma / _beta / _dt;
  else
    factor = (*_du_dotdot_du)[0] + _eta[0] * (1.0 + _alpha) * (*_du_dot_du)[0];

  size_t jvar_num = jvar.number();
  if (jvar_num == _var.number())
    computeJacobian();
  else
  {
    unsigned int coupled_component = 0;
    bool disp_coupled = false;
    bool rot_coupled = false;

    for (unsigned int i = 0; i < _ndisp; ++i)
    {
      if (jvar_num == _disp_num[i] && _component > 2)
      {
        coupled_component = i;
        disp_coupled = true;
        break;
      }
    }

    for (unsigned int i = 0; i < _nrot; ++i)
    {
      if (jvar_num == _rot_num[i])
      {
        coupled_component = i + 3;
        rot_coupled = true;
        break;
      }
    }

    DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar_num);

    if (disp_coupled || rot_coupled)
    {
      for (unsigned int i = 0; i < _test.size(); ++i)
      {
        for (unsigned int j = 0; j < _phi.size(); ++j)
        {
          if (_component < 3 && coupled_component > 2)
          {
            RankTwoTensor A;
            A(0, 1) = _Az[0];
            A(0, 2) = -_Ay[0];
            A(1, 0) = -_Az[0];
            A(2, 0) = _Ay[0];

            // conversion from local config to global coordinate system
            const RankTwoTensor Ag =
                _original_local_config[0].transpose() * A * _original_local_config[0];

            ke(i, j) += (i == j ? 1.0 / 3.0 : 1.0 / 6.0) * _density[0] *
                        Ag(_component, coupled_component - 3) * _original_length[0] * factor;
          }
          else if (_component > 2 && coupled_component < 3)
          {
            RankTwoTensor A;
            A(0, 1) = -_Az[0];
            A(0, 2) = _Ay[0];
            A(1, 0) = _Az[0];
            A(2, 0) = -_Ay[0];

            // conversion from local config to global coordinate system
            const RankTwoTensor Ag =
                _original_local_config[0].transpose() * A * _original_local_config[0];

            ke(i, j) += (i == j ? 1.0 / 3.0 : 1.0 / 6.0) * _density[0] *
                        Ag(_component - 3, coupled_component) * _original_length[0] * factor;
          }
          else if (_component > 2 && coupled_component > 2)
          {
            RankTwoTensor I;
            if (isParamValid("Ix"))
              I(0, 0) = _Ix[0];
            else
              I(0, 0) = _Iy[0] + _Iz[0];
            I(1, 1) = _Iz[0];
            I(2, 2) = _Iy[0];

            // conversion from local config to global coordinate system
            const RankTwoTensor Ig =
                _original_local_config[0].transpose() * I * _original_local_config[0];

            ke(i, j) += (i == j ? 1.0 / 3.0 : 1.0 / 6.0) * _density[0] *
                        Ig(_component - 3, coupled_component - 3) * _original_length[0] * factor;
          }
        }
      }
    }
  }
}
Beispiel #23
0
void QDeclarativeTester::updateCurrentTime(int msec)
{
    QDeclarativeItemPrivate::setConsistentTime(msec);

    QImage img(m_view->width(), m_view->height(), QImage::Format_RGB32);

    if (options & QDeclarativeViewer::TestImages) {
        img.fill(qRgb(255,255,255));
        QPainter p(&img);
        m_view->render(&p);
    }

    FrameEvent fe;
    fe.msec = msec;
    if (msec == 0 || !(options & QDeclarativeViewer::TestImages)) {
        // Skip first frame, skip if not doing images
    } else if (0 == (m_savedFrameEvents.count() % 60)) {
        fe.image = img;
    } else {
        QCryptographicHash hash(QCryptographicHash::Md5);
        hash.addData((const char *)img.bits(), img.bytesPerLine() * img.height());
        fe.hash = hash.result();
    }
    m_savedFrameEvents.append(fe);

    // Deliver mouse events
    filterEvents = false;

    if (!testscript) {
        for (int ii = 0; ii < m_mouseEvents.count(); ++ii) {
            MouseEvent &me = m_mouseEvents[ii];
            me.msec = msec;
            QMouseEvent event(me.type, me.pos, me.button, me.buttons, me.modifiers);

            if (me.destination == View) {
                QCoreApplication::sendEvent(m_view, &event);
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
            }
        }

        for (int ii = 0; ii < m_keyEvents.count(); ++ii) {
            KeyEvent &ke = m_keyEvents[ii];
            ke.msec = msec;
            QKeyEvent event(ke.type, ke.key, ke.modifiers, ke.text, ke.autorep, ke.count);

            if (ke.destination == View) {
                QCoreApplication::sendEvent(m_view, &event);
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
            }
        }
        m_savedMouseEvents.append(m_mouseEvents);
        m_savedKeyEvents.append(m_keyEvents);
    }

    m_mouseEvents.clear();
    m_keyEvents.clear();

    // Advance test script
    while (testscript && testscript->count() > testscriptidx) {

        QObject *event = testscript->event(testscriptidx);

        if (QDeclarativeVisualTestFrame *frame = qobject_cast<QDeclarativeVisualTestFrame *>(event)) {
            if (frame->msec() < msec) {
                if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record)) {
                    qWarning() << "QDeclarativeTester: Extra frame.  Seen:" 
                               << msec << "Expected:" << frame->msec();
                    imagefailure();
                }
            } else if (frame->msec() == msec) {
                if (!frame->hash().isEmpty() && frame->hash().toUtf8() != fe.hash.toHex()) {
                    if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record)) {
                        qWarning() << "QDeclarativeTester: Mismatched frame hash.  Seen:" 
                                   << fe.hash.toHex() << "Expected:" 
                                   << frame->hash().toUtf8();
                        imagefailure();
                    }
                }
            } else if (frame->msec() > msec) {
                break;
            }

            if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record) && !frame->image().isEmpty()) {
                QImage goodImage(frame->image().toLocalFile());
                if (goodImage != img) {
                    QString reject(frame->image().toLocalFile() + ".reject.png");
                    qWarning() << "QDeclarativeTester: Image mismatch.  Reject saved to:" 
                               << reject;
                    img.save(reject);
                    imagefailure();
                }
            }
        } else if (QDeclarativeVisualTestMouse *mouse = qobject_cast<QDeclarativeVisualTestMouse *>(event)) {
            QPoint pos(mouse->x(), mouse->y());
            QPoint globalPos = m_view->mapToGlobal(QPoint(0, 0)) + pos;
            QMouseEvent event((QEvent::Type)mouse->type(), pos, globalPos, (Qt::MouseButton)mouse->button(), (Qt::MouseButtons)mouse->buttons(), (Qt::KeyboardModifiers)mouse->modifiers());

            MouseEvent me(&event);
            me.msec = msec;
            if (!mouse->sendToViewport()) {
                QCoreApplication::sendEvent(m_view, &event);
                me.destination = View;
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
                me.destination = ViewPort;
            }
            m_savedMouseEvents.append(me);
        } else if (QDeclarativeVisualTestKey *key = qobject_cast<QDeclarativeVisualTestKey *>(event)) {

            QKeyEvent event((QEvent::Type)key->type(), key->key(), (Qt::KeyboardModifiers)key->modifiers(), QString::fromUtf8(QByteArray::fromHex(key->text().toUtf8())), key->autorep(), key->count());

            KeyEvent ke(&event);
            ke.msec = msec;
            if (!key->sendToViewport()) {
                QCoreApplication::sendEvent(m_view, &event);
                ke.destination = View;
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
                ke.destination = ViewPort;
            }
            m_savedKeyEvents.append(ke);
        } 
        testscriptidx++;
    }

    filterEvents = true;

    if (testscript && testscript->count() <= testscriptidx)
        complete();
}
void tst_Q3RichText::keyPressEvent()
{
    // Still needs to test Key_Prior and Key_Next

    int para, index;

    Q3TextEdit textedit;
    textedit.show();
    textedit.setText( "This is a test" );

    qWarning( "Consider using QtTestCase::keyEvent() for sending key events" );
    QKeyEvent ke( QEvent::KeyPress, Qt::Key_Right, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    textedit.getCursorPosition( &para, &index );
    QCOMPARE( para, 0 );
    QCOMPARE( index, 1 );

    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Right, 0, Qt::ControlModifier );
    QApplication::sendEvent( textedit.viewport(), &ke );
    textedit.getCursorPosition( &para, &index );
    QCOMPARE( para, 0 );
    QCOMPARE( index, 5 );

    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Left, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    textedit.getCursorPosition( &para, &index );
    QCOMPARE( para, 0 );
    QCOMPARE( index, 4 );

    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Left, 0, Qt::ControlModifier );
    QApplication::sendEvent( textedit.viewport(), &ke );
    textedit.getCursorPosition( &para, &index );
    QCOMPARE( para, 0 );
    QCOMPARE( index, 0 );

    // Test that the text is removed when Enter/Return is pressed first
    textedit.selectAll();
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Enter, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString("\n") );

    textedit.setText( "This is a test" );
    textedit.selectAll();
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Return, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString("\n") );

    // Now test if the line-break is added in rich text mode
    textedit.setTextFormat( Qt::RichText );

    textedit.setText( "This is a test" );
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Enter, 0, Qt::ControlModifier );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QVERIFY( textedit.text().contains( "<br />" ) );

    textedit.setText( "This is a test" );
    textedit.moveCursor( Q3TextEdit::MoveLineEnd, FALSE );
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Return, 0, Qt::ControlModifier );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QVERIFY( textedit.text().contains( "<br />" ) );

    textedit.setText( "This is a test" );
    textedit.moveCursor( Q3TextEdit::MoveWordForward, FALSE );
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Return, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QString es = QString::fromLatin1("<p dir=\"ltr\">");
    QVERIFY( textedit.text().count( es ) == 2 );

    textedit.setTextFormat( Qt::AutoText );

    textedit.setText( "This is a test" );
    QApplication::clipboard()->setText("");
    textedit.selectAll();
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Delete, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString("") );

#if defined (Q_WS_WIN)
    textedit.setText( "This is a test" );
    QApplication::clipboard()->setText("");
    textedit.selectAll();
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Delete, 0, Qt::ShiftModifier );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString("") );
    QCOMPARE( QApplication::clipboard()->text(), QString("This is a test") );
#endif

    textedit.setText( "This is a test" );
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Delete, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString("his is a test") );

    bool nativeClipboardWorking = true;
#if defined (Q_WS_MAC)
    PasteboardRef pasteboard;
    OSStatus status = PasteboardCreate(0, &pasteboard);
    if (status == noErr)
        CFRelease(pasteboard);
    nativeClipboardWorking = status == noErr;
#endif

    if (nativeClipboardWorking) {
        textedit.setText( "This is a test" );
        QApplication::clipboard()->setText(" and this is another test");
        textedit.moveCursor( Q3TextEdit::MoveLineEnd, FALSE );
        ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Insert, 0, Qt::ShiftModifier );
        QApplication::sendEvent( textedit.viewport(), &ke );
        QCOMPARE( textedit.text(), QString("This is a test and this is another test") );
    }

#if defined (Q_WS_WIN)
    textedit.setText( "This is a test" );
    QApplication::clipboard()->setText("");
    textedit.selectAll();
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Insert, 0, Qt::ControlModifier );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( QApplication::clipboard()->text(), QString("This is a test") );
#endif

    textedit.setText( "This is a test" );
    textedit.selectAll();
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Backspace, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString("") );

    textedit.setText( "This is a test" );
    textedit.moveCursor( Q3TextEdit::MoveLineEnd, FALSE );
    ke = QKeyEvent( QEvent::KeyPress, Qt::Key_Backspace, 0, Qt::NoButton );
    QApplication::sendEvent( textedit.viewport(), &ke );
    QCOMPARE( textedit.text(), QString( "This is a tes" ) );

    if (nativeClipboardWorking) {
        textedit.setText( "This is a test" );
        QApplication::clipboard()->setText("");
        textedit.selectAll();
        ke = QKeyEvent( QEvent::KeyPress, Qt::Key_F16, 0, Qt::NoButton );
        QApplication::sendEvent( textedit.viewport(), &ke );
        QCOMPARE( QApplication::clipboard()->text(), QString("This is a test") );

        textedit.setText( "This is a test" );
        textedit.moveCursor( Q3TextEdit::MoveLineEnd, FALSE );
        QApplication::clipboard()->setText(" and this is another test");
        ke = QKeyEvent( QEvent::KeyPress, Qt::Key_F18, 0, Qt::NoButton );
        QApplication::sendEvent( textedit.viewport(), &ke );
        QCOMPARE( textedit.text(), QString("This is a test and this is another test") );

        textedit.setText( "This is a test" );
        QApplication::clipboard()->setText("");
        textedit.selectAll();
        ke = QKeyEvent( QEvent::KeyPress, Qt::Key_F20, 0, Qt::NoButton );
        QApplication::sendEvent( textedit.viewport(), &ke );
        QCOMPARE( textedit.text(), QString("") );
        QCOMPARE( QApplication::clipboard()->text(), QString("This is a test") );
    }
}
Beispiel #25
0
void QDeclarativeTester::updateCurrentTime(int msec)
{
#ifndef Q_OS_SYMBIAN
    QDeclarativeItemPrivate::setConsistentTime(msec);
#endif
    if (!testscript && msec > 16 && options & QDeclarativeViewer::Snapshot)
        return;

    QImage img(m_view->width(), m_view->height(), QImage::Format_RGB32);

    if (options & QDeclarativeViewer::TestImages) {
        img.fill(qRgb(255,255,255));

#ifdef Q_WS_MAC
        bool oldSmooth = qt_applefontsmoothing_enabled;
        qt_applefontsmoothing_enabled = false;
#endif
        QPainter p(&img);
#ifdef Q_WS_MAC
        qt_applefontsmoothing_enabled = oldSmooth;
#endif

        m_view->render(&p);
    }

    bool snapshot = msec == 16 && (options & QDeclarativeViewer::Snapshot
                                   || (testscript && testscript->count() == 2));

    FrameEvent fe;
    fe.msec = msec;
    if (msec == 0 || !(options & QDeclarativeViewer::TestImages)) {
        // Skip first frame, skip if not doing images
    } else if (0 == ((m_savedFrameEvents.count()-1) % 60) || snapshot) {
        fe.image = img;
    } else {
        QCryptographicHash hash(QCryptographicHash::Md5);
        hash.addData((const char *)img.bits(), img.bytesPerLine() * img.height());
        fe.hash = hash.result();
    }
    m_savedFrameEvents.append(fe);

    // Deliver mouse events
    filterEvents = false;

    if (!testscript) {
        for (int ii = 0; ii < m_mouseEvents.count(); ++ii) {
            MouseEvent &me = m_mouseEvents[ii];
            me.msec = msec;
            QMouseEvent event(me.type, me.pos, me.button, me.buttons, me.modifiers);

            if (me.destination == View) {
                QCoreApplication::sendEvent(m_view, &event);
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
            }
        }

        for (int ii = 0; ii < m_keyEvents.count(); ++ii) {
            KeyEvent &ke = m_keyEvents[ii];
            ke.msec = msec;
            QKeyEvent event(ke.type, ke.key, ke.modifiers, ke.text, ke.autorep, ke.count);

            if (ke.destination == View) {
                QCoreApplication::sendEvent(m_view, &event);
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
            }
        }
        m_savedMouseEvents.append(m_mouseEvents);
        m_savedKeyEvents.append(m_keyEvents);
    }

    m_mouseEvents.clear();
    m_keyEvents.clear();

    // Advance test script
    while (testscript && testscript->count() > testscriptidx) {

        QObject *event = testscript->event(testscriptidx);

        if (QDeclarativeVisualTestFrame *frame = qobject_cast<QDeclarativeVisualTestFrame *>(event)) {
            if (frame->msec() < msec) {
                if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record)) {
                    qWarning() << "QDeclarativeTester(" << m_script << "): Extra frame.  Seen:"
                               << msec << "Expected:" << frame->msec();
                    imagefailure();
                }
            } else if (frame->msec() == msec) {
                if (!frame->hash().isEmpty() && frame->hash().toUtf8() != fe.hash.toHex()) {
                    if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record)) {
                        qWarning() << "QDeclarativeTester(" << m_script << "): Mismatched frame hash at" << msec
                                   << ".  Seen:" << fe.hash.toHex()
                                   << "Expected:" << frame->hash().toUtf8();
                        imagefailure();
                    }
                }
            } else if (frame->msec() > msec) {
                break;
            }

            if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record) && !frame->image().isEmpty()) {
                QImage goodImage(frame->image().toLocalFile());
                if (frame->msec() == 16 && goodImage.size() != img.size()){
                    //Also an image mismatch, but this warning is more informative. Only checked at start though.
                    qWarning() << "QDeclarativeTester(" << m_script << "): Size mismatch. This test must be run at " << goodImage.size();
                    imagefailure();
                }
                if (goodImage != img) {
                    QString reject(frame->image().toLocalFile() + QLatin1String(".reject.png"));
                    qWarning() << "QDeclarativeTester(" << m_script << "): Image mismatch.  Reject saved to:"
                               << reject;
                    img.save(reject);
                    bool doDiff = (goodImage.size() == img.size());
                    if (doDiff) {
                        QImage diffimg(m_view->width(), m_view->height(), QImage::Format_RGB32);
                        diffimg.fill(qRgb(255,255,255));
                        QPainter p(&diffimg);
                        int diffCount = 0;
                        for (int x = 0; x < img.width(); ++x) {
                            for (int y = 0; y < img.height(); ++y) {
                                if (goodImage.pixel(x,y) != img.pixel(x,y)) {
                                    ++diffCount;
                                    p.drawPoint(x,y);
                                }
                            }
                        }
                        QString diff(frame->image().toLocalFile() + QLatin1String(".diff.png"));
                        diffimg.save(diff);
                        qWarning().nospace() << "                    Diff (" << diffCount << " pixels differed) saved to: " << diff;
                    }
                    imagefailure();
                }
            }
        } else if (QDeclarativeVisualTestMouse *mouse = qobject_cast<QDeclarativeVisualTestMouse *>(event)) {
            QPoint pos(mouse->x(), mouse->y());
            QPoint globalPos = m_view->mapToGlobal(QPoint(0, 0)) + pos;
            QMouseEvent event((QEvent::Type)mouse->type(), pos, globalPos, (Qt::MouseButton)mouse->button(), (Qt::MouseButtons)mouse->buttons(), (Qt::KeyboardModifiers)mouse->modifiers());

            MouseEvent me(&event);
            me.msec = msec;
            if (!mouse->sendToViewport()) {
                QCoreApplication::sendEvent(m_view, &event);
                me.destination = View;
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
                me.destination = ViewPort;
            }
            m_savedMouseEvents.append(me);
        } else if (QDeclarativeVisualTestKey *key = qobject_cast<QDeclarativeVisualTestKey *>(event)) {

            QKeyEvent event((QEvent::Type)key->type(), key->key(), (Qt::KeyboardModifiers)key->modifiers(), QString::fromUtf8(QByteArray::fromHex(key->text().toUtf8())), key->autorep(), key->count());

            KeyEvent ke(&event);
            ke.msec = msec;
            if (!key->sendToViewport()) {
                QCoreApplication::sendEvent(m_view, &event);
                ke.destination = View;
            } else {
                QCoreApplication::sendEvent(m_view->viewport(), &event);
                ke.destination = ViewPort;
            }
            m_savedKeyEvents.append(ke);
        }
        testscriptidx++;
    }

    filterEvents = true;

    if (testscript && testscript->count() <= testscriptidx) {
        //if (msec == 16) //for a snapshot, leave it up long enough to see
        //    (void)::sleep(1);
        complete();
    }
}
Beispiel #26
0
// Apply the phong model to this point on the surface of the object, returning
// the color of that point.
Vec3d Material::shade( Scene *scene, const ray& r, const isect& i ) const
{ 
	// YOUR CODE HERE

	// For now, this method just returns the diffuse color of the object.
	// This gives a single matte color for every distinct surface in the
	// scene, and that's it.  Simple, but enough to get you started.
	// (It's also inconsistent with the phong model...)

	// Your mission is to fill in this method with the rest of the phong
	// shading model, including the contributions of all the light sources.
    // You will need to call both distanceAttenuation() and shadowAttenuation()
    // somewhere in your code in order to compute shadows and light falloff.
	if( debugMode )
		std::cout << "Debugging Phong code..." << std::endl;

    //Intersection Point
    Vec3d P = r.at(i.t);
    Vec3d L = Vec3d(0,0,0);
    Vec3d V = -r.getDirection();

    //======[ Emission ]======
    L += ke(i);
    if(debugMode)
        std::cout << "ke(i): " << ke(i) <<"\n";

    //======[ Ambient ]======
    //missing Ka
    L += prod(ka(i),scene->ambient());
    if(debugMode){
        std::cout << "ambient: " << scene->ambient() <<"\n";
        std::cout << "ka(i): " << ka(i) <<"\n";
    }

    //iterate through lights
    for ( std::vector<Light*>::const_iterator litr = scene->beginLights(); 
         litr != scene->endLights(); 
         ++litr )
    {
        Vec3d Lc; //light contribution
        Light* pLight = *litr;
        Vec3d sa = pLight->shadowAttenuation(P);
        double da = pLight->distanceAttenuation(P);

        //======[ Diffuse ]======
        Vec3d direction = pLight->getDirection(P);
        Vec3d normal = i.N;
        if(debugMode)
        {
            std::cout << "D: ";
            clamp((normal*direction)*kd(i)).print();   
        }
        Lc =  clamp((normal*direction)*kd(i));
        
        //======[ Specular ]======
        Vec3d H = (V+direction)/2.0;
        if(debugMode)
        {
            std::cout << "S: ";
            clamp(ks(i)*pow((normal*H),shininess(i))).print();   
            std::cout <<"sa: ";
            sa.print();
        }
        Lc += clamp(ks(i)*pow((normal*H),shininess(i)));

        Lc = da * prod(Lc,sa);
        
        L+=Lc;
    }
	
    if(debugMode){
        std::cout <<"L: ";
        L.print();
    }
	return L;
}