9 #ifndef CscEnvironmentSimulator_h
10 #define CscEnvironmentSimulator_h
25 using std::mutex, std::function;
34 map<CscWorldElementId, const CscWorldEntity *> *entities =
nullptr;
36 vector<CscWorldObject *> *objects =
nullptr;
37 vector<CscWorldPlace *> *places =
nullptr;
38 vector<CscWorldElement *> *otherElements =
nullptr;
39 map<string, CscWorldImage *> *sceneImages =
nullptr;
46 mutable mutex objectsMutex;
47 mutex otherElementsMutex;
49 mutex gnssPositionOperationMutex;
51 inline static std::atomic<unsigned long long>
lastId = 0;
52 unsigned long long id;
54 unique_ptr<CscLogger>
logger;
56 int getObjectIndexByName(
const string &name)
const;
57 int getOtherElementIndexByName(
const string &name)
const;
67 virtual vector<CscWorldObject *> getObjects(
const function<
bool(
const CscWorldObject *)> filter = [](
const CscWorldObject *) {
return true; })
const;
74 float *getConscienceSimulationWorldStatus(
bool rotationsAsEuler =
false);
76 vector<CscPoint3d *> *getVertexFromStrategy(
CscWorldElementId entityId,
int strategy);
77 vector<CscPoint3d *> *getPatchFromStrategy(
CscWorldElementId entityId,
int strategy);
80 void importObjects(vector<CscWorldObject *> *objects);
81 void importPlace(
CscWorldPlace *place,
bool removeOthers =
true);
84 void removeOtherElementByName(
const string &name);
90 void importPointsAsObjects(vector<CscPoint3d *> *points);
92 void importEntity(
const CscWorldEntity *entity,
bool requiresExternalInit =
false,
const optional<
function<
void()>> &onRemoved = {});
94 virtual void clearEntities();
98 void setFocusedObjectByIndex(
int objectIndex);
101 virtual void clearObjects();
107 const CscPoint3d *getObjectPositionInSimulator(
const string &serialNumber)
const;
110 virtual vector<CscWorldObject *> getObjectsByModelId(
int objectModelId);
119 const vector<CscWorldPlace *> getPlaces(
function<
bool(
const CscWorldPlace *)> filter = [](
const CscWorldPlace *) {
return true; });
122 virtual vector<CscWorldEntity *> getEntities(
const function<
bool(
const CscWorldEntity *)> filter = [](
const CscWorldEntity *) {
return true; });
123 virtual vector<string> getEntitySerialNumbers(
const function<
bool(
const CscWorldEntity *)> filter = [](
const CscWorldEntity *) {
return true; });
137 pair<CscPoint3d, CscQuaternion> getEntityPositionAndRotationQuaternion(
const CscWorldElementId &entityId)
const;
143 void doWithEntities(
function<
void(
const map<CscWorldElementId, const CscWorldEntity *> &entities)> action);
149 void doWithObjects(
function<
void(
const vector<CscWorldObject *> &objects)> action);
161 void forceState(
const CscWorldElementId &entityId,
CscState *aState,
int memberIdForInputs,
const bool applyPos[3],
const bool applyRot[3],
const bool applyAcc[3], optional<int> nbMaxIteration = {}, optional<int> maxLoopDurationMillis = {});
162 void playSequence(
const CscWorldElementId &entityId,
CscState *init,
CscSequence *sequence,
const map<int, CscPivotMovementType> &pivotMovementByPivotId,
bool geneticAi =
false,
bool extrapolationRealTime =
false);
170 void forceMemberValues(
const CscWorldElementId &entityId,
const CscMemberInputStatus *inputsValues,
const bool applyPosition[3],
const bool applyEuler[3],
const bool applyAcceleration[3], optional<int> nbMaxIteration = {}, optional<int> maxLoopDurationMillis = {});
171 int moveMemberToStateFromMember(
const CscWorldElementId &entityId,
const CscMemberInputStatus *inputsValues,
const bool applyPosition[3],
const bool applyEuler[3],
const bool applyAcceleration[3],
int nbMaxIteration = 40,
int tryNumber = 0);
172 float getJointHingeAngle(
const CscWorldElementId &entityId,
int jointIdIn)
const;
174 void updateMemberEulers(
const CscWorldElementId &entityId,
int memberId,
double eulerX,
double eulerY,
double eulerZ);
175 void updateMemberPosition(
const CscWorldElementId &entityId,
int memberId,
float posX,
float posY,
float posZ);
181 virtual void clearPlaces();
182 void loadDefaultPlaceFloor();
183 void clearOtherElements();
184 CscGrid *getSceneFloor()
const;
186 void focusVisionIntoPosition(
float posX,
float posY,
float posZ);
191 void removeObjectByName(
const string &name);
192 void removeObjectsByModelId(
int objectModelId);
193 void removeObjectsByTag(
const string &searchedTag);
194 bool removePlaceById(
const string &placeId);
196 bool hasObjectWithModelId(
int objectModelId);
206 CscPoint3d *computeConsciencePositionFromGnssPosition(
const CscPoint3d *gnssPosition,
const string &projection);
210 CscPoint3d *computeGnssPositionFromConsciencePosition(
const CscPoint3d *consciencePosition,
const string &projection);
215 vector<CscPoint3d *> *computeGnssPositionsFromConsciencePositions(vector<CscPoint3d *> *consciencePositions,
const string &projection);
220 void setGnssReferencePosition(
CscPoint3d *gnssPoint);
226 bool gnssReferencePositionIsSet();
231 void computeGnssReferencePositionWithConsciencePosition(
CscPoint3d *gnssPoint,
CscPoint3d *consciencePosition,
const string &projection);