Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix relative lock & distance
  • Loading branch information
roya0045 committed Feb 15, 2022
1 parent bbfa18f commit ac7fe74
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
8 changes: 4 additions & 4 deletions src/core/qgscadutils.cpp
Expand Up @@ -263,14 +263,14 @@ QgsCadUtils::AlignMapPointOutput QgsCadUtils::alignMapPoint( const QgsPointXY &o
// perform both to detect errors in constraints
if ( ctx.xConstraint.locked )
{
const QgsPointXY verticalPt0( ctx.xConstraint.value, point.y() );
const QgsPointXY verticalPt1( ctx.xConstraint.value, point.y() + 1 );
const QgsPointXY verticalPt0( point.x(), point.y() );
const QgsPointXY verticalPt1( point.x(), point.y() + 1 );
res.valid &= QgsGeometryUtils::lineCircleIntersection( previousPt, ctx.distanceConstraint.value, verticalPt0, verticalPt1, point );
}
if ( ctx.yConstraint.locked )
{
const QgsPointXY horizontalPt0( point.x(), ctx.yConstraint.value );
const QgsPointXY horizontalPt1( point.x() + 1, ctx.yConstraint.value );
const QgsPointXY horizontalPt0( point.x(), point.y() );
const QgsPointXY horizontalPt1( point.x() + 1, point.y() );
res.valid &= QgsGeometryUtils::lineCircleIntersection( previousPt, ctx.distanceConstraint.value, horizontalPt0, horizontalPt1, point );
}
}
Expand Down
19 changes: 16 additions & 3 deletions tests/src/core/testqgscadutils.cpp
Expand Up @@ -241,21 +241,21 @@ void TestQgsCadUtils::testCommonAngle()
void TestQgsCadUtils::testDistance()
{
QgsCadUtils::AlignMapPointContext context( baseContext() );

const double distance = 5.0;
// without distance constraint
const QgsCadUtils::AlignMapPointOutput res0 = QgsCadUtils::alignMapPoint( QgsPointXY( 45, 20 ), context );
QVERIFY( res0.valid );
QCOMPARE( res0.softLockCommonAngle, -1.0 );
QCOMPARE( res0.finalMapPoint, QgsPointXY( 45, 20 ) );

// dist
context.distanceConstraint = QgsCadUtils::AlignMapPointConstraint( true, true, 5 );
context.distanceConstraint = QgsCadUtils::AlignMapPointConstraint( true, true, distance );
const QgsCadUtils::AlignMapPointOutput res1 = QgsCadUtils::alignMapPoint( QgsPointXY( 45, 20 ), context );
QVERIFY( res1.valid );
QCOMPARE( res1.finalMapPoint, QgsPointXY( 35, 20 ) );

// dist+x
const double d = 5 * sqrt( 2 ) / 2.; // sine/cosine of 45 times radius of our distance constraint
const double d = distance * sqrt( 2 ) / 2.; // sine/cosine of 45 times radius of our distance constraint
const double expectedX1 = 30 + d;
const double expectedY1 = 20 + d;
context.xConstraint = QgsCadUtils::AlignMapPointConstraint( true, false, expectedX1 );
Expand All @@ -268,6 +268,12 @@ void TestQgsCadUtils::testDistance()
const QgsCadUtils::AlignMapPointOutput res2x = QgsCadUtils::alignMapPoint( QgsPointXY( 45, 25 ), context );
QVERIFY( !res2x.valid );

// dist+rel x
context.xConstraint = QgsCadUtils::AlignMapPointConstraint( true, true, 0 );
const QgsCadUtils::AlignMapPointOutput res2r = QgsCadUtils::alignMapPoint( QgsPointXY( 45, 25 ), context );
QVERIFY( res2r.valid );
QCOMPARE( res2r.finalMapPoint, QgsPointXY( 30, 20 + distance ) );

// dist+y
const double expectedX2 = 30 + d;
const double expectedY2 = 20 - d;
Expand All @@ -282,6 +288,13 @@ void TestQgsCadUtils::testDistance()
const QgsCadUtils::AlignMapPointOutput res3x = QgsCadUtils::alignMapPoint( QgsPointXY( 45, 15 ), context );
QVERIFY( !res3x.valid );

// dist+rel y
context.xConstraint = QgsCadUtils::AlignMapPointConstraint();
context.yConstraint = QgsCadUtils::AlignMapPointConstraint( true, true, 0 );
const QgsCadUtils::AlignMapPointOutput res3r = QgsCadUtils::alignMapPoint( QgsPointXY( 45, 15 ), context );
QVERIFY( res3r.valid );
QCOMPARE( res3r.finalMapPoint, QgsPointXY( 30 + distance, 20 ) );

// dist+angle
context.yConstraint = QgsCadUtils::AlignMapPointConstraint();
context.angleConstraint = QgsCadUtils::AlignMapPointConstraint( true, false, 45 );
Expand Down

0 comments on commit ac7fe74

Please sign in to comment.