QmlDesigner: Tie 3D helper grid to snap interval

Helper grid minimum step now changes to match set snap interval.

Fixes: QDS-10624
Change-Id: I82b8206774b3769bee19be5eb0f38930f3b49c12
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2023-09-18 16:26:57 +03:00
parent 7b183a774c
commit 461340d245
4 changed files with 33 additions and 12 deletions

View File

@@ -13,9 +13,8 @@ Node {
property bool orthoMode: false property bool orthoMode: false
property double distance: 500 property double distance: 500
readonly property int minGridStep: 50 readonly property int maxGridStep: 32 * _generalHelper.minGridStep
readonly property int maxGridStep: 32 * minGridStep readonly property int gridArea: _generalHelper.minGridStep * 512
readonly property int gridArea: minGridStep * 512
// Step of the main lines of the grid, between those is always one subdiv line // Step of the main lines of the grid, between those is always one subdiv line
property int gridStep: 100 property int gridStep: 100
@@ -32,12 +31,13 @@ Node {
return Math.atan(step / distance) return Math.atan(step / distance)
} }
onDistanceChanged: { function calcStep()
{
if (distance === 0) if (distance === 0)
return return
// Calculate new grid step // Calculate new grid step
let newStep = gridStep let newStep = _generalHelper.minGridStep
let gridRad = calcRad(newStep) let gridRad = calcRad(newStep)
while (gridRad < minGridRad && newStep < maxGridStep) { while (gridRad < minGridRad && newStep < maxGridStep) {
newStep *= 2 newStep *= 2
@@ -45,16 +45,13 @@ Node {
newStep = maxGridStep newStep = maxGridStep
gridRad = calcRad(newStep) gridRad = calcRad(newStep)
} }
while (gridRad > minGridRad * 2 && newStep > minGridStep) {
newStep /= 2
if (newStep < minGridStep)
newStep = minGridStep
gridRad = calcRad(newStep)
}
gridStep = newStep gridStep = newStep
subGridMaterial.generalAlpha = Math.min(1, 2 * (1 - (minGridRad / gridRad))) subGridMaterial.generalAlpha = Math.min(1, 2 * (1 - (minGridRad / gridRad)))
} }
onMaxGridStepChanged: calcStep()
onDistanceChanged: calcStep()
// Note: Only one instance of HelperGrid is supported, as the geometry names are fixed // Note: Only one instance of HelperGrid is supported, as the geometry names are fixed
Model { // Main grid lines Model { // Main grid lines

View File

@@ -14,6 +14,11 @@ void MAIN()
float cosAngle = dot(normalize(camDir), normalize(camLevel)); float cosAngle = dot(normalize(camDir), normalize(camLevel));
float angleDepth = density * pow(cosAngle, 8); float angleDepth = density * pow(cosAngle, 8);
float alpha = generalAlpha * clamp((1.0 - ((angleDepth * depth - alphaStartDepth) / (alphaEndDepth - alphaStartDepth))), 0, 1); float alpha = generalAlpha * clamp((1.0 - ((angleDepth * depth - alphaStartDepth) / (alphaEndDepth - alphaStartDepth))), 0, 1);
// Force additional alpha when approaching the far clip of edit camera
if (depth > 90000.0)
alpha *= clamp((100000.0 - depth) / 10000.0, 0, 1);
if (alpha > 0.01) if (alpha > 0.01)
FRAGCOLOR = vec4(color.x * alpha, color.y * alpha, color.z * alpha, alpha); FRAGCOLOR = vec4(color.x * alpha, color.y * alpha, color.z * alpha, alpha);
else else

View File

@@ -954,6 +954,20 @@ QVector3D GeneralHelper::adjustScaleForSnap(const QVector3D &newScale)
return adjScale; return adjScale;
} }
void GeneralHelper::setSnapPositionInterval(double interval)
{
if (m_snapPositionInterval != interval) {
m_snapPositionInterval = interval;
emit minGridStepChanged();
}
}
double GeneralHelper::minGridStep() const
{
// Minimum grid step is a multiple of snap interval, as the last step is divided to subgrid
return 2. * m_snapPositionInterval;
}
void GeneralHelper::setBgColor(const QVariant &colors) void GeneralHelper::setBgColor(const QVariant &colors)
{ {
if (m_bgColor != colors) { if (m_bgColor != colors) {

View File

@@ -33,6 +33,7 @@ class GeneralHelper : public QObject
Q_OBJECT Q_OBJECT
Q_PROPERTY(bool isMacOS READ isMacOS CONSTANT) Q_PROPERTY(bool isMacOS READ isMacOS CONSTANT)
Q_PROPERTY(QVariant bgColor READ bgColor NOTIFY bgColorChanged FINAL) Q_PROPERTY(QVariant bgColor READ bgColor NOTIFY bgColorChanged FINAL)
Q_PROPERTY(double minGridStep READ minGridStep NOTIFY minGridStepChanged FINAL)
public: public:
GeneralHelper(); GeneralHelper();
@@ -114,10 +115,12 @@ public:
void setSnapPosition(bool enable) { m_snapPosition = enable; } void setSnapPosition(bool enable) { m_snapPosition = enable; }
void setSnapRotation(bool enable) { m_snapRotation = enable; } void setSnapRotation(bool enable) { m_snapRotation = enable; }
void setSnapScale(bool enable) { m_snapScale = enable; } void setSnapScale(bool enable) { m_snapScale = enable; }
void setSnapPositionInterval(double interval) { m_snapPositionInterval = interval; } void setSnapPositionInterval(double interval);
void setSnapRotationInterval(double interval) { m_snapRotationInterval = interval; } void setSnapRotationInterval(double interval) { m_snapRotationInterval = interval; }
void setSnapScaleInterval(double interval) { m_snapScaleInterval = interval / 100.; } void setSnapScaleInterval(double interval) { m_snapScaleInterval = interval / 100.; }
double minGridStep() const;
void setBgColor(const QVariant &colors); void setBgColor(const QVariant &colors);
QVariant bgColor() const { return m_bgColor; } QVariant bgColor() const { return m_bgColor; }
@@ -128,6 +131,8 @@ signals:
void lockedStateChanged(QQuick3DNode *node); void lockedStateChanged(QQuick3DNode *node);
void rotationBlocksChanged(); void rotationBlocksChanged();
void bgColorChanged(); void bgColorChanged();
void minGridStepChanged();
private: private:
void handlePendingToolStateUpdate(); void handlePendingToolStateUpdate();
QVector3D pivotScenePosition(QQuick3DNode *node) const; QVector3D pivotScenePosition(QQuick3DNode *node) const;