Assembly: Drag: switch from solver Solve to dragStep.

This commit is contained in:
PaddleStroke
2024-04-09 17:00:21 +02:00
committed by Yorik van Havre
parent 60b902fc7e
commit b4168c95ee
3 changed files with 10 additions and 24 deletions

View File

@@ -175,7 +175,6 @@ int AssemblyObject::solve(bool enableRedo, bool updateJCS)
void AssemblyObject::preDrag(std::vector<App::DocumentObject*> dragParts)
{
Base::Console().Warning("pre drag\n");
solve();
dragMbdParts.clear();
@@ -186,9 +185,8 @@ void AssemblyObject::preDrag(std::vector<App::DocumentObject*> dragParts)
mbdAssembly->runPreDrag();
}
void AssemblyObject::doDragStep(Base::Vector3d delta)
void AssemblyObject::doDragStep()
{
Base::Console().Warning("doDragStep\n");
for (auto& mbdPart : dragMbdParts) {
App::DocumentObject* part = nullptr;
for (auto& pair : objectPartMap) {
@@ -201,15 +199,10 @@ void AssemblyObject::doDragStep(Base::Vector3d delta)
continue;
}
FColDsptr pos3D, delta2;
pos3D = mbdPart->position3D;
delta2 = std::make_shared<FullColumn<double>>(ListD {delta.x, delta.y, delta.z});
mbdPart->updateMbDFromPosition3D(pos3D->plusFullColumn(delta2));
/*Base::Placement plc = getPlacementFromProp(part, "Placement");
printPlacement(plc, "init plc");
Base::Placement plc = getPlacementFromProp(part, "Placement");
Base::Vector3d pos = plc.getPosition();
mbdPart->setPosition3D(pos.x, pos.y, pos.z);
mbdPart->updateMbDFromPosition3D(
std::make_shared<FullColumn<double>>(ListD {pos.x, pos.y, pos.z}));
Base::Rotation rot = plc.getRotation();
Base::Matrix4D mat;
@@ -217,7 +210,7 @@ void AssemblyObject::doDragStep(Base::Vector3d delta)
Base::Vector3d r0 = mat.getRow(0);
Base::Vector3d r1 = mat.getRow(1);
Base::Vector3d r2 = mat.getRow(2);
mbdPart->setRotationMatrix(r0.x, r0.y, r0.z, r1.x, r1.y, r1.z, r2.x, r2.y, r2.z);*/
mbdPart->updateMbDFromRotationMatrix(r0.x, r0.y, r0.z, r1.x, r1.y, r1.z, r2.x, r2.y, r2.z);
}
auto dragPartsVec = std::make_shared<std::vector<std::shared_ptr<ASMTPart>>>(dragMbdParts);
@@ -228,7 +221,6 @@ void AssemblyObject::doDragStep(Base::Vector3d delta)
void AssemblyObject::postDrag()
{
Base::Console().Warning("post drag \n");
mbdAssembly->runPostDrag(); // Do this after last drag
}

View File

@@ -144,7 +144,7 @@ public:
being in an active transaction (joint creation).*/
int solve(bool enableRedo = false, bool updateJCS = true);
void preDrag(std::vector<App::DocumentObject*> dragParts);
void doDragStep(Base::Vector3d delta);
void doDragStep();
void postDrag();
void savePlacementsForUndo();
void undoSolve();

View File

@@ -413,11 +413,6 @@ bool ViewProviderAssembly::mouseMove(const SbVec2s& cursorPos, Gui::View3DInvent
}
}
// Delta drag test :
/*SbVec3f vec = viewer->getPointOnFocalPlane(cursorPos);
Base::Vector3d newPos = Base::Vector3d(vec[0], vec[1], vec[2]);
Base::Vector3d delta = newPos - prevPosition;*/
prevPosition = newPos;
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath(
@@ -425,8 +420,8 @@ bool ViewProviderAssembly::mouseMove(const SbVec2s& cursorPos, Gui::View3DInvent
bool solveOnMove = hGrp->GetBool("SolveOnMove", true);
if (solveOnMove) {
auto* assemblyPart = static_cast<AssemblyObject*>(getObject());
assemblyPart->solve(/*enableRedo = */ false, /*updateJCS = */ false);
// assemblyPart->doDragStep(delta);
// assemblyPart->solve(/*enableRedo = */ false, /*updateJCS = */ false);
assemblyPart->doDragStep();
}
}
return false;
@@ -783,8 +778,7 @@ void ViewProviderAssembly::initMove(const SbVec2s& cursorPos, Gui::View3DInvento
for (auto& pair : docsToMove) {
dragParts.push_back(pair.first);
}
assemblyPart->solve();
// assemblyPart->preDrag(dragParts);
assemblyPart->preDrag(dragParts);
}
}
@@ -811,7 +805,7 @@ void ViewProviderAssembly::endMove()
bool solveOnMove = hGrp->GetBool("SolveOnMove", true);
if (solveOnMove) {
auto* assemblyPart = static_cast<AssemblyObject*>(getObject());
// assemblyPart->postDrag();
assemblyPart->postDrag();
assemblyPart->setObjMasses({});
}