home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / i / iv26_w_3.zip / EXAMPLES / IDRAW / ISPLINES.C < prev    next >
C/C++ Source or Header  |  1980-01-05  |  5KB  |  128 lines

  1. /*
  2.  * Copyright (c) 1987, 1988, 1989 Stanford University
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and its
  5.  * documentation for any purpose is hereby granted without fee, provided
  6.  * that the above copyright notice appear in all copies and that both that
  7.  * copyright notice and this permission notice appear in supporting
  8.  * documentation, and that the name of Stanford not be used in advertising or
  9.  * publicity pertaining to distribution of the software without specific,
  10.  * written prior permission.  Stanford makes no representations about
  11.  * the suitability of this software for any purpose.  It is provided "as is"
  12.  * without express or implied warranty.
  13.  *
  14.  * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  15.  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
  16.  * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  17.  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  18.  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  19.  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
  20.  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  21.  */
  22.  
  23. // $Header: isplines.c,v 1.8 89/10/09 14:48:26 linton Exp $
  24. // implements classes IFillBSpline and IFillClosedBSpline.
  25.  
  26. #include "ipaint.h"
  27. #include "isplines.h"
  28. #include <InterViews/Graphic/util.h>
  29.  
  30. // IFillBSpline repeats the first and last points three times to
  31. // ensure that the spline will pass through the first and last points.
  32.  
  33. IFillBSpline::IFillBSpline (Coord* ax, Coord* ay, int n, Graphic* gs)
  34. : (ax, ay, n, gs) {
  35.     delete x;
  36.     delete y;
  37.     count = n + 4;
  38.     x = new Coord[count];
  39.     y = new Coord[count];
  40.     x[0] = ax[0];
  41.     x[1] = ax[0];
  42.     x[count - 1] = ax[n - 1];
  43.     x[count - 2] = ax[n - 1];
  44.     y[0] = ay[0];
  45.     y[1] = ay[0];
  46.     y[count - 1] = ay[n - 1];
  47.     y[count - 2] = ay[n - 1];
  48.     CopyArray(ax, ay, n, &x[2], &y[2]);
  49. }
  50.  
  51. // contains returns true if the IFillBSpline contains the given point
  52. // unless the brush is an arrow or the pattern is the "none" pattern.
  53.  
  54. boolean IFillBSpline::contains (PointObj& po, Graphic* gs) {
  55.     boolean contains = false;
  56.     IBrush* brush = (IBrush*) gs->GetBrush();
  57.     IPattern* pattern = (IPattern*) gs->GetPattern();
  58.     if (!brush->LeftArrow() && !brush->RightArrow() && !pattern->None()) {
  59.     contains = FillBSpline::contains(po, gs);
  60.     }
  61.     return contains;
  62. }
  63.  
  64. // intersects returns true if the IFillBSpline intersects the given
  65. // box unless the brush is an arrow or the pattern is the "none"
  66. // pattern.
  67.  
  68. boolean IFillBSpline::intersects (BoxObj& userb, Graphic* gs) {
  69.     boolean intersects = false;
  70.     IBrush* brush = (IBrush*) gs->GetBrush();
  71.     IPattern* pattern = (IPattern*) gs->GetPattern();
  72.     if (!brush->LeftArrow() && !brush->RightArrow() && !pattern->None()) {
  73.     intersects = FillBSpline::intersects(userb, gs);
  74.     }
  75.     return intersects;
  76. }
  77.  
  78. // draw draws the IFillBSpline unless the brush is an arrow or the
  79. // pattern is the "none" pattern.
  80.  
  81. void IFillBSpline::draw (Canvas* c, Graphic* gs) {
  82.     IBrush* brush = (IBrush*) gs->GetBrush();
  83.     IPattern* pattern = (IPattern*) gs->GetPattern();
  84.     if (!brush->LeftArrow() && !brush->RightArrow() && !pattern->None()) {
  85.     FillBSpline::draw(c, gs);
  86.     }
  87. }
  88.  
  89. // IFillClosedBSpline passes its arguments to FillBSpline.
  90.  
  91. IFillClosedBSpline::IFillClosedBSpline (Coord* x, Coord* y, int n, Graphic* gs)
  92. : (x, y, n, gs) {
  93. }
  94.  
  95. // contains returns true if the IFillClosedBSpline contains the given
  96. // point unless the pattern is the "none" pattern.
  97.  
  98. boolean IFillClosedBSpline::contains (PointObj& po, Graphic* gs) {
  99.     boolean contains = false;
  100.     IPattern* pattern = (IPattern*) gs->GetPattern();
  101.     if (!pattern->None()) {
  102.     contains = FillBSpline::contains(po, gs);
  103.     }
  104.     return contains;
  105. }
  106.  
  107. // intersects returns true if the IFillClosedBSpline intersects the
  108. // given box unless the pattern is the "none" pattern.
  109.  
  110. boolean IFillClosedBSpline::intersects (BoxObj& userb, Graphic* gs) {
  111.     boolean intersects = false;
  112.     IPattern* pattern = (IPattern*) gs->GetPattern();
  113.     if (!pattern->None()) {
  114.     intersects = FillBSpline::intersects(userb, gs);
  115.     }
  116.     return intersects;
  117. }
  118.  
  119. // draw draws the IFillClosedBSpline unless the pattern is the "none"
  120. // pattern.
  121.  
  122. void IFillClosedBSpline::draw (Canvas* c, Graphic* gs) {
  123.     IPattern* pattern = (IPattern*) gs->GetPattern();
  124.     if (!pattern->None()) {
  125.     FillBSpline::draw(c, gs);
  126.     }
  127. }
  128.