00001
00002
00003
00004 #ifndef _TOOLS
00005 #define _TOOLS
00006
00007 #ifdef __GNUG__
00008 #pragma interface
00009 #endif
00010
00011 #include "wxwin.h"
00012 #include "mainwin.h"
00013 #include "windrv.h"
00014 #include "units.h"
00015 class ToolControl;
00016 class CircleditDialog;
00017 enum ToolSet{ SELECT_TOOL, DESELECT_TOOL, ZOOMIN_TOOL , RECTANGLE_TOOL, POLYGON_TOOL,POLYLINE_TOOL,
00018 MOVE_TOOL, ZOOMOUT_TOOL, ZOOMBACK_TOOL, COPY_TOOL,CIRCLE2_TOOL,CIRCLE_TOOL,
00019 EDIT_TOOL, EDITPOLYGON_TOOL,EDITPOLYLINE_TOOL,DELETE_TOOL,EDITPROPERTY_TOOL,
00020 ROTATE_TOOL , EDITCIRCLE_TOOL ,EDITREC_TOOL, TEXT_TOOL, SET_CURSOR,
00021 INSERTREF_TOOL,INSERTSTRUC_TOOL,EDITIMAGE_TOOL,EDITREF_TOOL,EDITLINE_TOOL
00022 };
00023
00024
00026
00053 class BaseTool
00054 {
00055 public:
00056
00057 BaseTool(ToolControl* controller);
00058 virtual ~BaseTool();
00059 virtual void OnMouseEvent(wxMouseEvent& event);
00060 virtual void OnChar(wxKeyEvent& event);
00061 virtual void OnKeyDown(wxKeyEvent& event);
00062 virtual void OnKeyUp(wxKeyEvent& event);
00063 ToolSet GetType();
00064 void SetStatusBar();
00065 virtual void Draw()=0;
00066 virtual void Undo();
00067 void SetCursor(double x, double y);
00068 wxCursor GetCursor(){return _toolcursor;};
00069 virtual void AddPoint(double x,double y);
00070 virtual void RemovePoint(){};
00071 bool GetOnlyOnce(){return _onlyonce;};
00072 void SetOnlyOnce(bool onlyonce){_onlyonce = onlyonce;};
00073 bool Get_Busy(){return _busy;};
00074 virtual void Begin();
00075 virtual void End();
00076 virtual wxString GetToolInfo()=0;
00077 ToolBarSet GetToolBarType(){return m_toolbar;};
00078
00079 virtual bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00080
00081 protected:
00082 void DrawHandle(wxDC& dc,double x,double y,int type=0);
00083 virtual void EvRD();
00084 virtual void EvLeftDClick();
00085 virtual void EvDrag();
00086 virtual void EvMove(int drag);
00087 virtual void EvLD();
00088 virtual void EvLU();
00089 void Grid();
00090
00091 void CalculateCurrent();
00092 void CalcVirtual(long x,long y,double& xr,double& yr);
00093
00094
00095 ToolControl* _controller;
00096
00097 wxMouseEvent _event;
00098
00099 long _grid_x;
00100 long _grid_y;
00101 long _currentX;
00102 long _currentY;
00103 double _realcurrentX;
00104 double _realcurrentY;
00105 ToolSet _tooltype;
00106 long _timeevent;
00107 bool _onlyonce;
00108 bool _busy;
00109 wxCursor _toolcursor;
00110 ToolBarSet m_toolbar;
00111 wxCoord m_maxx;
00112 wxCoord m_minx;
00113 wxCoord m_maxy;
00114 wxCoord m_miny;
00115 bool m_valid_bbox;
00116
00117 virtual void CalcBoundingBox(wxCoord x, wxCoord y)
00118 {
00119 if (m_valid_bbox)
00120 {
00121 if ( x < m_minx ) m_minx = x;
00122 if ( y < m_miny ) m_miny = y;
00123 if ( x > m_maxx ) m_maxx = x;
00124 if ( y > m_maxy ) m_maxy = y;
00125 }
00126 else
00127 {
00128 m_valid_bbox=true;
00129 m_minx = x;
00130 m_miny = y;
00131 m_maxx = x;
00132 m_maxy = y;
00133 }
00134 }
00135
00136
00137 };
00138
00141 class BoxTool : public BaseTool
00142
00143 {
00144 public:
00145
00146 BoxTool(ToolControl* controller);
00147 ~BoxTool();
00148 void OnMouseEvent(wxMouseEvent& event);
00149
00150 protected:
00151 void EvDrag();
00152 void EvMove(int drag);
00153 void EvLD();
00154 void EvLU();
00155
00156 bool _boxdrawn;
00157 struct ZoomRect {
00158 double left;
00159 double top;
00160 double right;
00161 double bottom;
00162 };
00163 ZoomRect _ZoomRect;
00164 bool box;
00165 double _firstX;
00166 double _firstY;
00167
00168 };
00169
00172 class SelectTool : public BoxTool
00173 {
00174 public:
00175
00176 SelectTool(ToolControl* controller);
00177 ~SelectTool();
00178 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00179 void Draw();
00180 wxString GetToolInfo();
00181
00182 protected:
00183 void EvLU();
00184 void EvLD();
00185 };
00186
00189 class DeSelectTool : public BoxTool
00190 {
00191 public:
00192
00193 DeSelectTool(ToolControl* controller);
00194 ~DeSelectTool();
00195 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00196 void BeginTool();
00197 void EndTool();
00198 void Draw();
00199 wxString GetToolInfo();
00200
00201 protected:
00202 void EvLU();
00203
00204 };
00205
00208 class ZoomTool : public BoxTool
00209 {
00210 public:
00211
00212 ZoomTool(ToolControl* controller);
00213 ~ZoomTool();
00214 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00215 void Draw();
00216 wxString GetToolInfo();
00217
00218 protected:
00219 bool _zooming;
00220 void EvLU();
00221 void EvLD();
00222 };
00223
00226 class RecTangleTool : public BoxTool
00227 {
00228 public:
00229
00230 RecTangleTool(ToolControl* controller);
00231 ~RecTangleTool();
00232 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00233 void BeginTool();
00234 void EndTool();
00235 void Draw();
00236 void AddPoint(double x,double y);
00237 wxString GetToolInfo();
00238
00239 protected:
00240 void EvLU();
00241 void EvLD();
00242 };
00243
00246 class PolyTool : public BaseTool
00247 {
00248 public:
00249
00250 PolyTool(ToolControl* controller);
00251 ~PolyTool();
00252 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00253 void AddPoint(double x,double y);
00254 void RemovePoint();
00255 void Draw();
00256 void End();
00257 wxString GetToolInfo();
00258
00259 protected:
00260 void EvLeftDClick();
00261 void EvDrag();
00262 void EvLD();
00263 void EvLU();
00264 void EvMove(int drag);
00265
00266 bool _firstpoint;
00267
00268 G_Polygon* _polygon;
00269 Line_Seg* _segm;
00270 Line_Seg _lastsegm;
00271
00272 Boundary* _boundary;
00273 };
00274
00278 class TextTool : public BaseTool
00279 {
00280 public:
00281
00282 TextTool(ToolControl* controller);
00283 ~TextTool();
00284 void Draw();
00285 void End();
00286 wxString GetToolInfo();
00287
00288 protected:
00289 void EvDrag();
00290 void EvLD();
00291 void EvLU();
00292 void EvMove(int drag);
00293 Text* _text;
00294 double _height;
00295 char _unit[20];
00296
00297 };
00298
00301 class PolyLineTool : public BaseTool
00302 {
00303 public:
00304
00305 PolyLineTool(ToolControl* controller);
00306 ~PolyLineTool();
00307 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00308 void AddPoint(double x,double y);
00309 void RemovePoint();
00310 void Draw();
00311 void End();
00312 wxString GetToolInfo();
00313
00314 protected:
00315 void EvLeftDClick();
00316 void EvDrag();
00317 void EvLD();
00318 void EvLU();
00319 void EvMove(int drag);
00320
00321 G_Polyline* _polyline;
00322 bool _firstpoint;
00323 Line_Seg* _segm;
00324 Line_Seg _lastsegm;
00325 Path* _path;
00326 };
00327
00330 class MoveTool : public BaseTool
00331 {
00332 public:
00333
00334 MoveTool(ToolControl* controller);
00335 ~MoveTool();
00336 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00337 void Draw();
00338 void Undo();
00339 wxString GetToolInfo();
00340
00341 protected:
00342 void EvLeftDClick();
00343 void EvDrag();
00344 void EvMove(int drag);
00345 void EvLD();
00346 void EvLU();
00347
00348 wxTransformMatrix* _trans_matrix;
00349 long _eventstamp;
00350
00351 ElementList* _elemlst;
00352 ElementList* _elemlst_orig;
00353
00354 double _oldX;
00355 double _oldY;
00356 double _newX;
00357 double _newY;
00358 };
00359
00362 class RotateTool : public BaseTool
00363 {
00364 public:
00365
00366 RotateTool(ToolControl* controller);
00367 ~RotateTool();
00368 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00369 void Draw();
00370 void Undo();
00371 wxString GetToolInfo();
00372
00373 protected:
00374 void EvLeftDClick();
00375 void EvDrag();
00376 void EvMove(int drag);
00377 void EvLD();
00378 void EvLU();
00379
00380 wxTransformMatrix* _trans_matrix;
00381 ElementList* _elemlst;
00382 ElementList* _elemlst_orig;
00383
00384 long _eventstamp;
00385
00386 double _rotX;
00387 double _rotY;
00388 double _newX;
00389 double _newY;
00390 };
00391
00394 class CopyTool : public BaseTool
00395 {
00396 public:
00397
00398 CopyTool(ToolControl* controller);
00399 ~CopyTool();
00400 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00401 void Draw();
00402 void Undo();
00403 wxString GetToolInfo();
00404
00405 protected:
00406 void EvLeftDClick();
00407 void EvDrag();
00408 void EvMove(int drag);
00409 void EvLD();
00410 void EvLU();
00411
00412 wxTransformMatrix* _trans_matrix;
00413 ElementList* _elemlst;
00414
00415 double _oldX;
00416 double _oldY;
00417 double _newX;
00418 double _newY;
00419 long _eventstamp;
00420 };
00421
00424 class CircleTool : public BaseTool
00425 {
00426 public:
00427
00428 CircleTool(ToolControl* controller,bool mode);
00429 ~CircleTool();
00430 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00431 void Draw();
00432 wxString GetToolInfo();
00433
00434 protected:
00435 void EvDrag();
00436 void EvLD();
00437 void EvLU();
00438 void EvMove(int drag);
00439 double _firstX;
00440 double _firstY;
00441 bool _started;
00442 bool _mode;
00443
00444 Circle* _circle;
00445 };
00446
00447
00450 class EditCircleTool : public BaseTool
00451 {
00452 public:
00453
00454 EditCircleTool(ToolControl* controller);
00455 ~EditCircleTool();
00456 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00457 void Draw();
00458 wxString GetToolInfo();
00459 wxUnit GetRadius();
00460 void SetRadius(wxUnit& rad);
00461
00462 protected:
00463 void EvLeftDClick();
00464 void EvDrag();
00465 void EvLD();
00466 void EvLU();
00467
00468 bool _moving;
00469
00470 CircleditDialog* m_circle_dlg;
00471
00472 Circle* _circle;
00473 Circle* _circle_orig;
00474 };
00475
00478 class EditRectangleTool : public BaseTool
00479 {
00480 public:
00481
00482 EditRectangleTool(ToolControl* controller);
00483 ~EditRectangleTool();
00484 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00485 void Draw();
00486 wxString GetToolInfo();
00487
00488 protected:
00489 void EvLeftDClick();
00490 void EvDrag();
00491 void EvLD();
00492 void EvLU();
00493
00494 bool _moving;
00495 int _movedpoint;
00496 wxTransformMatrix* _inverse_mapping;
00497 double _prevX;
00498 double _prevY;
00499
00500 Box* _box;
00501 Box* _box_orig;
00502 };
00503
00506 class EditImageTool : public BaseTool
00507 {
00508 public:
00509
00510 EditImageTool(ToolControl* controller);
00511 ~EditImageTool();
00512 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00513 void Draw();
00514 wxString GetToolInfo();
00515
00516 protected:
00517 void EvLeftDClick();
00518 void EvDrag();
00519 void EvLD();
00520 void EvLU();
00521
00522 bool _moving;
00523 int _movedpoint;
00524 wxTransformMatrix* _inverse_mapping;
00525 double _prevX;
00526 double _prevY;
00527
00528 Image* _image;
00529 Image* _image_orig;
00530 };
00531
00534 class EditReferenceTool : public BaseTool
00535 {
00536 public:
00537
00538 EditReferenceTool(ToolControl* controller);
00539 ~EditReferenceTool();
00540 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00541 void Draw();
00542 wxString GetToolInfo();
00543
00544 protected:
00545 void EvLeftDClick();
00546 void EvDrag();
00547 void EvLD();
00548 void EvLU();
00549
00550 bool _moving;
00551 int _movedpoint;
00552 wxTransformMatrix* _inverse_mapping;
00553 double _prevX;
00554 double _prevY;
00555
00556 StructureReference* _sref;
00557 StructureReference* _sref_orig;
00558 };
00559
00562 class EditPolyTool : public BaseTool
00563 {
00564 public:
00565
00566 EditPolyTool(ToolControl* controller);
00567 ~EditPolyTool();
00568 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00569 void XorDrawMoveLines();
00570 void XorRemoveMoveLines();
00571 void AddPoint(double x,double y);
00572 void RemovePoint();
00573 void Draw();
00574 wxString GetToolInfo();
00575
00576 protected:
00577 void EvLeftDClick();
00578 void EvDrag();
00579 void EvLD();
00580 void EvLU();
00581
00582 bool _moving;
00583
00584 Boundary* _boundary;
00585 Boundary* _boundary_orig;
00586
00587 double _prevX;
00588 double _prevY;
00589 double _XN;
00590 double _YN;
00591 double _XP;
00592 double _YP;
00593 TDLI<Segment>* _AI;
00594 Segment* _PM;
00595 };
00596
00599 class EditPolyLineTool : public BaseTool
00600 {
00601 public:
00602
00603 EditPolyLineTool(ToolControl* controller);
00604 ~EditPolyLineTool();
00605 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00606 void XorDrawMoveLines();
00607 void XorRemoveMoveLines();
00608 void AddPoint(double x,double y);
00609 void RemovePoint();
00610 void Draw();
00611 wxString GetToolInfo();
00612
00613 protected:
00614 void EvLeftDClick();
00615 void EvDrag();
00616 void EvLD();
00617 void EvLU();
00618
00619 bool _moving;
00620
00621 Path* _path;
00622 Path* _path_orig;
00623
00624 double _prevX;
00625 double _prevY;
00626 double _XN;
00627 double _YN;
00628 double _XP;
00629 double _YP;
00630 TDLI<Segment>* _AI;
00631 Segment* _PM;
00632 };
00633
00636 class EditLineTool : public BaseTool
00637 {
00638 public:
00639
00640 EditLineTool(ToolControl* controller);
00641 ~EditLineTool();
00642 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00643 void Draw();
00644 wxString GetToolInfo();
00645
00646 protected:
00647 void EvLeftDClick();
00648 void EvDrag();
00649 void EvLD();
00650 void EvLU();
00651
00652 bool _moving;
00653 bool m_one;
00654
00655 SLine* _line;
00656 SLine* _line_orig;
00657 };
00658
00661 class EditPropertyTool : public BaseTool
00662 {
00663 public:
00664
00665 EditPropertyTool(ToolControl* controller);
00666 ~EditPropertyTool();
00667 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00668 void Draw();
00669 wxString GetToolInfo();
00670
00671 protected:
00672 void EvLD();
00673 };
00674
00677 class DeleteTool : public BaseTool
00678 {
00679 public:
00680
00681 DeleteTool(ToolControl* controller);
00682 ~DeleteTool();
00683 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00684 void Draw();
00685 wxString GetToolInfo();
00686
00687 protected:
00688 void EvLD();
00689
00690 ElementList* _elemlst;
00691 };
00692
00696 class EditTool : public BaseTool
00697 {
00698 public:
00699
00700 EditTool(ToolControl* controller);
00701 ~EditTool();
00702 bool IsAllowedTool(ToolSet tool_to_start_next,bool onlyonce,int tools_on_stack);
00703 void Draw();
00704 wxString GetToolInfo();
00705
00706 protected:
00707 void EvLD();
00708 char _unit[20];
00709 G_Polyline* _polyline;
00710 bool _firstpoint;
00711 Line_Seg* _segm;
00712 Path* _path;
00713 Circle* _circle;
00714 bool _started;
00715 };
00716
00719 class InsertReferenceTool : public BaseTool
00720 {
00721 public:
00722
00723 InsertReferenceTool(ToolControl* controller);
00724 ~InsertReferenceTool();
00725 void Draw();
00726 void End();
00727 wxString GetToolInfo();
00728
00729 protected:
00730 void EvDrag();
00731 void EvLD();
00732 void EvLU();
00733 void EvMove(int drag);
00734 };
00735
00738 class InsertStructureTool : public BaseTool
00739 {
00740 public:
00741
00742 InsertStructureTool(ToolControl* controller);
00743
00744 ~InsertStructureTool();
00745 void Draw();
00746 void End();
00747 wxString GetToolInfo();
00748
00749 protected:
00750 void EvDrag();
00751 void EvLD();
00752 void EvLU();
00753 void EvMove(int drag);
00754 };
00755 #endif
00756
tool.h Source File -- Thu Nov 28 21:24:56 2002 -- 28 Nov 2002 -- 1.2.18 -- -- . --