mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 22:27:05 +00:00
2244 lines
53 KiB
C
2244 lines
53 KiB
C
/*
|
|
File: QD3DMath.h
|
|
|
|
Contains: Math & matrix routines and definitions.
|
|
|
|
Version: Technology: Quickdraw 3D 1.6
|
|
Release: QuickTime 7.3
|
|
|
|
Copyright: (c) 2007 (c) 1995-1998 by Apple Computer, Inc., all rights reserved.
|
|
|
|
Bugs?: For bug reports, consult the following page on
|
|
the World Wide Web:
|
|
|
|
http://developer.apple.com/bugreporter/
|
|
|
|
*/
|
|
#ifndef __QD3DMATH__
|
|
#define __QD3DMATH__
|
|
|
|
#ifndef __QD3D__
|
|
#include <QD3D.h>
|
|
#endif
|
|
|
|
|
|
#include <float.h>
|
|
|
|
|
|
#if PRAGMA_ONCE
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if PRAGMA_IMPORT
|
|
#pragma import on
|
|
#endif
|
|
|
|
#if PRAGMA_STRUCT_ALIGN
|
|
#pragma options align=power
|
|
#elif PRAGMA_STRUCT_PACKPUSH
|
|
#pragma pack(push, 2)
|
|
#elif PRAGMA_STRUCT_PACK
|
|
#pragma pack(2)
|
|
#endif
|
|
|
|
#if PRAGMA_ENUM_ALWAYSINT
|
|
#if defined(__fourbyteints__) && !__fourbyteints__
|
|
#define __QD3DMATH__RESTORE_TWOBYTEINTS
|
|
#pragma fourbyteints on
|
|
#endif
|
|
#pragma enumsalwaysint on
|
|
#elif PRAGMA_ENUM_OPTIONS
|
|
#pragma option enum=int
|
|
#elif PRAGMA_ENUM_PACK
|
|
#if __option(pack_enums)
|
|
#define __QD3DMATH__RESTORE_PACKED_ENUMS
|
|
#pragma options(!pack_enums)
|
|
#endif
|
|
#endif
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Constant Definitions **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Real zero definition
|
|
*/
|
|
|
|
#ifdef FLT_EPSILON
|
|
#define kQ3RealZero (FLT_EPSILON)
|
|
#else
|
|
#define kQ3RealZero ((float)1.19209290e-07)
|
|
#endif
|
|
|
|
#ifdef FLT_MAX
|
|
#define kQ3MaxFloat (FLT_MAX)
|
|
#else
|
|
#define kQ3MaxFloat ((float)3.40282347e+38)
|
|
#endif
|
|
|
|
/*
|
|
* Values of PI
|
|
*/
|
|
#define kQ3Pi ((float)3.1415926535898)
|
|
#define kQ32Pi ((float)(2.0 * 3.1415926535898))
|
|
#define kQ3PiOver2 ((float)(3.1415926535898 / 2.0))
|
|
#define kQ33PiOver2 ((float)(3.0 * 3.1415926535898 / 2.0))
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Miscellaneous Functions **
|
|
** **
|
|
*****************************************************************************/
|
|
#define Q3Math_DegreesToRadians(x) ((float)((x) * kQ3Pi / 180.0f))
|
|
#define Q3Math_RadiansToDegrees(x) ((float)((x) * 180.0f / kQ3Pi))
|
|
#define Q3Math_Min(x,y) ((x) <= (y) ? (x) : (y))
|
|
#define Q3Math_Max(x,y) ((x) >= (y) ? (x) : (y))
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point and Vector Creation **
|
|
** **
|
|
*****************************************************************************/
|
|
#if CALL_NOT_IN_CARBON
|
|
/*
|
|
* Q3Point2D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3Point2D_Set(
|
|
TQ3Point2D * point2D,
|
|
float x,
|
|
float y);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Param2D * )
|
|
Q3Param2D_Set(
|
|
TQ3Param2D * param2D,
|
|
float u,
|
|
float v);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_Set(
|
|
TQ3Point3D * point3D,
|
|
float x,
|
|
float y,
|
|
float z);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint3D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint3D * )
|
|
Q3RationalPoint3D_Set(
|
|
TQ3RationalPoint3D * point3D,
|
|
float x,
|
|
float y,
|
|
float w);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint4D * )
|
|
Q3RationalPoint4D_Set(
|
|
TQ3RationalPoint4D * point4D,
|
|
float x,
|
|
float y,
|
|
float z,
|
|
float w);
|
|
|
|
|
|
/*
|
|
* Q3Vector2D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Set(
|
|
TQ3Vector2D * vector2D,
|
|
float x,
|
|
float y);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Set(
|
|
TQ3Vector3D * vector3D,
|
|
float x,
|
|
float y,
|
|
float z);
|
|
|
|
|
|
/*
|
|
* Q3PolarPoint_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3PolarPoint * )
|
|
Q3PolarPoint_Set(
|
|
TQ3PolarPoint * polarPoint,
|
|
float r,
|
|
float theta);
|
|
|
|
|
|
/*
|
|
* Q3SphericalPoint_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3SphericalPoint * )
|
|
Q3SphericalPoint_Set(
|
|
TQ3SphericalPoint * sphericalPoint,
|
|
float rho,
|
|
float theta,
|
|
float phi);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point and Vector Dimension Conversion **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_To3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point2D_To3D(
|
|
const TQ3Point2D * point2D,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint3D_To2D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3RationalPoint3D_To2D(
|
|
const TQ3RationalPoint3D * point3D,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_To4D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint4D * )
|
|
Q3Point3D_To4D(
|
|
const TQ3Point3D * point3D,
|
|
TQ3RationalPoint4D * result);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_To3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3RationalPoint4D_To3D(
|
|
const TQ3RationalPoint4D * point4D,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector2D_To3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector2D_To3D(
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_To2D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector3D_To2D(
|
|
const TQ3Vector3D * vector3D,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point Subtraction **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Point2D_Subtract(
|
|
const TQ3Point2D * p1,
|
|
const TQ3Point2D * p2,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Param2D_Subtract(
|
|
const TQ3Param2D * p1,
|
|
const TQ3Param2D * p2,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Point3D_Subtract(
|
|
const TQ3Point3D * p1,
|
|
const TQ3Point3D * p2,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point Distance **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_Distance()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Point2D_Distance(
|
|
const TQ3Point2D * p1,
|
|
const TQ3Point2D * p2);
|
|
|
|
|
|
/*
|
|
* Q3Point2D_DistanceSquared()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Point2D_DistanceSquared(
|
|
const TQ3Point2D * p1,
|
|
const TQ3Point2D * p2);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Param2D_Distance()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Param2D_Distance(
|
|
const TQ3Param2D * p1,
|
|
const TQ3Param2D * p2);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_DistanceSquared()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Param2D_DistanceSquared(
|
|
const TQ3Param2D * p1,
|
|
const TQ3Param2D * p2);
|
|
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint3D_Distance()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3RationalPoint3D_Distance(
|
|
const TQ3RationalPoint3D * p1,
|
|
const TQ3RationalPoint3D * p2);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint3D_DistanceSquared()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3RationalPoint3D_DistanceSquared(
|
|
const TQ3RationalPoint3D * p1,
|
|
const TQ3RationalPoint3D * p2);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Point3D_Distance()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Point3D_Distance(
|
|
const TQ3Point3D * p1,
|
|
const TQ3Point3D * p2);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_DistanceSquared()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Point3D_DistanceSquared(
|
|
const TQ3Point3D * p1,
|
|
const TQ3Point3D * p2);
|
|
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_Distance()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3RationalPoint4D_Distance(
|
|
const TQ3RationalPoint4D * p1,
|
|
const TQ3RationalPoint4D * p2);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_DistanceSquared()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3RationalPoint4D_DistanceSquared(
|
|
const TQ3RationalPoint4D * p1,
|
|
const TQ3RationalPoint4D * p2);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point Relative Ratio **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_RRatio()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3Point2D_RRatio(
|
|
const TQ3Point2D * p1,
|
|
const TQ3Point2D * p2,
|
|
float r1,
|
|
float r2,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_RRatio()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Param2D * )
|
|
Q3Param2D_RRatio(
|
|
const TQ3Param2D * p1,
|
|
const TQ3Param2D * p2,
|
|
float r1,
|
|
float r2,
|
|
TQ3Param2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_RRatio()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_RRatio(
|
|
const TQ3Point3D * p1,
|
|
const TQ3Point3D * p2,
|
|
float r1,
|
|
float r2,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_RRatio()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint4D * )
|
|
Q3RationalPoint4D_RRatio(
|
|
const TQ3RationalPoint4D * p1,
|
|
const TQ3RationalPoint4D * p2,
|
|
float r1,
|
|
float r2,
|
|
TQ3RationalPoint4D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point / Vector Addition & Subtraction **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_Vector2D_Add()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3Point2D_Vector2D_Add(
|
|
const TQ3Point2D * point2D,
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_Vector2D_Add()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Param2D * )
|
|
Q3Param2D_Vector2D_Add(
|
|
const TQ3Param2D * param2D,
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Param2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_Vector3D_Add()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_Vector3D_Add(
|
|
const TQ3Point3D * point3D,
|
|
const TQ3Vector3D * vector3D,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point2D_Vector2D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3Point2D_Vector2D_Subtract(
|
|
const TQ3Point2D * point2D,
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_Vector2D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Param2D * )
|
|
Q3Param2D_Vector2D_Subtract(
|
|
const TQ3Param2D * param2D,
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Param2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_Vector3D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_Vector3D_Subtract(
|
|
const TQ3Point3D * point3D,
|
|
const TQ3Vector3D * vector3D,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Vector Scale **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Scale()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Scale(
|
|
const TQ3Vector2D * vector2D,
|
|
float scalar,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Scale()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Scale(
|
|
const TQ3Vector3D * vector3D,
|
|
float scalar,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Vector Length **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Length()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Vector2D_Length(const TQ3Vector2D * vector2D);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Length()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Vector3D_Length(const TQ3Vector3D * vector3D);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Vector Normalize **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Normalize()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Normalize(
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Normalize()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Normalize(
|
|
const TQ3Vector3D * vector3D,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Vector/Vector Addition and Subtraction **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Add()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Add(
|
|
const TQ3Vector2D * v1,
|
|
const TQ3Vector2D * v2,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Add()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Add(
|
|
const TQ3Vector3D * v1,
|
|
const TQ3Vector3D * v2,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Vector2D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Subtract(
|
|
const TQ3Vector2D * v1,
|
|
const TQ3Vector2D * v2,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Subtract()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Subtract(
|
|
const TQ3Vector3D * v1,
|
|
const TQ3Vector3D * v2,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Cross Product **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Cross()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Vector2D_Cross(
|
|
const TQ3Vector2D * v1,
|
|
const TQ3Vector2D * v2);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Cross()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Cross(
|
|
const TQ3Vector3D * v1,
|
|
const TQ3Vector3D * v2,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_CrossProductTri()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Point3D_CrossProductTri(
|
|
const TQ3Point3D * point1,
|
|
const TQ3Point3D * point2,
|
|
const TQ3Point3D * point3,
|
|
TQ3Vector3D * crossVector);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Dot Product **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Dot()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Vector2D_Dot(
|
|
const TQ3Vector2D * v1,
|
|
const TQ3Vector2D * v2);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Dot()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Vector3D_Dot(
|
|
const TQ3Vector3D * v1,
|
|
const TQ3Vector3D * v2);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point and Vector Transformation **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Transform()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Transform(
|
|
const TQ3Vector2D * vector2D,
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Transform()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Transform(
|
|
const TQ3Vector3D * vector3D,
|
|
const TQ3Matrix4x4 * matrix4x4,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point2D_Transform()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3Point2D_Transform(
|
|
const TQ3Point2D * point2D,
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_Transform()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Param2D * )
|
|
Q3Param2D_Transform(
|
|
const TQ3Param2D * param2D,
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Param2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_Transform()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_Transform(
|
|
const TQ3Point3D * point3D,
|
|
const TQ3Matrix4x4 * matrix4x4,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_Transform()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint4D * )
|
|
Q3RationalPoint4D_Transform(
|
|
const TQ3RationalPoint4D * point4D,
|
|
const TQ3Matrix4x4 * matrix4x4,
|
|
TQ3RationalPoint4D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_To3DTransformArray()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Status )
|
|
Q3Point3D_To3DTransformArray(
|
|
const TQ3Point3D * inPoint3D,
|
|
const TQ3Matrix4x4 * matrix,
|
|
TQ3Point3D * outPoint3D,
|
|
long numPoints,
|
|
unsigned long inStructSize,
|
|
unsigned long outStructSize);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_To4DTransformArray()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Status )
|
|
Q3Point3D_To4DTransformArray(
|
|
const TQ3Point3D * inPoint3D,
|
|
const TQ3Matrix4x4 * matrix,
|
|
TQ3RationalPoint4D * outPoint4D,
|
|
long numPoints,
|
|
unsigned long inStructSize,
|
|
unsigned long outStructSize);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_To4DTransformArray()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Status )
|
|
Q3RationalPoint4D_To4DTransformArray(
|
|
const TQ3RationalPoint4D * inPoint4D,
|
|
const TQ3Matrix4x4 * matrix,
|
|
TQ3RationalPoint4D * outPoint4D,
|
|
long numPoints,
|
|
unsigned long inStructSize,
|
|
unsigned long outStructSize);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Vector Negation **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Vector2D_Negate()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector2D * )
|
|
Q3Vector2D_Negate(
|
|
const TQ3Vector2D * vector2D,
|
|
TQ3Vector2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_Negate()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_Negate(
|
|
const TQ3Vector3D * vector3D,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point conversion from cartesian to polar **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_ToPolar()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3PolarPoint * )
|
|
Q3Point2D_ToPolar(
|
|
const TQ3Point2D * point2D,
|
|
TQ3PolarPoint * result);
|
|
|
|
|
|
/*
|
|
* Q3PolarPoint_ToPoint2D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3PolarPoint_ToPoint2D(
|
|
const TQ3PolarPoint * polarPoint,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_ToSpherical()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3SphericalPoint * )
|
|
Q3Point3D_ToSpherical(
|
|
const TQ3Point3D * point3D,
|
|
TQ3SphericalPoint * result);
|
|
|
|
|
|
/*
|
|
* Q3SphericalPoint_ToPoint3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3SphericalPoint_ToPoint3D(
|
|
const TQ3SphericalPoint * sphericalPoint,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Point Affine Combinations **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Point2D_AffineComb()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point2D * )
|
|
Q3Point2D_AffineComb(
|
|
const TQ3Point2D * points2D,
|
|
const float * weights,
|
|
unsigned long nPoints,
|
|
TQ3Point2D * result);
|
|
|
|
|
|
/*
|
|
* Q3Param2D_AffineComb()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Param2D * )
|
|
Q3Param2D_AffineComb(
|
|
const TQ3Param2D * params2D,
|
|
const float * weights,
|
|
unsigned long nPoints,
|
|
TQ3Param2D * result);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint3D_AffineComb()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint3D * )
|
|
Q3RationalPoint3D_AffineComb(
|
|
const TQ3RationalPoint3D * points3D,
|
|
const float * weights,
|
|
unsigned long numPoints,
|
|
TQ3RationalPoint3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_AffineComb()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_AffineComb(
|
|
const TQ3Point3D * points3D,
|
|
const float * weights,
|
|
unsigned long numPoints,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
/*
|
|
* Q3RationalPoint4D_AffineComb()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3RationalPoint4D * )
|
|
Q3RationalPoint4D_AffineComb(
|
|
const TQ3RationalPoint4D * points4D,
|
|
const float * weights,
|
|
unsigned long numPoints,
|
|
TQ3RationalPoint4D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Matrix Functions **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Matrix3x3_Copy()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_Copy(
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Matrix3x3 * result);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_Copy()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_Copy(
|
|
const TQ3Matrix4x4 * matrix4x4,
|
|
TQ3Matrix4x4 * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_SetIdentity()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_SetIdentity(TQ3Matrix3x3 * matrix3x3);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetIdentity()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetIdentity(TQ3Matrix4x4 * matrix4x4);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_Transpose()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_Transpose(
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Matrix3x3 * result);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_Transpose()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_Transpose(
|
|
const TQ3Matrix4x4 * matrix4x4,
|
|
TQ3Matrix4x4 * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_Invert()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_Invert(
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Matrix3x3 * result);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_Invert()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_Invert(
|
|
const TQ3Matrix4x4 * matrix4x4,
|
|
TQ3Matrix4x4 * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_Adjoint()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_Adjoint(
|
|
const TQ3Matrix3x3 * matrix3x3,
|
|
TQ3Matrix3x3 * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_Multiply()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_Multiply(
|
|
const TQ3Matrix3x3 * matrixA,
|
|
const TQ3Matrix3x3 * matrixB,
|
|
TQ3Matrix3x3 * result);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_Multiply()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_Multiply(
|
|
const TQ3Matrix4x4 * matrixA,
|
|
const TQ3Matrix4x4 * matrixB,
|
|
TQ3Matrix4x4 * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_SetTranslate()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_SetTranslate(
|
|
TQ3Matrix3x3 * matrix3x3,
|
|
float xTrans,
|
|
float yTrans);
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_SetScale()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_SetScale(
|
|
TQ3Matrix3x3 * matrix3x3,
|
|
float xScale,
|
|
float yScale);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_SetRotateAboutPoint()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix3x3 * )
|
|
Q3Matrix3x3_SetRotateAboutPoint(
|
|
TQ3Matrix3x3 * matrix3x3,
|
|
const TQ3Point2D * origin,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetTranslate()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetTranslate(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
float xTrans,
|
|
float yTrans,
|
|
float zTrans);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetScale()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetScale(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
float xScale,
|
|
float yScale,
|
|
float zScale);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotateAboutPoint()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotateAboutPoint(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
const TQ3Point3D * origin,
|
|
float xAngle,
|
|
float yAngle,
|
|
float zAngle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotateAboutAxis()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotateAboutAxis(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
const TQ3Point3D * origin,
|
|
const TQ3Vector3D * orientation,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotate_X()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotate_X(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotate_Y()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotate_Y(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotate_Z()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotate_Z(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotate_XYZ()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotate_XYZ(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
float xAngle,
|
|
float yAngle,
|
|
float zAngle);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetRotateVectorToVector()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetRotateVectorToVector(
|
|
TQ3Matrix4x4 * matrix4x4,
|
|
const TQ3Vector3D * v1,
|
|
const TQ3Vector3D * v2);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_SetQuaternion()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Matrix4x4 * )
|
|
Q3Matrix4x4_SetQuaternion(
|
|
TQ3Matrix4x4 * matrix,
|
|
const TQ3Quaternion * quaternion);
|
|
|
|
|
|
/*
|
|
* Q3Matrix3x3_Determinant()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Matrix3x3_Determinant(const TQ3Matrix3x3 * matrix3x3);
|
|
|
|
|
|
/*
|
|
* Q3Matrix4x4_Determinant()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Matrix4x4_Determinant(const TQ3Matrix4x4 * matrix4x4);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Quaternion Routines **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3Quaternion_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_Set(
|
|
TQ3Quaternion * quaternion,
|
|
float w,
|
|
float x,
|
|
float y,
|
|
float z);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetIdentity()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetIdentity(TQ3Quaternion * quaternion);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_Copy()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_Copy(
|
|
const TQ3Quaternion * quaternion,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_IsIdentity()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Boolean )
|
|
Q3Quaternion_IsIdentity(const TQ3Quaternion * quaternion);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_Invert()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_Invert(
|
|
const TQ3Quaternion * quaternion,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_Normalize()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_Normalize(
|
|
const TQ3Quaternion * quaternion,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_Dot()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( float )
|
|
Q3Quaternion_Dot(
|
|
const TQ3Quaternion * q1,
|
|
const TQ3Quaternion * q2);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_Multiply()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_Multiply(
|
|
const TQ3Quaternion * q1,
|
|
const TQ3Quaternion * q2,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetRotateAboutAxis()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetRotateAboutAxis(
|
|
TQ3Quaternion * quaternion,
|
|
const TQ3Vector3D * axis,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetRotate_XYZ()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetRotate_XYZ(
|
|
TQ3Quaternion * quaternion,
|
|
float xAngle,
|
|
float yAngle,
|
|
float zAngle);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetRotate_X()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetRotate_X(
|
|
TQ3Quaternion * quaternion,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetRotate_Y()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetRotate_Y(
|
|
TQ3Quaternion * quaternion,
|
|
float angle);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetRotate_Z()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetRotate_Z(
|
|
TQ3Quaternion * quaternion,
|
|
float angle);
|
|
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetMatrix()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetMatrix(
|
|
TQ3Quaternion * quaternion,
|
|
const TQ3Matrix4x4 * matrix);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_SetRotateVectorToVector()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_SetRotateVectorToVector(
|
|
TQ3Quaternion * quaternion,
|
|
const TQ3Vector3D * v1,
|
|
const TQ3Vector3D * v2);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_MatchReflection()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_MatchReflection(
|
|
const TQ3Quaternion * q1,
|
|
const TQ3Quaternion * q2,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_InterpolateFast()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_InterpolateFast(
|
|
const TQ3Quaternion * q1,
|
|
const TQ3Quaternion * q2,
|
|
float t,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Quaternion_InterpolateLinear()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Quaternion * )
|
|
Q3Quaternion_InterpolateLinear(
|
|
const TQ3Quaternion * q1,
|
|
const TQ3Quaternion * q2,
|
|
float t,
|
|
TQ3Quaternion * result);
|
|
|
|
|
|
/*
|
|
* Q3Vector3D_TransformQuaternion()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Vector3D * )
|
|
Q3Vector3D_TransformQuaternion(
|
|
const TQ3Vector3D * vector3D,
|
|
const TQ3Quaternion * quaternion,
|
|
TQ3Vector3D * result);
|
|
|
|
|
|
/*
|
|
* Q3Point3D_TransformQuaternion()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3Point3D * )
|
|
Q3Point3D_TransformQuaternion(
|
|
const TQ3Point3D * point3D,
|
|
const TQ3Quaternion * quaternion,
|
|
TQ3Point3D * result);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Volume Routines **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3BoundingBox_Copy()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_Copy(
|
|
const TQ3BoundingBox * src,
|
|
TQ3BoundingBox * dest);
|
|
|
|
|
|
/*
|
|
* Q3BoundingBox_Union()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_Union(
|
|
const TQ3BoundingBox * v1,
|
|
const TQ3BoundingBox * v2,
|
|
TQ3BoundingBox * result);
|
|
|
|
|
|
/*
|
|
* Q3BoundingBox_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_Set(
|
|
TQ3BoundingBox * bBox,
|
|
const TQ3Point3D * min,
|
|
const TQ3Point3D * max,
|
|
TQ3Boolean isEmpty);
|
|
|
|
|
|
/*
|
|
* Q3BoundingBox_UnionPoint3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_UnionPoint3D(
|
|
const TQ3BoundingBox * bBox,
|
|
const TQ3Point3D * point3D,
|
|
TQ3BoundingBox * result);
|
|
|
|
|
|
/*
|
|
* Q3BoundingBox_UnionRationalPoint4D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_UnionRationalPoint4D(
|
|
const TQ3BoundingBox * bBox,
|
|
const TQ3RationalPoint4D * point4D,
|
|
TQ3BoundingBox * result);
|
|
|
|
|
|
/*
|
|
* Q3BoundingBox_SetFromPoints3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_SetFromPoints3D(
|
|
TQ3BoundingBox * bBox,
|
|
const TQ3Point3D * points3D,
|
|
unsigned long numPoints,
|
|
unsigned long structSize);
|
|
|
|
|
|
/*
|
|
* Q3BoundingBox_SetFromRationalPoints4D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingBox * )
|
|
Q3BoundingBox_SetFromRationalPoints4D(
|
|
TQ3BoundingBox * bBox,
|
|
const TQ3RationalPoint4D * points4D,
|
|
unsigned long numPoints,
|
|
unsigned long structSize);
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
** **
|
|
** Sphere Routines **
|
|
** **
|
|
*****************************************************************************/
|
|
/*
|
|
* Q3BoundingSphere_Copy()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_Copy(
|
|
const TQ3BoundingSphere * src,
|
|
TQ3BoundingSphere * dest);
|
|
|
|
|
|
/*
|
|
* Q3BoundingSphere_Union()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_Union(
|
|
const TQ3BoundingSphere * s1,
|
|
const TQ3BoundingSphere * s2,
|
|
TQ3BoundingSphere * result);
|
|
|
|
|
|
/*
|
|
* Q3BoundingSphere_Set()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_Set(
|
|
TQ3BoundingSphere * bSphere,
|
|
const TQ3Point3D * origin,
|
|
float radius,
|
|
TQ3Boolean isEmpty);
|
|
|
|
|
|
/*
|
|
* Q3BoundingSphere_UnionPoint3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_UnionPoint3D(
|
|
const TQ3BoundingSphere * bSphere,
|
|
const TQ3Point3D * point3D,
|
|
TQ3BoundingSphere * result);
|
|
|
|
|
|
/*
|
|
* Q3BoundingSphere_UnionRationalPoint4D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_UnionRationalPoint4D(
|
|
const TQ3BoundingSphere * bSphere,
|
|
const TQ3RationalPoint4D * point4D,
|
|
TQ3BoundingSphere * result);
|
|
|
|
|
|
|
|
/*
|
|
* Q3BoundingSphere_SetFromPoints3D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_SetFromPoints3D(
|
|
TQ3BoundingSphere * bSphere,
|
|
const TQ3Point3D * points3D,
|
|
unsigned long numPoints,
|
|
unsigned long structSize);
|
|
|
|
|
|
/*
|
|
* Q3BoundingSphere_SetFromRationalPoints4D()
|
|
*
|
|
* Availability:
|
|
* Non-Carbon CFM: not available
|
|
* CarbonLib: not available
|
|
* Mac OS X: not available
|
|
*/
|
|
EXTERN_API_C( TQ3BoundingSphere * )
|
|
Q3BoundingSphere_SetFromRationalPoints4D(
|
|
TQ3BoundingSphere * bSphere,
|
|
const TQ3RationalPoint4D * points4D,
|
|
unsigned long numPoints,
|
|
unsigned long structSize);
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */
|
|
|
|
|
|
#if PRAGMA_ENUM_ALWAYSINT
|
|
#pragma enumsalwaysint reset
|
|
#ifdef __QD3DMATH__RESTORE_TWOBYTEINTS
|
|
#pragma fourbyteints off
|
|
#endif
|
|
#elif PRAGMA_ENUM_OPTIONS
|
|
#pragma option enum=reset
|
|
#elif defined(__QD3DMATH__RESTORE_PACKED_ENUMS)
|
|
#pragma options(pack_enums)
|
|
#endif
|
|
|
|
#if PRAGMA_STRUCT_ALIGN
|
|
#pragma options align=reset
|
|
#elif PRAGMA_STRUCT_PACKPUSH
|
|
#pragma pack(pop)
|
|
#elif PRAGMA_STRUCT_PACK
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#ifdef PRAGMA_IMPORT_OFF
|
|
#pragma import off
|
|
#elif PRAGMA_IMPORT
|
|
#pragma import reset
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __QD3DMATH__ */
|
|
|