////////////////////////////////////////////////////////////////////////////////
//
// LHead3d.h  
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __LHEAD3D_H
#define __LHEAD3D_H

interface IDocument3D;
interface IModelLibrary;
interface IEntity;
interface IRequestInfo;
struct    ksAttribute; 
struct    ksAttributeW; 
interface IAttribute3D;
interface IObjectsFilter3D;
interface IPart;

//      
typedef BOOL(__stdcall * USERSELECTFILTERPROC)( IEntity* );
//    
typedef int(__stdcall * USERSELECTCALLBACKPROC)( IEntity*, IRequestInfo* );


//  -------------------------------------------------------------------
DEFINE_GUID(IID_IPlaneDefaultXOYDefinition,       0x7AA0E540L, 0x0324, 0x11D4, 0xA3, 0x0E, 0x00, 0xC0, 0x26, 0xEE, 0x09, 0x4F);
DEFINE_GUID(IID_IPlaneDefaultXOZDefinition,       0x7AA0E540L, 0x0325, 0x11D4, 0xA3, 0x0E, 0x00, 0xC0, 0x26, 0xEE, 0x09, 0x4F);
DEFINE_GUID(IID_IPlaneDefaultYOZDefinition,       0x7AA0E540L, 0x0326, 0x11D4, 0xA3, 0x0E, 0x00, 0xC0, 0x26, 0xEE, 0x09, 0x4F);
DEFINE_GUID(IID_IDefaultCSDefinition,             0x7AA0E540L, 0x0327, 0x11D4, 0xA3, 0x0E, 0x00, 0xC0, 0x26, 0xEE, 0x09, 0x4F);

//  --------------------------------------------------------------------
DEFINE_GUID(IID_IHoleDefinition,                  0x7AA0E540L, 0x0383, 0x11D4, 0xA3, 0x0E, 0x00, 0xC0, 0x26, 0xEE, 0x09, 0x4F);


#define LIB_FUNC WINAPI
extern "C"
{
//   - 2   kAPI3D5.dll
//-----------------------------------------------------------------------------
//     - 3d 
//---
IDocument3D* LIB_FUNC  ksGet3dDocument();

//   - 3   kAPI3D5.dll
//------------------------------------------------------------------------------
//     3d 
//  NULL,    
// ---
IDocument3D* LIB_FUNC ksGetActive3dDocument();

//   - 4   kAPI3D5.dll
//------------------------------------------------------------------------------
//    3d ,   
//  NULL,   
//  doc == 0,    3D 
// ---
IDocument3D* LIB_FUNC ksGet3dDocumentFromReference( long doc );

//   - 5   kAPI3D5.dll
//------------------------------------------------------------------------------
//    3d ,   
//  NULL,   
// doc -  3D 
// ---
long LIB_FUNC ksGetReferenceFrom3dDocument( IDocument3D * doc );

//   - 8   kAPI3D5.dll
//------------------------------------------------------------------------------
//      
// ---
IModelLibrary* LIB_FUNC ksGetModelLibrary();

//   - 10   kAPI3D5.dll
//-----------------------------------------------------------------------------
//            libname
//   libname = NULL-     
//         0  
//  pObj -   :
//       NULL  LPDOCUMENT3D -   
//       LPFEATURECOLLECTION   -   
//       LPFEATURE             -    
//              ,  , ,  .
//
// ---
IAttribute3D* LIB_FUNC ksCreateAttr3D( LPUNKNOWN pObj,    //      
                                     ksAttribute * attr,//   
                                     double attrID,     //   
                                     char *libname );   //    

//   - 11   kAPI3D5.dll
//------------------------------------------------------------------------------
//   
//    1     0  
// ---
int LIB_FUNC ksDeleteAttr3D( LPUNKNOWN pObj,       //       
                             IAttribute3D * pAttr,  //    
                             char * password );    //   

//   - 17   kAPI3D5.dll
//------------------------------------------------------------------------------
//   
//    1     0  
//  (Unicode)
// ---
int LIB_FUNC ksDeleteAttr3DW( LPUNKNOWN pObj,       //       
                              IAttribute3D * pAttr,  //    
                              LPWSTR password );    //   

#ifdef _UNICODE
#define ksDeleteAttr3DT  ksDeleteAttr3DW
#else
#define ksDeleteAttr3DT  ksDeleteAttr3D
#endif // !UNICODE


//   - 12   kAPI3D5.dll
//------------------------------------------------------------------------------
//           .
//            0  .
// ---
IAttribute3D * LIB_FUNC ksChoiceAttr3D ( LPUNKNOWN  pObj ); //      

//   - 13   kAPI3D5.dll
//------------------------------------------------------------------------------
//      3D.
// ---
IObjectsFilter3D * LIB_FUNC ksGetObjectsFilter3D();


//   - 14   kAPI3D5.dll
//-----------------------------------------------------------------------------
//            libname
//   libname = NULL-     
//         0  
//  pObj -   :
//       NULL  LPDOCUMENT3D -   
//       LPFEATURECOLLECTION   -   
//       LPFEATURE             -    
//              ,  , ,  .
//
// sourcePart -  :
//       NULL  pTop_Part    -      
//       ! = NULL              -       -     - 
// ---
IAttribute3D* LIB_FUNC ksCreateAttr3DEx( LPUNKNOWN     pObj,      //      
                                         IPart       * sorcePart, //  - 
                                         ksAttribute * attr,      //   
                                         double        attrID,    //   
                                         char        * libname ); //    

//   - 17   kAPI3D5.dll
//-----------------------------------------------------------------------------
//            libname
//   libname = NULL-     
//         0  
//  pObj -   :
//       NULL  LPDOCUMENT3D -   
//       LPFEATURECOLLECTION   -   
//       LPFEATURE             -    
//              ,  , ,  .
//
// sourcePart -  :
//       NULL  pTop_Part    -      
//       ! = NULL              -       -     - 
// (Unicode)
// ---
IAttribute3D* LIB_FUNC ksCreateAttr3DExW( LPUNKNOWN     pObj,      //      
                                          IPart       * sorcePart, //  - 
                                          ksAttributeW * attr,      //   
                                          double        attrID,    //   
                                          LPWSTR        libname ); //    

#ifdef _UNICODE
#define ksCreateAttr3DExT  ksCreateAttr3DExW
#else
#define ksCreateAttr3DExT  ksCreateAttr3DEx
#endif // !UNICODE

//-----------------------------------------------------------------------------
//     3D  
//  TRUE,   
// off - true,  false 
// doc -  3D 
//  doc == NULL,    3D 
// ---
BOOL LIB_FUNC ksCheckObjectsValidOffFrom3dDocument( IDocument3D* doc, BOOL off );

}

#endif // __LHEAD3D_H
