diff --git a/src/Mod/Part/Gui/ViewProviderGridExtension.cpp b/src/Mod/Part/Gui/ViewProviderGridExtension.cpp index 5e1dd87285..5712e6c52e 100644 --- a/src/Mod/Part/Gui/ViewProviderGridExtension.cpp +++ b/src/Mod/Part/Gui/ViewProviderGridExtension.cpp @@ -218,7 +218,11 @@ void GridExtensionP::computeGridSize(const Gui::View3DInventorViewer* viewer) double unitMultiplier = (unitsUserSchema == 2 || unitsUserSchema == 3) ? 25.4 : (unitsUserSchema == 5 || unitsUserSchema == 7) ? 304.8 : 1; - computedGridValue = vp->GridSize.getValue() * unitMultiplier * pow(GridNumberSubdivision, floor(log(camMaxDimension / unitMultiplier / numberOfLines) / log(GridNumberSubdivision))); + // 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))); //cap the grid size capGridSize(computedGridValue); @@ -472,41 +476,49 @@ void ViewProviderGridExtension::extensionOnChanged(const App::Property* prop) void ViewProviderGridExtension::setGridSizePixelThreshold(int value) { pImpl->GridSizePixelThreshold = value; + drawGrid(false); } void ViewProviderGridExtension::setGridNumberSubdivision(int value) { pImpl->GridNumberSubdivision = value; + drawGrid(false); } void ViewProviderGridExtension::setGridLinePattern(int pattern) { pImpl->GridLinePattern = pattern; + drawGrid(false); } void ViewProviderGridExtension::setGridDivLinePattern(int pattern) { pImpl->GridDivLinePattern = pattern; + drawGrid(false); } void ViewProviderGridExtension::setGridLineWidth(int width) { pImpl->GridLineWidth = width; + drawGrid(false); } void ViewProviderGridExtension::setGridDivLineWidth(int width) { pImpl->GridDivLineWidth = width; + drawGrid(false); } void ViewProviderGridExtension::setGridLineColor(const App::Color & color) { pImpl->GridLineColor = color.getPackedValue(); + drawGrid(false); } void ViewProviderGridExtension::setGridDivLineColor(const App::Color & color) { pImpl->GridDivLineColor = color.getPackedValue(); + drawGrid(false); } bool ViewProviderGridExtension::extensionHandleChangedPropertyType(Base::XMLReader& reader, diff --git a/src/Mod/Sketcher/Gui/Command.cpp b/src/Mod/Sketcher/Gui/Command.cpp index 943395033a..1af8fcbeb4 100644 --- a/src/Mod/Sketcher/Gui/Command.cpp +++ b/src/Mod/Sketcher/Gui/Command.cpp @@ -999,10 +999,6 @@ public: updateCheckBoxFromProperty(gridAutoSpacing, sketchView->GridAuto); - auto autospacing = gridAutoSpacing->checkState() == Qt::Checked; - - gridSizeBox->setEnabled(!autospacing); - gridSizeBox->setValue(sketchView->GridSize.getValue()); } } @@ -1065,8 +1061,6 @@ protected: if(sketchView) { auto enable = (state == Qt::Checked); sketchView->GridAuto.setValue(enable); - - gridSizeBox->setEnabled(!enable); } }); diff --git a/src/Mod/Sketcher/Gui/SketcherSettings.cpp b/src/Mod/Sketcher/Gui/SketcherSettings.cpp index fcb982e4b2..4e62c41cfb 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettings.cpp +++ b/src/Mod/Sketcher/Gui/SketcherSettings.cpp @@ -132,12 +132,6 @@ SketcherSettingsGrid::SketcherSettingsGrid(QWidget* parent) ui->gridLinePattern->addItem(QIcon(px), QString(), QVariant(it->second)); ui->gridDivLinePattern->addItem(QIcon(px), QString(), QVariant(it->second)); } - - ui->gridSize->setEnabled(!ui->checkBoxGridAuto->isChecked()); - - QObject::connect(ui->checkBoxGridAuto,&Gui::PrefCheckBox::stateChanged, [this](int state) { - ui->gridSize->setEnabled(state != Qt::Checked); - }); } SketcherSettingsGrid::~SketcherSettingsGrid() diff --git a/src/Mod/Sketcher/Gui/SketcherSettingsGrid.ui b/src/Mod/Sketcher/Gui/SketcherSettingsGrid.ui index 99e311bca2..c24ad3fc96 100644 --- a/src/Mod/Sketcher/Gui/SketcherSettingsGrid.ui +++ b/src/Mod/Sketcher/Gui/SketcherSettingsGrid.ui @@ -80,7 +80,8 @@ - Distance between two subsequent grid lines + Distance between two subsequent grid lines. +If 'Grid Auto Spacing' is enabled, will be used as base value. mm @@ -121,7 +122,8 @@ - While using 'Grid Auto Spacing' this sets a threshold in pixel to the grid spacing. The grid spacing change if it becomes smaller than this number of pixel. + While using 'Grid Auto Spacing' this sets a threshold in pixel to the grid spacing. +The grid spacing change if it becomes smaller than this number of pixel. 3 diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 45db1d527c..c4ba1d7520 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -233,7 +233,7 @@ void ViewProviderSketch::ParameterObserver::initParameters() {"GridSizePixelThreshold", {[this](const std::string & string, [[maybe_unused]] App::Property * property){ auto v = getSketcherGeneralParameter(string, 15); Client.setGridSizePixelThreshold(v); }, nullptr }}, {"GridNumberSubdivision", - {[this](const std::string & string, [[maybe_unused]] App::Property * property){ auto v = getSketcherGeneralParameter(string, 10); Client.setGridSizePixelThreshold(v); }, nullptr }}, + {[this](const std::string & string, [[maybe_unused]] App::Property * property){ auto v = getSketcherGeneralParameter(string, 10); Client.setGridNumberSubdivision(v); }, nullptr }}, {"GridLinePattern", {[this](const std::string & string, [[maybe_unused]] App::Property * property){ auto v = getSketcherGeneralParameter(string, 0x0f0f); Client.setGridLinePattern(v); }, nullptr }}, {"GridDivLinePattern",