region.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:6k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * region.h
  3.  *
  4.  * Arbitrarily shaped region.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: region.h,v $
  30.  * Revision 1.14  1999/03/10 03:49:53  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.13  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.12  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.11  1998/09/23 06:28:48  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.10  1995/03/14 12:42:25  robertj
  43.  * Updated documentation to use HTML codes.
  44.  *
  45.  * Revision 1.9  1995/01/14  06:19:30  robertj
  46.  * Documentation
  47.  *
  48.  * Revision 1.8  1994/08/23  11:32:52  robertj
  49.  * Oops
  50.  *
  51.  * Revision 1.7  1994/08/22  00:46:48  robertj
  52.  * Added pragma fro GNU C++ compiler.
  53.  *
  54.  * Revision 1.6  1994/01/03  04:42:23  robertj
  55.  * Mass changes to common container classes and interactors etc etc etc.
  56.  *
  57.  * Revision 1.5  1993/12/06  22:06:45  robertj
  58.  * Destructor should be virtual for classes with virtual member functions.
  59.  *
  60.  * Revision 1.4  1993/10/16  20:33:20  robertj
  61.  * Added function to determine if a rectangle and region overlap.
  62.  *
  63.  * Revision 1.3  1993/08/21  01:50:33  robertj
  64.  * Made Clone() function optional, default will assert if called.
  65.  *
  66.  * Revision 1.2  1993/07/14  12:49:16  robertj
  67.  * Fixed RCS keywords.
  68.  *
  69.  */
  70. #define _PREGION
  71. #ifdef __GNUC__
  72. #pragma interface
  73. #endif
  74. /**A class representing a region of the graphics system drawing plane. This
  75.    is an arbitrary enclosed shape. It is often made up from a collection of
  76.    rectangles.
  77.  */
  78. class PRegion : public PObject
  79. {
  80.   PCLASSINFO(PRegion, PObject);
  81.   public:
  82.    /**Create new region object. The first, parameterless, constructor creates
  83.        an empty region. The second creates a region that initially encloses
  84.        the specified rectangle.
  85.      */
  86.     PRegion();
  87.     PRegion(
  88.       const PRect & rect    /// Rectangle for initial region.
  89.     );
  90.     /** Create a copy of the specified region. */
  91.     PRegion(
  92.       const PRegion & rgn   /// Region to copy.
  93.     );
  94.     /** Assign one region to another. */
  95.     PRegion & operator=(
  96.       const PRegion & rgn   /// Region to assign to the current region.
  97.     );
  98.     /** Destroy the region. */
  99.     virtual ~PRegion();
  100.   /**@name Overrides from class PObject */
  101.    /**Determine if the two regions are identical.
  102.        @return
  103.        #EqualTo# if the regions enclose the identical part of the
  104.        drawing plane, otherwise #GreaterThan# is returned.
  105.      */
  106.     virtual Comparison Compare(
  107.       const PObject & obj   /// Region to compare against.
  108.     ) const;
  109.   /**@name New functions for class */
  110.    /**Add the specified area of the drawing plane to the region. The region
  111.        will include the area specified into its enclosed space.
  112.      */
  113.     void Add(
  114.       const PRect & rect    /// Rectangle to add to teh region.
  115.     );
  116.     void Add(
  117.       const PRegion & rgn   /// Another region to add to region.
  118.     );
  119.    /**Determine if the point is contined within the regions space.
  120.     
  121.        @return
  122.        TRUE if point is in region.
  123.      */
  124.     BOOL ContainsPoint(
  125.       const PPoint & pt   /// Point to determine if is inside region.
  126.     ) const;
  127.    /**Determine if the rectangle is wholly contiained within the region.
  128.        @return
  129.        TRUE if rectangle is in region.
  130.      */
  131.     BOOL ContainsRect(const PRect & rect) const;
  132.    /**Determine if any part of the rectangle overlapps any part of the region.
  133.     
  134.        @return
  135.        TRUE if rectangle intersect region.
  136.      */
  137.     BOOL OverlapsRect(const PRect & rect) const;
  138.    /**Determine if the region is empty.
  139.        @return
  140.        TRUE if region encloses no space.
  141.      */
  142.     BOOL IsEmpty() const;
  143.    /**Move the region the specified delta amount. The shape of the region does
  144.     not change, only its origin.
  145.      */
  146.     void Offset(
  147.       PORDINATE dx,   /// Amount to move region horizontally.
  148.       PORDINATE dy    /// Amount ot move region vertically.
  149.     );
  150.    /**Calculate the smallest enclosing bounding box around the region.
  151.        @return
  152.        rectangle that encloses the region.
  153.      */
  154.     PRect GetBounds() const;
  155.    /**Calculate the region that is the intersection of the object and the
  156.        specified region.
  157.        
  158.        @return
  159.        region that is inside both regions.
  160.      */
  161.     PRegion Intersection(const PRegion & rgn) const;
  162.    /**Calcaulte the region that is the union of the object and the specified
  163.        region.
  164.        
  165.        @return
  166.        region that is inside either region.
  167.      */
  168.     PRegion Union(const PRegion & rgn) const;
  169. #ifdef DOC_PLUS_PLUS
  170. };
  171. #endif
  172. // Class declaration continued in platform specific header file ///////////////