Adobe.com
Contents Suites Classes Class Index Member Index

AIFixedMath.h

Go to the documentation of this file.
00001 #ifndef __AIFixedMath__
00002 #define __AIFixedMath__
00003 
00004 /*
00005  *        Name: AIFixedMath.h
00006  *   $Revision: 6 $
00007  *      Author:
00008  *        Date:
00009  *     Purpose: Adobe Illustrator Fixed-Point Math Suite.
00010  *
00011  * ADOBE SYSTEMS INCORPORATED
00012  * Copyright 1986-2007 Adobe Systems Incorporated.
00013  * All rights reserved.
00014  *
00015  * NOTICE:  Adobe permits you to use, modify, and distribute this file 
00016  * in accordance with the terms of the Adobe license agreement 
00017  * accompanying it. If you have received this file from a source other 
00018  * than Adobe, then your use, modification, or distribution of it 
00019  * requires the prior written permission of Adobe.
00020  *
00021  */
00022 
00023 
00024 /*******************************************************************************
00025  **
00026  **     Imports
00027  **
00028  **/
00029 
00030 #ifndef __AITypes__
00031 #include "AITypes.h"
00032 #endif
00033 
00034 #include "AIHeaderBegin.h"
00035 
00039 /*******************************************************************************
00040  **
00041  **     Constants
00042  **
00043  **/
00044 
00045 #define kAIFixedMathSuite               "AI Fixed Math Suite"
00046 #define kAIFixedMathSuiteVersion                AIAPI_VERSION(4)
00047 #define kAIFixedMathVersion             kAIFixedMathSuiteVersion
00048 
00049 
00050 // common AIFixed constants
00051 #define kFixedMin                       ((AIFixed) 0x80000000)
00052 #define kFixedMax                       ((AIFixed) 0x7FFFFFFF)
00053 #define kFixedUnknown           ((AIFixed) 0x80000000)
00054 
00055 #ifndef kFixedOne
00056 #define kFixedOne                       ((AIFixed) 0x00010000)
00057 #endif
00058 #ifndef kFixedZero
00059 #define kFixedZero                      ((AIFixed) 0x00000000)
00060 #endif
00061 #define kFixedHundredth         ((AIFixed) 0x0000028F)
00062 #define kFixedSixteenth         ((AIFixed) 0x00001000)
00063 #define kFixedTenth                     ((AIFixed) 0x00001999)
00064 #define kFixedEighth            ((AIFixed) 0x00002000)
00065 #ifndef kFixedQuarter
00066 #define kFixedQuarter           ((AIFixed) 0x00004000)
00067 #endif
00068 #ifndef kFixedHalf
00069 #define kFixedHalf                      ((AIFixed) 0x00008000)
00070 #endif
00071 #define kFixedSevenEighths      ((AIFixed) 0x0000E000)
00072 #define kFixedOne1                      ((AIFixed) 0x0000FFFF)
00073 #define kFixedOneThird          ((AIFixed) 0x00005555)
00074 #define kFixedFourThirds        ((AIFixed) 0x00015555)
00075 #define kFixedThreeHalves       ((AIFixed) 0x00018000)
00076 
00077 #define kFixedPi4                       ((AIFixed) 0x0000C910)
00078 #define kFixedPi2                       ((AIFixed) 0x00019220)
00079 #define kFixedPi                        ((AIFixed) 0x00032440)
00080 #define kFixedTwoPi             ((AIFixed) 0x00064880)
00081 #define kFixedGolden            ((AIFixed) 0x00019E37)
00082 
00083 // common AIFract constants
00084 #define kFractZero                      ((AIFract) 0x00000000)
00085 #define kFractFixedRound        ((AIFract) 0x00002000)
00086 #define kFractPi180                     ((AIFract) 0x011DF4A0)
00087 #define kFractQuarter           ((AIFract) 0x10000000)
00088 #define kFractHalf                      ((AIFract) 0x20000000)
00089 #define kFractOne                       ((AIFract) 0x40000000)
00090 #define kFractFourThirds        ((AIFract) 0x55555555)
00091 #define kFractSqrtTwo           ((AIFract) 0x5A82799A)
00092 #define kFractUnknown           ((AIFract) 0x80000000)
00093 
00094 
00095 /*******************************************************************************
00096  **
00097  **     Macros
00098  **
00099  **/
00100 
00101 #if __BUILD_PLUGIN__
00102 
00103 // type conversion macros
00104 #define _FixedToFract(a)                ((AIFract)(a) << 14)
00105 #define _FractRoundToFixed(a)   ((AIFixed) (((a) + kFractFixedRound) >> 14))
00106 #define _FractTruncToFixed(a)   ((AIFixed) ((a) >> 14))
00107 
00108 #define _ShortToFixed(a)                ((AIFixed)(a) << 16)
00109 #define _FixedRoundToShort(a)   ((ai::int16) (((a) + kFixedHalf) >> 16))
00110 #define _FixedTruncToShort(a)   ((ai::int16) ((a) >> 16))
00111 
00112 #define _FloatToFixed(a)                ((AIFixed)((a) * 65536.0))  // useful for constants; eg, _FloatToFixed(1.5) generates 0x00018000
00113 
00114 
00115 // other macros
00116 #define _FixedFloor(a)                  ((AIFixed) ((a) & 0xFFFF0000L))
00117 #define _FixedCeiling(a)                _FixedFloor((a) + kFixedOne1)
00118 #define _FixedRound(a)                  _FixedFloor((a) + kFixedHalf)
00119 #define _FixedFraction(a)               ((a) & 0x0000FFFFL)
00120 #define _FixedAverage(a, b)     (((a) + (b) + 1) >> 1)
00121 #define _FixedHalf(a)                   (((a) + 1) >> 1)
00122 #define _FixedOverflow(a)               ((a) == kFixedMax || (a) == kFixedMin)
00123 
00124 #endif
00125 
00126 /*******************************************************************************
00127  **
00128  **     Suite
00129  **
00130  **/
00131 
00140 typedef struct {
00141 
00142         AIAPI AIFixed (*FixedAdd) ( AIFixed a, AIFixed b );
00143         AIAPI AIFixed (*FixedMul) ( AIFixed a, AIFixed b );
00144         AIAPI AIFract (*FractMul) ( AIFract a, AIFract b );
00145         AIAPI AIFixed (*FractFixedMul) ( AIFract a, AIFixed b );
00146         AIAPI AIFixed (*FixedDiv) ( AIFixed a, AIFixed b );
00147         AIAPI AIFract (*FractDiv) ( AIFract a, AIFract b );
00148         AIAPI AIFixed (*ShortRatio) ( ai::int16 a, ai::int16 b );
00149         AIAPI AIFract (*FixedRatio) ( AIFixed a, AIFixed b );
00150         AIAPI AIFixed (*FractRatio) ( AIFract a, AIFract b );
00151         AIAPI AIFixed (*FixedMulAdd) ( AIFixed a, AIFixed b, AIFixed c, AIFixed d );
00152         AIAPI AIFixed (*FixedMultiple) (AIFixed a, AIFixed multiple, AIBoolean ceiling );
00153 
00154         AIAPI AIFract (*FixedSin) ( AIFixed a );
00155         AIAPI AIFract (*FixedCos) ( AIFixed a );
00156         AIAPI AIFixed (*FixedATan) ( AIFixed a, AIFixed b );
00157         AIAPI AIFixed (*DegreeToRadian) ( AIFixed degree );
00158         AIAPI AIFixed (*RadianToDegree) ( AIFixed radian );
00159 
00160         AIAPI AIUFract (*FractSqrt) ( AIUFract a );
00161         AIAPI AIFixed (*FixedLength) ( AIFixed a, AIFixed b );
00162         AIAPI AIFixed (*FixedInterpolate) ( AIFixed a, AIFixed b, AIFixed t );
00163 
00164         AIAPI AIFloat (*FixedToFloat) ( AIFixed a );
00165         AIAPI AIFixed (*FloatToFixed) ( AIFloat a );
00166         AIAPI AIFloat (*FractToFloat) ( AIFract a );
00167         AIAPI AIFract (*FloatToFract) ( AIFloat a );
00168 
00169         AIAPI void (*FixedPointAdd) ( AIFixedPoint *a, AIFixedPoint *b, AIFixedPoint *result );
00170         AIAPI void (*FixedPointSubtract) ( AIFixedPoint *a, AIFixedPoint *b, AIFixedPoint *result );
00171         AIAPI AIBoolean (*FixedPointEqual) ( AIFixedPoint *a, AIFixedPoint *b );
00172         AIAPI AIBoolean (*FixedPointClose) ( AIFixedPoint *a, AIFixedPoint *b, AIFixed tolerance );
00173         AIAPI AIFixed (*FixedPointAngle) ( AIFixedPoint *a, AIFixedPoint *b );
00174         AIAPI AIFixed (*FixedPointLength) ( AIFixedPoint *a, AIFixedPoint *b );
00175         AIAPI void (*FixedPointLengthAngle) ( AIFixed length, AIFixed angle, AIFixedPoint *result );
00176         AIAPI void (*FixedPointInterpolate) ( AIFixedPoint *a, AIFixedPoint *b, AIFixed t, AIFixedPoint *result );
00177 
00178         AIAPI void (*FixedRectSet) ( AIFixedRect *a, AIFixed left, AIFixed top, AIFixed right, AIFixed bottom );
00179         AIAPI AIBoolean (*FixedRectEqual) ( AIFixedRect *a, AIFixedRect *b );
00180         AIAPI AIBoolean (*FixedRectEmpty) ( AIFixedRect *a );
00181         AIAPI void (*FixedRectInset) ( AIFixedRect *a, AIFixed h, AIFixed v );
00182         AIAPI void (*FixedRectOffset) ( AIFixedRect *a, AIFixed h, AIFixed v );
00183         AIAPI void (*FixedRectUnion) ( AIFixedRect *a, AIFixedRect *b, AIFixedRect *result );
00184         AIAPI void (*FixedPointUnion) ( AIFixedPoint *a, AIFixedRect *b, AIFixedRect *result );
00185         AIAPI AIBoolean (*FixedRectOverlap) ( AIFixedRect *a, AIFixedRect *b );
00186         AIAPI AIBoolean (*FixedRectIntersect) ( AIFixedRect *a, AIFixedRect *b, AIFixedRect *result );
00187         AIAPI AIBoolean (*FixedRectInFixedRect) ( AIFixedRect *a, AIFixedRect *b );
00188         AIAPI AIBoolean (*FixedPointInFixedRect) ( AIFixedPoint *a, AIFixedRect *b );
00189         AIAPI void (*FixedRectAlign) ( AIFixedRect *a, AIFixedRect *result );
00190 
00191         AIAPI void (*FixedMatrixSet) ( AIFixedMatrix *m, AIFixed a, AIFixed b, AIFixed c, AIFixed d, AIFixed tx, AIFixed ty );
00192         AIAPI void (*FixedMatrixSetIdentity) ( AIFixedMatrix *m );
00193         AIAPI AIBoolean (*FixedMatrixEqual) ( AIFixedMatrix *m, AIFixedMatrix *n );
00194         AIAPI AIBoolean (*FixedMatrixIdentity) ( AIFixedMatrix *m );
00195         AIAPI AIBoolean (*FixedMatrixSingular) ( AIFixedMatrix *m );
00196         AIAPI void (*FixedMatrixSetTranslate) ( AIFixedMatrix *m, AIFixed tx, AIFixed ty );
00197         AIAPI void (*FixedMatrixSetScale) ( AIFixedMatrix *m, AIFixed h, AIFixed v );
00198         AIAPI void (*FixedMatrixSetRotate) ( AIFixedMatrix *m, AIFixed angle );
00199         AIAPI void (*FixedMatrixConcatTranslate) ( AIFixedMatrix *m, AIFixed tx, AIFixed ty );
00200         AIAPI void (*FixedMatrixConcatScale) ( AIFixedMatrix *m, AIFixed h, AIFixed v );
00201         AIAPI void (*FixedMatrixConcatRotate) ( AIFixedMatrix *m, AIFixed angle );
00202         AIAPI void (*FixedMatrixConcat) (AIFixedMatrix *m, AIFixedMatrix *n, AIFixedMatrix *result );
00203         AIAPI short (*FixedMatrixInvert) (AIFixedMatrix *m );
00204         AIAPI void (*FixedMatrixXformPoint) ( AIFixedMatrix *m, AIFixedPoint *a, AIFixedPoint *result );
00205 
00206 } AIFixedMathSuite;
00207 
00208 
00209 #include "AIHeaderEnd.h"
00210 
00211 
00212 #endif


Contents Suites Classes Class Index Member Index
Adobe Solutions Network
 
Copyright © 2016 Adobe Systems Incorporated. All rights reserved.
Terms of Use Online Privacy Policy Adobe and accessibility Avoid software piracy Permissions and Trademarks