1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Miscellaneous utilities for OGL
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
16 #pragma interface "misc.h"
19 // List to use when copying objects; may need to associate elements of new objects
20 // with elements of old objects, e.g. when copying constraint.s
21 extern wxList oglObjectCopyMapping
;
24 * TEXT FORMATTING FUNCTIONS
28 // Centres the given list of wxShapeTextLine strings in the given box
29 // (changing the positions in situ). Doesn't actually draw into the DC.
30 void oglCentreText(wxDC
& dc
, wxList
*text
, double m_xpos
, double m_ypos
,
31 double width
, double height
,
32 int formatMode
= FORMAT_CENTRE_HORIZ
| FORMAT_CENTRE_VERT
);
34 // Given a string, returns a list of strings that fit within the given
35 // width of box. Height is ignored.
36 wxStringList
*oglFormatText(wxDC
& dc
, const wxString
& text
, double width
, double height
, int formatMode
= 0);
38 // Centres the list of wxShapeTextLine strings, doesn't clip.
39 // Doesn't actually draw into the DC.
40 void oglCentreTextNoClipping(wxDC
& dc
, wxList
*text_list
,
41 double m_xpos
, double m_ypos
, double width
, double height
);
43 // Gets the maximum width and height of the given list of wxShapeTextLines.
44 void oglGetCentredTextExtent(wxDC
& dc
, wxList
*text_list
,
45 double m_xpos
, double m_ypos
, double width
, double height
,
46 double *actual_width
, double *actual_height
);
48 // Actually draw the preformatted list of wxShapeTextLines.
49 void oglDrawFormattedText(wxDC
& context
, wxList
*text_list
,
50 double m_xpos
, double m_ypos
, double width
, double height
,
51 int formatMode
= FORMAT_CENTRE_HORIZ
| FORMAT_CENTRE_VERT
);
53 // Give it a list of points, finds the centre.
54 void oglFindPolylineCentroid(wxList
*points
, double *x
, double *y
);
56 void oglCheckLineIntersection(double x1
, double y1
, double x2
, double y2
,
57 double x3
, double y3
, double x4
, double y4
,
58 double *ratio1
, double *ratio2
);
60 void oglFindEndForPolyline(double n
, double xvec
[], double yvec
[],
61 double x1
, double y1
, double x2
, double y2
, double *x3
, double *y3
);
64 void oglFindEndForBox(double width
, double height
,
65 double x1
, double y1
, // Centre of box (possibly)
66 double x2
, double y2
, // other end of line
67 double *x3
, double *y3
); // End on box edge
69 void oglFindEndForCircle(double radius
,
70 double x1
, double y1
, // Centre of circle
71 double x2
, double y2
, // Other end of line
72 double *x3
, double *y3
);
74 void oglGetArrowPoints(double x1
, double y1
, double x2
, double y2
,
75 double length
, double width
,
76 double *tip_x
, double *tip_y
,
77 double *side1_x
, double *side1_y
,
78 double *side2_x
, double *side2_y
);
81 * Given an ellipse and endpoints of a line, returns the point at which
82 * the line touches the ellipse in values x4, y4.
83 * This function assumes that the centre of the ellipse is at x1, y1, and the
84 * ellipse has a width of a1 and a height of b1. It also assumes you are
85 * wanting to draw an arc FROM point x2, y2 TOWARDS point x3, y3.
86 * This function calculates the x,y coordinates of the intersection point of
87 * the arc with the ellipse.
88 * Author: Ian Harrison
91 void oglDrawArcToEllipse(double x1
, double y1
, double a1
, double b1
, double x2
, double y2
, double x3
, double y3
,
92 double *x4
, double *y4
);
94 bool oglRoughlyEqual(double val1
, double val2
, double tol
= 0.00001);
96 extern wxFont
* g_oglNormalFont
;
97 extern wxPen
* g_oglBlackPen
;
98 extern wxPen
* g_oglWhiteBackgroundPen
;
99 extern wxPen
* g_oglTransparentPen
;
100 extern wxBrush
* g_oglWhiteBackgroundBrush
;
101 extern wxPen
* g_oglBlackForegroundPen
;
103 extern wxFont
* oglMatchFont(int point_size
);
105 extern wxString
oglColourToHex(const wxColour
& colour
);
106 extern wxColour
oglHexToColour(const wxString
& hex
);
107 extern void oglDecToHex(unsigned int dec
, char *buf
);
108 extern unsigned int oglHexToDec(char* buf
);