Skip to content

Commit 0dd5aac

Browse files
committed
Fem: Improve rigid body
1 parent 7ea8e45 commit 0dd5aac

6 files changed

+397
-493
lines changed

src/Mod/Fem/App/FemConstraintRigidBody.cpp

+79-32
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,7 @@ using namespace Fem;
2929

3030
PROPERTY_SOURCE(Fem::ConstraintRigidBody, Fem::Constraint)
3131

32-
const char* ConstraintRigidBody::loadModeEnum[] = {"Displacement-Rotation",
33-
"Force-Moment",
34-
"Displacement-Moment",
35-
"Force-Rotation",
36-
nullptr};
37-
38-
const char* ConstraintRigidBody::freeModeEnum[] =
39-
{"None", "X", "Y", "Z", "XY", "XZ", "YZ", "All", nullptr};
32+
const char* ConstraintRigidBody::boundaryModeEnum[] = {"Free", "Constraint", "Load", nullptr};
4033

4134
ConstraintRigidBody::ConstraintRigidBody()
4235
{
@@ -45,47 +38,101 @@ ConstraintRigidBody::ConstraintRigidBody()
4538
"ConstraintRigidBody",
4639
App::Prop_Output,
4740
"Reference node position");
48-
ADD_PROPERTY_TYPE(Displacement,
49-
(0.0, 0.0, 0.0),
41+
// ADD_PROPERTY_TYPE(Displacement,
42+
// (0.0, 0.0, 0.0),
43+
// "ConstraintRigidBody",
44+
// App::Prop_Output,
45+
// "Reference node displacement");
46+
ADD_PROPERTY_TYPE(ConstraintPlacement,
47+
(Base::Placement()),
5048
"ConstraintRigidBody",
5149
App::Prop_Output,
52-
"Reference node displacement");
53-
ADD_PROPERTY_TYPE(Rotation,
54-
(Base::Rotation(0.0, 0.0, 0.0, 0.0)),
50+
"Reference node applied placement");
51+
// ADD_PROPERTY_TYPE(Rotation,
52+
// (Base::Rotation(0.0, 0.0, 0.0, 1.0)),
53+
// "ConstraintRigidBody",
54+
// App::Prop_Output,
55+
// "Reference node rotation");
56+
// ADD_PROPERTY_TYPE(Force, (0.0), "ConstraintRigidBody", App::Prop_Output, "Applied force");
57+
// ADD_PROPERTY_TYPE(ForceDirection,
58+
// (0.0, 0.0, 0.0),
59+
// "ConstraintRigidBody",
60+
// App::Prop_Output,
61+
// "Direction of applied force");
62+
// ADD_PROPERTY_TYPE(Moment, (0.0), "ConstraintRigidBody", App::Prop_Output, "Applied moment");
63+
ADD_PROPERTY_TYPE(ForceX,
64+
(0.0),
5565
"ConstraintRigidBody",
5666
App::Prop_Output,
57-
"Reference node rotation");
58-
ADD_PROPERTY_TYPE(Force, (0.0), "ConstraintRigidBody", App::Prop_Output, "Applied force");
59-
ADD_PROPERTY_TYPE(ForceDirection,
60-
(0.0, 0.0, 0.0),
67+
"Applied force in X direction");
68+
ADD_PROPERTY_TYPE(ForceY,
69+
(0.0),
6170
"ConstraintRigidBody",
6271
App::Prop_Output,
63-
"Direction of applied force");
64-
ADD_PROPERTY_TYPE(Moment, (0.0), "ConstraintRigidBody", App::Prop_Output, "Applied moment");
65-
ADD_PROPERTY_TYPE(MomentDirection,
66-
(0.0, 0.0, 0.0),
72+
"Applied force in Y direction");
73+
ADD_PROPERTY_TYPE(ForceZ,
74+
(0.0),
6775
"ConstraintRigidBody",
6876
App::Prop_Output,
69-
"Direction of applied moment");
70-
ADD_PROPERTY_TYPE(FreeTranslationalMode,
77+
"Applied force in Z direction");
78+
ADD_PROPERTY_TYPE(MomentX,
79+
(0.0),
80+
"ConstraintRigidBody",
81+
App::Prop_Output,
82+
"Applied moment in X direction");
83+
ADD_PROPERTY_TYPE(MomentY,
84+
(0.0),
85+
"ConstraintRigidBody",
86+
App::Prop_Output,
87+
"Applied moment in Y direction");
88+
ADD_PROPERTY_TYPE(MomentZ,
89+
(0.0),
90+
"ConstraintRigidBody",
91+
App::Prop_Output,
92+
"Applied moment in Z direction");
93+
// ADD_PROPERTY_TYPE(Moment, (0.0), "ConstraintRigidBody", App::Prop_Output, "Applied moment");
94+
// ADD_PROPERTY_TYPE(MomentDirection,
95+
// (0.0, 0.0, 0.0),
96+
// "ConstraintRigidBody",
97+
// App::Prop_Output,
98+
// "Direction of applied moment");
99+
ADD_PROPERTY_TYPE(XTranslationalMode,
100+
("Free"),
101+
"ConstraintRigidBody",
102+
App::Prop_Output,
103+
"X-direction displacement/force mode");
104+
ADD_PROPERTY_TYPE(YTranslationalMode,
105+
("Free"),
106+
"ConstraintRigidBody",
107+
App::Prop_Output,
108+
"Y-direction displacement/force mode");
109+
ADD_PROPERTY_TYPE(ZTranslationalMode,
110+
("Free"),
111+
"ConstraintRigidBody",
112+
App::Prop_Output,
113+
"Z-direction displacement/force mode");
114+
ADD_PROPERTY_TYPE(XRotationalMode,
71115
("None"),
72116
"ConstraintRigidBody",
73117
App::Prop_Output,
74-
"Free displacement/force mode");
75-
ADD_PROPERTY_TYPE(FreeRotationalMode,
118+
"X-direction rotation/moment mode");
119+
ADD_PROPERTY_TYPE(YRotationalMode,
76120
("None"),
77121
"ConstraintRigidBody",
78122
App::Prop_Output,
79-
"Free rotation/moment mode");
80-
ADD_PROPERTY_TYPE(LoadMode,
81-
("Displacement-Rotation"),
123+
"Y-direction rotation/moment mode");
124+
ADD_PROPERTY_TYPE(ZRotationalMode,
125+
("None"),
82126
"ConstraintRigidBody",
83127
App::Prop_Output,
84-
"Load/boundary condition mode");
128+
"Z-direction rotation/moment mode");
85129

