From patchwork Mon Sep 30 19:59:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 21441 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 2B316C3257 for ; Mon, 30 Sep 2024 19:59:42 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C0B5563517; Mon, 30 Sep 2024 21:59:40 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="bNgolEag"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7933163517 for ; Mon, 30 Sep 2024 21:59:32 +0200 (CEST) Received: from ideasonboard.com (unknown [95.131.46.153]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7BE9DFB8; Mon, 30 Sep 2024 21:58:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1727726281; bh=k2+c5+LRuyKaS5oPPCgMPKAhfdHGfVjtixSJ+6RwFks=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bNgolEageXc5BgRBkMbhkJxVR80c0NUuLZEatHuxSBhj8ZLAB2Zgjh01w9dOf9xPq KafrMxKVHGcu2F/TMrkYsZ5OveKx3JFC57s7T/WKGVYnv+DvKfwZ/CB6g/rZKQ1bJJ /txTNUsq5iPtaJcDELZvYqXdRi4VQCwFYQ53xI5c= From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , Harvey Yang , Yudhistira Erlandinata , Harvey Yang Subject: [PATCH v9 2/5] libcamera: geometry: Add two-point Rectangle constructor Date: Mon, 30 Sep 2024 21:59:10 +0200 Message-ID: <20240930195915.152187-3-jacopo.mondi@ideasonboard.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20240930195915.152187-1-jacopo.mondi@ideasonboard.com> References: <20240930195915.152187-1-jacopo.mondi@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Yudhistira Erlandinata Add a constructor to the Rectangle class that accepts two points. The constructed Rectangle spans all the space between the two given points. Signed-off-by: Yudhistira Erlandinata Co-developed-by: Harvey Yang Reviewed-by: Jacopo Mondi Signed-off-by: Jacopo Mondi Reviewed-by: Harvey Yang --- include/libcamera/geometry.h | 7 +++++ src/libcamera/geometry.cpp | 58 ++++++++++++++++++++++++++++++++++++ test/geometry.cpp | 14 +++++++++ 3 files changed, 79 insertions(+) diff --git a/include/libcamera/geometry.h b/include/libcamera/geometry.h index 3e6f0f5d7fab..2cc25f1facd9 100644 --- a/include/libcamera/geometry.h +++ b/include/libcamera/geometry.h @@ -262,6 +262,13 @@ public: { } + constexpr Rectangle(const Point &point1, const Point &point2) + : Rectangle(std::min(point1.x, point2.x), std::min(point1.y, point2.y), + std::max(point1.x, point2.x) - std::min(point1.x, point2.x), + std::max(point1.y, point2.y) - std::min(point1.y, point2.y)) + { + } + int x; int y; unsigned int width; diff --git a/src/libcamera/geometry.cpp b/src/libcamera/geometry.cpp index 6eb432e5d803..5e5e72e15d67 100644 --- a/src/libcamera/geometry.cpp +++ b/src/libcamera/geometry.cpp @@ -715,6 +715,64 @@ std::ostream &operator<<(std::ostream &out, const SizeRange &sr) * \param[in] size The desired Rectangle size */ +/** + * \fn Rectangle::Rectangle(const Point &point1, const Point &point2) + * \brief Construct a Rectangle with the two given points + * \param[in] point1 One of corners of the rectangle + * \param[in] point2 The opposite diagonal corner point of \a point1 + * + * Contruct a rectangle that spans the space between two given points. The + * position of the two given points is not relevant for the rectangle's + * contruction. + * + * \verbatim + + p1 = point1 + p2 = point2 + + ^ + | + | ----------------p2 + | | | + | | | + | p1---------------- + | + o-------------------------------> + (0,0) + + ^ + | + | p1---------------- + | | | + | | | + | ----------------p2 + | + o-------------------------------> + (0,0) + + ^ + | + | ----------------p1 + | | | + | | | + | p2---------------- + | + o-------------------------------> + (0,0) + + ^ + | + | p2---------------- + | | | + | | | + | ----------------p1 + | + o-------------------------------> + (0,0) + + \endverbatim + */ + /** * \var Rectangle::x * \brief The horizontal coordinate of the rectangle's top-left corner diff --git a/test/geometry.cpp b/test/geometry.cpp index 64169206ad16..5760fa3c885a 100644 --- a/test/geometry.cpp +++ b/test/geometry.cpp @@ -481,6 +481,20 @@ protected: return TestFail; } + Point topLeft(3, 3); + Point bottomRight(30, 30); + Point topRight(30, 3); + Point bottomLeft(3, 30); + Rectangle rect1(topLeft, bottomRight); + Rectangle rect2(topRight, bottomLeft); + Rectangle rect3(bottomRight, topLeft); + Rectangle rect4(bottomLeft, topRight); + + if (rect1 != rect2 || rect1 != rect3 || rect1 != rect4) { + cout << "Point-to-point construction failed" << endl; + return TestFail; + } + return TestPass; } };