////////////////////////////////////////////////////////////////////////////////
//
//  LT_Math.h
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __LT_MATH_H
#define __LT_MATH_H

#ifndef __LTDEFINE_H
#include "ltdefine.h"
#endif


#ifndef __LIB_FUNC__
#define __LIB_FUNC__
#define LIB_FUNC WINAPI
#endif


extern "C" {

//------------------------------------------------------------------------
//
//------------------------------------------------------------------------

//   - 388
//------------------------------------------------------------------------------
//        
//   0       , , 
//   bezier, nurbs, , ,    .
//   
// ---
reference LIB_FUNC ksApproximationCurve( reference        p,           //   
                                         double           eps,         //    1e-7...1
                                         unsigned char    curentLayer, //     0 -    1-   
                                         double           maxRad,  //  -   0-   
                                         unsigned char    smooth );// 1-   0-   

//   - 206
//-----------------------------------------------------------------------------
//    
//   1,    , 0 -  
//-----------------------------------------------------------------------------
int LIB_FUNC  ksEqualPoints( double x1, double y1,    // 
                             double x2, double y2 );  // 

//   - 54
//----------------------------------------------------------------------------
//      .
//-----------------------------------------------------------------------------
double     LIB_FUNC Angle( double x1, double y1,   // 
													double x2, double y2 ); // 

//   - 55
//------------------------------------------------------------------------------
//    .
//-------------------------------------------------------------------------------
double     LIB_FUNC CosD( double x );     //  x-  

//   - 56
//------------------------------------------------------------------------------
//    .
//-------------------------------------------------------------------------------
double     LIB_FUNC SinD( double x );     //  x-  

//   - 57
//------------------------------------------------------------------------------
//    .
//-------------------------------------------------------------------------------
double     LIB_FUNC TanD( double x );     //  x-  

//   - 58
//------------------------------------------------------------------------------
//  .      
//-------------------------------------------------------------------------------
double     LIB_FUNC AtanD( double x );


//   - 61
//--------------------------------------------------------------------------------
//    .
//---------------------------------------------------------------------------------
void       LIB_FUNC IntersectLinSLinS( double x11, double y11,    //   
																			 double x12, double y12,    //   
																			 double x21, double y21,    //   
																			 double x22, double y22,    //   
																			 int * kp,                  //  
																			 double * xp, double *yp ); // 

//   - 266
//------------------------------------------------------------------------------
//    .
// ---
void LIB_FUNC IntersectLinSLine( double x1, double y1, //   
   			  														  		 double x2, double y2, //   
                                             double x,  double y,  //   
																	  				 double ang,           //  
																		  			 int * kp,             //  
																		  			 double *xp, double *yp ); // -  

//   - 267
//------------------------------------------------------------------------------
//     
// ---
void LIB_FUNC IntersectArcLin( double xc, double yc, double rad, //     
																					 double f1, double f2, int n,      //     ,  
                                           double x,  double y,  double ang, //    
                                           int *kp,                          //  
                                           double xp[], double yp[] );       // -  

//   - 62
//--------------------------------------------------------------------------------
//    .
//---------------------------------------------------------------------------------
void       LIB_FUNC IntersectLinLin( double x1, double y1,      //   
																		 double angle1,             //  
																		 double x2, double y2,      //   
																		 double angle2,             //  
																		 int *kp,                   //  
																		 double *xp, double *yp );  // 

//   - 63
//--------------------------------------------------------------------------------
//    .
//---------------------------------------------------------------------------------
void       LIB_FUNC  IntersectCirCir( double xc1, double yc1,//  
																		  double radius1,            //  
																		  double xc2, double yc2,    //  
																		  double radius2,            //  
																		  int * kp,                  //  
																		  double xp[], double yp[] );//  

//   - 64
//--------------------------------------------------------------------------------
//    .
//---------------------------------------------------------------------------------
void       LIB_FUNC  IntersectArcArc( double xac, double yac,     //  
																		  double rada,                //  
																		  double fa1, double fa2,     //     
																		  short directa,                //  
																		  double xbc, double ybc,     //  
																		  double radb,                //  
																		  double fb1, double fb2,     //     
																		  short directb,                //  
																		  int * kp,                   //  
																		  double  xp[], double yp[] );//  


//   - 65
//--------------------------------------------------------------------------------
//     .
//---------------------------------------------------------------------------------
void       LIB_FUNC  IntersectLinSArc( double x1, double y1,       //  
																			 double x2, double y2,       //  
																			 double xc, double yc,       // 
																			 double rad,                 // 
																			 double f1, double f2,       //     
																			 short direct,                 // 
																			 int * kp,                   //  
																			 double xp[], double yp[] ); //  

//   - 66
//--------------------------------------------------------------------------------
//     .
//---------------------------------------------------------------------------------
void       LIB_FUNC  IntersectLinSCir( double x1, double y1,       //  
																			 double x2, double y2,       //  
																			 double xc, double yc,       // 
																			 double rad,                 // 
																			 int * kp,                   //  
																			 double  xp[], double yp[]); //  

//   - 67
//--------------------------------------------------------------------------------
//     .
//---------------------------------------------------------------------------------
void       LIB_FUNC  IntersectCirLin( double xc, double yc,        // 
																		  double rad,                  // 
																		  double xl, double yl,        //  
																		  double angle,                //   .
																		  int * kp,                    //  
																		  double  xp[], double yp[] ); //  

//   - 68
//--------------------------------------------------------------------------------
//     .
//---------------------------------------------------------------------------------
void       LIB_FUNC  IntersectCirArc( double xcc, double ycc,       // 
																		  double radc,                  // 
																		  double xac, double yac,       // 
																		  double rada,                  // 
																		  double fa1, double fa2,       //    
																		  short directa,                  // 
																		  int * kp,                     //  
																		  double  xp[], double yp[] );  //  

//   - 69
//--------------------------------------------------------------------------------
//    .
//---------------------------------------------------------------------------------
void       LIB_FUNC    IntersectCurvCurv ( reference p1,             //   
																				 	 reference p2,             //   
																					 int * kp,                 //  
																					 double xp[], double yp[], //  
																					 int maxCount );           //-    

//   - 269
//--------------------------------------------------------------------------------
//       .
//   :
//   1  
//   0     
//   -1    
//   -2    
//   -3     
//   -4      (  ) (?)
//   -5     
//   -6     
//   -7 
//---------------------------------------------------------------------------------
int  LIB_FUNC ksIntersectCurvCurv ( reference p1,      //    
                                    reference p2,      //    
                                    reference array ); //     MathPointParam

//   - 70
//-----------------------------------------------------------------------------
//          .
//-----------------------------------------------------------------------------
void       LIB_FUNC TanLinePointCircle( double x, double y,           // 
					 			  	    								double xc, double yc,         // 
								  											double rad,                   // 
								  											int *kp,                      //  
									  										double xp[], double yp[] );   //  

//   - 278
//-----------------------------------------------------------------------------
//        
//      0   
//-----------------------------------------------------------------------------
int LIB_FUNC  ksTanLinePointCurve( double x, double y,     // 
 	   									                        reference pCur,         // 
                                              reference array );      //     MathPointParam
//   - 71
//-----------------------------------------------------------------------------
//         .
//-----------------------------------------------------------------------------
void       LIB_FUNC TanLineAngCircle( double xc, double yc,      // 
                                      double rad,                // 
                                      double ang,                //  
                                      double xp[],double yp[] ); //  
                                      
//   - 158
//-------------------------------------------------------------------------------
//         .
//  TAN     ,    
//  .      0  4.
//        .
//-------------------------------------------------------------------------------
int        LIB_FUNC TanCircleCircle(  double xc1, double yc1, //  1- 
																			double radius1,         // 1-  
																			double xc2, double yc2, //  2- 
																			double radius2,         // 2-  
																			struct TAN tang[] );    //  
                                      
//   - 72
//-----------------------------------------------------------------------------
//     .
//         
// .  4  CON,   .
//-----------------------------------------------------------------------------
void       LIB_FUNC  CouplingLineLine( double x1, double y1, //   
                                       double angle1,        //  
                                       double x2, double y2, //   
                                       double angle2,        //  
                                       double rad,           //  
                                       int *kp, CON *con );  //     
                                       
//   - 167
//-----------------------------------------------------------------------------
//         
// .   8  CON   
//-----------------------------------------------------------------------------
void LIB_FUNC  ksCouplingLineCircle( double xc, double yc,    // 
                                     double radc,             // 
                                     double x1, double y1,    //   
                                     double angle1,           // 
                                     double rad,              //  
                                     int *kp, CON *con );     //     
                                     
//   - 168
//-----------------------------------------------------------------------------
//         
//     
//   8  CON   
//-----------------------------------------------------------------------------
void LIB_FUNC  ksCouplingCircleCircle( double xc1, double yc1,  //   
                                                  double radc1,            //  
                                                  double xc2, double yc2,  //   
                                                  double radc2,            //  
                                                  double rad,              //  
                                                  int *kp, CON *con );     //     
//   - 73
//-----------------------------------------------------------------------------
//     .
//-----------------------------------------------------------------------------
void       LIB_FUNC Symmetry( double x, double y,       // 
                              double x1, double y1,     //   
                              double x2, double y2,     //  
                              double *xc, double *yc ); //

//   - 74
//-----------------------------------------------------------------------------
//     .
//-----------------------------------------------------------------------------
void       LIB_FUNC   Rotate(  double x, double y,      // 
                               double xc, double yc,    // 
                               double ang,              // 
                               double *xr, double *yr );//

//   - 75
//-----------------------------------------------------------------------------
//    .
//-----------------------------------------------------------------------------
double     LIB_FUNC   DistancePntPnt (  double x1, double y1,  //  
                                        double x2, double y2 );//  

//   - 207
//-----------------------------------------------------------------------------
//      
//-----------------------------------------------------------------------------
double     LIB_FUNC ksDistancePntLineSeg (  double x, double y,    // 
                                            double x1, double y1,  //  
                                            double x2, double y2 );//  

//   - 208
//-----------------------------------------------------------------------------
//      
//-----------------------------------------------------------------------------
double      LIB_FUNC ksDistancePntArc (  double x, double y,           // 
        															   double xac, double yac,       // 
															           double rada,                  // 
															           double fa1, double fa2,       //    
															           short directa );              // 

//   - 209
//-----------------------------------------------------------------------------
//      
//-----------------------------------------------------------------------------
double      LIB_FUNC ksDistancePntCircle (  double x, double y,       // 
        		   									            double xc, double yc,     // 
																		        double rad );             // 

//   - 210
//-----------------------------------------------------------------------------
//      ,    
//-----------------------------------------------------------------------------
double      LIB_FUNC ksDistancePntLine (  double x, double y,     // 
                                          double x1, double y1,   //   
                                          double angle );         // 

//   - 212
//-----------------------------------------------------------------------------
//      ,  
//-----------------------------------------------------------------------------
double LIB_FUNC ksDistancePntLineForPoint (  double x, double y,      // 
                                             double x1, double y1,     //   
                                             double x2, double y2 );   //   

//   - 126
//-----------------------------------------------------------------------------
//         
//  .
//-----------------------------------------------------------------------------
void       LIB_FUNC  Perpendicular (  double x, double y,     //  
                                      double x1, double y1,   //  
                                      double x2, double y2,   //  
                                      double *xp, double *yp);//  
//   - 164
//---------------------------------------------------------------------------
//       
//---------------------------------------------------------------------------
void   LIB_FUNC  MovePoint (  double *x, double *y,       // 
                              double ang, double len );   //   .   

//   - 224
//------------------------------------------------------------------------------
//          ( 0 - 360  ).
//      ,     .
//     -1
// ---
double LIB_FUNC  ksGetCurvePerpendicular( reference curve,      //   
                                          double x, double y ); //  

//   - 223
//------------------------------------------------------------------------------
//        .
//     0
// ---
reference LIB_FUNC ksPointsOnCurve( reference curve,   //   
                                    int       count ); //  



//   - 258
//-----------------------------------------------------------------------------
//       .
//     0.
//-----------------------------------------------------------------------------
int LIB_FUNC  ksGetCurvePointProjection( reference curve,          //   
             					  							   double x, double y,       //  
						          							     double *kx, double *ky ); //   

//   - 225
//------------------------------------------------------------------------------
//      len  .
//      ,     .
//   1     0  .
// ---
int LIB_FUNC  ksMovePointOnCurve( reference curve,      //   
                                  double *x, double *y, //  
                                  double len,           //      
                                  int    dir );         //   (1 -    , -1    )

//   - 228
//------------------------------------------------------------------------------
//   
// ---
double LIB_FUNC  ksGetCurvePerimeter( reference     curve,       //   
                                      unsigned char dimension ); //     [ST_MIX_SM..ST_MIX__M]


//   - 229
//------------------------------------------------------------------------------
//   -      
//            
//    ,   1.
// ---
int LIB_FUNC  ksCalcInertiaProperties( reference     p,           //      
                                       InertiaParam *properties,  //    - 
                                       unsigned char dimension ); //    [ST_MIX_SM..ST_MIX__M]


//   - 989
//------------------------------------------------------------------------------
//   -      
//            
//    ,   1.
// ---
int LIB_FUNC  ksCalcInertiaPropertiesEx( reference     p,                //      
                                         InertiaParam *properties,       //    - 
                                         unsigned char dimension,        //    [ST_MIX_SM..ST_MIX__M]
                                         int           fromObjectArea ); // 1 -       ksViewGetObjectArea
                                                                         // 0 -    


//   - 230
//------------------------------------------------------------------------------
//   -      
//     
//            
// .
// bitVector -   ,  ,
//   (    ).     [ST_MIX_MM..ST_MIX_RV]
//   ( ||- ST_MIX_M|ST_MIX_KG|ST_MIX_RV )
// ---
int LIB_FUNC  ksCalcMassInertiaProperties( reference         p,          //      
                                           MassInertiaParam *properties, //    - 
                                           unsigned int      bitVector,  //  
                                           double            density,    //   /3
                                           double            param );    //   -   ,   - 

//   - 230
//------------------------------------------------------------------------------
//   -      
//     
//            
// .
// bitVector -   ,  ,
//   (    ).     [ST_MIX_MM..ST_MIX_RV]
//   ( ||- ST_MIX_M|ST_MIX_KG|ST_MIX_RV )
// ---
int LIB_FUNC  ksCalcMassInertiaPropertiesEx( reference         p,                //      
                                             MassInertiaParam *properties,       //    - 
                                             unsigned int      bitVector,        //  
                                             double            density,          //   /3
                                             double            param,            //   -   ,   - 
                                             int               fromObjectArea ); // 1 -       ksViewGetObjectArea
                                                                                 // 0 -    


//   - 338
//--------------------------------------------------------------------------
//         
//--------------------------------------------------------------------------
int       LIB_FUNC ksPointIntoMtr( double x, double y,           // 
                                   double *xn, double *yn );     //

//   - 339
//--------------------------------------------------------------------------
//         
//--------------------------------------------------------------------------
int       LIB_FUNC ksPointFromMtr( double x, double y,          // 
                                   double *xn, double *yn );    //

//   - 391
//------------------------------------------------------------------------------
//        
//    0   , 1 -   , 2 -    3 -   
// ---
int LIB_FUNC ksIsPointInsideContour( reference  p,       //  
                                     double x, double y, // 
                                     double precision ); //    1..1E-6
                                   
//   - 340
//--------------------------------------------------------------------------
//      
//--------------------------------------------------------------------------
int       LIB_FUNC ksLengthIntoMtr( double *len );

//   - 341
//--------------------------------------------------------------------------
//       
//--------------------------------------------------------------------------
int       LIB_FUNC ksLengthFromMtr( double *len );

//   - 378
//------------------------------------------------------------------------------
//  
// s = ;     :
// SIN,COS,TAN,ATAN,  -    (    )
// SQRT,EXP,LN,ABS,   - , ,  ,  
// SIND,COSD,TAND,ATAND -    (   )
//  s = "A1 = 100 " -    A1 c  100;
//     
//    1     0   
// ---
int  LIB_FUNC ksCalculate( char   *s,     // 
                           double *rez ); // 

//   - 836
//------------------------------------------------------------------------------
//  
// s = ;     :
// SIN,COS,TAN,ATAN,  -    (    )
// SQRT,EXP,LN,ABS,   - , ,  ,  
// SIND,COSD,TAND,ATAND -    (   )
//  s = "A1 = 100 " -    A1 c  100;
//     
//    1     0    (Unicode)
// ---
int  LIB_FUNC ksCalculateW( LPWSTR  s,     // 
                            double *rez ); // 

#ifdef _UNICODE
#define ksCalculateT  ksCalculateW
#else
#define ksCalculateT  ksCalculate
#endif // !UNICODE


//   - 379
//------------------------------------------------------------------------------
//     
//    1     0   
// ---
int LIB_FUNC ksCalculateReset();

//   - 292
//-----------------------------------------------------------------------------
//          .
//     0
//-----------------------------------------------------------------------------
reference LIB_FUNC ksPointsOnCurveByStep( reference curve, //   
                                          double step );   //   

//   - 293
//-----------------------------------------------------------------------------
//        .
//      ,     .
//     0
//-----------------------------------------------------------------------------
double LIB_FUNC ksDistancePntPntOnCurve( reference curve,      //   
																				 double x1, double y1, //   
                                         double x2, double y2 );

//   - 738
// [24/5/04]
//-----------------------------------------------------------------------------
//       . 
//     0.
//-----------------------------------------------------------------------------
int LIB_FUNC  ksGetCurvePointProjectionEx( reference curve,        //   
             					  							   double x, double y,       //  
																				 double *kx, double *ky,   //   
						          							     double *t );              //  

//   - 738
// [24/5/04]
//-----------------------------------------------------------------------------
//     t   .
//     0.
//-----------------------------------------------------------------------------
int LIB_FUNC  ksGetCurvePoint( reference curve,        //   
						          				 double t,               //  
															 double *x, double *y ); //   

//   - 746
//-----------------------------------------------------------------------------
//       . 
//     0.
//-----------------------------------------------------------------------------
int LIB_FUNC ksGetCurveMinMaxParametr( reference curve,        //   
             					  							 double *tMin,           //       
                                       double *tMax );         //   


//   - 747
//-----------------------------------------------------------------------------
//        
//      
//     0
//-----------------------------------------------------------------------------
double LIB_FUNC ksDistanceT1T2OnCurve( reference curve,  //   
																			 double t1,        //     1
                                       double t2 );      //     2


//   - 754
//-----------------------------------------------------------------------------
//       .
//   :
//   1  
//   0    (         )
//   -1    
//   -2    
//   -3     
//   -4      (  ) (?)
//   -5     
//   -6     
//   -7 
// ---
int  LIB_FUNC ksTanCurvCurv( reference p1,          //      
                             reference p2,          //    
                             reference pointArr1,   //        
                             reference pointArr2 ); //     

} // extern "C"

#endif // __LT_MATH_H