reman3/Rayman_X/cpa/tempgrp/Owp/inc/Circlway.h

277 lines
12 KiB
C

/*=========================================================================================
File: CirclWay.c
Prupose: Handle a CircleArc curve
Author: Yann Le Tensorer
Creation Date: 3 february 1997
Version: 1.1
Revision:
===========================================================================================
Revisions: Version Date Author
----------------------------------------------------------------
1.1 6 february 1997 Yann Le Tensorer
Added function "fn_vCircle_FindCenter"
=========================================================================================*/
#ifndef __CircleArc_H__
#define __CircleArc_H__
#ifdef _AI_LIB_
#include "AIUseCPA.h"
#include "dynamic.h"
#else /* _AI_LIB_ */
#include "mth3d.h"
#include "acp_base.h"
#include "gld.h"
#include "dynamic.h"
#endif /* _AI_LIB_ */
/* Object creation modes */
#define C_ucModeNoObject 0 /* no geometric object created */
#define C_ucModeRealObject 1 /* a geometric object is created */
/* Main CircleArc structure */
typedef struct _CircleArcObject
{
unsigned char ucSamplingRate; /* sampling rate of curve */
MTH3D_tdstVector stStartPoint; /* first point of curve */
MTH3D_tdstVector stEndPoint; /* last point of curve */
MTH3D_tdstVector stCenter; /* center of the circle */
MTH3D_tdstMatrix stLocalRepere; /* local repère of plan in which is the circle */
ACP_tdxHandleOfObject hObject; /* handle of géométric object*/
ACP_tdxHandleOfElement hElement; /* handle of "line" element*/
long color; /* color of the curve (24 bits)*/
GLD_tdstViewportAttributes *p_ViewPortAttributes; /* pointeur sur les attributs du viewport*/
unsigned char ucObjectMode; /* object mode C_ucModeNoObject or C_ucModeRealObject*/
MTH3D_tdstVector *d_stListOfPoints; /* List of CircleArc Points, in case mode=C_ucModeNoObject*/
ACP_tdstDynaParam *p_stDynaParams; /* Pointer to dynamic parameters of curve */
MTH3D_tdstVector stLocalStartPoint; /* first point of curve in local repere*/
MTH3D_tdstVector stLocalEndPoint; /* last point of curve in local repere*/
MTH3D_tdstMatrix stInvLocalRepere; /* Inverse matrix of local repère of plan in which is the circle */
MTH_tdxReal xMainAngle;
MTH3D_tdstVector stTmpVector0; /* internal use */
MTH3D_tdstVector stTmpVector1; /* internal use */
} tdstCircleArcObject;
#ifdef __cplusplus
extern "C" {
#endif
/*==========================================================
Function name: fn_vCircleArcObject_Calculate
Description: Calculates the points of the bézier curve according to the
parameters specified when creating the object.
Input: p_CircleArcObject: Pointer to a pre-created CircleArc object
Output: none
Author: Yann Le Tensorer
Date: 23 january 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_Calculate(tdstCircleArcObject *p_CircleArcObject);
/*==========================================================
Function name: fn_vCircleArcObject_Create
Description: Create CircleArc curve (in ram only) between two points
Input: p_CircleArcObject: pointer to a preallocated tdstCircleArcObject
ucSamplingRate: number of segment to define the curve)
stStartPoint: First vertex of the curve
stEndPoint: Last vertex of the curve
stCenter: center of the circle
ucObjectMode: Creation mode (C_ucModeNoObject ou C_ucModeRealObject)
C_ucModeNoObject does not create a geometric object
whereas C_ucModeRealObject does.
Output: none
Author: Yann Le Tensorer
Date: 23 january 1997
Revision: YLT - 03 february 1997
==========================================================*/
void fn_vCircleArcObject_Create(tdstCircleArcObject *p_CircleArcObject,
unsigned char ucSamplingRate,
MTH3D_tdstVector* p_stStartPoint,
MTH3D_tdstVector* p_stEndPoint,
MTH3D_tdstVector* p_stCenter,
unsigned char ucObjectMode,
ACP_tdstDynaParam* p_stDynaParams);
/*==========================================================
Function name: fn_vCircleArcObject_SetColor
Description: Set the color of a CircleArc object.
Input: p_CircleArcObject: pointer to a pre-created tdstCircleArcObject
color: 24 bit color of object. (0->7=B; 8->15=G; 16->23=R ; 24->32=Unused)
Output: none
Author: Yann Le Tensorer
Date: 24 january 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_SetColor(tdstCircleArcObject *p_CircleArcObject,long color);
/*==========================================================
Function name: fn_vCircleArcObject_SetViewPortAttributes
Description: Set the viewportattributes for drawing.
Input: p_CircleArcObject: pointer to a pre-created tdstCircleArcObject
p_ViewPortAttributes: pointer to pre-defined viewport attributes
Output: none
Author: Yann Le Tensorer
Date: 24 january 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_SetViewPortAttributes(tdstCircleArcObject *p_CircleArcObject,GLD_tdstViewportAttributes *p_ViewPortAttributes);
/*==========================================================
Function name: fn_vCircleArcObject_Draw
Description: Draw CircleArc object on screen
Input: p_CircleArcObject: pointer to a pre-created tdstCircleArcObject
Output: none
Author: Yann Le Tensorer
Date: 24 january 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_Draw(tdstCircleArcObject *p_CircleArcObject);
/*==========================================================
Function name: fn_vCircleArcObject_Free
Description: Free memory allocated by the CircleArc objet
Input: p_CircleArcObject: pointer to a tdstCircleArcObject
Output: none
Author: Yann Le Tensorer
Date: 29 january 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_Free(tdstCircleArcObject *p_CircleArcObject);
/*==========================================================
Function name: fn_vCircleArcObject_ChangeParams
Description: Changes the parameters of a CircleArc objet and recalculates the coordinates
of the points.
Input: p_CircleArcObject: Pointer to a pre-created CircleArc object
p_stStartPoint: Pointer to the start point
p_stEndPoint: Pointer to the end Point
p_stCenter: Pointer to the center of the circle
Output: none
Author: Yann Le Tensorer
Date: 6 february 1997
Revision:
Notes: If an input parameter is 0, this parameter is simply not
affected. This enables to change easily only one parameter
==========================================================*/
void fn_vCircleArcObject_ChangeParams(tdstCircleArcObject *p_CircleArcObject,
MTH3D_tdstVector *p_stStartPoint,
MTH3D_tdstVector *p_stEndPoint,
MTH3D_tdstVector *p_stCenter);
/*==========================================================
Function name: fn_xCircleArcObject_GetSpeed
Description: returns the speed at a given sample (n° of the point) of a CircleArc object
Input: p_stDynaParam: pointer to a pre-created tdstDynaParam structure
ucSampleNo: n° of the point to get the speed from.
Output: return value is the speed.
Author: Yann Le Tensorer
Date: 03 february 1997
Revision:
==========================================================*/
MTH_tdxReal fn_xCircleArcObject_GetSpeed(tdstCircleArcObject *p_CircleArcObject,unsigned char ucSampleNo);
/*==========================================================
Function name: fn_xCircleArcObject_GetPoint
Description: returns the coordinates in the global repère of the point at a
given sample (n° of the point) of a CircleArc object.
Input: p_stDynaParam: pointer to a pre-created tdstDynaParam structure
ucSampleNo: n° of the point to get the coordinates from.
p_ReturnVector: pointer to a vector to be returned.
Output: *p_ReturnVector is a vector countaining the.coordinates of the point.
Author: Yann Le Tensorer
Date: 03 february 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_GetPoint(tdstCircleArcObject *p_CircleArcObject,unsigned char ucSampleNo,MTH3D_tdstVector* p_ReturnVector);
/*==========================================================
Function name: fn_vCircleArcObject_GlobalToLocal
Description: Changes coordinates of a point from global coordinates to local.
Input: p_CircleArcObject: pointer to the circle arc object
p_stDestVector: pointer to the destination vector
p_stSourceVector: pointer to the source vector
Output: *p_stDestVector is a vector countaining the.coordinates in the local
repere of the plan.
Author: Yann Le Tensorer
Date: 4 february 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_GlobalToLocal( tdstCircleArcObject *p_CircleArcObject,
MTH3D_tdstVector *p_stDestVector,
MTH3D_tdstVector *p_stSourceVector);
/*==========================================================
Function name: fn_vCircleArcObject_LocalToGlobal
Description: Changes coordinates of a point from local coordinates to global
Input: p_CircleArcObject: pointer to the circle arc object
p_stDestVector: pointer to the destination vector
p_stSourceVector: pointer to the source vector
Output: *p_stDestVector is a vector countaining the.coordinates in the global
repere of the plan.
Author: Yann Le Tensorer
Date: 4 february 1997
Revision:
==========================================================*/
void fn_vCircleArcObject_LocalToGlobal( tdstCircleArcObject *p_CircleArcObject,
MTH3D_tdstVector *p_stDestVector,
MTH3D_tdstVector *p_stSourceVector);
/*==========================================================
Function name: fn_ucCircleArcObject_GetSamplingRate
Description: Gets the sampling rate of a CircleArcObject objet
Input: p_CircleArcObject: Pointer to a pre-created CircleArc object
Output: return value is the sampling rate of the circle arc object
Author: Yann Le Tensorer
Date: 5 february 1997
Revision:
==========================================================*/
unsigned char fn_ucCircleArcObject_GetSamplingRate(tdstCircleArcObject *p_CircleArcObject);
/*===============================================================================
Function name: fn_bCircleArcObject_SetSamplingRate
Description: Modifies the sampling rate of a CircleArc object, and changes all
the depending parameters (including dynamic sampling rate)
Input: p_CircleArcObject: pointer to a preallocated tdstCircleArcObject
ucSamplingRate: New sampling rate
Output: return value is true if sampling rate could be modified,
false if not.
Author: Yann Le Tensorer
Date: 5 february 1997
Revision:
Note: The sampling rate can only be modified for objects that have been
created using C_ucModeNoObject at their creation.
================================================================================*/
ACP_tdxBool fn_bCircleArcObject_SetSamplingRate(tdstCircleArcObject *p_CircleArcObject,
unsigned char ucSamplingRate);
/*==========================================================
Function name: fn_vCircle_FindCenter
Description: Finds the 3D coordinate of the center of the circle on which are 3 points.
Input: p_FirstPoint: pointer to the first point
p_SecondPoint: pointer to the second point
p_ThirdPoint: pointer to the third point
p_ReturnCenter: pointer to a point to be returned.
Output: *p_ReturnCenter is a vector countaining the.coordinates of the center.
Author: Yann Le Tensorer
Date: 6 february 1997
Revision:
==========================================================*/
void fn_vCircle_FindCenter( MTH3D_tdstVector *p_FirstPoint,
MTH3D_tdstVector *p_SecondPoint,
MTH3D_tdstVector *p_ThirdPoint,
MTH3D_tdstVector *p_ReturnCenter);
#ifdef __cplusplus
}
#endif
#endif