Fem: Change properties of the rigid body constraint
This commit is contained in:
committed by
Chris Hennes
parent
505579dd8d
commit
b799b390b9
@@ -29,38 +29,92 @@ using namespace Fem;
|
||||
|
||||
PROPERTY_SOURCE(Fem::ConstraintRigidBody, Fem::Constraint)
|
||||
|
||||
const char* ConstraintRigidBody::boundaryModeEnum[] = {"Free", "Constraint", "Load", nullptr};
|
||||
|
||||
ConstraintRigidBody::ConstraintRigidBody()
|
||||
{
|
||||
ADD_PROPERTY(xRefNode, (0.0));
|
||||
ADD_PROPERTY(yRefNode, (0.0));
|
||||
ADD_PROPERTY(zRefNode, (0.0));
|
||||
ADD_PROPERTY(xDisplacement, (0.0));
|
||||
ADD_PROPERTY(yDisplacement, (0.0));
|
||||
ADD_PROPERTY(zDisplacement, (0.0));
|
||||
ADD_PROPERTY(xRotation, (0.0));
|
||||
ADD_PROPERTY(yRotation, (0.0));
|
||||
ADD_PROPERTY(zRotation, (0.0));
|
||||
ADD_PROPERTY(xForce, (0.0));
|
||||
ADD_PROPERTY(yForce, (0.0));
|
||||
ADD_PROPERTY(zForce, (0.0));
|
||||
ADD_PROPERTY(xMoment, (0.0));
|
||||
ADD_PROPERTY(yMoment, (0.0));
|
||||
ADD_PROPERTY(zMoment, (0.0));
|
||||
ADD_PROPERTY(DefineRefNode, (1));
|
||||
ADD_PROPERTY_TYPE(ReferenceNode,
|
||||
(0.0, 0.0, 0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Reference node position");
|
||||
ADD_PROPERTY_TYPE(Displacement,
|
||||
(0.0, 0.0, 0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Reference node displacement");
|
||||
ADD_PROPERTY_TYPE(Rotation,
|
||||
(Base::Rotation(0.0, 0.0, 0.0, 1.0)),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Reference node rotation");
|
||||
ADD_PROPERTY_TYPE(ForceX,
|
||||
(0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Applied force in X direction");
|
||||
ADD_PROPERTY_TYPE(ForceY,
|
||||
(0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Applied force in Y direction");
|
||||
ADD_PROPERTY_TYPE(ForceZ,
|
||||
(0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Applied force in Z direction");
|
||||
ADD_PROPERTY_TYPE(MomentX,
|
||||
(0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Applied moment in X direction");
|
||||
ADD_PROPERTY_TYPE(MomentY,
|
||||
(0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Applied moment in Y direction");
|
||||
ADD_PROPERTY_TYPE(MomentZ,
|
||||
(0.0),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Applied moment in Z direction");
|
||||
ADD_PROPERTY_TYPE(TranslationalModeX,
|
||||
("Free"),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"X-direction displacement/force mode");
|
||||
ADD_PROPERTY_TYPE(TranslationalModeY,
|
||||
("Free"),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Y-direction displacement/force mode");
|
||||
ADD_PROPERTY_TYPE(TranslationalModeZ,
|
||||
("Free"),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Z-direction displacement/force mode");
|
||||
ADD_PROPERTY_TYPE(RotationalModeX,
|
||||
("None"),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"X-direction rotation/moment mode");
|
||||
ADD_PROPERTY_TYPE(RotationalModeY,
|
||||
("None"),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Y-direction rotation/moment mode");
|
||||
ADD_PROPERTY_TYPE(RotationalModeZ,
|
||||
("None"),
|
||||
"ConstraintRigidBody",
|
||||
App::Prop_Output,
|
||||
"Z-direction rotation/moment mode");
|
||||
|
||||
// For drawing the icons
|
||||
ADD_PROPERTY_TYPE(Points,
|
||||
(Base::Vector3d()),
|
||||
"ConstraintRigidBody",
|
||||
App::PropertyType(App::Prop_ReadOnly | App::Prop_Output),
|
||||
"Points where symbols are drawn");
|
||||
ADD_PROPERTY_TYPE(Normals,
|
||||
(Base::Vector3d()),
|
||||
"ConstraintRigidBody",
|
||||
App::PropertyType(App::Prop_ReadOnly | App::Prop_Output),
|
||||
"Normals where symbols are drawn");
|
||||
Points.setValues(std::vector<Base::Vector3d>());
|
||||
Normals.setValues(std::vector<Base::Vector3d>());
|
||||
TranslationalModeX.setEnums(boundaryModeEnum);
|
||||
TranslationalModeY.setEnums(boundaryModeEnum);
|
||||
TranslationalModeZ.setEnums(boundaryModeEnum);
|
||||
RotationalModeX.setEnums(boundaryModeEnum);
|
||||
RotationalModeY.setEnums(boundaryModeEnum);
|
||||
RotationalModeZ.setEnums(boundaryModeEnum);
|
||||
}
|
||||
|
||||
App::DocumentObjectExecReturn* ConstraintRigidBody::execute()
|
||||
@@ -70,19 +124,5 @@ App::DocumentObjectExecReturn* ConstraintRigidBody::execute()
|
||||
|
||||
void ConstraintRigidBody::onChanged(const App::Property* prop)
|
||||
{
|
||||
// Note: If we call this at the end, then the symbols are not oriented correctly initially
|
||||
// because the NormalDirection has not been calculated yet
|
||||
Constraint::onChanged(prop);
|
||||
|
||||
if (prop == &References) {
|
||||
std::vector<Base::Vector3d> points;
|
||||
std::vector<Base::Vector3d> normals;
|
||||
double scale = 1; // OvG: Enforce use of scale
|
||||
if (getPoints(points, normals, &scale)) {
|
||||
Points.setValues(points);
|
||||
Normals.setValues(normals);
|
||||
Scale.setValue(scale); // OvG: Scale
|
||||
Points.touch(); // This triggers ViewProvider::updateData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,27 +37,22 @@ public:
|
||||
/// Constructor
|
||||
ConstraintRigidBody();
|
||||
|
||||
// Read-only (calculated values). These trigger changes in the ViewProvider
|
||||
App::PropertyVectorList Points;
|
||||
App::PropertyVectorList Normals;
|
||||
|
||||
// Rigid Body parameters
|
||||
App::PropertyFloat xRefNode;
|
||||
App::PropertyFloat yRefNode;
|
||||
App::PropertyFloat zRefNode;
|
||||
App::PropertyFloat xDisplacement;
|
||||
App::PropertyFloat yDisplacement;
|
||||
App::PropertyFloat zDisplacement;
|
||||
App::PropertyFloat xRotation;
|
||||
App::PropertyFloat yRotation;
|
||||
App::PropertyFloat zRotation;
|
||||
App::PropertyFloat xForce;
|
||||
App::PropertyFloat yForce;
|
||||
App::PropertyFloat zForce;
|
||||
App::PropertyFloat xMoment;
|
||||
App::PropertyFloat yMoment;
|
||||
App::PropertyFloat zMoment;
|
||||
App::PropertyBool DefineRefNode;
|
||||
App::PropertyPosition ReferenceNode;
|
||||
App::PropertyPosition Displacement;
|
||||
App::PropertyRotation Rotation;
|
||||
App::PropertyForce ForceX;
|
||||
App::PropertyForce ForceY;
|
||||
App::PropertyForce ForceZ;
|
||||
App::PropertyMoment MomentX;
|
||||
App::PropertyMoment MomentY;
|
||||
App::PropertyMoment MomentZ;
|
||||
App::PropertyEnumeration TranslationalModeX;
|
||||
App::PropertyEnumeration TranslationalModeY;
|
||||
App::PropertyEnumeration TranslationalModeZ;
|
||||
App::PropertyEnumeration RotationalModeX;
|
||||
App::PropertyEnumeration RotationalModeY;
|
||||
App::PropertyEnumeration RotationalModeZ;
|
||||
|
||||
/// recalculate the object
|
||||
App::DocumentObjectExecReturn* execute() override;
|
||||
@@ -70,6 +65,9 @@ public:
|
||||
|
||||
protected:
|
||||
void onChanged(const App::Property* prop) override;
|
||||
|
||||
private:
|
||||
static const char* boundaryModeEnum[];
|
||||
};
|
||||
|
||||
} // namespace Fem
|
||||
|
||||
Reference in New Issue
Block a user