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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * point.h
  3.  *
  4.  * Coordinate system position.
  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: point.h,v $
  30.  * Revision 1.16  1999/03/10 03:49:52  robertj
  31.  * More documentation adjustments.
  32.  *
  33.  * Revision 1.15  1999/03/09 08:01:49  robertj
  34.  * Changed comments for doc++ support (more to come).
  35.  *
  36.  * Revision 1.14  1999/02/16 08:08:46  robertj
  37.  * MSVC 6.0 compatibility changes.
  38.  *
  39.  * Revision 1.13  1998/09/23 06:28:17  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.12  1995/06/04 12:34:35  robertj
  43.  * Added Add component functions.
  44.  *
  45.  * Revision 1.11  1995/03/14 12:42:10  robertj
  46.  * Updated documentation to use HTML codes.
  47.  *
  48.  * Revision 1.10  1995/01/11  09:45:04  robertj
  49.  * Documentation and normalisation.
  50.  *
  51.  * Revision 1.9  1994/10/23  04:53:00  robertj
  52.  * Added multiply and divide operators.
  53.  *
  54.  * Revision 1.8  1994/08/23  11:32:52  robertj
  55.  * Oops
  56.  *
  57.  * Revision 1.7  1994/08/22  00:46:48  robertj
  58.  * Added pragma fro GNU C++ compiler.
  59.  *
  60.  * Revision 1.6  1994/03/07  07:38:19  robertj
  61.  * Major enhancementsacross the board.
  62.  *
  63.  * Revision 1.5  1994/01/03  04:42:23  robertj
  64.  * Mass changes to common container classes and interactors etc etc etc.
  65.  *
  66.  * Revision 1.4  1993/12/31  06:45:38  robertj
  67.  * Made inlines optional for debugging purposes.
  68.  *
  69.  * Revision 1.3  1993/11/20  17:26:28  robertj
  70.  * Made real point structure private and added operators to get at pointers.
  71.  *
  72.  * Revision 1.2  1993/07/14  12:49:16  robertj
  73.  * Fixed RCS keywords.
  74.  *
  75.  */
  76. #define _PPOINT
  77. #ifdef __GNUC__
  78. #pragma interface
  79. #endif
  80. class PRect;
  81. /**This class represents a coordinate pair used in the drawing environment. It
  82.    represents a specific point in the drawing plane.
  83.  */
  84. class PPoint : public PObject
  85. {
  86.   PCLASSINFO(PPoint, PObject);
  87.   public:
  88.     /** Create a point object with the initial x and y values of 0. */
  89.     PPoint();
  90.     /** Create a point object with the initial x and y values. */
  91.     PPoint(
  92.       PORDINATE nx,   /// New x value.
  93.       PORDINATE ny    /// New y value
  94.     );
  95.     /** Create a point the specified distance from the origin. */
  96.     PPoint(
  97.       const PDim & pt   /// Dimensions of distance from origin.
  98.     );
  99.     /** Create a copy of the specified point. */
  100.     PPoint(
  101.       const PPoint & pt   /// Point to make a copy of.
  102.     );
  103.   /**@name Overrides from class PObject */
  104.    /**Create a new copy of the specified point. It is the users responsibility
  105.        to delete the returned object.
  106.        @return
  107.        pointer to new copy of point.
  108.      */
  109.     virtual PObject * Clone() const;
  110.    /**Determine the relative rank of the point objects. Points are ranked
  111.        according to the sum of the two ordinates. However they can only be
  112.        equal if the two ordinates are equal, an equal sum is regarded as
  113.        #GreaterThan#.
  114.        @return
  115.        #EqualTo# if the two points are the same,
  116.        #LessThan# and #GreaterThan# according to sum of
  117.        ordinates.
  118.      */
  119.     virtual Comparison Compare(
  120.       const PObject & obj   /// Point object to compare against.
  121.     ) const;
  122.   /**@name New function for class */
  123.    /**Get the the X ordinate of the point.
  124.     
  125.        @return
  126.        x ordinate.
  127.      */
  128.     PORDINATE X() const;
  129.    /**Get the the Y ordinate of the point.
  130.     
  131.        @return
  132.        y ordinate.
  133.      */
  134.     PORDINATE Y() const;
  135.     /** Set the the X ordinate of the point. */
  136.     void SetX(
  137.       PORDINATE nx    /// New x value for point.
  138.     );
  139.     /** Set the the Y ordinate of the point. */
  140.     void SetY(
  141.       PORDINATE ny    /// New y value for point.
  142.     );
  143.     /** Add value to the the X ordinate of the point. */
  144.     void AddX(
  145.       PORDINATE dx    /// Value to add to point.
  146.     );
  147.     /** Add value to the the Y ordinate of the point. */
  148.     void AddY(
  149.       PORDINATE dy    /// Value to add to point.
  150.     );
  151.    /**Calculate the cartesian sum of the points or point and dimensions. The
  152.        sum of a point is the sum of each ordinate independent of the other.
  153.        
  154.        @return
  155.        new point containing the sum.
  156.      */
  157.     PPoint operator+(
  158.       const PPoint & pt   /// Point to add.
  159.     ) const;
  160.     PPoint operator+(
  161.       const PDim & dim    /// Dimensions to add.
  162.     ) const;
  163.    /**Calculate the cartesian sum of the points or point and dimensions. The
  164.        sum of a point is the sum of each ordinate independent of the other.
  165.        
  166.        @return
  167.        reference to the current object instance.
  168.      */
  169.     PPoint & operator+=(
  170.       const PPoint & pt   /// Point to add.
  171.     );
  172.     PPoint & operator+=(
  173.       const PDim & dim    /// Dimensions to add.
  174.     );
  175.    /**Calculate the cartesian difference of the points or point and
  176.        dimensions. The difference of a point is the difference of each
  177.        ordinate independent of the other.
  178.        
  179.        @return
  180.        new point containing the difference.
  181.      */
  182.     PPoint operator-(
  183.       const PPoint & pt   /// Point to subtract.
  184.     ) const;
  185.     PPoint operator-(
  186.       const PDim & dim    /// Dimensions to subtract.
  187.     ) const;
  188.    /**Calculate the cartesian difference of the points or point and
  189.        dimensions. The difference of a point is the difference of each
  190.        ordinate independent of the other.
  191.        
  192.        @return
  193.        reference to the current object instance.
  194.      */
  195.     PPoint & operator-=(
  196.       const PPoint & pt   /// Point to subtract.
  197.     );
  198.     PPoint & operator-=(
  199.       const PDim & dim    /// Dimensions to subtract.
  200.     );
  201.    /**Calculate the cartesian product of the points or point and dimensions.
  202.        The product of a point is the product of each ordinate independent of
  203.        the other.
  204.        The #scale# parameter is applied to each ordinate equally.
  205.        @return
  206.        new point containing the product.
  207.      */
  208.     PPoint operator*(
  209.       const PPoint & pt   /// Point to multiply.
  210.     ) const;
  211.     PPoint operator*(
  212.       const PDim & dim    /// Dimensions to multiply.
  213.     ) const;
  214.     PPoint operator*(
  215.       PORDINATE scale     /// Scale factor.
  216.     ) const;
  217.    /**Calculate the cartesian product of the points or point and dimensions.
  218.        The product of a point is the product of each ordinate independent of
  219.        the other.
  220.        The #scale# parameter is applied to each ordinate equally.
  221.        @return
  222.        reference to the current object instance.
  223.      */
  224.     PPoint & operator*=(
  225.       const PPoint & pt   /// Point to multiply.
  226.     );
  227.     PPoint & operator*=(
  228.       const PDim & dim    /// Dimensions to multiply.
  229.     );
  230.     PPoint & operator*=(
  231.       PORDINATE scale     /// Scale factor.
  232.     );
  233.    /**Calculate the cartesian division of the points or point and dimensions.
  234.        The division of a point is the division of each ordinate independent of
  235.        the other.
  236.        The #scale# parameter is applied to each ordinate equally.
  237.        @return
  238.        new point containing the divided point.
  239.      */
  240.     PPoint operator/(
  241.       const PPoint & pt   /// Point to divide.
  242.     ) const;
  243.     PPoint operator/(
  244.       const PDim & dim    /// Dimensions to divide.
  245.     ) const;
  246.     PPoint operator/(
  247.       PORDINATE scale     /// Scale factor.
  248.     ) const;
  249.    /**Calculate the cartesian division of the points or point and dimensions.
  250.        The division of a point is the division of each ordinate independent of
  251.        the other.
  252.        The #scale# parameter is applied to each ordinate equally.
  253.        @return
  254.        reference to the current object instance.
  255.      */
  256.     PPoint & operator/=(
  257.       const PPoint & pt   /// Point to divide.
  258.     );
  259.     PPoint & operator/=(
  260.       const PDim & dim    /// Dimensions to divide.
  261.     );
  262.     PPoint & operator/=(
  263.       PORDINATE scale     /// Scale factor.
  264.     );
  265.    /**Determine if the point is contained within the specified rectangle.
  266.        @return
  267.        TRUE if point is "inside" the rectangle.
  268.      */
  269.     BOOL InRect(
  270.       const PRect & rect    /// Rectangle to check for being "inside".
  271.     ) const;
  272. #ifdef DOC_PLUS_PLUS
  273. };
  274. #endif
  275. // Class declaration continued in platform specific header file ///////////////