//************************************** // This is the base class of your DLL interface // All methods of CPA_ObjectDLLBase are // present in that class. //************************************** #ifndef __3DGINTERF_HPP__ #define __3DGINTERF_HPP__ //#include "ObjDLLb.hpp" #undef CPA_WANTS_IMPORT #undef CPA_EXPORT #define CPA_WANTS_EXPORT #include "OGD\3DObject.hpp" #undef CPA_WANTS_EXPORT #define CPA_WANTS_IMPORT class CDlgCaract; class CPA_MainWorld; class CPA_KeyActionConfiguration; class CPA_DialogList; class CPA_SuperObject; class EDT_Model; class FRMBase; class CSplitFrame; class GeometricFile; //ROMTEAM WorldEditor (Viorel Preoteasa 20/01/98) class CDlgEditPoints; //ENDROMTEAM WorldEditor (Viorel Preoteasa) //************************************** // define //************************************** #define C_szGenDoorsDataPath "Edt_Data\\Objects\\Actors\\Models\\GenDoors" #define C_szGeometricType "Geometric" #define C_szFormModif "Form" #define C_szMaterialModif "Material" // BEGIN CPA2 Cristi Petrescu 98-02- #define C_szFMDModif "FMD" // END CPA2 Cristi Petrescu 98-02- #define C_szModifActionName "Modif-Geometric" #define C_szModifListActionName "Edit-Geometric-Modifications" #define C_szOGDModuleNameEro "OGD Module" typedef CList CListOfString; // if you want only one instance of your DLL // activate the next line #define DLL_ONLY_ONE_INSTANCE //---------------------------------------------------------- // Object DLL interface class //---------------------------------------------------------- //ROMTEAM WorldEditor (Nicu 16/01/98) class CTriEdit; class CEdThread; //ENDROMTEAM WorldEditor (Nicu) // BEGIN CPA2 Cristi Petrescu 98-02- typedef struct tdstModifFile_ { CPA_SectionObject *p_oModifSection; CPA_List oListOfModifiedObjects; } tdstModifFile; // END CPA2 Cristi Petrescu 98-02- //CPA2 Corneliu Babiuc 02-09-98 (duplicated points) class CPA_PointsList { private: CPA_SuperObject * m_pSelectedSuperObject; //superobject owner of points Geometry3D * m_pSelectedObject; //object owner of points public: int m_iNbSelectedPoints; //number of selected points ACP_tdxIndex * m_xSelectedPointsIndex; //array of points indices float * m_fDist; //constructor CPA_PointsList(CPA_SuperObject * p_SO, Geometry3D * p_Object) { m_iNbSelectedPoints = 0; m_pSelectedSuperObject = p_SO; m_pSelectedObject = p_Object; m_xSelectedPointsIndex = new ACP_tdxIndex[p_Object->GetStruct()->xNbPoints]; m_fDist = new float[p_Object->GetStruct()->xNbPoints]; } //copy constructor CPA_PointsList(const CPA_PointsList& Points) { m_pSelectedSuperObject = Points.m_pSelectedSuperObject; m_pSelectedObject = Points.m_pSelectedObject; m_iNbSelectedPoints = Points.m_iNbSelectedPoints; m_xSelectedPointsIndex = new ACP_tdxIndex[m_iNbSelectedPoints]; memcpy(m_xSelectedPointsIndex, Points.m_xSelectedPointsIndex, m_iNbSelectedPoints * sizeof(ACP_tdxIndex)); m_fDist = new float[m_iNbSelectedPoints]; memcpy(m_fDist, Points.m_fDist, m_iNbSelectedPoints * sizeof(float)); } //destructor ~CPA_PointsList() { delete []m_xSelectedPointsIndex; delete []m_fDist;} //access functions CPA_SuperObject * GetSuperObject (void) {return m_pSelectedSuperObject;} Geometry3D * GetObject (void) {return m_pSelectedObject;} int GetNumberOfSelectedPoints (void) {return m_iNbSelectedPoints;} void SetDistance (int iIndex, float fDist) { ASSERT (iIndex < m_iNbSelectedPoints); m_fDist[iIndex] = fDist;} float GetDistance (int iIndex) { ASSERT (iIndex < m_iNbSelectedPoints); return m_fDist[iIndex];} ACP_tdxIndex GetDeletePoint() {return m_xSelectedPointsIndex[m_iNbSelectedPoints - 1];} ACP_tdxIndex GetPoint (int iIndex) {return m_xSelectedPointsIndex[iIndex];} //function to get the index of a selected point (in local list !!!) //returns the index if the point is in selection list, otherwise a negative value int GetPointIndexInSelection(ACP_tdxIndex xPointIndex) { for (int i=0; i < m_iNbSelectedPoints; i++) if (m_xSelectedPointsIndex[i] == xPointIndex) return i; return -1; } void AddPointToSelection (ACP_tdxIndex xPointIndex) {m_xSelectedPointsIndex[m_iNbSelectedPoints++] = xPointIndex;} //function to remove a point from selection //gets as perameter the index in selection list !!! void RemovePointFromSelection(int iIndex) { ASSERT(iIndex < m_iNbSelectedPoints); for ( ;iIndex m_lstListOfSelectedPoints; BOOL m_bSelectDuplicatesMode; // the above boolean tells if the last move was in normal mode (TRUE) or duplicates mode (FALSE) BOOL m_bLastMoveWasNormal; //END CPA2 Corneliu Babiuc 02-09-98 (duplicated points) BOOL m_bLButtonIsDown; int m_iDeletePoint; BOOL m_bShiftUsed; MTH3D_tdstVector m_stTranslatedPoint; BOOL m_bVolSelection; //ACP_tdxIndex m_xSelectedPointIndex; //ENDROMTEAM WorldEditor (Viorel Preoteasa) //--------------------------------------- BOOL m_bPointSelected; MTH3D_tdstVector m_st3DTranslation; BOOL m_bPointTranslated; CDlgCaract *m_p_DlgCaract; CPA_KeyActionConfiguration *m_p_oKeyConfiguration; BOOL m_bCtrlUsed; CPA_DialogList *m_p_DlgList; CSplitFrame *m_p_oSplitterLeft; CString m_csPreviousSelectMode; CPA_BaseObjectList m_oListOfSuperObjectPO; BOOL m_bShowWarnings; BOOL m_bStopWarnings; //ROMTEAM WorldEditor (Nicu 05/12/97) void *m_LastGeom; // save GPO geom //ENDROMTEAM WorldEditor (Nicu) // ANNECY MT 23/02/98 { BOOL m_bShowBoundingVolume; CPA_SuperObject *m_p_oBoundingVolumeSprObj; Geometry3D *m_p_oBoundingVolumeObject; // END ANNECY MT } Geometry3D *m_p_ModifiedObject; ACP_tdxHandleOfElement m_hModifiedElement; GMT_tdxHandleToGameMaterial m_hElementMaterial; public: // LinkTable for Modif Section //CListOfString m_oListOfModifSection; //CListOfString m_oListOfModificationFiles; // BEGIN CPA2 Cristi Petrescu 98-02- CPA_List m_oListOfModifiedFiles; // END CPA2 Cristi Petrescu 98-02- public: //---------------------------------------------------------- // Constructor //---------------------------------------------------------- Geometry3D_Interface(); //CPA2 Corneliu Babiuc 14-09-98 (duplicated points) ~Geometry3D_Interface(void); //CPA2 Corneliu Babiuc 14-09-98 (duplicated points) // ACP MEssages Functions overload // BOOL fn_bPreTranslateMessage (MSG *); void fn_vJustAfterRegistered (void); void fn_vConstruct (void); // void fn_vRefreshDatas (void); // void fn_vAddObjectsToDraw (GLD_tdstViewportAttributes *, GLI_tdstLight *); //ROMTEAM WorldEditor (Viorel Preoteasa 20/01/98) void fn_vAddObjectsToDraw (GLD_tdstViewportAttributes *pViewportAttributes, GLI_tdxHandleToLight p2, DEV_ViewPort* p3); //ENDROMTEAM WorldEditor (Viorel Preoteasa) // void fn_vAddObjectsToDraw2 (GLD_tdstViewportAttributes *, GLI_tdstLight *); // BOOL fn_bAcceptToRunEngine (void); void fn_vBeforeEngine (void); void fn_vBeforeEditor (void); // void fn_vHasLostFocus (void); // BOOL fn_bHasGainedFocus (void); // BOOL fn_bAcceptToExit (void); // void fn_vJustBeforeClosing (void); void fn_vBeforeSaveAll (void); // Windows MEssages Functions overload // BOOL _OnCommand (UINT); // BOOL _OnUpdateCommandUI (UINT, CCmdUI *); BOOL _OnKeyDown (UINT, UINT, UINT); BOOL _OnKeyUp (UINT, UINT, UINT); BOOL _OnMouseMove (UINT, tdstMousePos *, MTH3D_tdstVector *); // BOOL _OnLButtonDblClk (UINT, tdstMousePos *, ACP_tdxIndex, HIE_tdstPickInfo *); // BOOL _OnRButtonDblClk (UINT, tdstMousePos *, ACP_tdxIndex, HIE_tdstPickInfo *); BOOL _OnLButtonDown (UINT, tdstMousePos *, ACP_tdxIndex, HIE_tdstPickInfo *); // ANNECY MT 23/02/98 { BOOL _OnRButtonDown (UINT, tdstMousePos *, ACP_tdxIndex, HIE_tdstPickInfo *); // END ANNECY MT } BOOL _OnLButtonUp (UINT, tdstMousePos *); // BOOL _OnRButtonUp (UINT, tdstMousePos *); // BOOL _OnDragDropEnd (WPARAM, LPARAM); // BOOL _OnDragDropMove (WPARAM, LPARAM); // BOOL _OnDragDropLooseFocus (WPARAM, LPARAM); // BOOL _OnDragDropGainFocus (WPARAM, LPARAM); // for changes void fn_vOnChangeRoot (void); void fn_vOnChangeWorld (void); void fn_vOnChangeDevice (void); // Editor Modifs void fn_vOnModifDelete (CPA_List *pListObjects, tdeTypeModif eType, tdeStatus eStatus); void fn_vOnModifParent (CPA_List *pListObjects, tdeTypeModif eType, tdeStatus eStatus); void fn_vOnModifCopy (CPA_List *pListObjects, tdeTypeModif eType, tdeStatus eStatus); void fn_vOnModifName (CPA_SuperObject *pEdObj, CString csInitalName, CString csFinalName, tdeTypeModif eType, tdeStatus eStatus); void fn_vOnSelect (CPA_SuperObject *pEdObj, tdeTypeModif eType, tdeStatus eStatus); // virtual void fn_vOnModifInsert (CPA_SuperObject *pEdObj, CPA_SuperObject *pParent, // tdstPosition *p_stPosition, tdeTypeModif eType, tdeStatus eStatus) { } // moves // void fn_vOnModifMove (CPA_List *pListObjects, CPA_List *pListConcerned, tdeTypeModif eType, tdeStatus eStatus) { } // void fn_vOnBeginMove (CPA_List *pListObjects, CPA_List *pListConcerned, tdeStatus eStatus) { } // void fn_vOnMoving (CPA_List *pListObjects, CPA_List *pListConcerned, tdeStatus eStatus) { } // permission // virtual BOOL fn_bAcceptModifDelete (CPA_List *pListObjects, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifParent (CPA_List *pListObjects, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifCopy (CPA_List *pListObjects, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifTranslate (CPA_List *pListObjects, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifRotate (CPA_List *pListObjects, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifInsert (CPA_SuperObject *pEdObj, CPA_SuperObject *pParent, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifScale (CPA_SuperObject *pEdObj, tdeStatus eStatus) { return TRUE; } // virtual BOOL fn_bAcceptModifName (CPA_SuperObject *pEdObj, tdeStatus eStatus) { return TRUE; } virtual BOOL fn_bAcceptMultiSelect (void) { return FALSE; } // to precise selection // virtual tdeTypeAnswer fn_bAcceptSelect (CPA_SuperObject *pEdObj, ACP_tdxIndex xIndex, HIE_tdstPickInfo *pPicking, tdeStatus eStatus) { return C_Accept; } // ------------------------------------------------------------- // Dialog List // ------------------------------------------------------------- CPA_BaseObject * GetDialogSelection (CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDrawMode); void GetListsForDialog (CPA_DialogList *pDialog); BOOL fn_bOnSelChangeHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, CPA_BaseObject *pSelectedParent); BOOL fn_bOnDblClkHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, CPA_BaseObject *pSelectedParent); BOOL fn_bOnSelChangeListObjects (CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject, BOOL bUnselect); BOOL fn_bOnDblClkListObjects (CPA_DialogList *pDialog, CString csTypeName, CPA_BaseObject *pSelectedObject); // BOOL fn_bCanDragItemInHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pObjectToDrag) { return FALSE; } // BOOL fn_bCanDropItemInHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pObjectToDrop, CPA_SuperObject *pTarget) { return FALSE; } // BOOL fn_bOnDragDropInHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pObject, CPA_SuperObject *pTarget) { return FALSE; } // BOOL fn_bOnSelChangeComboList (CPA_DialogList *pDialog, CString csTypeName) { return FALSE; } // BOOL fn_bOnButtonTest (CPA_DialogList *pDialog, CString csTypeName, tdeDrawMode eDrawMode) { return FALSE; } void fn_vInitDefaultParameters (CPA_DialogList *pDialog); // void fn_vSetANewTest (CPA_DialogList *pDialog, CString csCurrentList) { return; } // BOOL fn_bSetCustomTest (CPA_DialogList *pDialog) { return FALSE; } // // BOOL fn_bTestFunction (CString csCurrentType, CString csTestName, CPA_ReachableObject *pEdObj) { return TRUE; } // BOOL fn_bCustomTestFunction (CString csCurrentType, CString csTestName, CPA_ReachableObject *pEdObj) { return TRUE; } /*=========================================================================== Dialog Bar - Mircea Dunka 31 Aug. 1998 =========================================================================*/ void fn_vDefineDlgBarBtnIcon (tde_DlgBarCategory wCategory, tds_DlgBarBtn *_pDlgBarBtn); // ------------------------------------------------------------- // Menus // ------------------------------------------------------------- BOOL fn_bDefineSubMenu (EDT_SubMenu *_p_oEDTSubMenu); void _OnSubMenuCommand (EDT_SubMenu *_p_oEDTSubMenu,UINT uiMsgID); BOOL fn_bDefinePopupMenu(EDT_PopUpMenu *pPopup, CPA_List *pSelection, BOOL bIsAlone); void _OnPopUpMenuCommand(UINT m_IDCmdMsg); // ------------------------------------------------------------- // Current Editor // ------------------------------------------------------------- tdePermission fn_eAcceptNewEditor (CPA_EditorBase *pNewDLL) { return C_CloseBefore; } BOOL fn_bCanActivateEditor (CPA_List *pParam); BOOL fn_bCanCloseEditor (void); void fn_vOnActivateEditor (CPA_List *pParam, BOOL bBackActivated=FALSE); void fn_vOnCloseEditor (void); // CString GetCurrentEditorName (void); // void fn_vBackActiveMe (void *pMyData) {}; // void fn_vEraseWalkDataStructure (void *pMyData) {}; /*=========================================================================== General Purpose =========================================================================*/ long OnQueryAction (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM); // long OnQueryInfos (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM) { return 0; }; // long OnQueryOpen (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM) { return 0; }; // long OnQueryClose (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM) { return 0; }; /*=========================================================================== Coherence =========================================================================*/ // BOOL fn_bOnInvalidateLink (CPA_ObjectBase *pOwner, CPA_ObjectBase *pReferencedObject, BOOL bDestroyed) { return FALSE; } // void fn_vOnRestoreLink (CPA_ObjectBase *pOwner, CPA_ObjectBase *pReferencedObject) { } //==================================================================================== //==================================================================================== //==================================================================================== //========================= OBJECT DLL FUNCTIONS OVERLOAD ============================ //==================================================================================== //==================================================================================== //==================================================================================== // hierarchy CPA_SuperObject * GetNewEditorInstance (HIE_tdxHandleToSuperObject pEngineInstance); // void fn_vUpdateEditorInstance (CPA_SuperObject *pEditorInstance, HIE_tdxHandleToSuperObject pEngineInstance) { } BOOL fn_bCanHandleThisType (long lEngineType); // models & instances void fn_vInitListByType (CPA_World *pWorld); // void fn_vInitListsOfModels (void); // void fn_vSaveListModels (CString csListName, CPA_List *pListModels) { } // CString fn_pszLoadListModels (void) { return NULL; } // EDT_Model * GetNewModel (void) { return NULL; } // BOOL fn_bCanLoadNewModel (CString csListName) { return FALSE; } // BOOL fn_bCanSaveListModels (CString csListName) { return FALSE; } // BOOL fn_bCanLoadListModels (void) { return FALSE; } // CPA_SuperObject * GetNewInstance (CString csTypeName, CString csModelName, CPA_SuperObject *pParent) { return NULL; } // tdeTypeSO GetTypeInstance (CString csTypeName, CString csModelName) { return C_NoType; } // CPA_SuperObject * GetParentForInsertion (CString csTypeName, CString csModelName, tdstPosition *p_stPosition) { return NULL; } // BOOL fn_bChooseInsertPosition(CPA_SuperObject *pNewInstance, CPA_SuperObject *pParent, tdstPosition *p_stPosition) { return FALSE; } // objects // CPA_Object * GetNewObject (CString csObjectFile, CString csObjectName, FILE *p_fFile, CPA_MainWorld *p_oMainWorld) { return NULL; } CPA_BaseObject * Duplicate (CPA_BaseObject *pObject, CPA_SuperObject *pNewSuperObject); // CPA_SuperObject * GetCopyOfProtectedChild (CPA_SuperObject *pInitialChild, CPA_SuperObject *pNewOwner) { return NULL; } // permissions for EvtEditor // BOOL fn_bAcceptAsParent (CPA_Object *pChild, CPA_Object *pParent) { return TRUE; } // BOOL fn_bAcceptAsChild (CPA_Object *pParent, CPA_Object *pChild) { return TRUE; } // when insertion is canceled // void fn_vOnCancelInsertion (CPA_SuperObject *pInstance); void fn_vBuildNewEditorInstance (CPA_SuperObject *pEditorInstance, HIE_tdxHandleToSuperObject hEngineInstance); //==================================================================================== //==================================================================================== // Owner //==================================================================================== //==================================================================================== void fn_vChangeName (CString _csName); void fn_vNameChanged (void); void fn_vComputeBoundingVolume (CPA_BaseObject *pObj); ACP_tdxHandleOfObject fn_hGetBoundingVolume (CPA_BaseObject *_pObj); BOOL fn_bModificationFileExist (CPA_BaseObject *_p_oObject); void fn_vComputeModificationFile (char *_p_cFileName, CPA_SaveObject *_p_oObject); BOOL fn_bShowWarnings (void); void fn_vStopWarnings (void); void mfn_vShowOrHideElement (BOOL _bShow, CPA_SuperObject *_p_oSprObj = NULL, Geometry3D *_p_oObject = NULL, ACP_tdxHandleOfElement hElement = 0); protected: void fn_vUnSelect (void); //void mfn_vAddFileOnModifSectionList (char * _szFileName); //BOOL mfn_bSectionExistsOnModifSectionList (char *_szSectionName); void mfn_vUpdateModificationFilesList (CPA_BaseObject *_p_oObject); void mfn_vSavePreferences (void); void mfn_vComputeLocalTranslation (CPA_SuperObject *_p_oSprObj, MTH3D_tdstVector *_p_stVector,MTH3D_tdstVector *_p_stResultVector); void mfn_vFillListWithPO (CPA_BaseObjectList *_p_oList, CPA_SuperObject *_p_oSprObj); char *mfn_p_cGetOGDTypePath (char *_szSectionName); // CPA_BaseObject *mfn_p_oGetGeometricFile(char *_szSectionName); // ANNECY MT 23/02/98 { void mfn_vShowOrHideBoundingVolume ( BOOL _bShow ); // END ANNECY MT } // BEGIN CPA2 Cristi Petrescu 98-02- void mfn_vClearFileModificationsList(); void mfn_vAddFileModification(Geometry3D *p_oObject); tdstModifFile *mfn_p_stGetFileModification(Geometry3D *p_oObject); void mfn_vComputeModifSectionName(char *szModifSectionName, Geometry3D *p_oObject); static void CallBackSaveModifListGeometricObject(SCR_tdst_File_Description *p_stFile, char *p_szSectionName, void *p_vData, SCR_tde_Ntfy_Action eAction); static SCR_tde_Anl_ReturnValue CallBackLoadModifList(SCR_tdst_File_Description *_p_stFile, char *_pszName, char *_ap_szParams[], SCR_tde_Anl_Action _eAction); // END CPA2 Cristi Petrescu 98-02- //ROMTEAM WorldEditor (Cristian Stegaru 11/97) //CPA2 Corneliu Babiuc 02-09-98 (duplicated points) POSITION mfn_pGetObjectPositionInSelectedPointsList (CPA_SuperObject * p_SuperObject); POSITION mfn_pInsertObjectInSelectedPointsList (CPA_SuperObject * p_SuperObject, Geometry3D * p_Object); POSITION mfn_pInsertPointsElementInHeadPosition (CPA_PointsList * p_Points); void mfn_vClearListOfSelectedPoints (void); BOOL mfn_vUpdateSelectedPointsList (CPA_SuperObject * p_SO, ACP_tdxIndex xIndex); void mfn_vUpdateDuplicatedPointsList (CPA_SuperObject * p_SO, ACP_tdxIndex xIndex, BOOL bInserted, float fDistance = 0.0); void mfn_vUpdateDuplicatedPointsPositions (void); //function to obtain the geometric object from SuperObject Geometry3D * mfn_pGetGeometricObject (CPA_SuperObject * p_SO); //END CPA2 Corneliu Babiuc 16-09-98 (duplicated points) public: // Services CPA_KeyActionConfiguration *GetKeyActionConfiguration (void) {return m_p_oKeyConfiguration;}; //interface for indexed triangle editor public: BOOL mfn_bCreateITObject (CTriEdit *pITEditor, CString csName); protected: CPA_EditorBase *m_pCallingDll; int m_iQueryCt; CEdThread *m_pITEditor; BOOL mfn_bStartITEditor (); BOOL mfn_bEndITEditor (); CTriEdit *mfn_pGetITEditor (); CString mfn_csGetGeometricName (CString csBaseName); //ENDROMTEAM WorldEditor (Cristian Stegaru) }; extern tdstDLLIdentity g_stGeometry3DIdentity; //ROMTEAM WorldEditor (Nicu 16/01/98) // the Keyboard configuration #define KA_3DG_CTRL 1 #define KA_3DG_SIZE KA_3DG_CTRL //ENDROMTEAM WorldEditor (Nicu) #endif // __3DGINTERF_HPP__