On Thu, 22 Oct 2020 at 16:35, Tobias Schmetzer <[email protected]> wrote: > > Good point. I can do plain doubles as well of course if that makes it more > flexible. > > Regarding the length of the perpendicular: > I think the most common use case is to just create any perpendicular with the > least computation power. For somebody requiring a specific length I could add > an optional "segment length" argument for controlling the > length of the perpendicular line. > What do you think of using a length argument of 0 for a normalized length? > (No idea if somebody would need that)
Sounds good to me! Nyall > > Viele Grüße, Tobias > Am 22.10.20, 08:12 schrieb Nyall Dawson <[email protected]>: >> >> On Thu, 22 Oct 2020 at 06:43, Tobias Schmetzer <[email protected]> wrote: >> > >> > Dear developer colleagues, >> > >> > I'm new to QGIS development and my cpp and git experience is a long >> > while ago. Yet I want to make the effort to contribute to this project >> > in return for using it for months. >> > >> > During my python scripting I was missing a function that I created >> > for myself in python which I would need to split a polyline using >> > QgsGeometry.splitGeometry(). >> > >> > The function I want to contribute will create a perpendicular segment to >> > a given segment with it's center at a given point (the already available >> > function QgsGeometryUtils.perpendicularSegment doesn't fullfill that need) >> > >> > I would suggest to add to the cpp code of QgsGeometryUtils. A good old >> > friend of mine and cpp expert will do the first code review once it's >> > finished before I do the PR. >> > >> > I am already working on that function and its test. The header looks >> > like this: >> > >> > /** >> > * \brief Create a perpendicular line segment to a given segment >> > * [segmentPoint1, segmentPoint2] with its center at centerPoint >> > * May be used to split geometries >> > * \param centerPoint Point where the center of the perpendicular should >> > * be located >> > * \param segmentPoint1 The segment's start point >> > * \param segmentPoint2 The segment's end point >> > * \returns A line (segment) centered in point p and perpendicular to >> > * segment [segmentPoint1, segmentPoint2] >> > */ >> > >> > static QgsLineString perpendicularCenterSegment( const QgsPoint &point, >> > const QgsPoint &segmentPoint1, const QgsPoint &segmentPoint2 ) SIP_HOLDGIL; >> >> Looks good to me! Some suggestions: >> - instead of accepting QgsPoint values, consider making the arguments >> plain doubles instead. (e.g. double segmentPoint1x, double >> segmentPoint1y, etc). This makes the API more flexible because callers >> who have QgsPointXY or some other input values don't need to do a >> conversion to QgsPoint first. >> - For the same reasons, consider making the method return 4 doubles >> instead of a QgsLineString. E.g. add double& perpendicular1x SIP_OUT, >> double &perpendicular1y SIP_OUT, double& perpendicular2x SIP_OUT, >> double &perpendicular2y SIP_OUT. This again avoids the forced use of >> QgsLineString, and will reap benefits if the function is called many >> times and the caller does not need a QgsLineString object >> - Do you need to add a "segment length" argument for controlling the >> length of the perpendicular line generated? >> >> Nyall >> >> >> > >> > Any comments or did I even miss an already available >> > function for what I am suggesting? >> > >> > Kind regards, Tobias >> > _______________________________________________ >> > QGIS-Developer mailing list >> > [email protected] >> > List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer >> > Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer _______________________________________________ QGIS-Developer mailing list [email protected] List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
