From f3316f607300bf15664363b32429a24f6b053752 Mon Sep 17 00:00:00 2001 From: Christopher Tenter Date: Wed, 8 Apr 2015 12:59:52 +0000 Subject: [PATCH] add function to generate a random bspline curve git-svn-id: http://www.openflipper.org/svnrepo/OpenFlipper/branches/Free@20552 383ad7c9-94d9-4d36-a494-682f7c89f535 --- Plugin-PrimitivesGenerator/CMakeLists.txt | 2 +- .../PrimitivesGenerator.cc | 50 +++++++++++++++++++ .../PrimitivesGenerator.hh | 4 ++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/Plugin-PrimitivesGenerator/CMakeLists.txt b/Plugin-PrimitivesGenerator/CMakeLists.txt index cfc4862b2..03e57abf8 100644 --- a/Plugin-PrimitivesGenerator/CMakeLists.txt +++ b/Plugin-PrimitivesGenerator/CMakeLists.txt @@ -3,7 +3,7 @@ include (plugin) SET( CURRENT_PLUGIN_DEPS "") if (EXISTS ${CMAKE_SOURCE_DIR}/ObjectTypes/BSplineCurve) - add_definitions (-DENABLE_SKELETON_SUPPORT) + add_definitions (-DENABLE_BSPLINECURVE_SUPPORT) endif() if (EXISTS ${CMAKE_SOURCE_DIR}/ObjectTypes/BSplineSurface) diff --git a/Plugin-PrimitivesGenerator/PrimitivesGenerator.cc b/Plugin-PrimitivesGenerator/PrimitivesGenerator.cc index 59e8ca1eb..c172c9733 100644 --- a/Plugin-PrimitivesGenerator/PrimitivesGenerator.cc +++ b/Plugin-PrimitivesGenerator/PrimitivesGenerator.cc @@ -51,6 +51,10 @@ #include #include +#ifdef ENABLE_BSPLINECURVE_SUPPORT +#include +#endif + #ifdef ENABLE_BSPLINESURFACE_SUPPORT #include #endif @@ -121,6 +125,13 @@ void PrimitivesGeneratorPlugin::initializePlugin() QString("Position,Axis,Radius,Height,Top,Bottom").split(","), QString("Bottom center vertex position,Center axis,radius,height,add top vertex,add bottom vertex").split(",")); +#ifdef ENABLE_BSPLINECURVE_SUPPORT + emit setSlotDescription("addRandomBSplineCurve(Vector,int)", + tr("Generates a random B-spline curve (ObjectId is returned)"), + QString("Position,Count").split(","), + QString("Center position,Number of control points").split(",")); +#endif + #ifdef ENABLE_BSPLINESURFACE_SUPPORT emit setSlotDescription("addRandomBSplineSurface(Vector,int)", tr("Generates a random B-spline surface (ObjectId is returned)"), @@ -187,6 +198,11 @@ void PrimitivesGeneratorPlugin::pluginsInitialized() { action->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"primitive_tetrahedron.png")); whatsThisGen.setWhatsThis(action,tr("Create a Tetrahedron."),"Tetrahedron"); +#ifdef ENABLE_BSPLINECURVE_SUPPORT + action = primitivesMenu_->addAction("Random B-spline curve",this,SLOT(addRandomBSplineCurve())); + whatsThisGen.setWhatsThis(action,tr("Create a random B-spline curve."),"B-spline curve"); +#endif + #ifdef ENABLE_BSPLINESURFACE_SUPPORT action = primitivesMenu_->addAction("Random B-spline surface",this,SLOT(addRandomBSplineSurface())); action->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"bspline_surface.png")); @@ -1038,6 +1054,40 @@ int PrimitivesGeneratorPlugin::addDodecahedron(const Vector& _position,const dou return -1; } +#ifdef ENABLE_BSPLINECURVE_SUPPORT +int PrimitivesGeneratorPlugin::addRandomBSplineCurve(const Vector& _position, int nDiv) +{ + int id = -1; + emit addEmptyObject(DATA_BSPLINE_CURVE, id); + if (id == -1) { + return -1; + } + + BSplineCurveObject *object = NULL; + if (!PluginFunctions::getObject(id, object)) { + return -1; + } + + BSplineCurve *curve = object->splineCurve(); + + curve->autocompute_knotvector(true); + for (int i = 0; i < nDiv; ++i) { + double x = _position[0] + i - nDiv / 2.0; + + double r = (2.0 * std::rand()) / RAND_MAX - 1.0; + BSplineCurve::Point cp(x, _position[1] + r, _position[2]); + curve->add_control_point(cp); + } + + emit updatedObject(id, UPDATE_ALL); + emit createBackup(id, "Original Object"); + + PluginFunctions::viewAll(); + + return id; +} +#endif + #ifdef ENABLE_BSPLINESURFACE_SUPPORT int PrimitivesGeneratorPlugin::addRandomBSplineSurface(const Vector& _position, int nDiv) { diff --git a/Plugin-PrimitivesGenerator/PrimitivesGenerator.hh b/Plugin-PrimitivesGenerator/PrimitivesGenerator.hh index 7519f906c..1d4330369 100644 --- a/Plugin-PrimitivesGenerator/PrimitivesGenerator.hh +++ b/Plugin-PrimitivesGenerator/PrimitivesGenerator.hh @@ -145,6 +145,10 @@ public slots: int addDodecahedron(const Vector& _position = Vector(0.0,0.0,0.0), const double _length = 2.0); +#ifdef ENABLE_BSPLINECURVE_SUPPORT + int addRandomBSplineCurve(const Vector& _position = Vector(0, 0, 0), int nDiv = 5); +#endif + #ifdef ENABLE_BSPLINESURFACE_SUPPORT int addRandomBSplineSurface(const Vector& _position = Vector(0, 0, 0), int nDiv = 5); #endif -- GitLab