55#ifndef POLYLINEPLUGIN_HH
56#define POLYLINEPLUGIN_HH
81#include "PolyLineToolbarWidget.hh"
83#include <ObjectTypes/Plane/QtPlaneSelect.hh>
85#include <ACG/Scenegraph/GlutPrimitiveNode.hh>
87#include <ObjectTypes/PolyLine/PolyLineCircleData.hh>
88#include <ObjectTypes/PolyLine/PolyLineBezierSplineData.hh>
90#define CREATE_CUT_POLYLINE "Create Polyline"
91#define CREATE_CUT_POLYLINES "Create Polylines"
123 Q_PLUGIN_METADATA(IID
"org.OpenFlipper.Plugins.Plugin-PolyLine")
129 void updatedObject(
int _identifier,
const UpdateType& _type);
130 void nodeVisibilityChanged(
int _id);
133 void addPickMode(
const std::string& _mode );
134 void addHiddenPickMode(
const std::string& _mode );
135 void setPickModeToolbar (
const std::string& _mode, QToolBar * _toolbar);
136 void setPickModeMouseTracking(
const std::string& _mode ,
bool _mouseTracking);
139 void log(
Logtype _type, QString _message);
140 void log(QString _message);
143 void addToolbar(QToolBar* _toolbar);
144 void getToolBar( QString _name, QToolBar*& _toolbar);
147 void scriptInfo( QString _functionName );
150 void addToolbox( QString _name , QWidget* _widget, QIcon* _icon);
152 void deleteObject(
int _id );
153 void addEmptyObject(
DataType _type,
int& _id);
155 void registerKey(
int _key, Qt::KeyboardModifiers _modifiers, QString _description,
bool _multiUse =
false);
156 void showStatusMessage(QString _message,
int _timeout = 0);
157 void clearStatusMessage();
164 void initializePlugin();
166 void slotEditModeChanged();
168 void slotMouseEvent( QMouseEvent* _event );
169 void slotKeyEvent(QKeyEvent* _event);
171 void slotPickModeChanged(
const std::string& _mode);
173 void pluginsInitialized();
175 bool pick_triangle_mesh( QPoint mPos,
178 void slotUpdateContextMenu(
int objectId);
181 void slotEnablePickMode(
const QString& _name);
204 QString
name(){
return (QString(
"PolyLine")); };
207 QString
description() {
return (QString(
"Handling of PolyLines (Insertion/Deletion/Modeling/...")); };
211#ifdef EXTENDED_POLY_LINE
212 void slot_resample_on_edges();
217 void slot_subdivide();
218 void slot_subdivide_percent(
bool _checked);
219 void slot_decimate();
220 void slot_decimate_percent(
bool _checked);
226 void slot_smooth_project();
229 void slot_smart_move_timer();
231 void slot_setCirclePointNum(
int i);
232 void slot_setSplinePointNum(
int i);
234 virtual void slotObjectUpdated(
int _identifier,
const UpdateType &_type );
236 void slot_duplicate();
237 void slot_instanciate();
244 void me_insert ( QMouseEvent* _event );
245 void me_insertCircle( QMouseEvent* _event );
246 void me_insertSpline( QMouseEvent* _event );
247 void me_delete ( QMouseEvent* _event );
248 void me_move ( QMouseEvent* _event );
249 void me_split ( QMouseEvent* _event );
250 void me_merge ( QMouseEvent* _event );
251 void me_smart_move ( QMouseEvent* _event );
321 template<
class MeshT > std::vector< ACG::Vec3d >
326 template<
class MeshT > std::vector< std::vector< ACG::Vec3d > >
330 template<
class MeshT >
331 typename MeshT::EdgeHandle
338 QString version() {
return QString(
"1.02"); };
364 PolyLine::Point* move_point_ref_;
365 PolyLine::Point* create_point_ref_;
366 PolyLine::Point move_point_orig_;
377 bool moveCircle_IsLocked;
378 bool moveCircle_IsFloating;
380 QAction* copyPaste_Action_;
381 int copyPaste_ObjectId_;
382 int copyPaste_ActionType_;
383 int copyPaste_NewObjectId_;
384 std::vector<ACG::Vec3d> copyPaste_RelativePoints_;
385 QPoint copyPaste_LastMouse;
393 void me_copyPasteMouse(QMouseEvent* _event);
444 void createCircle_createUI(
int _polyLineObjectID);
449 void createSpline_createUI(
int _polyLineObjectID);
503 QTimer* smart_move_timer_;
512#if defined(INCLUDE_TEMPLATES) && !defined(POLYLINEPLUGIN_CC)
513#define POLYLINEPLUGIN_TEMPLATES
514#include "PolyLinePluginT_impl.hh"
std::vector< int > IdList
Standard Type for id Lists used for scripting.
Logtype
Log types for Message Window.
Interface class from which all plugins have to be created.
Keyboard Event Interface.
Interface for all plugins which want to Load or Save files and create Objects.
Interface for all Plugins which do logging to the logging window of the framework.
Interface class for receiving mouse events.
Allow access to picking functions.
QString name()
Name of the Plugin.
QAction * mergeAction_
Called by pick Toolbar.
QActionGroup * toolBarActions_
Called by Toolbar to enable pick mode.
MeshT::EdgeHandle getCuttedEdge(MeshT &_mesh, ACG::Vec3d &_planeNormal, ACG::Vec3d &_planePoint)
get an edge of the mesh that is cut by the plane
bool createCircle_getPointOnMesh(TriMeshObject *_triMeshObject, ACG::Vec3d _center, ACG::Vec3d _pOnPlane, ACG::Vec3d _n, ACG::Vec3d *_pOut)
Calculates a point on the mesh.
void updatePolyBezierHandles(PolyLineObject *_lineObject, ACG::SceneGraph::LineNode *_line)
Updates all the handles on the PolyBezier.
void slotTriggerCutPlaneSelect()
Generate PolyLine after the cutPlane has been drawn.
int createCircle_LastSelIndex_
Use this one to mark the last index to update the number of points.
int createCircle_CurrSelIndex_
The object which is being modified(created, dragged)
void slotScissorLinesButton()
Scissor Button for multiple polylines was hit.
QAction * insertAction_
Called by pick Toolbar.
IdList generatePolyLinesFromCut(int _objectId, Vector _planePoint, Vector _planeNormal)
Generates a polyLine of a plane intersection.
int moveBezSpline_SelIndex_
The object which is being moved.
QIcon * toolIcon_
Icon for the toolbox.
QAction * deleteAction_
Called by pick Toolbar.
int generatePolyLineFromCut(int _objectId, Vector _planePoint, Vector _planeNormal, int _polyLineId=-1)
Generates a polyLine of a plane intersection.
ACG::Vec3d moveCircle_LastHitPos_
The last valid hit on the mesh.
ACG::Vec3d createCircle_getHit(PolyLineCircleData *_circleData, ACG::Vec3d _hit_point)
Returns point on mesh or point on the normal plane.
QAction * splitAction_
Called by pick Toolbar.
int createSpline_CurrSelIndex_
The index of the currently created spline.
QAction * polyLineAction_
Called by Toolbar to enable pick mode.
int moveBezSpline_SelSubIndex_
The index of the control or handle being moved.
PolyLineToolbarWidget * tool_
Widget for Toolbox.
void slotPickToolbarAction(QAction *_action)
Called by pick Toolbar.
QAction * cutMultipleAction_
Called by pick Toolbar.
int createSpline_LastSelIndex_
Use this one to mark the last index to update the number of points.
QtPlaneSelect * planeSelect_
Plane selection tool.
void slotSetPolyLineMode(QAction *_action)
Called by Toolbar to enable pick mode.
QToolBar * toolbar_
Called by Toolbar to enable pick mode.
ACG::SceneGraph::GlutPrimitiveNode * moveCircle_SelNode_
The handle which is being dragged.
QAction * smartMoveAction_
Called by pick Toolbar.
std::vector< ACG::Vec3d > getIntersectionPoints(MeshT *_mesh, uint _fh, ACG::Vec3d _planeNormal, ACG::Vec3d _planePoint, bool &_closed)
get the points from the closest connected intersection between mesh and plane
bool createCircle_getHitInfo(PolyLineCircleData *_circleData, ACG::Vec3d _hit_Point, ACG::Vec3d *_pOut=0, double *_r=0, ACG::Vec3d *_onPlane=0)
Calculates common info.
QActionGroup * pickToolBarActions_
Called by pick Toolbar.
QAction * cutAction_
Called by pick Toolbar.
void updatePolyBezierSpline(PolyLineObject *_lineObject, unsigned int _pointsPerSegment)
Generates points for the spline, updates handles.
PolyLinePlugin()
default constructor
QAction * insertSplineAction_
Called by pick Toolbar.
QAction * moveAction_
Called by pick Toolbar.
std::vector< std::vector< ACG::Vec3d > > getMultipleIntersectionPoints(MeshT *_mesh, ACG::Vec3d _planeNormal, ACG::Vec3d _planePoint)
get all points from the intersection between mesh and plane
ACG::SceneGraph::GlutPrimitiveNode * moveBezSpline_SelNode_
The handle which is being dragged.
QString description()
Description of the Plugin.
void updateHandles(PolyLineObject *_lineObject)
Updates the center, forward and side handle of the Poly ellipse.
void updatePolyEllipse(PolyLineObject *_lineObject, unsigned int _pointCount)
Generates points for the ellipse.
QToolBar * pickToolbar_
Called by pick Toolbar.
EditMode
Edit Mode of PolyLinePlugin.
ACG::Vec3d getPointOnMesh(PolyLineBezierSplineData *_SplineData, ACG::Vec3d _point, ACG::Vec3d *_nor=0)
Returns the nearest point on the mesh or if none could be found the input.
void slotScissorButton()
Scissor Button was hit.
QAction * insertCircleAction_
Called by pick Toolbar.
~PolyLinePlugin()
default destructor
Interface for all Plugins which provide scriptable Functions.
Control OpenFlippers status bar.
Type for a MeshObject containing a triangle mesh.