Exemplo n.º 1
0
	void DemoKeeper::createScene()
	{
		base::BaseDemoManager::createScene();
		MyGUI::ResourceManager::getInstance().load("SplineSkin.xml");

		const MyGUI::VectorWidgetPtr& root = MyGUI::LayoutManager::getInstance().loadLayout("HelpPanel.layout");
		root.at(0)->findWidget("Text")->castType<MyGUI::TextBox>()->setCaption("PolygonalSkin usage. Drag white rectangles to move points for bezier curve.");

		MyGUI::VectorWidgetPtr widgets = MyGUI::LayoutManager::getInstance().loadLayout("SplineWindow.layout");
		mQualityText = widgets.at(0)->findWidget("SplineText")->castType<MyGUI::TextBox>();
		MyGUI::ScrollBar* qualityScroll = widgets.at(0)->findWidget("SplineQuality")->castType<MyGUI::ScrollBar>();
		qualityScroll->eventScrollChangePosition += MyGUI::newDelegate(this, &DemoKeeper::notifyChangeQuality);
		mClient = widgets.at(0)->findWidget("SplineClient");

		// create widget with skin that contain specific sub skin - PolygonalSkin
		MyGUI::Widget* widget = mClient->createWidget<MyGUI::Widget>("PolygonalSkin", MyGUI::IntCoord(MyGUI::IntPoint(), mClient->getSize()), MyGUI::Align::Stretch);
		widget->setColour(MyGUI::Colour::Red);
		// get main subskin
		MyGUI::ISubWidget* main = widget->getSubWidgetMain();
		mPolygonalSkin = main->castType<MyGUI::PolygonalSkin>();

		// set PolygonalSkin properties and points
		mPolygonalSkin->setWidth(8.0f);

		for (int i = 0; i < PointsCount; ++i)
		{
			point[i] = mClient->createWidget<MyGUI::Button>("Button", MyGUI::IntCoord(10 + (i + i % 2 * 3) * 40, 10 + (i + i / 2 * 3) * 40, 16, 16), MyGUI::Align::Default);
			point[i]->eventMouseDrag += newDelegate(this, &DemoKeeper::notifyPointMove);
			point[i]->eventMouseButtonPressed += newDelegate(this, &DemoKeeper::notifyPointPressed);
		}

		notifyChangeQuality(qualityScroll, 12);
		updateSpline();
	}
void ofxSplineEditor::update(){
    updateSpline();
    updateSplineFileSystem();
    updateSplinePoint();
    updateCameraPosition();
    editPointIndex.setMax(spline.GetPointNum());
}
Exemplo n.º 3
0
void View::mouseMoveEvent(QGraphicsSceneMouseEvent* e)
{
  auto p = mapFromCanvas(e->pos());
  if (!m_clicked)
    return;
  const auto mp = *m_clicked;
  const auto N = m_spline.points.size();
  if (mp < N)
  {
    m_spline.points[mp] = p;

    updateSpline();
    update();
  }
}
Exemplo n.º 4
0
void View::mousePressEvent(QGraphicsSceneMouseEvent* e)
{
  auto btn = e->button();
  if (btn == Qt::LeftButton)
  {
    if ((m_clicked = findControlPoint(e->pos())))
    {
      mouseMoveEvent(e);
    }
    e->accept();
  }
  else if (btn == Qt::RightButton)
  {
    // Delete

    updateSpline();
  }
}
Exemplo n.º 5
0
void View::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
{
  const auto newPos = mapFromCanvas(event->pos());
  std::size_t splitIndex = 0;
  const std::size_t N = m_spline.points.size();
  for (std::size_t i = 0; i < N - 1; ++i)
  {
    if (m_spline.points[i].x() <= newPos.x())
    {
      splitIndex = i;
    }
    else
    {
      break;
    }
  }

  m_spline.points.insert(m_spline.points.begin() + splitIndex + 1, newPos);

  updateSpline();
  changed();
  update();
}
Exemplo n.º 6
0
void RDirNode::logic(float dt, Bounds2D& bounds) {

    //move
    move(dt);
    updateSpline(dt);

    //update node normal
    if(parent != 0) {
        node_normal = (pos - parent->getPos()).normal();
    }

    bounds.update(pos);

    //update files
     for(std::list<RFile*>::iterator it = files.begin(); it!=files.end(); it++) {
         RFile* f = *it;

         f->logic(dt);
     }

    //update child nodes
    for(std::list<RDirNode*>::iterator it = children.begin(); it != children.end(); it++) {
        RDirNode* node = (*it);

        node->logic(dt, bounds);
    }

    //update colour
    calcColour();

    //update tickers
    if(visible) since_node_visible += dt;

    since_last_file_change += dt;
    since_last_node_change += dt;
}
Exemplo n.º 7
0
// continuous update
void SunApp::updateSplines()
{
  maxRadius = min(windowSize.width, windowSize.height)/2;
  circleCenter = Vec2(windowSize.width/2, windowSize.height/2);  
  // precalculate radii
  for (u32 i=0; i<numCircles; ++i)
  {
    f32 d = numCircles > 1 ? (((maxRadius - minRadius)/(numCircles-1))*i) : 0;
    circleRadius[i] = minRadius + d;
//    DOUT(circleRadius[i]);
  }
  
  // calculate circle points
  for (u32 ci=0; ci<numCircles; ++ci)
  {
    f32 r = circleRadius[ci];
    for(u32 cp=0; cp<numSplines; ++cp)
    {
      f32 f = ((f32)cp)/(f32(numSplines));
      f *= 2*M_PI;
      if(ci==2)
      {
        f+=o2;
      }
      else if(ci==4)
      {
        f-=o1;
      }
      else if(ci==0)
      {
        f-=o3;
      }
      f32 x = sinf(f)*r;
      f32 y = cosf(f)*r;
      Vec2 p = Vec2(x,y)+circleCenter;
      u32 idx = ci*numSplines + cp;
      circlePoints[idx] = p;
    }
  }
  
  
  // update splines
  vector<Vec2> cps;
  cps.resize(numCircles);
  for(u32 i=0; i<numSplines; ++i)
  {
    for(u32 pi = 0; pi<numCircles; ++pi)
    {
      Vec2 v = circlePoints[pi*numSplines+i];
      cps[pi] = v;
    }
    
    vector<Vec2> dv;
    dv.push_back(cps[0]);
    for(auto v : cps)
    {
      dv.push_back(v);
    }
    dv.push_back(cps.back());
    
    updateSpline(dv, numInterpolatedPoints, splines[i]);
  }  
}
Exemplo n.º 8
0
	void DemoKeeper::notifyPointMove(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id)
	{
		_sender->setPosition(MyGUI::IntPoint(_left, _top) - _sender->getCroppedParent()->getAbsolutePosition() - mOffset);
		updateSpline();
	}
Exemplo n.º 9
0
	void DemoKeeper::notifyChangeQuality(MyGUI::ScrollBar* _sender, size_t _position)
	{
		bezierQuality = _position + 4;
		mQualityText->setCaption(MyGUI::utility::toString("Quality: ", bezierQuality));
		updateSpline();
	}