forked from SAP-archive/fedem-mdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FmEngine.H
112 lines (80 loc) · 3.05 KB
/
FmEngine.H
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// SPDX-FileCopyrightText: 2023 SAP SE
//
// SPDX-License-Identifier: Apache-2.0
//
// This file is part of FEDEM - https://openfedem.org
////////////////////////////////////////////////////////////////////////////////
#ifndef FM_ENGINE_H
#define FM_ENGINE_H
#include "vpmDB/FmIsPlottedBase.H"
#include "vpmDB/FmSensorBase.H"
#include "vpmDB/FmMathFuncBase.H"
#include "vpmDB/FmThreshold.H"
#include "FFaLib/FFaContainers/FFaReferenceList.H"
template<> inline
bool FFaField<FmThreshold>::isPrintable() const
{
return myData.isDefined();
}
class FmEngine : public FmIsPlottedBase
{
Fmd_DB_HEADER_INIT();
public:
FmEngine(bool useTimeSensor = true);
virtual const char* getUITypeName() const { return "Function"; }
virtual const char** getListViewPixmap() const;
virtual std::string getInfoString() const;
virtual bool disconnect();
virtual FmBase* duplicate() const;
//! \brief Returns all objects that are using the output from this engine.
bool getUsers(std::vector<FmModelMemberBase*>& toFill,
bool recursive = false) const;
FmMathFuncBase* getFunction() const;
FmSensorBase* getSensor(size_t i = 0) const;
int getSensorId(size_t i = 0) const;
const std::string& getEntityName(size_t i = 0) const;
int getEntity(size_t i = 0) const;
int getDof(size_t i = 0) const;
size_t getNoArgs() const;
FmSensorBase* getUniqueSensor() const;
bool initGetValue() const;
bool getValue(double x, double& y) const;
void setFunction(FmMathFuncBase* func);
void setSensor(FmSensorBase* sensor, size_t i = 0);
void setEntityName(const std::string& name, size_t i = 0);
void setEntity(int ent, size_t i = 0);
void setDof(int dof, size_t i = 0);
bool isActive() const;
bool isControlInEngine() const;
bool isControlOutEngine() const;
bool isDriveFile() const;
bool isExternalFunc() const;
virtual bool isListable() const;
bool isFunctionLinked() const { return !myFunctionOwner.isNull(); }
FmEngine* getEngineToLinkFunctionFrom() const { return myFunctionOwner.getPointer(); }
void setEngineToLinkFunctionFrom(FmEngine* engine);
void translateJointSensorEntity();
static void updateFunctionLinkedFromStuff();
static bool readAndConnect(std::istream& is, std::ostream& os = std::cout);
virtual std::ostream& writeFMF(std::ostream& os = std::cout);
virtual int printSolverEntry(FILE* fd);
virtual bool clone(FmBase* obj, int depth);
virtual void initAfterResolve();
protected:
virtual ~FmEngine();
virtual bool cloneLocal(FmBase* obj, int depth);
FFaReference<FmMathFuncBase> myFunction;
FFaField<FFaReferenceBase*> myFunctionField;
FFaReference<FmEngine> myFunctionOwner;
FFaField<FFaReferenceBase*> myFunctionOwnerField;
FFaReferenceList<FmSensorBase> mySensor;
FFaField<FFaReferenceListBase*> mySensorField;
FFaField<Strings> myEntityNames;
FFaField<IntVec> myEntities;
FFaField<IntVec> myDofs;
public:
FFaField<bool> myOutput;
FFaField<FmThreshold> myThreshold;
static std::set<int> betaFeatureEngines;
};
#endif