Spaces:
Build error
Build error
File size: 2,471 Bytes
1dd0e3b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #pragma once
#include <string>
#include <vector>
#include <functional>
#include <mutex>
#include <atomic>
namespace hhb {
namespace algorithm {
class AICommandManager {
public:
static AICommandManager& getInstance();
void setModelLoadedCallback(std::function<void(bool)> callback);
void setAnalysisCompleteCallback(std::function<void(const std::string&)> callback);
void setHighlightCallback(std::function<void(const std::vector<int>&, int)> callback);
bool loadModel(const std::string& filename);
void resetCamera();
void setCameraPosition(float x, float y, float z);
void setCameraRotation(float pitch, float yaw);
void setZoom(float zoom);
void setHighlight(int type, const std::vector<int>& indices);
void setPBRParams(float metallic, float roughness);
void clearHighlight();
void executeAnalysis(const std::string& command);
float getCameraPositionX() const { return cameraPositionX.load(); }
float getCameraPositionY() const { return cameraPositionY.load(); }
float getCameraPositionZ() const { return cameraPositionZ.load(); }
float getCameraPitch() const { return cameraPitch.load(); }
float getCameraYaw() const { return cameraYaw.load(); }
float getZoom() const { return zoom.load(); }
bool isModelLoaded() const { return modelLoaded.load(); }
enum class HighlightType {
None = 0,
ThinParts = 1,
CurvedSurfaces = 2,
SharpEdges = 3,
FlatSurfaces = 4
};
private:
AICommandManager() = default;
~AICommandManager() = default;
AICommandManager(const AICommandManager&) = delete;
AICommandManager& operator=(const AICommandManager&) = delete;
std::atomic<bool> modelLoaded{false};
std::atomic<float> cameraPositionX{0.0f};
std::atomic<float> cameraPositionY{0.0f};
std::atomic<float> cameraPositionZ{5.0f};
std::atomic<float> cameraPitch{0.0f};
std::atomic<float> cameraYaw{0.0f};
std::atomic<float> zoom{1.0f};
std::atomic<float> metallic{0.5f};
std::atomic<float> roughness{0.5f};
std::atomic<HighlightType> currentHighlightType{HighlightType::None};
std::vector<int> currentHighlightIndices;
std::mutex highlightMutex;
std::function<void(bool)> modelLoadedCallback;
std::function<void(const std::string&)> analysisCompleteCallback;
std::function<void(const std::vector<int>&, int)> highlightCallback;
};
} // namespace algorithm
} // namespace hhb |