File: common.h

package info (click to toggle)
plotutils 2.4.1-15
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 11,072 kB
  • ctags: 6,952
  • sloc: ansic: 76,305; cpp: 12,402; sh: 8,475; yacc: 2,604; makefile: 894; lex: 144
file content (71 lines) | stat: -rw-r--r-- 3,361 bytes parent folder | download | duplicates (4)
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
// -*- C++ -*-

// The common_output class: subclassed from the output class, 
// providing support for dotting/dashing and for rounded boxes.
// The output class is defined in output.h.

class common_output : public output 
{
public:
  // basic interface, implemented in concrete classes rather than here
  virtual void start_picture (double sc, const position &ll, const position &ur) = 0;
  virtual void finish_picture () = 0;
  // draw objects (not implemented here)
  virtual void arc (const position &start, const position &cent, 
		    const position &end, const line_type &lt) = 0;
  virtual void circle (const position &cent, double rad, 
		       const line_type &lt, double fill) = 0;
  virtual void ellipse (const position &cent, const distance &dim,
			const line_type &lt, double fill) = 0;
  virtual void line (const position &start, const position *v, int n,
		     const line_type &lt) = 0;
  virtual void polygon (const position *v, int n,
			const line_type &lt, double fill) = 0;
  virtual void spline (const position &start, const position *v, int n,
		       const line_type &lt) = 0;
  virtual void text (const position &center, text_piece *v, int n,
		     double angle) = 0;
  // draw objects (implemented here)
  virtual void rounded_box (const position &cent, const distance &dim,
		    double rad, const line_type &lt, double fill);
protected:
  /* implemented in concrete classes (used for dotting lines by hand) */
  virtual void dot (const position &cent, const line_type &lt) = 0;
  /* implemented in terms of arc (); can be overridden (e.g. in tex_output) */
  virtual void solid_arc (const position &cent, double rad, double start_angle,
			  double end_angle, const line_type &lt);
  /* dashing and dotting `by hand' (used by troff_output, not tex_output) */
  void dashed_circle (const position &cent, double rad, const line_type &lt);
  void dotted_circle (const position &cent, double rad, const line_type &lt);

  void dashed_arc (const position &start, const position &cent,
		   const position &end, const line_type &lt);
  void dotted_arc (const position &start, const position &cent,
		   const position &end, const line_type &lt);

  void dashed_rounded_box (const position &cent, const distance &dim,
			   double rad, const line_type &lt);
  void dotted_rounded_box (const position &cent, const distance &dim,
			   double rad, const line_type &lt);

  void solid_rounded_box (const position &cent, const distance &dim,
			  double rad, const line_type &lt);
  void filled_rounded_box (const position &cent, const distance &dim,
			   double rad, double fill);
private:
  void dash_line (const position &start, const position &end,
		  const line_type &lt, double dash_width, double gap_width,
		  double *offsetp);
  void dash_arc (const position &cent, double rad,
		 double start_angle, double end_angle, const line_type &lt,
		 double dash_width, double gap_width, double *offsetp);
  void dot_line (const position &start, const position &end,
		 const line_type &lt, double gap_width, double *offsetp);
  void dot_arc (const position &cent, double rad,
		double start_angle, double end_angle, const line_type &lt,
		double gap_width, double *offsetp);
};

// not private because TeX driver uses this
int compute_arc_center (const position &start, const position &cent, const position &end, position *result);