Gui: Improve transform UI responsivness
This introduces much faster CenterOfMassProvider#supports method that can be used as cheap pre-check to see if the object supplied could have the center of mass and so delay the domputation to a moment where it is actually needed.
This commit is contained in:
committed by
Chris Hennes
parent
5f0d99f4f3
commit
88d721b14c
@@ -45,7 +45,7 @@ Base::Placement AttacherSubObjectPlacement::calculate(
|
||||
|
||||
std::optional<Base::Vector3d> PartCenterOfMass::ofDocumentObject(App::DocumentObject* object) const
|
||||
{
|
||||
if (const auto feature = dynamic_cast<Part::Feature*>(object)) {
|
||||
if (const auto* feature = freecad_cast<Part::Feature*>(object)) {
|
||||
const auto shape = feature->Shape.getShape();
|
||||
|
||||
if (const auto cog = shape.centerOfGravity()) {
|
||||
@@ -57,3 +57,8 @@ std::optional<Base::Vector3d> PartCenterOfMass::ofDocumentObject(App::DocumentOb
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
bool PartCenterOfMass::supports(App::DocumentObject* object) const
|
||||
{
|
||||
return object->isDerivedFrom<Part::Feature>();
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ class PartCenterOfMass final: public App::CenterOfMassProvider
|
||||
{
|
||||
public:
|
||||
std::optional<Base::Vector3d> ofDocumentObject(App::DocumentObject* object) const override;
|
||||
bool supports(App::DocumentObject* object) const override;
|
||||
};
|
||||
|
||||
#endif // PART_SERVICES_H
|
||||
|
||||
Reference in New Issue
Block a user