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:
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user