#pragma once #include "resource.h" #include "schain.h" #include "caminst.h" //########################################################################## //##################### CameraInstanceManager ####################### //########################################################################## class CameraInstanceManager SIGNATURED { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // local member data // protected: // // cameraList is a circular Linked list // which holds cameraInstances // SChainOf cameraList; // // CameraIterator holds the current position in the // camera list for the lifetime of the class // & == NULL if the list is empty // SChainIteratorOf *cameraIterator; int FindUniqueCameraID(); char cameraFilename[128]; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Public Member Manipulation Functions // public: // // CameraList Manipulator Functions // void SetCamera(const Origin &new_origin, CameraInstance *camera_instance = NULL); CameraInstance* CreateCameraInstance(const Origin &new_origin); CameraInstance* AddCameraInstance(CameraInstance *camera_instance); CameraInstance* DeleteCameraInstance(); void DeleteCameraList(); // // Iterator Manipulator Functions (Circular Chain) // CameraInstance* IncrementIterator(); CameraInstance* DecrementIterator(); CameraInstance* AdvanceIterator(const CameraInstance &camera_instance); CameraInstance* GetCurrent() const { Check(this); return cameraIterator->GetCurrent(); } CameraInstance* First() { Check(this); Check(cameraIterator->GetCurrent()); cameraIterator->First(); return GetCurrent(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CameraList Searching and Query Functions // public: CameraInstance* FindClosestCamera(const Point3D &point_3D); CameraInstance* FindClosestCameraShowing(const Point3D *points); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Test Class Support // public: Logical TestInstance() const; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction and Destruction Support // public: CameraInstanceManager(); ~CameraInstanceManager(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Tool Support // protected: void InitializeCameraInstances(); public: void ReadNotationFile(); void CreateStreamedCameraInstances(ResourceFile *res_file, const char *map_name); void WriteNotationFile(); static ResourceDescription::ResourceID CreateCameraInstancesStream(ResourceFile *resource_file, const char *camera_name, const ResourceDirectories *directories); };