277 lines
12 KiB
C
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
|
|
|