86-
FreeTranslationalMode.setEnums(freeModeEnum);
87-
FreeRotationalMode.setEnums(freeModeEnum);
88-
LoadMode.setEnums(loadModeEnum);
130+
XTranslationalMode.setEnums(boundaryModeEnum);
131+
YTranslationalMode.setEnums(boundaryModeEnum);
132+
ZTranslationalMode.setEnums(boundaryModeEnum);
133+
XRotationalMode.setEnums(boundaryModeEnum);
134+
YRotationalMode.setEnums(boundaryModeEnum);
135+
ZRotationalMode.setEnums(boundaryModeEnum);
89136
}
90137

91138
App::DocumentObjectExecReturn* ConstraintRigidBody::execute()

src/Mod/Fem/App/FemConstraintRigidBody.h

+18-11
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,23 @@ class FemExport ConstraintRigidBody: public Fem::Constraint
3939

4040
// Rigid Body parameters
4141
App::PropertyPosition ReferenceNode;
42-
App::PropertyPosition Displacement;
43-
App::PropertyRotation Rotation;
44-
App::PropertyForce Force;
45-
App::PropertyVector ForceDirection;
46-
App::PropertyMoment Moment;
47-
App::PropertyVector MomentDirection;
48-
App::PropertyEnumeration FreeTranslationalMode;
49-
App::PropertyEnumeration FreeRotationalMode;
50-
App::PropertyEnumeration LoadMode;
42+
// App::PropertyPosition Displacement;
43+
App::PropertyPlacement ConstraintPlacement;
44+
// App::PropertyRotation Rotation;
45+
App::PropertyForce ForceX;
46+
App::PropertyForce ForceY;
47+
App::PropertyForce ForceZ;
48+
// App::PropertyVector ForceDirection;
49+
App::PropertyMoment MomentX;
50+
App::PropertyMoment MomentY;
51+
App::PropertyMoment MomentZ;
52+
// App::PropertyVector MomentDirection;
53+
App::PropertyEnumeration XTranslationalMode;
54+
App::PropertyEnumeration YTranslationalMode;
55+
App::PropertyEnumeration ZTranslationalMode;
56+
App::PropertyEnumeration XRotationalMode;
57+
App::PropertyEnumeration YRotationalMode;
58+
App::PropertyEnumeration ZRotationalMode;
5159

5260
/// recalculate the object
5361
App::DocumentObjectExecReturn* execute() override;
@@ -62,8 +70,7 @@ class FemExport ConstraintRigidBody: public Fem::Constraint
6270
void onChanged(const App::Property* prop) override;
6371

6472
private:
65-
static const char* loadModeEnum[];
66-
static const char* freeModeEnum[];
73+
static const char* boundaryModeEnum[];
6774
};
6875

6976
} // namespace Fem

src/Mod/Fem/Gui/Resources/Fem.qrc

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<file>icons/FEM_ConstraintPlaneRotation.svg</file>
3030
<file>icons/FEM_ConstraintPressure.svg</file>
3131
<file>icons/FEM_ConstraintPulley.svg</file>
32+
<file>icons/FEM_ConstraintRigidBody.svg</file>
3233
<file>icons/FEM_ConstraintSectionPrint.svg</file>
3334
<file>icons/FEM_ConstraintSelfWeight.svg</file>
3435
<file>icons/FEM_ConstraintSpring.svg</file>

0 commit comments

Comments
 (0)