Sketcher: Minor fixes sketcher radius/diameter presentation

===========================================================

Some minor fixes:

https://forum.freecadweb.org/viewtopic.php?p=535406#p535406

https://forum.freecadweb.org/viewtopic.php?p=535511#p535511
This commit is contained in:
Abdullah Tahiri
2021-09-24 06:54:14 +02:00
parent 1d98cc08e7
commit 873e0977ca

View File

@@ -89,27 +89,46 @@ bool isCreateConstraintActive(Gui::Document *doc)
}
// Utility method to avoid repeating the same code over and over again
void finishDistanceConstraint(Gui::Command* cmd, Sketcher::SketchObject* sketch, bool isDriven=true)
void finishDatumConstraint (Gui::Command* cmd, Sketcher::SketchObject* sketch, bool isDriven=true, unsigned int numberofconstraints = 1)
{
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher");
// Get the latest constraint
const std::vector<Sketcher::Constraint *> &ConStr = sketch->Constraints.getValues();
Sketcher::Constraint *constr = ConStr[ConStr.size() -1];
int lastConstraintIndex = ConStr.size() - 1;
Sketcher::Constraint *constr = ConStr[lastConstraintIndex];
auto lastConstraintType = constr->Type;
// Guess some reasonable distance for placing the datum text
Gui::Document *doc = cmd->getActiveGuiDocument();
float sf = 1.f;
float lp = hGrp->GetFloat("RadiusDiamConstraintDispAngle", 15) * (M_PI / 180); // Get radius/diameter constraint display angle
float lprnd = hGrp->GetFloat("RadiusDiamConstraintDispAngleRnd", 0) * (M_PI / 180); // Get randomness
if (lprnd != 0) lp = lp + lprnd * (static_cast<float>(std::rand())/static_cast<float>(RAND_MAX) - 0.5);
float scaleFactor = 1.f;
float labelPosition = 0.f;
float labelPositionRandomness = 0.f;
if(lastConstraintType == Radius || lastConstraintType == Diameter) {
labelPosition = hGrp->GetFloat("RadiusDiameterConstraintDisplayBaseAngle", 15.0) * (M_PI / 180); // Get radius/diameter constraint display angle
labelPositionRandomness = hGrp->GetFloat("RadiusDiameterConstraintDisplayAngleRandomness", 0.0) * (M_PI / 180); // Get randomness
// Adds a random value around the base angle, so that possibly overlapping labels get likely a different position.
if (labelPositionRandomness != 0.0)
labelPosition = labelPosition + labelPositionRandomness * (static_cast<float>(std::rand())/static_cast<float>(RAND_MAX) - 0.5);
}
if (doc && doc->getInEdit() && doc->getInEdit()->isDerivedFrom(SketcherGui::ViewProviderSketch::getClassTypeId())) {
SketcherGui::ViewProviderSketch *vp = static_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
sf = vp->getScaleFactor();
scaleFactor = vp->getScaleFactor();
constr->LabelDistance = 2. * sf;
constr->LabelPosition = lp; // Can safely be done for all constraints as ignored by distances & angles
int firstConstraintIndex = lastConstraintIndex - numberofconstraints + 1;
for(int i = lastConstraintIndex; i >= firstConstraintIndex; i--) {
ConStr[i]->LabelDistance = 2. * scaleFactor;
if(lastConstraintType == Radius || lastConstraintType == Diameter) {
const Part::Geometry *geo = sketch->getGeometry(ConStr[i]->First);
if(geo && geo->getTypeId() == Part::GeomCircle::getClassTypeId())
ConStr[i]->LabelPosition = labelPosition;
}
}
vp->draw(false,false); // Redraw
}
@@ -2391,10 +2410,10 @@ void CmdSketcherConstrainDistance::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(),
"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
else if ((isVertex(GeoId1,PosId1) && isEdge(GeoId2,PosId2)) ||
@@ -2424,10 +2443,10 @@ void CmdSketcherConstrainDistance::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(),
"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -2458,10 +2477,10 @@ void CmdSketcherConstrainDistance::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(), "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -2519,10 +2538,10 @@ void CmdSketcherConstrainDistance::applyConstraint(std::vector<SelIdPair> &selSe
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -2553,10 +2572,10 @@ void CmdSketcherConstrainDistance::applyConstraint(std::vector<SelIdPair> &selSe
Gui::cmdAppObjectArgs(Obj, "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
}
else {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
@@ -2593,10 +2612,10 @@ void CmdSketcherConstrainDistance::applyConstraint(std::vector<SelIdPair> &selSe
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
}
return;
@@ -3001,10 +3020,10 @@ void CmdSketcherConstrainDistanceX::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(), "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -3033,10 +3052,10 @@ void CmdSketcherConstrainDistanceX::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(),"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -3103,10 +3122,10 @@ void CmdSketcherConstrainDistanceX::applyConstraint(std::vector<SelIdPair> &selS
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj, false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj, true);
finishDatumConstraint (this, Obj, true);
}
void CmdSketcherConstrainDistanceX::updateAction(int mode)
@@ -3250,10 +3269,10 @@ void CmdSketcherConstrainDistanceY::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(), "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -3282,10 +3301,10 @@ void CmdSketcherConstrainDistanceY::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(), "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -3351,10 +3370,10 @@ void CmdSketcherConstrainDistanceY::applyConstraint(std::vector<SelIdPair> &selS
Gui::cmdAppObjectArgs(Obj, "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
}
void CmdSketcherConstrainDistanceY::updateAction(int mode)
@@ -5023,7 +5042,8 @@ void CmdSketcherConstrainRadius::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(),"setDriving(%i,%s)", constrSize-1,"False");
}
finishDistanceConstraint(this, Obj, false);
finishDatumConstraint (this, Obj, false, externalGeoIdRadiusMap.size());
commitNeeded=true;
updateNeeded=true;
@@ -5072,7 +5092,7 @@ void CmdSketcherConstrainRadius::activated(int iMsg)
}
}
finishDistanceConstraint(this, Obj, constraintCreationMode==Driving);
finishDatumConstraint (this, Obj, constraintCreationMode==Driving);
//updateActive();
getSelection().clearSelection();
@@ -5138,7 +5158,7 @@ void CmdSketcherConstrainRadius::applyConstraint(std::vector<SelIdPair> &selSeq,
updateNeeded=true; // We do need to update the solver DoF after setting the constraint driving.
}
finishDistanceConstraint(this, Obj, constraintCreationMode==Driving && !fixed);
finishDatumConstraint (this, Obj, constraintCreationMode==Driving && !fixed);
//updateActive();
getSelection().clearSelection();
@@ -5308,7 +5328,8 @@ void CmdSketcherConstrainDiameter::activated(int iMsg)
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",constrSize-1,"False");
}
finishDistanceConstraint(this, Obj, false);
finishDatumConstraint (this, Obj, false, externalGeoIdDiameterMap.size());
commitNeeded=true;
updateNeeded=true;
@@ -5350,7 +5371,7 @@ void CmdSketcherConstrainDiameter::activated(int iMsg)
}
}
finishDistanceConstraint(this, Obj, constraintCreationMode==Driving);
finishDatumConstraint (this, Obj, constraintCreationMode==Driving);
//updateActive();
getSelection().clearSelection();
@@ -5413,7 +5434,7 @@ void CmdSketcherConstrainDiameter::applyConstraint(std::vector<SelIdPair> &selSe
updateNeeded=true; // We do need to update the solver DoF after setting the constraint driving.
}
finishDistanceConstraint(this, Obj, constraintCreationMode==Driving && !fixed);
finishDatumConstraint (this, Obj, constraintCreationMode==Driving && !fixed);
//updateActive();
getSelection().clearSelection();
@@ -5598,7 +5619,7 @@ void CmdSketcherConstrainRadiam::activated(int iMsg)
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",constrSize-1,"False");
}
finishDistanceConstraint(this, Obj, false);
finishDatumConstraint (this, Obj, false, externalGeoIdRadiamMap.size());
commitNeeded=true;
updateNeeded=true;
@@ -5657,7 +5678,7 @@ void CmdSketcherConstrainRadiam::activated(int iMsg)
}
}
finishDistanceConstraint(this, Obj, constraintCreationMode==Driving);
finishDatumConstraint (this, Obj, constraintCreationMode==Driving);
//updateActive();
getSelection().clearSelection();
@@ -5728,7 +5749,7 @@ void CmdSketcherConstrainRadiam::applyConstraint(std::vector<SelIdPair> &selSeq,
updateNeeded=true; // We do need to update the solver DoF after setting the constraint driving.
}
finishDistanceConstraint(this, Obj, constraintCreationMode==Driving && !fixed);
finishDatumConstraint (this, Obj, constraintCreationMode==Driving && !fixed);
//updateActive();
getSelection().clearSelection();
@@ -6038,10 +6059,10 @@ void CmdSketcherConstrainAngle::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(),"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
};
@@ -6143,10 +6164,10 @@ void CmdSketcherConstrainAngle::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(),"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -6174,10 +6195,10 @@ void CmdSketcherConstrainAngle::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(), "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -6198,10 +6219,10 @@ void CmdSketcherConstrainAngle::activated(int iMsg)
Gui::cmdAppObjectArgs(selection[0].getObject(), "setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -6311,10 +6332,10 @@ void CmdSketcherConstrainAngle::applyConstraint(std::vector<SelIdPair> &selSeq,
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
}
@@ -6394,10 +6415,10 @@ void CmdSketcherConstrainAngle::applyConstraint(std::vector<SelIdPair> &selSeq,
Gui::cmdAppObjectArgs(Obj,"setDriving(%i,%s)",
ConStr.size()-1,"False");
finishDistanceConstraint(this, Obj,false);
finishDatumConstraint (this, Obj, false);
}
else
finishDistanceConstraint(this, Obj,true);
finishDatumConstraint (this, Obj, true);
return;
};