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()); }
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(); } }
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(); } }
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(); }
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; }
// 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]); } }
void DemoKeeper::notifyPointMove(MyGUI::Widget* _sender, int _left, int _top, MyGUI::MouseButton _id) { _sender->setPosition(MyGUI::IntPoint(_left, _top) - _sender->getCroppedParent()->getAbsolutePosition() - mOffset); updateSpline(); }
void DemoKeeper::notifyChangeQuality(MyGUI::ScrollBar* _sender, size_t _position) { bezierQuality = _position + 4; mQualityText->setCaption(MyGUI::utility::toString("Quality: ", bezierQuality)); updateSpline(); }