Sketcher: Grid - Imperial

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

Fix grid calculation in Imperial units in Auto mode (wrong scaling).

Remove observer as unit does not need to be observed.
This commit is contained in:
Abdullah Tahiri
2023-02-25 08:02:04 +01:00
committed by abdullahtahiriyo
parent f1bd743b1b
commit 82e9a49ab3

View File

@@ -64,7 +64,7 @@ App::PropertyQuantityConstraint::Constraints ViewProviderGridExtension::GridSize
namespace PartGui {
class GridExtensionP : public ParameterGrp::ObserverType {
class GridExtensionP {
public:
explicit GridExtensionP(ViewProviderGridExtension *);
~GridExtensionP();
@@ -89,12 +89,6 @@ public:
unsigned int GridLineColor;
unsigned int GridDivLineColor;
// VP Independent parameters through observer
int unitsUserSchema = 0;
/** Observer for parameter group. */
void OnChange(Base::Subject<const char*> &rCaller, const char * sReason) override;
private:
void computeGridSize(const Gui::View3DInventorViewer* viewer);
void createGrid(bool cameraUpdate = false);
@@ -134,19 +128,12 @@ GridExtensionP::GridExtensionP(ViewProviderGridExtension * vp):
GridDivLineColor = GridLineColor;
createEditModeInventorNodes();
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Units");
unitsUserSchema = hGrp->GetInt("UserSchema", 0); //2 3 5 7 are imperial schemas. 2 3 inches, 5 7 feet
hGrp->Attach(this);
}
GridExtensionP::~GridExtensionP()
{
Gui::coinRemoveAllChildren(GridRoot);
GridRoot->unref();
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Units");
hGrp->Detach(this);
}
double GridExtensionP::getGridSize() const
@@ -216,13 +203,11 @@ void GridExtensionP::computeGridSize(const Gui::View3DInventorViewer* viewer)
int numberOfLines = static_cast<int>(std::max(pixelWidth, pixelHeight)) / GridSizePixelThreshold;
double unitMultiplier = (unitsUserSchema == 2 || unitsUserSchema == 3) ? 25.4 : (unitsUserSchema == 5 || unitsUserSchema == 7) ? 304.8 : 1;
// If number of subdivision is 1, grid auto spacing can't work as it uses it as a factor
// In such case, we apply a default factor of 10
auto safeGridNumberSubdivision = GridNumberSubdivision <= 1 ? 10 : GridNumberSubdivision;
computedGridValue = vp->GridSize.getValue() * safeGridNumberSubdivision * unitMultiplier * pow(safeGridNumberSubdivision, floor(log(camMaxDimension / unitMultiplier / numberOfLines / vp->GridSize.getValue()) / log(safeGridNumberSubdivision)));
computedGridValue = vp->GridSize.getValue() * pow(safeGridNumberSubdivision, 1 + floor(log(camMaxDimension / numberOfLines / vp->GridSize.getValue()) / log(safeGridNumberSubdivision)));
//cap the grid size
capGridSize(computedGridValue);
@@ -399,16 +384,6 @@ void GridExtensionP::drawGrid(bool cameraUpdate) {
}
}
void GridExtensionP::OnChange(Base::Subject<const char*> &rCaller, const char * sReason)
{
(void) rCaller;
if (strcmp(sReason, "UserSchema") == 0) {
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Units");
unitsUserSchema = hGrp->GetInt("UserSchema", 0); //2 3 5 7 are imperial schemas. 2 3 inches, 5 7 feet
}
}
ViewProviderGridExtension::ViewProviderGridExtension()
{