File: CurveShape.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (82 lines) | stat: -rw-r--r-- 2,768 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/***************************************************************
 * Name:      CurveShape.h
 * Purpose:   Defines curve shape class
 * Author:    Michal Bližňák (michal.bliznak@tiscali.cz)
 * Created:   2007-07-22
 * Copyright: Michal Bližňák
 * License:   wxWidgets license (www.wxwidgets.org)
 * Notes:
 **************************************************************/

#ifndef _WXSFCURVESHAPE_H
#define _WXSFCURVESHAPE_H

#include <wx/wxsf/LineShape.h>

/*!
 * \brief Interpolation line shape. The class extends wxSFLineShape class and allows
 * user to create curved connection line.
 */
class WXDLLIMPEXP_SF wxSFCurveShape : public wxSFLineShape
{
public:
    XS_DECLARE_CLONABLE_CLASS(wxSFCurveShape);

    /*! \brief Default constructor. */
    wxSFCurveShape();
    /*!
     * \brief User constructor.
     * \param src ID of the source shape
     * \param trg ID of the target shape
     * \param path Array of line's control points
     * \param manager Parent parent diagram manager
     */
	wxSFCurveShape(long src, long trg, const wxXS::RealPointList& path, wxSFDiagramManager* manager);
	/*!
     * \brief Copy constructor.
	 * \param obj Reference to the source object
	 */
	wxSFCurveShape(const wxSFCurveShape& obj);
	/*! \brief Destructor. */
    virtual ~wxSFCurveShape();

    // public virtual function
    /*!
     * \brief Get line's bounding box. The function can be overrided if neccessary.
     * \return Bounding rectangle
     */
    virtual wxRect GetBoundingBox();

    // public functions
    /*!
     * \brief Get a line point laying on the given line segment and shifted
     * from the beggining of the segment by given offset.
     * \param segment Zero-based index of the line segment
     * \param offset Real value in the range from 0 to 1 which determines
     * the linepoint offset inside the line segment
     * \return Line point
     */
    wxRealPoint GetPoint(size_t segment, double offset);

protected:

    // protected virtual functions
    /*!
     * \brief Internal function used for drawing of completed line shape.
     * \param dc Refernce of the device context where the shape will be darwn to
     */
	virtual void DrawCompleteLine(wxDC& dc);

private:

	// private functions
	/*! \brief Auxiliary drawing function. */
	void GetSegmentQuaternion(size_t segment, wxRealPoint& A, wxRealPoint& B, wxRealPoint& C, wxRealPoint& D);
	/*! \brief Auxiliary drawing function. */
	void Catmul_Rom_Kubika(const wxRealPoint& A, const wxRealPoint& B, const wxRealPoint& C, const wxRealPoint& D, wxDC& dc);
	/*! \brief Auxiliary drawing function. */
	wxRealPoint Coord_Catmul_Rom_Kubika(const wxRealPoint& p1, const wxRealPoint& p2, const wxRealPoint& p3, const wxRealPoint& p4, double t);

};

#endif //_WXSFCURVESHAPE_H