home *** CD-ROM | disk | FTP | other *** search
/ PC Shareware 1997 June / PC_Shareware-1997-06.iso / programy / genesis / geometry.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-16  |  16.5 KB  |  446 lines

  1. /*------------------------------------------------------------------
  2.             Geometry Include
  3.             ----------------
  4.  
  5.     This is the main Geometry include file. Any Geometry
  6.     implementation should include this as it provides
  7.     prototypes for all functions that must be implemented,
  8.     important macros, usefull helper function prototypes
  9.     and includes for any other relevent include files. Tools
  10.     should also include this file in order to get at the
  11.     Geometry code, although the helper functions are not
  12.     relevent to them
  13.  
  14.     (C) Silicon Dream Ltd 1994
  15.  
  16.   ------------------------------------------------------------------
  17.  
  18. Changes:                        Date:
  19. * Created file                        05/10/94
  20. */
  21.  
  22. #ifndef GEOMETRY
  23. #define GEOMETRY
  24.  
  25. #include <windows.h>
  26. #include <atomic.h>
  27. #include <cppmaths.h>
  28.  
  29. /* Handle types. All types are compatible with type Handle */
  30.  
  31. typedef ulong Handle;            // han
  32. typedef Handle HanCoorSys;        // hcsys
  33. typedef Handle HanObject;        // hobj
  34. typedef Handle HanPatch;        // hpat
  35. typedef Handle HanVertex;        // hver
  36. typedef Handle HanNormal;        // hnor
  37. typedef Handle HanEdge;            // hedg
  38. typedef Handle HanLight;        // hli
  39. typedef Handle HanSurf;            // hsur
  40.  
  41. typedef enum HandleType{COORSYS_HANDLE,    // htype
  42.             OBJECT_HANDLE,
  43.             PATCH_HANDLE,
  44.             VERTEX_HANDLE,
  45.             NORMAL_HANDLE,
  46.             SURFACE_HANDLE,
  47.             LIGHT_HANDLE};
  48.  
  49. /* All Geometry and helper functions return the following */
  50.  
  51. typedef ulong GeomErr;            // gerr
  52.  
  53. /* Define the NULL handle. If an implementation uses handles as indexes then
  54.    the indexes must be based at one */
  55.  
  56. #define NULL_HANDLE        ((Handle) 0)
  57.  
  58. /* Top level coordinate system handle */
  59.  
  60. #define HCSYS_TOP        NULL_HANDLE
  61.  
  62. /* Define coordinate system types */
  63.  
  64. #define CT_LEFTHAND        16384
  65. #define CT_RIGHTHAND        32768
  66.  
  67. /* usTransType values for ModCoorSys */
  68.  
  69. #define MCS_TRANS_LAST        0
  70. #define MCS_TRANS_FIRST        1
  71. #define MCS_REPLACE        2
  72.  
  73. /* Any implementation should not allow patches with greater number of edges
  74.    than the following, as this will prevent tools and helper functions using
  75.    static or local buffers on calls such as QryPatch, meaning that either the
  76.    calling code or the geometry engine is forced to dynamically allocate the
  77.    buffers all the time */
  78.  
  79. #define MAX_PATCH_EDGES        20
  80.  
  81. /* usFlags values for DefPatch and AddPatch */
  82.  
  83. #define DP_AUTOSMOOTH        1
  84. #define DP_SMOOTH_BY_SURF    2
  85. #define DP_SMOOTH_BY_ANGLE    4
  86. #define DP_DONT_VALIDATE    8
  87. #define DP_CONVEX        16
  88. #define DP_ATTEMPT_TO_FIX_PLANE    32
  89.  
  90. #pragma pack(2)        // ushorts should be word NOT dword aligned
  91.  
  92. typedef struct Colourtag        // col
  93.     {
  94.     byte            byRed;        // Red component
  95.     byte            byGrn;        // Green component
  96.     byte            byBlu;        // Blue component
  97.     } Colour;
  98.  
  99. typedef struct ViewParamstag        // vp
  100.     {
  101.     float            fAngX;        // Horizontal view angle
  102.     float            fAngY;        // Vertical view angle
  103.     float            fClipFront;    // Z depth of the front clipping plane
  104.     float            fClipBack;    // Z depth of the back clipping plane
  105.     ushort            usResX;        // X resolution of the bitmap
  106.     ushort            usResY;        // Y resolution of the bitmap
  107.     } ViewParams;
  108.  
  109. typedef struct VertInfotag        // vi
  110.     {
  111.     Vec            vec;        // Vertex position
  112.     ulong            ulNumPatches;    // Number of patches using vertex
  113.     ulong            ulRef;        // Reference to first patch (used for QryVertPatch)
  114.     float            fScrnX;        // Last screen X coor rendered
  115.     float            fScrnY;        // Last screen Y coor rendered
  116.     ulong            ulUser;        // User data
  117.     HanVertex        hverNext;    // Handle to next vertex in object
  118.     } VertInfo;
  119.  
  120. typedef struct NormInfotag        // ni
  121.     {
  122.     Vec            vec;        // Normal direction
  123.     ulong            ulUser;        // User data
  124.     HanNormal        hnorNext;    // Handle to next normal in object
  125.     } NormInfo;
  126.  
  127. #define PI_FLAT            1
  128. #define PI_VISIBLE        2
  129.  
  130. typedef struct PatchInfotag        // pi
  131.     {
  132.     ushort            usNumEdges;    // Number of edges (verts and norms)
  133.     ushort            usFlags;    // Patch flag values (PI_ values)
  134.     HanSurf            hsur;        // Surface handle
  135.     HanVertex        *ahver;        // Ptr to an array of vertex handles
  136.     HanNormal        *ahnor;        // Ptr to an array of normal handles
  137.     Vec            vecNorm;    // Normal of plane of patch
  138.     ulong            ulUser;        // User data
  139.     HanPatch        hpatNext;    // Handle to next patch in object
  140.     } PatchInfo;
  141.  
  142. typedef struct EdgeInfotag        // ei
  143.     {
  144.     HanVertex        hverA;        // Handle to vertex at one endpoint
  145.     HanVertex        hverB;        // Handle to vertex at other endpoint
  146.     HanPatch        hpatAB;        // Handle to patch using endpoints A to B
  147.     HanPatch        hpatBA;        // Handle to patch using endpoints B to A
  148.     HanEdge            hedgNext;    // Handle to next edge in object
  149.     } EdgeInfo;
  150.  
  151. typedef struct ObjectInfotag        // oi
  152.     {
  153.     ulong            ulNumVerts;    // Number of verticies used by object
  154.     ulong            ulNumNorms;    // Number of normals used by object
  155.     ulong            ulNumPatches;    // Number of patches used by object
  156.     ulong            ulNumEdges;    // Number of edges used by object
  157.     float            fNewVertTol;    // Indication of how close verticies can be
  158.     ulong            ulMemUsed;    // Total memory used by object (in bytes)
  159.     ushort            usCoorType;    // Coor type of object (CT_* value)
  160.     HanCoorSys        hcsys;        // Coor system object belongs to
  161.     HanVertex        hverFirst;    // Handle to first vertex
  162.     HanNormal        hnorFirst;    // Handle to first normal
  163.     HanPatch        hpatFirst;    // Handle to first patch
  164.     HanEdge            hedgFirst;    // Handle to first edge
  165.     ulong            ulUser;        // User data
  166.     HanObject        hobjNext;    // Handle to next object in coor system
  167.     } ObjectInfo;
  168.  
  169. typedef struct CoorSysInfotag        // csi
  170.     {
  171.     ushort            usType;        // Coordinate system type (CT_* value)
  172.     Mat            matToParent;    // Our position relative to parent
  173.     Mat            matFromParent;    // Parents position relative to us
  174.     HanCoorSys        hcsysParent;    // Handle to parent coordinate system
  175.     HanCoorSys        hcsysNext;    // Handle to next sibling coordinate system
  176.     HanCoorSys        hcsysFirstChild;// Handle to first child coordinate system
  177.     HanLight        hliFirst;    // Handle to first light in coordinate system
  178.     HanObject        hobjFirst;    // Handle to first object in coordinate system
  179.     ulong            ulUser;        // User data
  180.     } CoorSysInfo;
  181.  
  182. #define LI_DIRECTIONAL        1
  183. #define LI_DIMINISHING        2
  184.  
  185. typedef struct LightDeftag        // ld
  186.     {
  187.     Vec            vecPos;        // Light position
  188.     Vec            vecDir;        // Direction of light
  189.     ushort            usFlags;    // Flags (LI_* values)
  190.     float            fInt;        // Intensity (0.0 - 1.0)
  191.     float            fAng;        // Angle of spread of light
  192.     Colour            col;        // Colour of light
  193.     float            fHalfIntDist;    // Distance over which light int halves
  194.     HanCoorSys        hcsys;        // Coor system light belongs to
  195.     ulong            ulUser;        // User data
  196.     HanLight        hliNext;    // Handle to next light in coor system
  197.     } LightDef;
  198.  
  199. /* Surface type flags */
  200.  
  201. #define DS_TEXTURE        1
  202. #define DS_RECURSIVE_TEXTURE    2
  203. #define DS_TILE_TEXTURE        4
  204. #define DS_BUMPED        8
  205. #define DS_ALL            (DS_TEXTURE | DS_RECURSIVE_TEXTURE | DS_TILE_TEXTURE | DS_BUMPED)
  206.  
  207. /* Specular reflection characteristic type */
  208.  
  209. #define SRC_DULL        0
  210. #define SRC_ROCK        SRC_DULL    // All these do not have
  211. #define SRC_RUBBER        SRC_DULL    // specular reflections
  212. #define SRC_WOOD        SRC_DULL    // and are therefore the
  213. #define SRC_FABRIC        SRC_DULL    // same as SRC_DULL
  214. #define SRC_CONSTANT        1
  215. #define SRC_LINEAR        2
  216. #define SRC_SILVER        3
  217. #define SRC_GOLD        4
  218. #define SRC_GLASS        5
  219. #define SRC_BRASS        6
  220. #define SRC_COPPER        7
  221. #define SRC_ALUMINIUM        8
  222. #define SRC_IRON        9
  223. #define SRC_PLASTIC        10
  224. #define SRC_WATER        11
  225. #define SRC_CHINA        12
  226. #define SRC_LEATHER        13
  227. #define SRC_SILK        14
  228. #define SRC_100PCT_GLOSS    15
  229. #define SRC_75PCT_GLOSS        16
  230. #define SRC_50PCT_GLOSS        17
  231. #define SRC_25PCT_GLOSS        18
  232.  
  233. /* Handle used to represent see through indexes in recursive textures */
  234.  
  235. #define HSUR_SEE_THROUGH    ((Handle) ULONG_MAX)
  236.  
  237. typedef struct SurfTypetag        // st
  238.     {
  239.     Colour            col;        // Basic RGB colour
  240.     ushort            usFlags;    // Flags (DS_* values)
  241.     ushort            usSpecRefChar;    // Specifies specular reflection characteristics
  242.     float            fShineCoef;    // Degree of 'polishedness' (0.0 - 1.0)
  243.     float            fTransCoef;    // Degree of 'see throughness' (0.0 - 1.0)
  244.     HanCoorSys        hcsysTex;    // Coor system texture is placed in
  245.     Mat            matTex;        // Orientation within coor sys of texture bitmap
  246.     HanSurf            hsurSurf0;    // Surface showing for pixel value 0
  247.     HanSurf            hsurSurf1;    // Surface showing for pixel value 1
  248.     HanSurf            hsurSurf2;    // Surface showing for pixel value 2
  249.     HanSurf            hsurSurf3;    // Surface showing for pixel value 3
  250.     float            fBumpHeight;    // Maximum height of bump mapping
  251.     ulong            ulUser;        // User data
  252.     HanSurf            hsurNext;    // Handle to next surface
  253.     char            szFNTex[128];    // Texture filename
  254.     } SurfType;
  255.  
  256. #pragma pack()
  257.  
  258. /* Geometry function prototypes */
  259.  
  260. #define LSREPORT_LOADING        0
  261. #define LSREPORT_SAVING            1
  262. #define LSREPORT_POLYGONS        2
  263. extern "C"
  264.     {
  265.     typedef void fnLoadSaveCallback (ulong ulNumBytes, ushort usReportType);
  266.     typedef void fnDelCallback (Handle han, HandleType htype, ulong ulUser);
  267.     }
  268.  
  269. GeomErr _dyn GetErrorText (GeomErr gerr, char *szBuff, ushort usBuffSize);
  270. GeomErr _dyn Initialise (void);
  271. GeomErr _dyn Terminate (void);
  272. GeomErr _dyn AddCoorSys (HanCoorSys hcsysParent, Mat const &matToParent, Mat const &matFromParent,
  273.              ushort usType, HanCoorSys *phcsys);
  274. GeomErr _dyn DelCoorSys (HanCoorSys hcsys);
  275. GeomErr _dyn QryCoorSys (HanCoorSys hcsys, CoorSysInfo *pcsi);
  276. GeomErr _dyn ModCoorSys (HanCoorSys hcsys, Mat const &matToParent, Mat const &matFromParent,
  277.              ushort usTransType, ushort usNewType);
  278. GeomErr _dyn SetCamera (HanCoorSys hcsys, Vec const &vecPos, Vec const &vecDir, Vec const &vecUp,
  279.             ViewParams *pvp);
  280. GeomErr _dyn AddObject (HanCoorSys hcsys, float fNewVertTol, HanObject *phobj);
  281. GeomErr _dyn DelObject (HanObject hobj);
  282. GeomErr _dyn QryObject (HanObject hobj, ObjectInfo *poi);
  283. GeomErr _dyn MoveObject (HanObject hobj, Vec const &vec);
  284. GeomErr _dyn ScaleObject (HanObject hobj, float fScale);
  285. GeomErr _dyn PrtObject (HanObject hobj);
  286. GeomErr _dyn AddVertex (HanObject hobj, Vec const &vec, HanVertex *phver);
  287. GeomErr _dyn DelVertex (HanObject hobj, HanVertex hver);
  288. GeomErr _dyn QryVertex (HanObject hobj, HanVertex hver, VertInfo *pvi);
  289. GeomErr _dyn ModVertex (HanObject hobj, HanVertex hver, Vec const &vec);
  290. GeomErr _dyn AddNormal (HanObject hobj, Vec const &vec, HanNormal *phnor);
  291. GeomErr _dyn DelNormal (HanObject hobj, HanNormal hnor);
  292. GeomErr _dyn QryNormal (HanObject hobj, HanNormal hnor, NormInfo *pni);
  293. GeomErr _dyn ModNormal (HanObject hobj, HanNormal hnor, Vec const &vec);
  294. GeomErr _dyn QryEdge (HanObject hobj, HanEdge hedg, EdgeInfo *pei);
  295. GeomErr _dyn AddLight (HanCoorSys hcsys, LightDef *pld, HanLight *phli);
  296. GeomErr _dyn DelLight (HanLight hli);
  297. GeomErr _dyn QryLight (HanLight hli, LightDef *pld);
  298. GeomErr _dyn ModLight (HanLight hli, LightDef *pld);
  299. GeomErr _dyn SetAmbient (float fInt);
  300. GeomErr _dyn DefPatch (HanObject hobj, ushort usNumEdges, ushort usFlags, float fSmoothAng,
  301.                HanVertex *ahver, HanNormal *ahnor, HanSurf hsur, ushort *pusNumPats,
  302.                HanPatch *ahpat);
  303. GeomErr _dyn DelPatch (HanObject hobj, HanPatch hpat);
  304. GeomErr _dyn QryPatch (HanObject hobj, HanPatch hpat, PatchInfo *ppi);
  305. GeomErr _dyn ModPatchSurf (HanObject hobj, HanPatch hpat, HanSurf hsur);
  306. GeomErr _dyn QryVertPatch (ulong *pulRef, HanPatch *phpat);
  307. GeomErr _dyn DeleteRenBitmap (BITMAPINFO *pbmi);
  308. GeomErr _dyn Render (BITMAPINFO **ppbmi);
  309. GeomErr _dyn UpdateImage (ulong ulHDC, BITMAPINFO *pbmi, ushort usX, ushort usY);
  310. GeomErr _dyn DefSurfType (SurfType *pst, bool bReuse, HanSurf *phsur);
  311. GeomErr _dyn DelSurfType (HanSurf hsur);
  312. GeomErr _dyn QrySurfType (HanSurf hsur, SurfType *pst, BITMAPINFOHEADER *pbmih,
  313.               ulong *pulNumPats);
  314. GeomErr _dyn GetFirstSurfType (HanSurf *phsur);
  315. GeomErr _dyn SetUserData (Handle han, HandleType htype, ulong ulUser);
  316. GeomErr _dyn SetDelCallback (fnDelCallback *DelCallback);
  317. GeomErr _dyn ModSurfType (HanSurf hsur, SurfType *pst);
  318. GeomErr _dyn Get3DLine (HanCoorSys hcsys, Vec const &vecA, Vec const &vecB,
  319.             float *pfStartX, float *pfStartY, float *pfEndX, float *pfEndY);
  320. GeomErr _dyn Get3DPoint (HanCoorSys hcsys, Vec const &vec, float *pfX, float *pfY);
  321. GeomErr _dyn SaveScene (HFILE hfile, HanCoorSys hcsys,
  322.             ulong *pulNumCSys, HanCoorSys *ahcsys,
  323.             ulong *pulNumObjs, HanObject *ahobj,
  324.             fnLoadSaveCallback *Report);
  325. GeomErr _dyn LoadScene (HFILE hfile, HanCoorSys hcsysParent, char *szTexPath,
  326.             ulong *pulNumCSys, HanCoorSys *ahcsys,
  327.             ulong *pulNumObjs, HanObject *ahobj,
  328.             fnLoadSaveCallback *Report);
  329. GeomErr _dyn LoadLWObject (HFILE hfile, HanCoorSys hcsys,
  330.                char *szTexPath, HanObject *phobj,
  331.                fnLoadSaveCallback *Report);
  332.  
  333. /* Standard error values */
  334.  
  335. #define GERR_OK                0L
  336. #define GERR_BASE            0x1000000
  337. #define GERR_COINCIDENT_POINTS        (GERR_BASE+0)
  338. #define GERR_THIN_SEGMENT        (GERR_BASE+1)
  339. #define GERR_NOT_ON_PLANE        (GERR_BASE+2)
  340. #define GERR_OUT_OF_MEMORY        (GERR_BASE+3)
  341. #define GERR_BUFFER_TOO_SMALL        (GERR_BASE+4)
  342. #define GERR_NOT_ENOUGH_POINTS        (GERR_BASE+5)
  343. #define GERR_IN_USE            (GERR_BASE+6)
  344. #define GERR_CANT_SET_CAM_IN_TOP    (GERR_BASE+7)
  345. #define GERR_INVALID_LIGHT_INT        (GERR_BASE+8)
  346. #define GERR_TOO_MANY_SURFACE_TYPES    (GERR_BASE+9)
  347. #define GERR_BITMAP_FILE_NOT_FOUND    (GERR_BASE+10)
  348. #define GERR_NOT_A_BMP_FILE        (GERR_BASE+11)
  349. #define GERR_IMAGE_SIZE_NOT_MULT_4    (GERR_BASE+12)
  350. #define GERR_NOT_VISIBLE        (GERR_BASE+13)
  351. #define GERR_TOO_MANY_BITMAPS        (GERR_BASE+14)
  352. #define GERR_BITMAP_TOO_SMALL        (GERR_BASE+15)
  353. #define GERR_INVALID_HANDLE        (GERR_BASE+16)
  354. #define GERR_GEOMETRY_DIDNT_CREATE_BMP    (GERR_BASE+17)
  355. #define GERR_INT_PROCESSING_ERROR    (GERR_BASE+18)
  356. #define GERR_INVALID_GEN_FILE        (GERR_BASE+19)
  357. #define GERR_INVALID_OPP_IN_TOP        (GERR_BASE+20)
  358. #define GERR_INVALID_LIGHT_ANG        (GERR_BASE+21)
  359. #define GERR_INVALID_IFF_FILE        (GERR_BASE+22)
  360. #define GERR_NO_FORM_CHUNK        (GERR_BASE+23)
  361. #define GERR_NO_LWOB_FORM        (GERR_BASE+24)
  362. #define GERR_INVALID_PNTS_CHUNK        (GERR_BASE+25)
  363. #define GERR_INVALID_SRFS_CHUNK        (GERR_BASE+26)
  364. #define GERR_INVALID_POLS_CHUNK        (GERR_BASE+27)
  365. #define GERR_INVALID_SURF_CHUNK        (GERR_BASE+28)
  366. #define GERR_INVALID_COLR_CHUNK        (GERR_BASE+29)
  367. #define GERR_INVALID_FLAG_CHUNK        (GERR_BASE+30)
  368. #define GERR_INVALID_SPEC_CHUNK        (GERR_BASE+31)
  369. #define GERR_INVALID_TRAN_CHUNK        (GERR_BASE+32)
  370. #define GERR_INVALID_GLOS_CHUNK        (GERR_BASE+33)
  371. #define GERR_INVALID_XTEX_CHUNK        (GERR_BASE+34)
  372. #define GERR_INVALID_TFLG_CHUNK        (GERR_BASE+35)
  373. #define GERR_INVALID_TSIZ_CHUNK        (GERR_BASE+36)
  374. #define GERR_INVALID_TCTR_CHUNK        (GERR_BASE+37)
  375. #define GERR_INVALID_TAMP_CHUNK        (GERR_BASE+38)
  376. #define GERR_COMPLEX_OUTLINE        (GERR_BASE+39)
  377. #define GERR_TEXTURE_FILE_NOT_FOUND    (GERR_BASE+40)
  378. #define GERR_CANT_CHANGE_TYPE        (GERR_BASE+41)
  379. #define GERR_VISIBLE_FRONT_CLIP        (GERR_BASE+42)
  380. #define GERR_UNKNOWN_ERROR        (GERR_BASE+500)
  381.  
  382. /*********************************** Helper section ***********************************/
  383.  
  384. /* usType values for ExtractVecs */
  385.  
  386. #define EV_NORMS        0
  387. #define EV_VERTS        1
  388.  
  389. /* usFlags values for ValidPatch */
  390.  
  391. #define VP_CHECK_THIN_SEGMENT    1
  392. #define VP_CHECK_ON_PLANE    2
  393.  
  394. /* usFlag values for CompNormal (CT_* values can also be used) */
  395.  
  396. #define CN_DIRECTION_IMPORTANT    1
  397. #define CN_CONVEX        2
  398.  
  399. /* usFlags values for Split */
  400.  
  401. #define SP_SUPPORT_CONCAVE    1
  402. #define SP_RETURN_INDEX        2
  403.  
  404. /* usFlags for Autosmooth are the DP_SMOOTH_* flags */
  405.  
  406. typedef struct ASUndoBufftag        // asub
  407.     {
  408.     HanObject        hobj;
  409.     ushort            usNew;
  410.     ushort            usMod;
  411.     HanNormal        *ahnorNew;
  412.     HanNormal        *ahnorMod;
  413.     Vec            *avecMod;
  414.     } ASUndoBuff;
  415.  
  416. /* Helper functions */
  417.  
  418. #define Gerr(x) RegisterError((GeomErr) x, __FILE__, __LINE__)
  419. GeomErr RegisterError (GeomErr gerrIn, char *szFNIn, ushort usLineIn);
  420.  
  421. GeomErr GetHlpErrorText (GeomErr gerr, char *szBuff, ushort usBuffSize);
  422. GeomErr ValidPatch (Vec *avec, ushort usNumVecs, ushort usFlags);
  423. GeomErr ExtractVecs (HanObject hobj, ushort usType, Handle *ahan, ushort usNum, Vec **pavec);
  424. GeomErr CompNormal (Vec *avec, ushort usNumVecs, ushort usFlags, Vec *pvecNorm);
  425. GeomErr Split (Vec *avecMain, ushort usNumMainVecs,
  426.            ushort usMaxPerPatch, ushort usFlags,
  427.            ushort *pusNumSets, void **apvSets, ushort *ausNumInSets);
  428. GeomErr Autosmooth (HanObject hobj, HanVertex *ahver, ushort usNumVerts, Vec &vecNorm,
  429.             ushort usFlags, HanSurf hsur, float fSmoothAng, HanNormal *ahnor,
  430.             ASUndoBuff *pasub);
  431. GeomErr CommitAS (ASUndoBuff *pasub);
  432. GeomErr UndoAS (ASUndoBuff *pasub);
  433. GeomErr LoadBmp (char *szFN, BITMAPINFO **ppbmi);
  434. GeomErr SaveSceneHlp (HFILE hfile, HanCoorSys hcsys,
  435.               ulong *pulNumCSys, HanCoorSys *ahcsys,
  436.               ulong *pulNumObjs, HanObject *ahobj,
  437.               fnLoadSaveCallback *Report);
  438. GeomErr LoadSceneHlp (HFILE hfile, HanCoorSys hcsysParent, char *szTexPath,
  439.               ulong *pulNumCSys, HanCoorSys *ahcsys,
  440.               ulong *pulNumObjs, HanObject *ahobj,
  441.               fnLoadSaveCallback *Report);
  442. GeomErr LoadLWObjectHlp (HFILE hfile, HanCoorSys hcsys,
  443.              char *szTexPath, HanObject *phobj,
  444.              fnLoadSaveCallback *Report);
  445. #endif
  446.