예제 #1
0
void MaterialEditor::onMouseMoveEvent(const GuiEvent &event)
{
   lastMousePoint = event.mousePoint;

   for(S32 n = 0; n < nodeList.size(); ++n )
   {
      Node* node = &nodeList[n];
      node->mouseOver = false;

      if ( event.mousePoint.x >= node->x && event.mousePoint.x <= node->x + node->width
         && event.mousePoint.y >= node->y && event.mousePoint.y <= node->y + node->height )
      {
         node->mouseOver = true;

         for ( S32 i = 0; i < node->inputs.size(); ++i )
         {
            InputPoint* input = &node->inputs[i];
            input->mouseOver = false;

            Point2F dist = input->lastPosition - Point2F(lastMousePoint.x, lastMousePoint.y);
            if (  dist.len() <= 5 )
               input->mouseOver = true;
         }

         for ( S32 i = 0; i < node->outputs.size(); ++i )
         {
            OutputPoint* output = &node->outputs[i];
            output->mouseOver = false;

            Point2F dist = output->lastPosition - Point2F(lastMousePoint.x, lastMousePoint.y);
            if (  dist.len() <= 5 )
               output->mouseOver = true;
         }
      }
   }
}
예제 #2
0
void calculateHandAxisRotation(const MatrixF& handRotation, const F32& maxHandAxisRadius, Point2F& outRotation)
{
   const VectorF& controllerUp = handRotation.getUpVector();
   outRotation.x = controllerUp.x;
   outRotation.y = controllerUp.y;

   // Limit the axis angle to that given to us
   if(outRotation.len() > maxHandAxisRadius)
   {
      outRotation.normalize(maxHandAxisRadius);
   }

   // Renormalize to the range of 0..1
   if(maxHandAxisRadius != 0.0f)
   {
      outRotation /= maxHandAxisRadius;
   }
}