Merge pull request #4996 from nyalldawson/spelling_and_stuff

Fix some spelling, add parameter names to tooltips in processing
This commit is contained in:
Nyall Dawson 2017-08-07 19:11:26 +10:00 committed by GitHub
commit f802c56573
41 changed files with 178 additions and 170 deletions

View File

@ -618,7 +618,7 @@ Test for containment of a point (uses GEOS)
enum JoinStyle enum JoinStyle
{ {
JoinStyleRound, JoinStyleRound,
JoinStyleMitre, JoinStyleMiter,
JoinStyleBevel, JoinStyleBevel,
}; };
@ -629,32 +629,32 @@ of segments used to approximate curves *
:rtype: QgsGeometry :rtype: QgsGeometry
%End %End
QgsGeometry buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double mitreLimit ) const; QgsGeometry buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double miterLimit ) const;
%Docstring %Docstring
Returns a buffer region around the geometry, with additional style options. Returns a buffer region around the geometry, with additional style options.
\param distance buffer distance \param distance buffer distance
\param segments for round joins, number of segments to approximate quarter-circle \param segments for round joins, number of segments to approximate quarter-circle
\param endCapStyle end cap style \param endCapStyle end cap style
\param joinStyle join style for corners in geometry \param joinStyle join style for corners in geometry
\param mitreLimit limit on the mitre ratio used for very sharp corners (JoinStyleMitre only) \param miterLimit limit on the miter ratio used for very sharp corners (JoinStyleMiter only)
.. versionadded:: 2.4 .. versionadded:: 2.4
:rtype: QgsGeometry :rtype: QgsGeometry
%End %End
QgsGeometry offsetCurve( double distance, int segments, JoinStyle joinStyle, double mitreLimit ) const; QgsGeometry offsetCurve( double distance, int segments, JoinStyle joinStyle, double miterLimit ) const;
%Docstring %Docstring
Returns an offset line at a given distance and side from an input line. Returns an offset line at a given distance and side from an input line.
\param distance buffer distance \param distance buffer distance
\param segments for round joins, number of segments to approximate quarter-circle \param segments for round joins, number of segments to approximate quarter-circle
\param joinStyle join style for corners in geometry \param joinStyle join style for corners in geometry
\param mitreLimit limit on the mitre ratio used for very sharp corners (JoinStyleMitre only) \param miterLimit limit on the miter ratio used for very sharp corners (JoinStyleMiter only)
.. versionadded:: 2.4 .. versionadded:: 2.4
:rtype: QgsGeometry :rtype: QgsGeometry
%End %End
QgsGeometry singleSidedBuffer( double distance, int segments, BufferSide side, QgsGeometry singleSidedBuffer( double distance, int segments, BufferSide side,
JoinStyle joinStyle = JoinStyleRound, JoinStyle joinStyle = JoinStyleRound,
double mitreLimit = 2.0 ) const; double miterLimit = 2.0 ) const;
%Docstring %Docstring
Returns a single sided buffer for a (multi)line geometry. The buffer is only Returns a single sided buffer for a (multi)line geometry. The buffer is only
applied to one side of the line. applied to one side of the line.
@ -662,7 +662,7 @@ of segments used to approximate curves *
\param segments for round joins, number of segments to approximate quarter-circle \param segments for round joins, number of segments to approximate quarter-circle
\param side side of geometry to buffer \param side side of geometry to buffer
\param joinStyle join style for corners \param joinStyle join style for corners
\param mitreLimit limit on the mitre ratio used for very sharp corners \param miterLimit limit on the miter ratio used for very sharp corners
:return: buffered geometry, or an empty geometry if buffer could not be :return: buffered geometry, or an empty geometry if buffer could not be
calculated calculated
.. versionadded:: 3.0 .. versionadded:: 3.0

View File

@ -50,7 +50,7 @@ class QgsGeometryEngine
%Docstring %Docstring
:rtype: QgsAbstractGeometry :rtype: QgsAbstractGeometry
%End %End
virtual QgsAbstractGeometry *buffer( double distance, int segments, int endCapStyle, int joinStyle, double mitreLimit, QString *errorMsg = 0 ) const = 0 /Factory/; virtual QgsAbstractGeometry *buffer( double distance, int segments, int endCapStyle, int joinStyle, double miterLimit, QString *errorMsg = 0 ) const = 0 /Factory/;
%Docstring %Docstring
:rtype: QgsAbstractGeometry :rtype: QgsAbstractGeometry
%End %End
@ -170,7 +170,7 @@ class QgsGeometryEngine
:rtype: int :rtype: int
%End %End
virtual QgsAbstractGeometry *offsetCurve( double distance, int segments, int joinStyle, double mitreLimit, QString *errorMsg = 0 ) const = 0 /Factory/; virtual QgsAbstractGeometry *offsetCurve( double distance, int segments, int joinStyle, double miterLimit, QString *errorMsg = 0 ) const = 0 /Factory/;
%Docstring %Docstring
:rtype: QgsAbstractGeometry :rtype: QgsAbstractGeometry
%End %End

View File

@ -63,7 +63,7 @@ create renderer from XML element
void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings /Transfer/ ); void setDataDefinedSizeLegend( QgsDataDefinedSizeLegend *settings /Transfer/ );
%Docstring %Docstring
Configures appearance of legend when renderer is configured to use data-defined size for marker symbols. Configures appearance of legend when renderer is configured to use data-defined size for marker symbols.
This allow to configure for which values (symbol sizes) should be shown in the legend, whether to display This allows configuring which values (symbol sizes) should be shown in the legend, whether to display
different symbol sizes collapsed in one legend node or separated across multiple legend nodes etc. different symbol sizes collapsed in one legend node or separated across multiple legend nodes etc.
When renderer does not use data-defined size or does not use marker symbols, these settings will be ignored. When renderer does not use data-defined size or does not use marker symbols, these settings will be ignored.

View File

@ -218,9 +218,9 @@ qgis:fixeddistancebuffer: >
The end cap style parameter controls how line endings are handled in the buffer. The end cap style parameter controls how line endings are handled in the buffer.
The join style parameter specifies whether round, mitre or beveled joins should be used when offsetting corners in a line. The join style parameter specifies whether round, miter or beveled joins should be used when offsetting corners in a line.
The mitre limit parameter is only applicable for mitre join styles, and controls the maximum distance from the offset curve to use when creating a mitred join. The miter limit parameter is only applicable for miter join styles, and controls the maximum distance from the offset curve to use when creating a mitered join.
qgis:fixgeometries: > qgis:fixgeometries: >
This algorithm attempts to create a valid representation of a given invalid geometry without losing any of the input vertices. Already-valid geometries are returned without further intervention. Always outputs multi-geometry layer. This algorithm attempts to create a valid representation of a given invalid geometry without losing any of the input vertices. Already-valid geometries are returned without further intervention. Always outputs multi-geometry layer.
@ -334,9 +334,9 @@ qgis:offsetline: >
The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets. The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets.
The join style parameter specifies whether round, mitre or beveled joins should be used when offsetting corners in a line. The join style parameter specifies whether round, miter or beveled joins should be used when offsetting corners in a line.
The mitre limit parameter is only applicable for mitre join styles, and controls the maximum distance from the offset curve to use when creating a mitred join. The miter limit parameter is only applicable for miter join styles, and controls the maximum distance from the offset curve to use when creating a mitered join.
qgis:orientedminimumboundingbox: > qgis:orientedminimumboundingbox: >
This algorithm takes a vector layer and generate a new one with the minimum rectangle that covers all the input features. This algorithm takes a vector layer and generate a new one with the minimum rectangle that covers all the input features.
@ -537,9 +537,9 @@ qgis:singlesidedbuffer: >
The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded buffers. The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded buffers.
The join style parameter specifies whether round, mitre or beveled joins should be used when buffering corners in a line. The join style parameter specifies whether round, miter or beveled joins should be used when buffering corners in a line.
The mitre limit parameter is only applicable for mitre join styles, and controls the maximum distance from the buffer to use when creating a mitred join. The miter limit parameter is only applicable for miter join styles, and controls the maximum distance from the buffer to use when creating a mitered join.
qgis:smoothgeometry: > qgis:smoothgeometry: >
This algorithm smooths the geometries in a line or polygon layer. It creates a new layer with the same features as the ones in the input layer, but with geometries containing a higher number of vertices and corners in the geometries smoothed out. This algorithm smooths the geometries in a line or polygon layer. It creates a new layer with the same features as the ones in the input layer, but with geometries containing a higher number of vertices and corners in the geometries smoothed out.

View File

@ -32,7 +32,7 @@ from qgis.core import (QgsFeature,
def buffering(feedback, context, sink, distance, field, useField, source, dissolve, segments, endCapStyle=1, def buffering(feedback, context, sink, distance, field, useField, source, dissolve, segments, endCapStyle=1,
joinStyle=1, mitreLimit=2): joinStyle=1, miterLimit=2):
if useField: if useField:
field = source.fields().lookupField(field) field = source.fields().lookupField(field)
@ -62,7 +62,7 @@ def buffering(feedback, context, sink, distance, field, useField, source, dissol
inGeom = inFeat.geometry() inGeom = inFeat.geometry()
buffered_geometries.append(inGeom.buffer(float(value), segments, endCapStyle, joinStyle, mitreLimit)) buffered_geometries.append(inGeom.buffer(float(value), segments, endCapStyle, joinStyle, miterLimit))
current += 1 current += 1
feedback.setProgress(int(current * total)) feedback.setProgress(int(current * total))
@ -86,7 +86,7 @@ def buffering(feedback, context, sink, distance, field, useField, source, dissol
value = distance value = distance
inGeom = inFeat.geometry() inGeom = inFeat.geometry()
outFeat = QgsFeature() outFeat = QgsFeature()
outGeom = inGeom.buffer(float(value), segments, endCapStyle, joinStyle, mitreLimit) outGeom = inGeom.buffer(float(value), segments, endCapStyle, joinStyle, miterLimit)
outFeat.setGeometry(outGeom) outFeat.setGeometry(outGeom)
outFeat.setAttributes(attrs) outFeat.setAttributes(attrs)
sink.addFeature(outFeat, QgsFeatureSink.FastInsert) sink.addFeature(outFeat, QgsFeatureSink.FastInsert)

View File

@ -54,7 +54,7 @@ class FixedDistanceBuffer(QgisAlgorithm):
DISSOLVE = 'DISSOLVE' DISSOLVE = 'DISSOLVE'
END_CAP_STYLE = 'END_CAP_STYLE' END_CAP_STYLE = 'END_CAP_STYLE'
JOIN_STYLE = 'JOIN_STYLE' JOIN_STYLE = 'JOIN_STYLE'
MITRE_LIMIT = 'MITRE_LIMIT' MITER_LIMIT = 'MITER_LIMIT'
def icon(self): def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'buffer.png')) return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'buffer.png'))
@ -83,14 +83,14 @@ class FixedDistanceBuffer(QgisAlgorithm):
self.tr('End cap style'), self.tr('End cap style'),
options=self.end_cap_styles, defaultValue=0)) options=self.end_cap_styles, defaultValue=0))
self.join_styles = [self.tr('Round'), self.join_styles = [self.tr('Round'),
'Mitre', 'Miter',
'Bevel'] 'Bevel']
self.addParameter(QgsProcessingParameterEnum( self.addParameter(QgsProcessingParameterEnum(
self.JOIN_STYLE, self.JOIN_STYLE,
self.tr('Join style'), self.tr('Join style'),
options=self.join_styles, defaultValue=0)) options=self.join_styles, defaultValue=0))
self.addParameter(QgsProcessingParameterNumber(self.MITRE_LIMIT, self.addParameter(QgsProcessingParameterNumber(self.MITER_LIMIT,
self.tr('Mitre limit'), minValue=0, defaultValue=2)) self.tr('Miter limit'), minValue=0, defaultValue=2))
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Buffer'), QgsProcessing.TypeVectorPolygon)) self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Buffer'), QgsProcessing.TypeVectorPolygon))
@ -108,7 +108,7 @@ class FixedDistanceBuffer(QgisAlgorithm):
segments = self.parameterAsInt(parameters, self.SEGMENTS, context) segments = self.parameterAsInt(parameters, self.SEGMENTS, context)
end_cap_style = self.parameterAsEnum(parameters, self.END_CAP_STYLE, context) + 1 end_cap_style = self.parameterAsEnum(parameters, self.END_CAP_STYLE, context) + 1
join_style = self.parameterAsEnum(parameters, self.JOIN_STYLE, context) + 1 join_style = self.parameterAsEnum(parameters, self.JOIN_STYLE, context) + 1
miter_limit = self.parameterAsDouble(parameters, self.MITRE_LIMIT, context) miter_limit = self.parameterAsDouble(parameters, self.MITER_LIMIT, context)
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context, (sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
source.fields(), QgsWkbTypes.Polygon, source.sourceCrs()) source.fields(), QgsWkbTypes.Polygon, source.sourceCrs())

View File

@ -45,7 +45,7 @@ class OffsetLine(QgisFeatureBasedAlgorithm):
DISTANCE = 'DISTANCE' DISTANCE = 'DISTANCE'
SEGMENTS = 'SEGMENTS' SEGMENTS = 'SEGMENTS'
JOIN_STYLE = 'JOIN_STYLE' JOIN_STYLE = 'JOIN_STYLE'
MITRE_LIMIT = 'MITRE_LIMIT' MITER_LIMIT = 'MITER_LIMIT'
def group(self): def group(self):
return self.tr('Vector geometry tools') return self.tr('Vector geometry tools')
@ -68,14 +68,14 @@ class OffsetLine(QgisFeatureBasedAlgorithm):
type=QgsProcessingParameterNumber.Integer, type=QgsProcessingParameterNumber.Integer,
minValue=1, defaultValue=8)) minValue=1, defaultValue=8))
self.join_styles = [self.tr('Round'), self.join_styles = [self.tr('Round'),
'Mitre', 'Miter',
'Bevel'] 'Bevel']
self.addParameter(QgsProcessingParameterEnum( self.addParameter(QgsProcessingParameterEnum(
self.JOIN_STYLE, self.JOIN_STYLE,
self.tr('Join style'), self.tr('Join style'),
options=self.join_styles)) options=self.join_styles))
self.addParameter(QgsProcessingParameterNumber(self.MITRE_LIMIT, self.addParameter(QgsProcessingParameterNumber(self.MITER_LIMIT,
self.tr('Mitre limit'), type=QgsProcessingParameterNumber.Double, self.tr('Miter limit'), type=QgsProcessingParameterNumber.Double,
minValue=1, defaultValue=2)) minValue=1, defaultValue=2))
def name(self): def name(self):
@ -94,7 +94,7 @@ class OffsetLine(QgisFeatureBasedAlgorithm):
self.distance = self.parameterAsDouble(parameters, self.DISTANCE, context) self.distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
self.segments = self.parameterAsInt(parameters, self.SEGMENTS, context) self.segments = self.parameterAsInt(parameters, self.SEGMENTS, context)
self.join_style = self.parameterAsEnum(parameters, self.JOIN_STYLE, context) + 1 self.join_style = self.parameterAsEnum(parameters, self.JOIN_STYLE, context) + 1
self.miter_limit = self.parameterAsDouble(parameters, self.MITRE_LIMIT, context) self.miter_limit = self.parameterAsDouble(parameters, self.MITER_LIMIT, context)
return True return True
def processFeature(self, feature, feedback): def processFeature(self, feature, feedback):

View File

@ -40,7 +40,7 @@ class SingleSidedBuffer(QgisFeatureBasedAlgorithm):
SIDE = 'SIDE' SIDE = 'SIDE'
SEGMENTS = 'SEGMENTS' SEGMENTS = 'SEGMENTS'
JOIN_STYLE = 'JOIN_STYLE' JOIN_STYLE = 'JOIN_STYLE'
MITRE_LIMIT = 'MITRE_LIMIT' MITER_LIMIT = 'MITER_LIMIT'
def group(self): def group(self):
return self.tr('Vector geometry tools') return self.tr('Vector geometry tools')
@ -55,7 +55,7 @@ class SingleSidedBuffer(QgisFeatureBasedAlgorithm):
self.sides = [self.tr('Left'), self.sides = [self.tr('Left'),
'Right'] 'Right']
self.join_styles = [self.tr('Round'), self.join_styles = [self.tr('Round'),
'Mitre', 'Miter',
'Bevel'] 'Bevel']
def initParameters(self, config=None): def initParameters(self, config=None):
@ -74,8 +74,8 @@ class SingleSidedBuffer(QgisFeatureBasedAlgorithm):
self.JOIN_STYLE, self.JOIN_STYLE,
self.tr('Join style'), self.tr('Join style'),
options=self.join_styles)) options=self.join_styles))
self.addParameter(QgsProcessingParameterNumber(self.MITRE_LIMIT, self.addParameter(QgsProcessingParameterNumber(self.MITER_LIMIT,
self.tr('Mitre limit'), minValue=1, defaultValue=2)) self.tr('Miter limit'), minValue=1, defaultValue=2))
def name(self): def name(self):
return 'singlesidedbuffer' return 'singlesidedbuffer'
@ -100,7 +100,7 @@ class SingleSidedBuffer(QgisFeatureBasedAlgorithm):
self.side = QgsGeometry.SideLeft self.side = QgsGeometry.SideLeft
else: else:
self.side = QgsGeometry.SideRight self.side = QgsGeometry.SideRight
self.miter_limit = self.parameterAsDouble(parameters, self.MITRE_LIMIT, context) self.miter_limit = self.parameterAsDouble(parameters, self.MITER_LIMIT, context)
return True return True
def processFeature(self, feature, feedback): def processFeature(self, feature, feedback):

View File

@ -53,7 +53,7 @@ class VariableDistanceBuffer(QgisAlgorithm):
DISSOLVE = 'DISSOLVE' DISSOLVE = 'DISSOLVE'
END_CAP_STYLE = 'END_CAP_STYLE' END_CAP_STYLE = 'END_CAP_STYLE'
JOIN_STYLE = 'JOIN_STYLE' JOIN_STYLE = 'JOIN_STYLE'
MITRE_LIMIT = 'MITRE_LIMIT' MITER_LIMIT = 'MITER_LIMIT'
def icon(self): def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'buffer.png')) return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'buffer.png'))
@ -83,14 +83,14 @@ class VariableDistanceBuffer(QgisAlgorithm):
self.tr('End cap style'), self.tr('End cap style'),
options=self.end_cap_styles, defaultValue=0)) options=self.end_cap_styles, defaultValue=0))
self.join_styles = [self.tr('Round'), self.join_styles = [self.tr('Round'),
'Mitre', 'Miter',
'Bevel'] 'Bevel']
self.addParameter(QgsProcessingParameterEnum( self.addParameter(QgsProcessingParameterEnum(
self.JOIN_STYLE, self.JOIN_STYLE,
self.tr('Join style'), self.tr('Join style'),
options=self.join_styles, defaultValue=0)) options=self.join_styles, defaultValue=0))
self.addParameter(QgsProcessingParameterNumber(self.MITRE_LIMIT, self.addParameter(QgsProcessingParameterNumber(self.MITER_LIMIT,
self.tr('Mitre limit'), minValue=0, defaultValue=2)) self.tr('Miter limit'), minValue=0, defaultValue=2))
self.addParameter( self.addParameter(
QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Buffer'), QgsProcessing.TypeVectorPolygon)) QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Buffer'), QgsProcessing.TypeVectorPolygon))
@ -108,7 +108,7 @@ class VariableDistanceBuffer(QgisAlgorithm):
segments = self.parameterAsInt(parameters, self.SEGMENTS, context) segments = self.parameterAsInt(parameters, self.SEGMENTS, context)
end_cap_style = self.parameterAsEnum(parameters, self.END_CAP_STYLE, context) + 1 end_cap_style = self.parameterAsEnum(parameters, self.END_CAP_STYLE, context) + 1
join_style = self.parameterAsEnum(parameters, self.JOIN_STYLE, context) + 1 join_style = self.parameterAsEnum(parameters, self.JOIN_STYLE, context) + 1
miter_limit = self.parameterAsDouble(parameters, self.MITRE_LIMIT, context) miter_limit = self.parameterAsDouble(parameters, self.MITER_LIMIT, context)
field = self.parameterAsString(parameters, self.FIELD, context) field = self.parameterAsString(parameters, self.FIELD, context)

View File

@ -190,7 +190,7 @@ class ParameterMultipleInput(Parameter):
return True return True
if _minNumInputs < 1 and not self.flags() & QgsProcessingParameterDefinition.FlagOptional: if _minNumInputs < 1 and not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
# don't allow to set negative or null number of inputs if parameter isn't optional # don't allow setting negative or null number of inputs if parameter isn't optional
return False return False
self.minNumInputs = int(_minNumInputs) self.minNumInputs = int(_minNumInputs)

View File

@ -83,6 +83,10 @@ class ParametersPanel(BASE, WIDGET):
for wrapper in list(self.wrappers.values()): for wrapper in list(self.wrappers.values()):
wrapper.refresh() wrapper.refresh()
def formatParameterTooltip(self, parameter):
return '<p><b>{}</b></p><p>{}</p>'.format(parameter.description(),
self.tr('Python identifier: {}').format('<i>{}</i>'.format(parameter.name())))
def initWidgets(self): def initWidgets(self):
# If there are advanced parameters — show corresponding groupbox # If there are advanced parameters — show corresponding groupbox
for param in self.alg.parameterDefinitions(): for param in self.alg.parameterDefinitions():
@ -127,7 +131,7 @@ class ParametersPanel(BASE, WIDGET):
widget = QWidget() widget = QWidget()
widget.setLayout(layout) widget.setLayout(layout)
widget.setToolTip(param.description()) widget.setToolTip(self.formatParameterTooltip(param))
if type(widget) is QCheckBox: if type(widget) is QCheckBox:
# checkbox widget - so description is embedded in widget rather than a separate # checkbox widget - so description is embedded in widget rather than a separate
@ -164,6 +168,8 @@ class ParametersPanel(BASE, WIDGET):
check.setChecked(True) check.setChecked(True)
self.layoutMain.insertWidget(self.layoutMain.count() - 1, check) self.layoutMain.insertWidget(self.layoutMain.count() - 1, check)
self.checkBoxes[output.name()] = check self.checkBoxes[output.name()] = check
widget.setToolTip(self.formatParameterTooltip(param))
self.outputWidgets[output.name()] = widget self.outputWidgets[output.name()] = widget
for wrapper in list(self.wrappers.values()): for wrapper in list(self.wrappers.values()):

View File

@ -1357,7 +1357,6 @@ class WidgetWrapperFactory:
@staticmethod @staticmethod
def create_wrapper_from_class(param, dialog, row=0, col=0): def create_wrapper_from_class(param, dialog, row=0, col=0):
print("PARAM", param, param.name(), param.type())
wrapper = None wrapper = None
if param.type() == 'boolean': if param.type() == 'boolean':
wrapper = BooleanWidgetWrapper wrapper = BooleanWidgetWrapper

View File

@ -1,7 +1,7 @@
<GMLFeatureClassList> <GMLFeatureClassList>
<GMLFeatureClass> <GMLFeatureClass>
<Name>buffer_polys_mitre</Name> <Name>buffer_polys_miter</Name>
<ElementPath>buffer_polys_mitre</ElementPath> <ElementPath>buffer_polys_miter</ElementPath>
<GeometryType>3</GeometryType> <GeometryType>3</GeometryType>
<SRSName>EPSG:4326</SRSName> <SRSName>EPSG:4326</SRSName>
<DatasetSpecificInfo> <DatasetSpecificInfo>

View File

@ -12,47 +12,47 @@
</gml:boundedBy> </gml:boundedBy>
<gml:featureMember> <gml:featureMember>
<ogr:buffer_polys_mitre fid="polys.0"> <ogr:buffer_polys_miter fid="polys.0">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-2,-2 -2,4 4,4 4,1 3,1 3,-2 -2,-2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-2,-2 -2,4 4,4 4,1 3,1 3,-2 -2,-2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
<ogr:name>aaaaa</ogr:name> <ogr:name>aaaaa</ogr:name>
<ogr:intval>33</ogr:intval> <ogr:intval>33</ogr:intval>
<ogr:floatval>44.123456</ogr:floatval> <ogr:floatval>44.123456</ogr:floatval>
</ogr:buffer_polys_mitre> </ogr:buffer_polys_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:buffer_polys_mitre fid="polys.1"> <ogr:buffer_polys_miter fid="polys.1">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>5.0,6.414213562373096 7.93754927857421,3.451405886594554 7.757968851470933,3.017860383945075 2.242031148529061,3.017860383945087 2.062450721425788,3.451405886594566 5.0,6.414213562373096</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>5.0,6.414213562373096 7.93754927857421,3.451405886594554 7.757968851470933,3.017860383945075 2.242031148529061,3.017860383945087 2.062450721425788,3.451405886594566 5.0,6.414213562373096</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
<ogr:name>Aaaaa</ogr:name> <ogr:name>Aaaaa</ogr:name>
<ogr:intval>-33</ogr:intval> <ogr:intval>-33</ogr:intval>
<ogr:floatval>0</ogr:floatval> <ogr:floatval>0</ogr:floatval>
</ogr:buffer_polys_mitre> </ogr:buffer_polys_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:buffer_polys_mitre fid="polys.2"> <ogr:buffer_polys_miter fid="polys.2">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,4 1,7 4,7 4,4 1,4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>1,4 1,7 4,7 4,4 1,4</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
<ogr:name>bbaaa</ogr:name> <ogr:name>bbaaa</ogr:name>
<ogr:floatval>0.123</ogr:floatval> <ogr:floatval>0.123</ogr:floatval>
</ogr:buffer_polys_mitre> </ogr:buffer_polys_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:buffer_polys_mitre fid="polys.3"> <ogr:buffer_polys_miter fid="polys.3">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>5,2 11,2 11,-4 5,-4 5,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>5,2 11,2 11,-4 5,-4 5,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
<ogr:name>ASDF</ogr:name> <ogr:name>ASDF</ogr:name>
<ogr:intval>0</ogr:intval> <ogr:intval>0</ogr:intval>
</ogr:buffer_polys_mitre> </ogr:buffer_polys_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:buffer_polys_mitre fid="polys.4"> <ogr:buffer_polys_miter fid="polys.4">
<ogr:intval>120</ogr:intval> <ogr:intval>120</ogr:intval>
<ogr:floatval>-100291.43213</ogr:floatval> <ogr:floatval>-100291.43213</ogr:floatval>
</ogr:buffer_polys_mitre> </ogr:buffer_polys_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:buffer_polys_mitre fid="polys.5"> <ogr:buffer_polys_miter fid="polys.5">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.162277660168381,3.0 7.0,1.720759220056127 7.0,-4.618033988749896 1.0,-1.618033988749894 1,3 3.162277660168381,3.0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3.162277660168381,3.0 7.0,1.720759220056127 7.0,-4.618033988749896 1.0,-1.618033988749894 1,3 3.162277660168381,3.0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
<ogr:name>elim</ogr:name> <ogr:name>elim</ogr:name>
<ogr:intval>2</ogr:intval> <ogr:intval>2</ogr:intval>
<ogr:floatval>3.33</ogr:floatval> <ogr:floatval>3.33</ogr:floatval>
</ogr:buffer_polys_mitre> </ogr:buffer_polys_miter>
</gml:featureMember> </gml:featureMember>
</ogr:FeatureCollection> </ogr:FeatureCollection>

View File

@ -1,7 +1,7 @@
<GMLFeatureClassList> <GMLFeatureClassList>
<GMLFeatureClass> <GMLFeatureClass>
<Name>line_offset_mitre</Name> <Name>line_offset_miter</Name>
<ElementPath>line_offset_mitre</ElementPath> <ElementPath>line_offset_miter</ElementPath>
<GeometryType>2</GeometryType> <GeometryType>2</GeometryType>
<SRSName>EPSG:4326</SRSName> <SRSName>EPSG:4326</SRSName>
<DatasetSpecificInfo> <DatasetSpecificInfo>

View File

@ -12,37 +12,37 @@
</gml:boundedBy> </gml:boundedBy>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.0"> <ogr:line_offset_miter fid="lines.0">
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>6,3 8,3 8.0,3.414213562373094 10.292893218813452,5.707106781186548</gml:coordinates></gml:LineString></ogr:geometryProperty> <ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>6,3 8,3 8.0,3.414213562373094 10.292893218813452,5.707106781186548</gml:coordinates></gml:LineString></ogr:geometryProperty>
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.1"> <ogr:line_offset_miter fid="lines.1">
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>-1,0 1,0</gml:coordinates></gml:LineString></ogr:geometryProperty> <ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>-1,0 1,0</gml:coordinates></gml:LineString></ogr:geometryProperty>
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.2"> <ogr:line_offset_miter fid="lines.2">
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>1,0 1,3 2,3</gml:coordinates></gml:LineString></ogr:geometryProperty> <ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>1,0 1,3 2,3</gml:coordinates></gml:LineString></ogr:geometryProperty>
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.3"> <ogr:line_offset_miter fid="lines.3">
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>3,2 5,2</gml:coordinates></gml:LineString></ogr:geometryProperty> <ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>3,2 5,2</gml:coordinates></gml:LineString></ogr:geometryProperty>
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.4"> <ogr:line_offset_miter fid="lines.4">
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>7,-2 10,-2</gml:coordinates></gml:LineString></ogr:geometryProperty> <ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>7,-2 10,-2</gml:coordinates></gml:LineString></ogr:geometryProperty>
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.5"> <ogr:line_offset_miter fid="lines.5">
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>5.292893218813452,-2.292893218813453 9.292893218813452,1.707106781186547</gml:coordinates></gml:LineString></ogr:geometryProperty> <ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>5.292893218813452,-2.292893218813453 9.292893218813452,1.707106781186547</gml:coordinates></gml:LineString></ogr:geometryProperty>
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:line_offset_mitre fid="lines.6"> <ogr:line_offset_miter fid="lines.6">
</ogr:line_offset_mitre> </ogr:line_offset_miter>
</gml:featureMember> </gml:featureMember>
</ogr:FeatureCollection> </ogr:FeatureCollection>

View File

@ -1,7 +1,7 @@
<GMLFeatureClassList> <GMLFeatureClassList>
<GMLFeatureClass> <GMLFeatureClass>
<Name>single_sided_buffer_line_mitre</Name> <Name>single_sided_buffer_line_miter</Name>
<ElementPath>single_sided_buffer_line_mitre</ElementPath> <ElementPath>single_sided_buffer_line_miter</ElementPath>
<GeometryType>3</GeometryType> <GeometryType>3</GeometryType>
<SRSName>EPSG:4326</SRSName> <SRSName>EPSG:4326</SRSName>
<DatasetSpecificInfo> <DatasetSpecificInfo>

View File

@ -12,37 +12,37 @@
</gml:boundedBy> </gml:boundedBy>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.0"> <ogr:single_sided_buffer_line_miter fid="lines.0">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,2 9,2 9,3 11,5 11.707106781186548,4.292893218813452 10.0,2.585786437626905 10,1 6,1 6,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,2 9,2 9,3 11,5 11.707106781186548,4.292893218813452 10.0,2.585786437626905 10,1 6,1 6,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.1"> <ogr:single_sided_buffer_line_miter fid="lines.1">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-1,-1 1,-1 1,-2 -1,-2 -1,-1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-1,-1 1,-1 1,-2 -1,-2 -1,-1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.2"> <ogr:single_sided_buffer_line_miter fid="lines.2">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>2,0 2,2 3,2 3,3 4,3 4,1 3,1 3,0 2,0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>2,0 2,2 3,2 3,3 4,3 4,1 3,1 3,0 2,0</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.3"> <ogr:single_sided_buffer_line_miter fid="lines.3">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3,1 5,1 5,0 3,0 3,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3,1 5,1 5,0 3,0 3,1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.4"> <ogr:single_sided_buffer_line_miter fid="lines.4">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7,-3 10,-3 10,-4 7,-4 7,-3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7,-3 10,-3 10,-4 7,-4 7,-3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.5"> <ogr:single_sided_buffer_line_miter fid="lines.5">
<ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,-3 10,1 10.707106781186548,0.292893218813453 6.707106781186548,-3.707106781186547 6,-3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty> <ogr:geometryProperty><gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,-3 10,1 10.707106781186548,0.292893218813453 6.707106781186548,-3.707106781186547 6,-3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogr:geometryProperty>
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
<gml:featureMember> <gml:featureMember>
<ogr:single_sided_buffer_line_mitre fid="lines.6"> <ogr:single_sided_buffer_line_miter fid="lines.6">
</ogr:single_sided_buffer_line_mitre> </ogr:single_sided_buffer_line_miter>
</gml:featureMember> </gml:featureMember>
</ogr:FeatureCollection> </ogr:FeatureCollection>

View File

@ -645,7 +645,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
results: results:
OUTPUT: OUTPUT:
@ -663,7 +663,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
results: results:
OUTPUT: OUTPUT:
@ -674,18 +674,18 @@ tests:
precision: 7 precision: 7
- algorithm: qgis:offsetline - algorithm: qgis:offsetline
name: Offset line mitre name: Offset line miter
params: params:
DISTANCE: 1.0 DISTANCE: 1.0
INPUT: INPUT:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '1' JOIN_STYLE: '1'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 4 SEGMENTS: 4
results: results:
OUTPUT: OUTPUT:
name: expected/line_offset_mitre.gml name: expected/line_offset_miter.gml
type: vector type: vector
compare: compare:
geometry: geometry:
@ -699,7 +699,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '2' JOIN_STYLE: '2'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
results: results:
OUTPUT: OUTPUT:
@ -717,7 +717,7 @@ tests:
name: multilines.gml name: multilines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
results: results:
OUTPUT: OUTPUT:
@ -737,7 +737,7 @@ tests:
name: polys.gml name: polys.gml
type: vector type: vector
JOIN_STYLE: '2' JOIN_STYLE: '2'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 5 SEGMENTS: 5
results: results:
OUTPUT: OUTPUT:
@ -745,7 +745,7 @@ tests:
type: vector type: vector
- algorithm: qgis:fixeddistancebuffer - algorithm: qgis:fixeddistancebuffer
name: Buffer polygons using mitre name: Buffer polygons using miter
params: params:
DISSOLVE: false DISSOLVE: false
DISTANCE: 1.0 DISTANCE: 1.0
@ -754,11 +754,11 @@ tests:
name: polys.gml name: polys.gml
type: vector type: vector
JOIN_STYLE: '1' JOIN_STYLE: '1'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 5 SEGMENTS: 5
results: results:
OUTPUT: OUTPUT:
name: expected/buffer_polys_mitre.gml name: expected/buffer_polys_miter.gml
type: vector type: vector
- algorithm: qgis:fixeddistancebuffer - algorithm: qgis:fixeddistancebuffer
@ -771,7 +771,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 5 SEGMENTS: 5
results: results:
OUTPUT: OUTPUT:
@ -791,7 +791,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 5 SEGMENTS: 5
results: results:
OUTPUT: OUTPUT:
@ -811,7 +811,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 5 SEGMENTS: 5
results: results:
OUTPUT: OUTPUT:
@ -926,7 +926,7 @@ tests:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '0' JOIN_STYLE: '0'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
SIDE: '0' SIDE: '0'
results: results:
@ -938,19 +938,19 @@ tests:
precision: 7 precision: 7
- algorithm: qgis:singlesidedbuffer - algorithm: qgis:singlesidedbuffer
name: Single sided buffer lines (Right, mitre) name: Single sided buffer lines (Right, miter)
params: params:
DISTANCE: 1.0 DISTANCE: 1.0
INPUT: INPUT:
name: lines.gml name: lines.gml
type: vector type: vector
JOIN_STYLE: '1' JOIN_STYLE: '1'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
SIDE: '1' SIDE: '1'
results: results:
OUTPUT: OUTPUT:
name: expected/single_sided_buffer_line_mitre.gml name: expected/single_sided_buffer_line_miter.gml
type: vector type: vector
compare: compare:
geometry: geometry:
@ -964,7 +964,7 @@ tests:
name: multilines.gml name: multilines.gml
type: vector type: vector
JOIN_STYLE: '2' JOIN_STYLE: '2'
MITRE_LIMIT: 2 MITER_LIMIT: 2
SEGMENTS: 8 SEGMENTS: 8
SIDE: '0' SIDE: '0'
results: results:

View File

@ -5,8 +5,8 @@
"arguments": [ {"arg":"geometry","description":"a (multi)linestring geometry"}, "arguments": [ {"arg":"geometry","description":"a (multi)linestring geometry"},
{"arg":"distance","description":"offset distance. Positive values will be buffered to the left of lines, negative values to the right"}, {"arg":"distance","description":"offset distance. Positive values will be buffered to the left of lines, negative values to the right"},
{"arg":"segments","optional":true,"default":"8","description":"number of segments to use to represent a quarter circle when a round join style is used. A larger number results in a smoother line with more nodes."}, {"arg":"segments","optional":true,"default":"8","description":"number of segments to use to represent a quarter circle when a round join style is used. A larger number results in a smoother line with more nodes."},
{"arg":"join","optional":true,"default":"1","description":"join style for corners, where 1 = round, 2 = mitre and 3 = bevel"}, {"arg":"join","optional":true,"default":"1","description":"join style for corners, where 1 = round, 2 = miter and 3 = bevel"},
{"arg":"mitre_limit","optional":true,"default":"2.0","description":"limit on the mitre ratio used for very sharp corners (when using mitre joins only)"}], {"arg":"miter_limit","optional":true,"default":"2.0","description":"limit on the miter ratio used for very sharp corners (when using miter joins only)"}],
"examples": [ { "expression":"offset_curve($geometry, 10.5)", "returns":"line offset to the left by 10.5 units"}, "examples": [ { "expression":"offset_curve($geometry, 10.5)", "returns":"line offset to the left by 10.5 units"},
{ "expression":"offset_curve($geometry, -10.5)", "returns":"line offset to the right by 10.5 units"}, { "expression":"offset_curve($geometry, -10.5)", "returns":"line offset to the right by 10.5 units"},
{ "expression":"offset_curve($geometry, 10.5, segments=16, join=1)", "returns":"line offset to the left by 10.5 units, using more segments to result in a smoother curve"}, { "expression":"offset_curve($geometry, 10.5, segments=16, join=1)", "returns":"line offset to the left by 10.5 units, using more segments to result in a smoother curve"},

View File

@ -5,8 +5,8 @@
"arguments": [ {"arg":"geometry","description":"a (multi)linestring geometry"}, "arguments": [ {"arg":"geometry","description":"a (multi)linestring geometry"},
{"arg":"distance","description":"buffer distance. Positive values will be buffered to the left of lines, negative values to the right"}, {"arg":"distance","description":"buffer distance. Positive values will be buffered to the left of lines, negative values to the right"},
{"arg":"segments","optional":true,"default":"8","description":"number of segments to use to represent a quarter circle when a round join style is used. A larger number results in a smoother buffer with more nodes."}, {"arg":"segments","optional":true,"default":"8","description":"number of segments to use to represent a quarter circle when a round join style is used. A larger number results in a smoother buffer with more nodes."},
{"arg":"join","optional":true,"default":"1","description":"join style for corners, where 1 = round, 2 = mitre and 3 = bevel"}, {"arg":"join","optional":true,"default":"1","description":"join style for corners, where 1 = round, 2 = miter and 3 = bevel"},
{"arg":"mitre_limit","optional":true,"default":"2.0","description":"limit on the mitre ratio used for very sharp corners (when using mitre joins only)"}], {"arg":"miter_limit","optional":true,"default":"2.0","description":"limit on the miter ratio used for very sharp corners (when using miter joins only)"}],
"examples": [ { "expression":"single_sided_buffer($geometry, 10.5)", "returns":"line buffered to the left by 10.5 units"}, "examples": [ { "expression":"single_sided_buffer($geometry, 10.5)", "returns":"line buffered to the left by 10.5 units"},
{ "expression":"single_sided_buffer($geometry, -10.5)", "returns":"line buffered to the right by 10.5 units"}, { "expression":"single_sided_buffer($geometry, -10.5)", "returns":"line buffered to the right by 10.5 units"},
{ "expression":"single_sided_buffer($geometry, 10.5, segments=16, join=1)", "returns":"line buffered to the left by 10.5 units, using more segments to result in a smoother buffer"}, { "expression":"single_sided_buffer($geometry, 10.5, segments=16, join=1)", "returns":"line buffered to the left by 10.5 units, using more segments to result in a smoother buffer"},

View File

@ -22,6 +22,7 @@ src/plugins/grass/qtermwidget/
*.*.sortinc *.*.sortinc
*.*.png *.*.png
*.*.prepare *.*.prepare
*.sld
.agignore .agignore

View File

@ -4451,6 +4451,7 @@ missonary:missionary
misterious:mysterious misterious:mysterious
mistery:mystery mistery:mystery
misteryous:mysterious misteryous:mysterious
mitre:miter:*
mkae:make mkae:make
mkaes:makes mkaes:makes
mkaing:making mkaing:making
@ -6246,6 +6247,7 @@ sertificates:certificates
serveral:several serveral:several
sesssion:session sesssion:session
sesssions:sessions sesssions:sessions
seting:setting:*
setted:set setted:set
settelement:settlement settelement:settlement
settlment:settlement settlment:settlement

View File

@ -1064,7 +1064,7 @@ QgsGeometry QgsGeometryAnalyzer::createOffsetGeometry( const QgsGeometry &geom,
if ( geom.type() == QgsWkbTypes::LineGeometry ) if ( geom.type() == QgsWkbTypes::LineGeometry )
{ {
GEOSGeometry *inputGeomItGeos = inputGeomIt->exportToGeos(); GEOSGeometry *inputGeomItGeos = inputGeomIt->exportToGeos();
GEOSGeometry *offsetGeom = GEOSOffsetCurve_r( geosctxt, inputGeomItGeos, -offset, 8 /*quadSegments*/, 0 /*joinStyle*/, 5.0 /*mitreLimit*/ ); GEOSGeometry *offsetGeom = GEOSOffsetCurve_r( geosctxt, inputGeomItGeos, -offset, 8 /*quadSegments*/, 0 /*joinStyle*/, 5.0 /*miterLimit*/ );
GEOSGeom_destroy_r( geosctxt, inputGeomItGeos ); GEOSGeom_destroy_r( geosctxt, inputGeomItGeos );
if ( !offsetGeom || !GEOSisValid_r( geosctxt, offsetGeom ) ) if ( !offsetGeom || !GEOSisValid_r( geosctxt, offsetGeom ) )
{ {

View File

@ -376,9 +376,9 @@ void QgsMapToolOffsetCurve::setOffsetForRubberBand( double offset )
QgsSettings s; QgsSettings s;
int joinStyle = s.value( QStringLiteral( "/qgis/digitizing/offset_join_style" ), 0 ).toInt(); int joinStyle = s.value( QStringLiteral( "/qgis/digitizing/offset_join_style" ), 0 ).toInt();
int quadSegments = s.value( QStringLiteral( "/qgis/digitizing/offset_quad_seg" ), 8 ).toInt(); int quadSegments = s.value( QStringLiteral( "/qgis/digitizing/offset_quad_seg" ), 8 ).toInt();
double mitreLimit = s.value( QStringLiteral( "/qgis/digitizing/offset_miter_limit" ), 5.0 ).toDouble(); double miterLimit = s.value( QStringLiteral( "/qgis/digitizing/offset_miter_limit" ), 5.0 ).toDouble();
GEOSGeometry *offsetGeom = GEOSOffsetCurve_r( QgsGeometry::getGEOSHandler(), geosGeom, offset, quadSegments, joinStyle, mitreLimit ); GEOSGeometry *offsetGeom = GEOSOffsetCurve_r( QgsGeometry::getGEOSHandler(), geosGeom, offset, quadSegments, joinStyle, miterLimit );
GEOSGeom_destroy_r( QgsGeometry::getGEOSHandler(), geosGeom ); GEOSGeom_destroy_r( QgsGeometry::getGEOSHandler(), geosGeom );
if ( !offsetGeom ) if ( !offsetGeom )
{ {

View File

@ -930,7 +930,7 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WindowFlags fl, const QList<QgsOpti
mSnappingMainDialogComboBox->setCurrentIndex( mSnappingMainDialogComboBox->findData( mSettings->value( QStringLiteral( "/qgis/mainSnappingWidgetMode" ), "dialog" ).toString() ) ); mSnappingMainDialogComboBox->setCurrentIndex( mSnappingMainDialogComboBox->findData( mSettings->value( QStringLiteral( "/qgis/mainSnappingWidgetMode" ), "dialog" ).toString() ) );
mOffsetJoinStyleComboBox->addItem( tr( "Round" ), 0 ); mOffsetJoinStyleComboBox->addItem( tr( "Round" ), 0 );
mOffsetJoinStyleComboBox->addItem( tr( "Mitre" ), 1 ); mOffsetJoinStyleComboBox->addItem( tr( "Miter" ), 1 );
mOffsetJoinStyleComboBox->addItem( tr( "Bevel" ), 2 ); mOffsetJoinStyleComboBox->addItem( tr( "Bevel" ), 2 );
mOffsetJoinStyleComboBox->setCurrentIndex( mSettings->value( QStringLiteral( "/qgis/digitizing/offset_join_style" ), 0 ).toInt() ); mOffsetJoinStyleComboBox->setCurrentIndex( mSettings->value( QStringLiteral( "/qgis/digitizing/offset_join_style" ), 0 ).toInt() );
mOffsetQuadSegSpinBox->setValue( mSettings->value( QStringLiteral( "/qgis/digitizing/offset_quad_seg" ), 8 ).toInt() ); mOffsetQuadSegSpinBox->setValue( mSettings->value( QStringLiteral( "/qgis/digitizing/offset_quad_seg" ), 8 ).toInt() );

View File

@ -3760,7 +3760,7 @@ void QgsDxfExport::addFeature( QgsSymbolRenderContext &ctx, const QgsCoordinateT
QgsGeos geos( tempGeom ); QgsGeos geos( tempGeom );
if ( tempGeom != geom.get() ) if ( tempGeom != geom.get() )
delete tempGeom; delete tempGeom;
tempGeom = geos.offsetCurve( offset, 0, GEOSBUF_JOIN_MITRE, 2.0 ); tempGeom = geos.offsetCurve( offset, 0, GEOSBUF_JOIN_MITRE, 2.0 ); //#spellok //#spellok
if ( !tempGeom ) if ( !tempGeom )
tempGeom = geom.get(); tempGeom = geom.get();
} }
@ -3781,7 +3781,7 @@ void QgsDxfExport::addFeature( QgsSymbolRenderContext &ctx, const QgsCoordinateT
QgsGeos geos( tempGeom ); QgsGeos geos( tempGeom );
if ( tempGeom != geom.get() ) if ( tempGeom != geom.get() )
delete tempGeom; delete tempGeom;
tempGeom = geos.offsetCurve( offset, 0, GEOSBUF_JOIN_MITRE, 2.0 ); tempGeom = geos.offsetCurve( offset, 0, GEOSBUF_JOIN_MITRE, 2.0 ); //#spellok //#spellok
if ( !tempGeom ) if ( !tempGeom )
tempGeom = geom.get(); tempGeom = geom.get();
} }
@ -3807,7 +3807,7 @@ void QgsDxfExport::addFeature( QgsSymbolRenderContext &ctx, const QgsCoordinateT
QgsGeos geos( tempGeom ); QgsGeos geos( tempGeom );
if ( tempGeom != geom.get() ) if ( tempGeom != geom.get() )
delete tempGeom; delete tempGeom;
tempGeom = geos.buffer( offset, 0, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 2.0 ); tempGeom = geos.buffer( offset, 0, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 2.0 ); //#spellok //#spellok
if ( !tempGeom ) if ( !tempGeom )
tempGeom = geom.get(); tempGeom = geom.get();
} }
@ -3828,7 +3828,7 @@ void QgsDxfExport::addFeature( QgsSymbolRenderContext &ctx, const QgsCoordinateT
QgsGeos geos( tempGeom ); QgsGeos geos( tempGeom );
if ( tempGeom != geom.get() ) if ( tempGeom != geom.get() )
delete tempGeom; delete tempGeom;
tempGeom = geos.buffer( offset, 0, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 2.0 ); tempGeom = geos.buffer( offset, 0, GEOSBUF_CAP_FLAT, GEOSBUF_JOIN_MITRE, 2.0 ); //#spellok //#spellok
if ( !tempGeom ) if ( !tempGeom )
tempGeom = geom.get(); tempGeom = geom.get();
} }

View File

@ -2452,9 +2452,9 @@ static QVariant fcnOffsetCurve( const QVariantList &values, const QgsExpressionC
QgsGeometry::JoinStyle join = static_cast< QgsGeometry::JoinStyle >( QgsExpressionUtils::getIntValue( values.at( 3 ), parent ) ); QgsGeometry::JoinStyle join = static_cast< QgsGeometry::JoinStyle >( QgsExpressionUtils::getIntValue( values.at( 3 ), parent ) );
if ( join < QgsGeometry::JoinStyleRound || join > QgsGeometry::JoinStyleBevel ) if ( join < QgsGeometry::JoinStyleRound || join > QgsGeometry::JoinStyleBevel )
return QVariant(); return QVariant();
double mitreLimit = QgsExpressionUtils::getDoubleValue( values.at( 3 ), parent ); double miterLimit = QgsExpressionUtils::getDoubleValue( values.at( 3 ), parent );
QgsGeometry geom = fGeom.offsetCurve( dist, segments, join, mitreLimit ); QgsGeometry geom = fGeom.offsetCurve( dist, segments, join, miterLimit );
QVariant result = !geom.isNull() ? QVariant::fromValue( geom ) : QVariant(); QVariant result = !geom.isNull() ? QVariant::fromValue( geom ) : QVariant();
return result; return result;
} }
@ -2467,9 +2467,9 @@ static QVariant fcnSingleSidedBuffer( const QVariantList &values, const QgsExpre
QgsGeometry::JoinStyle join = static_cast< QgsGeometry::JoinStyle >( QgsExpressionUtils::getIntValue( values.at( 3 ), parent ) ); QgsGeometry::JoinStyle join = static_cast< QgsGeometry::JoinStyle >( QgsExpressionUtils::getIntValue( values.at( 3 ), parent ) );
if ( join < QgsGeometry::JoinStyleRound || join > QgsGeometry::JoinStyleBevel ) if ( join < QgsGeometry::JoinStyleRound || join > QgsGeometry::JoinStyleBevel )
return QVariant(); return QVariant();
double mitreLimit = QgsExpressionUtils::getDoubleValue( values.at( 3 ), parent ); double miterLimit = QgsExpressionUtils::getDoubleValue( values.at( 3 ), parent );
QgsGeometry geom = fGeom.singleSidedBuffer( dist, segments, QgsGeometry::SideLeft, join, mitreLimit ); QgsGeometry geom = fGeom.singleSidedBuffer( dist, segments, QgsGeometry::SideLeft, join, miterLimit );
QVariant result = !geom.isNull() ? QVariant::fromValue( geom ) : QVariant(); QVariant result = !geom.isNull() ? QVariant::fromValue( geom ) : QVariant();
return result; return result;
} }
@ -4068,13 +4068,13 @@ const QList<QgsExpressionFunction *> &QgsExpression::Functions()
<< QgsExpressionFunction::Parameter( QStringLiteral( "distance" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "distance" ) )
<< QgsExpressionFunction::Parameter( QStringLiteral( "segments" ), true, 8.0 ) << QgsExpressionFunction::Parameter( QStringLiteral( "segments" ), true, 8.0 )
<< QgsExpressionFunction::Parameter( QStringLiteral( "join" ), true, QgsGeometry::JoinStyleRound ) << QgsExpressionFunction::Parameter( QStringLiteral( "join" ), true, QgsGeometry::JoinStyleRound )
<< QgsExpressionFunction::Parameter( QStringLiteral( "mitre_limit" ), true, 2.0 ), << QgsExpressionFunction::Parameter( QStringLiteral( "miter_limit" ), true, 2.0 ),
fcnOffsetCurve, QStringLiteral( "GeometryGroup" ) ) fcnOffsetCurve, QStringLiteral( "GeometryGroup" ) )
<< new QgsStaticExpressionFunction( QStringLiteral( "single_sided_buffer" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "geometry" ) ) << new QgsStaticExpressionFunction( QStringLiteral( "single_sided_buffer" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "geometry" ) )
<< QgsExpressionFunction::Parameter( QStringLiteral( "distance" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "distance" ) )
<< QgsExpressionFunction::Parameter( QStringLiteral( "segments" ), true, 8.0 ) << QgsExpressionFunction::Parameter( QStringLiteral( "segments" ), true, 8.0 )
<< QgsExpressionFunction::Parameter( QStringLiteral( "join" ), true, QgsGeometry::JoinStyleRound ) << QgsExpressionFunction::Parameter( QStringLiteral( "join" ), true, QgsGeometry::JoinStyleRound )
<< QgsExpressionFunction::Parameter( QStringLiteral( "mitre_limit" ), true, 2.0 ), << QgsExpressionFunction::Parameter( QStringLiteral( "miter_limit" ), true, 2.0 ),
fcnSingleSidedBuffer, QStringLiteral( "GeometryGroup" ) ) fcnSingleSidedBuffer, QStringLiteral( "GeometryGroup" ) )
<< new QgsStaticExpressionFunction( QStringLiteral( "extend" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "geometry" ) ) << new QgsStaticExpressionFunction( QStringLiteral( "extend" ), QgsExpressionFunction::ParameterList() << QgsExpressionFunction::Parameter( QStringLiteral( "geometry" ) )
<< QgsExpressionFunction::Parameter( QStringLiteral( "start_distance" ) ) << QgsExpressionFunction::Parameter( QStringLiteral( "start_distance" ) )

View File

@ -1413,7 +1413,7 @@ QgsGeometry QgsGeometry::buffer( double distance, int segments ) const
return QgsGeometry( geom ); return QgsGeometry( geom );
} }
QgsGeometry QgsGeometry::buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double mitreLimit ) const QgsGeometry QgsGeometry::buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double miterLimit ) const
{ {
if ( !d->geometry ) if ( !d->geometry )
{ {
@ -1421,7 +1421,7 @@ QgsGeometry QgsGeometry::buffer( double distance, int segments, EndCapStyle endC
} }
QgsGeos g( d->geometry ); QgsGeos g( d->geometry );
QgsAbstractGeometry *geom = g.buffer( distance, segments, endCapStyle, joinStyle, mitreLimit ); QgsAbstractGeometry *geom = g.buffer( distance, segments, endCapStyle, joinStyle, miterLimit );
if ( !geom ) if ( !geom )
{ {
return QgsGeometry(); return QgsGeometry();
@ -1429,7 +1429,7 @@ QgsGeometry QgsGeometry::buffer( double distance, int segments, EndCapStyle endC
return QgsGeometry( geom ); return QgsGeometry( geom );
} }
QgsGeometry QgsGeometry::offsetCurve( double distance, int segments, JoinStyle joinStyle, double mitreLimit ) const QgsGeometry QgsGeometry::offsetCurve( double distance, int segments, JoinStyle joinStyle, double miterLimit ) const
{ {
if ( !d->geometry || type() != QgsWkbTypes::LineGeometry ) if ( !d->geometry || type() != QgsWkbTypes::LineGeometry )
{ {
@ -1442,7 +1442,7 @@ QgsGeometry QgsGeometry::offsetCurve( double distance, int segments, JoinStyle j
QList<QgsGeometry> results; QList<QgsGeometry> results;
Q_FOREACH ( const QgsGeometry &part, parts ) Q_FOREACH ( const QgsGeometry &part, parts )
{ {
QgsGeometry result = part.offsetCurve( distance, segments, joinStyle, mitreLimit ); QgsGeometry result = part.offsetCurve( distance, segments, joinStyle, miterLimit );
if ( result ) if ( result )
results << result; results << result;
} }
@ -1459,7 +1459,7 @@ QgsGeometry QgsGeometry::offsetCurve( double distance, int segments, JoinStyle j
else else
{ {
QgsGeos geos( d->geometry ); QgsGeos geos( d->geometry );
QgsAbstractGeometry *offsetGeom = geos.offsetCurve( distance, segments, joinStyle, mitreLimit ); QgsAbstractGeometry *offsetGeom = geos.offsetCurve( distance, segments, joinStyle, miterLimit );
if ( !offsetGeom ) if ( !offsetGeom )
{ {
return QgsGeometry(); return QgsGeometry();
@ -1468,7 +1468,7 @@ QgsGeometry QgsGeometry::offsetCurve( double distance, int segments, JoinStyle j
} }
} }
QgsGeometry QgsGeometry::singleSidedBuffer( double distance, int segments, BufferSide side, JoinStyle joinStyle, double mitreLimit ) const QgsGeometry QgsGeometry::singleSidedBuffer( double distance, int segments, BufferSide side, JoinStyle joinStyle, double miterLimit ) const
{ {
if ( !d->geometry || type() != QgsWkbTypes::LineGeometry ) if ( !d->geometry || type() != QgsWkbTypes::LineGeometry )
{ {
@ -1481,7 +1481,7 @@ QgsGeometry QgsGeometry::singleSidedBuffer( double distance, int segments, Buffe
QList<QgsGeometry> results; QList<QgsGeometry> results;
Q_FOREACH ( const QgsGeometry &part, parts ) Q_FOREACH ( const QgsGeometry &part, parts )
{ {
QgsGeometry result = part.singleSidedBuffer( distance, segments, side, joinStyle, mitreLimit ); QgsGeometry result = part.singleSidedBuffer( distance, segments, side, joinStyle, miterLimit );
if ( result ) if ( result )
results << result; results << result;
} }
@ -1499,7 +1499,7 @@ QgsGeometry QgsGeometry::singleSidedBuffer( double distance, int segments, Buffe
{ {
QgsGeos geos( d->geometry ); QgsGeos geos( d->geometry );
QgsAbstractGeometry *bufferGeom = geos.singleSidedBuffer( distance, segments, side, QgsAbstractGeometry *bufferGeom = geos.singleSidedBuffer( distance, segments, side,
joinStyle, mitreLimit ); joinStyle, miterLimit );
if ( !bufferGeom ) if ( !bufferGeom )
{ {
return QgsGeometry(); return QgsGeometry();

View File

@ -589,7 +589,7 @@ class CORE_EXPORT QgsGeometry
enum JoinStyle enum JoinStyle
{ {
JoinStyleRound = 1, //!< Use rounded joins JoinStyleRound = 1, //!< Use rounded joins
JoinStyleMitre, //!< Use mitred joins JoinStyleMiter, //!< Use mitered joins
JoinStyleBevel, //!< Use beveled joins JoinStyleBevel, //!< Use beveled joins
}; };
@ -602,19 +602,19 @@ class CORE_EXPORT QgsGeometry
* \param segments for round joins, number of segments to approximate quarter-circle * \param segments for round joins, number of segments to approximate quarter-circle
* \param endCapStyle end cap style * \param endCapStyle end cap style
* \param joinStyle join style for corners in geometry * \param joinStyle join style for corners in geometry
* \param mitreLimit limit on the mitre ratio used for very sharp corners (JoinStyleMitre only) * \param miterLimit limit on the miter ratio used for very sharp corners (JoinStyleMiter only)
* \since QGIS 2.4 * \since QGIS 2.4
*/ */
QgsGeometry buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double mitreLimit ) const; QgsGeometry buffer( double distance, int segments, EndCapStyle endCapStyle, JoinStyle joinStyle, double miterLimit ) const;
/** Returns an offset line at a given distance and side from an input line. /** Returns an offset line at a given distance and side from an input line.
* \param distance buffer distance * \param distance buffer distance
* \param segments for round joins, number of segments to approximate quarter-circle * \param segments for round joins, number of segments to approximate quarter-circle
* \param joinStyle join style for corners in geometry * \param joinStyle join style for corners in geometry
* \param mitreLimit limit on the mitre ratio used for very sharp corners (JoinStyleMitre only) * \param miterLimit limit on the miter ratio used for very sharp corners (JoinStyleMiter only)
* \since QGIS 2.4 * \since QGIS 2.4
*/ */
QgsGeometry offsetCurve( double distance, int segments, JoinStyle joinStyle, double mitreLimit ) const; QgsGeometry offsetCurve( double distance, int segments, JoinStyle joinStyle, double miterLimit ) const;
/** /**
* Returns a single sided buffer for a (multi)line geometry. The buffer is only * Returns a single sided buffer for a (multi)line geometry. The buffer is only
@ -623,14 +623,14 @@ class CORE_EXPORT QgsGeometry
* \param segments for round joins, number of segments to approximate quarter-circle * \param segments for round joins, number of segments to approximate quarter-circle
* \param side side of geometry to buffer * \param side side of geometry to buffer
* \param joinStyle join style for corners * \param joinStyle join style for corners
* \param mitreLimit limit on the mitre ratio used for very sharp corners * \param miterLimit limit on the miter ratio used for very sharp corners
* \returns buffered geometry, or an empty geometry if buffer could not be * \returns buffered geometry, or an empty geometry if buffer could not be
* calculated * calculated
* \since QGIS 3.0 * \since QGIS 3.0
*/ */
QgsGeometry singleSidedBuffer( double distance, int segments, BufferSide side, QgsGeometry singleSidedBuffer( double distance, int segments, BufferSide side,
JoinStyle joinStyle = JoinStyleRound, JoinStyle joinStyle = JoinStyleRound,
double mitreLimit = 2.0 ) const; double miterLimit = 2.0 ) const;
/** /**
* Extends a (multi)line geometry by extrapolating out the start or end of the line * Extends a (multi)line geometry by extrapolating out the start or end of the line

View File

@ -42,7 +42,7 @@ class CORE_EXPORT QgsGeometryEngine
virtual QgsAbstractGeometry *combine( const QList< QgsAbstractGeometry * > &, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *combine( const QList< QgsAbstractGeometry * > &, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
virtual QgsAbstractGeometry *symDifference( const QgsAbstractGeometry &geom, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *symDifference( const QgsAbstractGeometry &geom, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
virtual QgsAbstractGeometry *buffer( double distance, int segments, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *buffer( double distance, int segments, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
virtual QgsAbstractGeometry *buffer( double distance, int segments, int endCapStyle, int joinStyle, double mitreLimit, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *buffer( double distance, int segments, int endCapStyle, int joinStyle, double miterLimit, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
virtual QgsAbstractGeometry *simplify( double tolerance, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *simplify( double tolerance, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
virtual QgsAbstractGeometry *interpolate( double distance, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *interpolate( double distance, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
virtual QgsAbstractGeometry *envelope( QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *envelope( QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
@ -101,7 +101,7 @@ class CORE_EXPORT QgsGeometryEngine
return 2; return 2;
} }
virtual QgsAbstractGeometry *offsetCurve( double distance, int segments, int joinStyle, double mitreLimit, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY; virtual QgsAbstractGeometry *offsetCurve( double distance, int segments, int joinStyle, double miterLimit, QString *errorMsg = nullptr ) const = 0 SIP_FACTORY;
protected: protected:
const QgsAbstractGeometry *mGeometry = nullptr; const QgsAbstractGeometry *mGeometry = nullptr;

View File

@ -1452,7 +1452,7 @@ QgsAbstractGeometry *QgsGeos::buffer( double distance, int segments, QString *er
return fromGeos( geos.get() ); return fromGeos( geos.get() );
} }
QgsAbstractGeometry *QgsGeos::buffer( double distance, int segments, int endCapStyle, int joinStyle, double mitreLimit, QString *errorMsg ) const QgsAbstractGeometry *QgsGeos::buffer( double distance, int segments, int endCapStyle, int joinStyle, double miterLimit, QString *errorMsg ) const
{ {
if ( !mGeos ) if ( !mGeos )
{ {
@ -1462,7 +1462,7 @@ QgsAbstractGeometry *QgsGeos::buffer( double distance, int segments, int endCapS
GEOSGeomScopedPtr geos; GEOSGeomScopedPtr geos;
try try
{ {
geos.reset( GEOSBufferWithStyle_r( geosinit.ctxt, mGeos, distance, segments, endCapStyle, joinStyle, mitreLimit ) ); geos.reset( GEOSBufferWithStyle_r( geosinit.ctxt, mGeos, distance, segments, endCapStyle, joinStyle, miterLimit ) );
} }
CATCH_GEOS_WITH_ERRMSG( nullptr ); CATCH_GEOS_WITH_ERRMSG( nullptr );
return fromGeos( geos.get() ); return fromGeos( geos.get() );
@ -1851,7 +1851,7 @@ GEOSGeometry *QgsGeos::createGeosPolygon( const QgsAbstractGeometry *poly, doubl
return geosPolygon; return geosPolygon;
} }
QgsAbstractGeometry *QgsGeos::offsetCurve( double distance, int segments, int joinStyle, double mitreLimit, QString *errorMsg ) const QgsAbstractGeometry *QgsGeos::offsetCurve( double distance, int segments, int joinStyle, double miterLimit, QString *errorMsg ) const
{ {
if ( !mGeos ) if ( !mGeos )
return nullptr; return nullptr;
@ -1859,7 +1859,7 @@ QgsAbstractGeometry *QgsGeos::offsetCurve( double distance, int segments, int jo
GEOSGeometry *offset = nullptr; GEOSGeometry *offset = nullptr;
try try
{ {
offset = GEOSOffsetCurve_r( geosinit.ctxt, mGeos, distance, segments, joinStyle, mitreLimit ); offset = GEOSOffsetCurve_r( geosinit.ctxt, mGeos, distance, segments, joinStyle, miterLimit );
} }
CATCH_GEOS_WITH_ERRMSG( nullptr ) CATCH_GEOS_WITH_ERRMSG( nullptr )
QgsAbstractGeometry *offsetGeom = fromGeos( offset ); QgsAbstractGeometry *offsetGeom = fromGeos( offset );
@ -1867,7 +1867,7 @@ QgsAbstractGeometry *QgsGeos::offsetCurve( double distance, int segments, int jo
return offsetGeom; return offsetGeom;
} }
QgsAbstractGeometry *QgsGeos::singleSidedBuffer( double distance, int segments, int side, int joinStyle, double mitreLimit, QString *errorMsg ) const QgsAbstractGeometry *QgsGeos::singleSidedBuffer( double distance, int segments, int side, int joinStyle, double miterLimit, QString *errorMsg ) const
{ {
if ( !mGeos ) if ( !mGeos )
{ {
@ -1881,7 +1881,7 @@ QgsAbstractGeometry *QgsGeos::singleSidedBuffer( double distance, int segments,
GEOSBufferParams_setSingleSided_r( geosinit.ctxt, bp, 1 ); GEOSBufferParams_setSingleSided_r( geosinit.ctxt, bp, 1 );
GEOSBufferParams_setQuadrantSegments_r( geosinit.ctxt, bp, segments ); GEOSBufferParams_setQuadrantSegments_r( geosinit.ctxt, bp, segments );
GEOSBufferParams_setJoinStyle_r( geosinit.ctxt, bp, joinStyle ); GEOSBufferParams_setJoinStyle_r( geosinit.ctxt, bp, joinStyle );
GEOSBufferParams_setMitreLimit_r( geosinit.ctxt, bp, mitreLimit ); GEOSBufferParams_setMitreLimit_r( geosinit.ctxt, bp, miterLimit ); //#spellok
if ( side == 1 ) if ( side == 1 )
{ {

View File

@ -75,7 +75,7 @@ class CORE_EXPORT QgsGeos: public QgsGeometryEngine
QgsAbstractGeometry *combine( const QList< QgsAbstractGeometry *> &, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *combine( const QList< QgsAbstractGeometry *> &, QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *symDifference( const QgsAbstractGeometry &geom, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *symDifference( const QgsAbstractGeometry &geom, QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *buffer( double distance, int segments, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *buffer( double distance, int segments, QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *buffer( double distance, int segments, int endCapStyle, int joinStyle, double mitreLimit, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *buffer( double distance, int segments, int endCapStyle, int joinStyle, double miterLimit, QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *simplify( double tolerance, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *simplify( double tolerance, QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *interpolate( double distance, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *interpolate( double distance, QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *envelope( QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *envelope( QString *errorMsg = nullptr ) const override;
@ -112,7 +112,7 @@ class CORE_EXPORT QgsGeos: public QgsGeometryEngine
QgsPointSequence &topologyTestPoints, QgsPointSequence &topologyTestPoints,
QString *errorMsg = nullptr ) const override; QString *errorMsg = nullptr ) const override;
QgsAbstractGeometry *offsetCurve( double distance, int segments, int joinStyle, double mitreLimit, QString *errorMsg = nullptr ) const override; QgsAbstractGeometry *offsetCurve( double distance, int segments, int joinStyle, double miterLimit, QString *errorMsg = nullptr ) const override;
/** /**
* Returns a single sided buffer for a geometry. The buffer is only * Returns a single sided buffer for a geometry. The buffer is only
@ -120,15 +120,15 @@ class CORE_EXPORT QgsGeos: public QgsGeometryEngine
* \param distance buffer distance * \param distance buffer distance
* \param segments for round joins, number of segments to approximate quarter-circle * \param segments for round joins, number of segments to approximate quarter-circle
* \param side side of geometry to buffer (0 = left, 1 = right) * \param side side of geometry to buffer (0 = left, 1 = right)
* \param joinStyle join style for corners ( Round (1) / Mitre (2) / Bevel (3) ) * \param joinStyle join style for corners ( Round (1) / Miter (2) / Bevel (3) )
* \param mitreLimit limit on the mitre ratio used for very sharp corners * \param miterLimit limit on the miter ratio used for very sharp corners
* \param errorMsg error messages emitted, if any * \param errorMsg error messages emitted, if any
* \returns buffered geometry, or an nullptr if buffer could not be * \returns buffered geometry, or an nullptr if buffer could not be
* calculated * calculated
* \since QGIS 3.0 * \since QGIS 3.0
*/ */
QgsAbstractGeometry *singleSidedBuffer( double distance, int segments, int side, QgsAbstractGeometry *singleSidedBuffer( double distance, int segments, int side,
int joinStyle, double mitreLimit, int joinStyle, double miterLimit,
QString *errorMsg = nullptr ) const; QString *errorMsg = nullptr ) const;

View File

@ -112,7 +112,7 @@ void QgsBufferAlgorithm::initAlgorithm( const QVariantMap & )
addParameter( new QgsProcessingParameterEnum( QStringLiteral( "END_CAP_STYLE" ), QObject::tr( "End cap style" ), QStringList() << QObject::tr( "Round" ) << QObject::tr( "Flat" ) << QObject::tr( "Square" ), false ) ); addParameter( new QgsProcessingParameterEnum( QStringLiteral( "END_CAP_STYLE" ), QObject::tr( "End cap style" ), QStringList() << QObject::tr( "Round" ) << QObject::tr( "Flat" ) << QObject::tr( "Square" ), false ) );
addParameter( new QgsProcessingParameterEnum( QStringLiteral( "JOIN_STYLE" ), QObject::tr( "Join style" ), QStringList() << QObject::tr( "Round" ) << QObject::tr( "Miter" ) << QObject::tr( "Bevel" ), false ) ); addParameter( new QgsProcessingParameterEnum( QStringLiteral( "JOIN_STYLE" ), QObject::tr( "Join style" ), QStringList() << QObject::tr( "Round" ) << QObject::tr( "Miter" ) << QObject::tr( "Bevel" ), false ) );
addParameter( new QgsProcessingParameterNumber( QStringLiteral( "MITRE_LIMIT" ), QObject::tr( "Miter limit" ), QgsProcessingParameterNumber::Double, 2, false, 1 ) ); addParameter( new QgsProcessingParameterNumber( QStringLiteral( "MITER_LIMIT" ), QObject::tr( "Miter limit" ), QgsProcessingParameterNumber::Double, 2, false, 1 ) );
addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "DISSOLVE" ), QObject::tr( "Dissolve result" ), false ) ); addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "DISSOLVE" ), QObject::tr( "Dissolve result" ), false ) );
addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), QObject::tr( "Buffered" ), QgsProcessing::TypeVectorPolygon ) ); addParameter( new QgsProcessingParameterFeatureSink( QStringLiteral( "OUTPUT" ), QObject::tr( "Buffered" ), QgsProcessing::TypeVectorPolygon ) );
@ -123,8 +123,8 @@ QString QgsBufferAlgorithm::shortHelpString() const
return QObject::tr( "This algorithm computes a buffer area for all the features in an input layer, using a fixed or dynamic distance.\n\n" return QObject::tr( "This algorithm computes a buffer area for all the features in an input layer, using a fixed or dynamic distance.\n\n"
"The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets.\n\n" "The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets.\n\n"
"The end cap style parameter controls how line endings are handled in the buffer.\n\n" "The end cap style parameter controls how line endings are handled in the buffer.\n\n"
"The join style parameter specifies whether round, mitre or beveled joins should be used when offsetting corners in a line.\n\n" "The join style parameter specifies whether round, miter or beveled joins should be used when offsetting corners in a line.\n\n"
"The mitre limit parameter is only applicable for mitre join styles, and controls the maximum distance from the offset curve to use when creating a mitred join." ); "The miter limit parameter is only applicable for miter join styles, and controls the maximum distance from the offset curve to use when creating a mitered join." );
} }
QgsBufferAlgorithm *QgsBufferAlgorithm::createInstance() const QgsBufferAlgorithm *QgsBufferAlgorithm::createInstance() const
@ -148,7 +148,7 @@ QVariantMap QgsBufferAlgorithm::processAlgorithm( const QVariantMap &parameters,
int segments = parameterAsInt( parameters, QStringLiteral( "SEGMENTS" ), context ); int segments = parameterAsInt( parameters, QStringLiteral( "SEGMENTS" ), context );
QgsGeometry::EndCapStyle endCapStyle = static_cast< QgsGeometry::EndCapStyle >( 1 + parameterAsInt( parameters, QStringLiteral( "END_CAP_STYLE" ), context ) ); QgsGeometry::EndCapStyle endCapStyle = static_cast< QgsGeometry::EndCapStyle >( 1 + parameterAsInt( parameters, QStringLiteral( "END_CAP_STYLE" ), context ) );
QgsGeometry::JoinStyle joinStyle = static_cast< QgsGeometry::JoinStyle>( 1 + parameterAsInt( parameters, QStringLiteral( "JOIN_STYLE" ), context ) ); QgsGeometry::JoinStyle joinStyle = static_cast< QgsGeometry::JoinStyle>( 1 + parameterAsInt( parameters, QStringLiteral( "JOIN_STYLE" ), context ) );
double miterLimit = parameterAsDouble( parameters, QStringLiteral( "MITRE_LIMIT" ), context ); double miterLimit = parameterAsDouble( parameters, QStringLiteral( "MITER_LIMIT" ), context );
double bufferDistance = parameterAsDouble( parameters, QStringLiteral( "DISTANCE" ), context ); double bufferDistance = parameterAsDouble( parameters, QStringLiteral( "DISTANCE" ), context );
bool dynamicBuffer = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "DISTANCE" ) ); bool dynamicBuffer = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "DISTANCE" ) );
const QgsProcessingParameterDefinition *distanceParamDef = parameterDefinition( QStringLiteral( "DISTANCE" ) ); const QgsProcessingParameterDefinition *distanceParamDef = parameterDefinition( QStringLiteral( "DISTANCE" ) );

View File

@ -66,7 +66,7 @@ class CORE_EXPORT QgsSingleSymbolRenderer : public QgsFeatureRenderer
/** /**
* Configures appearance of legend when renderer is configured to use data-defined size for marker symbols. * Configures appearance of legend when renderer is configured to use data-defined size for marker symbols.
* This allow to configure for which values (symbol sizes) should be shown in the legend, whether to display * This allows configuring which values (symbol sizes) should be shown in the legend, whether to display
* different symbol sizes collapsed in one legend node or separated across multiple legend nodes etc. * different symbol sizes collapsed in one legend node or separated across multiple legend nodes etc.
* *
* When renderer does not use data-defined size or does not use marker symbols, these settings will be ignored. * When renderer does not use data-defined size or does not use marker symbols, these settings will be ignored.

View File

@ -198,7 +198,7 @@ QString QgsSymbolLayerUtils::encodeSldLineJoinStyle( Qt::PenJoinStyle style )
case Qt::BevelJoin: case Qt::BevelJoin:
return QStringLiteral( "bevel" ); return QStringLiteral( "bevel" );
case Qt::MiterJoin: case Qt::MiterJoin:
return QStringLiteral( "mitre" ); return QStringLiteral( "mitre" ); //#spellok
case Qt::RoundJoin: case Qt::RoundJoin:
return QStringLiteral( "round" ); return QStringLiteral( "round" );
default: default:
@ -209,7 +209,7 @@ QString QgsSymbolLayerUtils::encodeSldLineJoinStyle( Qt::PenJoinStyle style )
Qt::PenJoinStyle QgsSymbolLayerUtils::decodeSldLineJoinStyle( const QString &str ) Qt::PenJoinStyle QgsSymbolLayerUtils::decodeSldLineJoinStyle( const QString &str )
{ {
if ( str == QLatin1String( "bevel" ) ) return Qt::BevelJoin; if ( str == QLatin1String( "bevel" ) ) return Qt::BevelJoin;
if ( str == QLatin1String( "mitre" ) ) return Qt::MiterJoin; if ( str == QLatin1String( "mitre" ) ) return Qt::MiterJoin; //#spellok
if ( str == QLatin1String( "round" ) ) return Qt::RoundJoin; if ( str == QLatin1String( "round" ) ) return Qt::RoundJoin;
return Qt::BevelJoin; return Qt::BevelJoin;
} }
@ -764,14 +764,14 @@ QList<QPolygonF> offsetLine( QPolygonF polyline, double dist, QgsWkbTypes::Geome
QgsGeometry tempGeometry = geometryType == QgsWkbTypes::PolygonGeometry ? QgsGeometry::fromPolygon( QgsPolygon() << tempPolyline ) : QgsGeometry::fromPolyline( tempPolyline ); QgsGeometry tempGeometry = geometryType == QgsWkbTypes::PolygonGeometry ? QgsGeometry::fromPolygon( QgsPolygon() << tempPolyline ) : QgsGeometry::fromPolyline( tempPolyline );
if ( !tempGeometry.isNull() ) if ( !tempGeometry.isNull() )
{ {
int quadSegments = 0; // we want mitre joins, not round joins int quadSegments = 0; // we want miter joins, not round joins
double mitreLimit = 2.0; // the default value in GEOS (5.0) allows for fairly sharp endings double miterLimit = 2.0; // the default value in GEOS (5.0) allows for fairly sharp endings
QgsGeometry offsetGeom; QgsGeometry offsetGeom;
if ( geometryType == QgsWkbTypes::PolygonGeometry ) if ( geometryType == QgsWkbTypes::PolygonGeometry )
offsetGeom = tempGeometry.buffer( -dist, quadSegments, QgsGeometry::CapFlat, offsetGeom = tempGeometry.buffer( -dist, quadSegments, QgsGeometry::CapFlat,
QgsGeometry::JoinStyleMitre, mitreLimit ); QgsGeometry::JoinStyleMiter, miterLimit );
else else
offsetGeom = tempGeometry.offsetCurve( dist, quadSegments, QgsGeometry::JoinStyleMitre, mitreLimit ); offsetGeom = tempGeometry.offsetCurve( dist, quadSegments, QgsGeometry::JoinStyleMiter, miterLimit );
if ( !offsetGeom.isNull() ) if ( !offsetGeom.isNull() )
{ {

View File

@ -67,7 +67,7 @@ void QgsGeometryGapCheck::collectErrors( QList<QgsGeometryCheckError *> &errors,
// Buffer envelope // Buffer envelope
geomEngine = QgsGeometryCheckerUtils::createGeomEngine( envelope, QgsGeometryCheckPrecision::tolerance() ); geomEngine = QgsGeometryCheckerUtils::createGeomEngine( envelope, QgsGeometryCheckPrecision::tolerance() );
QgsAbstractGeometry *bufEnvelope = geomEngine->buffer( 2, 0, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_MITRE, 4. ); QgsAbstractGeometry *bufEnvelope = geomEngine->buffer( 2, 0, GEOSBUF_CAP_SQUARE, GEOSBUF_JOIN_MITRE, 4. ); //#spellok //#spellok
delete geomEngine; delete geomEngine;
delete envelope; delete envelope;
envelope = bufEnvelope; envelope = bufEnvelope;

View File

@ -213,7 +213,7 @@ class QgsGrassNewMapset : public QWizard, private Ui::QgsGrassNewMapsetBase
//! Was the region page modified by user //! Was the region page modified by user
bool mRegionModified; bool mRegionModified;
//! Check region seting //! Check region setting
void checkRegion(); void checkRegion();
//! Region map //! Region map

View File

@ -436,7 +436,7 @@ ACCEPTABLE_MISSING_DOCS = {
"QgsExpression::NodeList": ["dump() const ", "count()", "list()"], "QgsExpression::NodeList": ["dump() const ", "count()", "list()"],
"QgsComposerAttributeTableV2": ["QgsComposerAttributeTableV2(QgsComposition *composition, bool createUndoCommands)"], "QgsComposerAttributeTableV2": ["QgsComposerAttributeTableV2(QgsComposition *composition, bool createUndoCommands)"],
"QgsMapLayerLegend": ["QgsMapLayerLegend(QObject *parent=0)"], "QgsMapLayerLegend": ["QgsMapLayerLegend(QObject *parent=0)"],
"QgsGeometryEngine": ["buffer(double distance, int segments, QString *errorMsg=nullptr) const =0", "contains(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "prepareGeometry()=0", "length(QString *errorMsg=nullptr) const =0", "splitGeometry(const QgsLineString &splitLine, QList< QgsAbstractGeometry * > &newGeometries, bool topological, QgsPointSequence &topologyTestPoints, QString *errorMsg=nullptr) const ", "within(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "geometryChanged()=0", "overlaps(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "interpolate(double distance, QString *errorMsg=nullptr) const =0", "intersection(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "centroid(QgsPoint &pt, QString *errorMsg=nullptr) const =0", "simplify(double tolerance, QString *errorMsg=nullptr) const =0", "QgsGeometryEngine(const QgsAbstractGeometry *geometry)", "isValid(QString *errorMsg=nullptr) const =0", "area(QString *errorMsg=nullptr) const =0", "combine(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "combine(const QList< QgsAbstractGeometry * > &, QString *errorMsg=nullptr) const =0", "isEmpty(QString *errorMsg) const =0", "envelope(QString *errorMsg=nullptr) const =0", "touches(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "distance(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "disjoint(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "convexHull(QString *errorMsg=nullptr) const =0", "offsetCurve(double distance, int segments, int joinStyle, double mitreLimit, QString *errorMsg=nullptr) const =0", "buffer(double distance, int segments, int endCapStyle, int joinStyle, double mitreLimit, QString *errorMsg=nullptr) const =0", "pointOnSurface(QgsPoint &pt, QString *errorMsg=nullptr) const =0", "intersects(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "difference(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "symDifference(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "isEqual(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "crosses(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0"], "QgsGeometryEngine": ["buffer(double distance, int segments, QString *errorMsg=nullptr) const =0", "contains(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "prepareGeometry()=0", "length(QString *errorMsg=nullptr) const =0", "splitGeometry(const QgsLineString &splitLine, QList< QgsAbstractGeometry * > &newGeometries, bool topological, QgsPointSequence &topologyTestPoints, QString *errorMsg=nullptr) const ", "within(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "geometryChanged()=0", "overlaps(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "interpolate(double distance, QString *errorMsg=nullptr) const =0", "intersection(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "centroid(QgsPoint &pt, QString *errorMsg=nullptr) const =0", "simplify(double tolerance, QString *errorMsg=nullptr) const =0", "QgsGeometryEngine(const QgsAbstractGeometry *geometry)", "isValid(QString *errorMsg=nullptr) const =0", "area(QString *errorMsg=nullptr) const =0", "combine(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "combine(const QList< QgsAbstractGeometry * > &, QString *errorMsg=nullptr) const =0", "isEmpty(QString *errorMsg) const =0", "envelope(QString *errorMsg=nullptr) const =0", "touches(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "distance(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "disjoint(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "convexHull(QString *errorMsg=nullptr) const =0", "offsetCurve(double distance, int segments, int joinStyle, double miterLimit, QString *errorMsg=nullptr) const =0", "buffer(double distance, int segments, int endCapStyle, int joinStyle, double miterLimit, QString *errorMsg=nullptr) const =0", "pointOnSurface(QgsPoint &pt, QString *errorMsg=nullptr) const =0", "intersects(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "difference(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "symDifference(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "isEqual(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0", "crosses(const QgsAbstractGeometry &geom, QString *errorMsg=nullptr) const =0"],
"QgsMapToolAdvancedDigitizing": ["cadDockWidget() const "], "QgsMapToolAdvancedDigitizing": ["cadDockWidget() const "],
"QgsCptCityBrowserModel": ["findItem(QgsCptCityDataItem *item, QgsCptCityDataItem *parent=nullptr) const ", "QgsCptCityBrowserModel(QObject *parent=nullptr, QgsCptCityArchive *archive=QgsCptCityArchive::defaultArchive(), ViewType Type=Authors)", "endInsertItems()", "reload()", "beginInsertItems(QgsCptCityDataItem *parent, int first, int last)", "addRootItems()", "connectItem(QgsCptCityDataItem *item)", "refresh(const QString &path)", "beginRemoveItems(QgsCptCityDataItem *parent, int first, int last)", "endRemoveItems()", "refresh(const QModelIndex &index=QModelIndex())", "ViewType", "removeRootItems()"], "QgsCptCityBrowserModel": ["findItem(QgsCptCityDataItem *item, QgsCptCityDataItem *parent=nullptr) const ", "QgsCptCityBrowserModel(QObject *parent=nullptr, QgsCptCityArchive *archive=QgsCptCityArchive::defaultArchive(), ViewType Type=Authors)", "endInsertItems()", "reload()", "beginInsertItems(QgsCptCityDataItem *parent, int first, int last)", "addRootItems()", "connectItem(QgsCptCityDataItem *item)", "refresh(const QString &path)", "beginRemoveItems(QgsCptCityDataItem *parent, int first, int last)", "endRemoveItems()", "refresh(const QModelIndex &index=QModelIndex())", "ViewType", "removeRootItems()"],
"QgsComposerPicture": ["QgsComposerPicture(QgsComposition *composition)"], "QgsComposerPicture": ["QgsComposerPicture(QgsComposition *composition)"],

View File

@ -705,13 +705,13 @@ class TestQgsExpression: public QObject
QTest::newRow( "offset_curve null" ) << "offset_curve(NULL, 5)" << false << QVariant(); QTest::newRow( "offset_curve null" ) << "offset_curve(NULL, 5)" << false << QVariant();
QTest::newRow( "offset_curve point" ) << "offset_curve(geom_from_wkt('POINT(1 2)'),5)" << false << QVariant(); QTest::newRow( "offset_curve point" ) << "offset_curve(geom_from_wkt('POINT(1 2)'),5)" << false << QVariant();
QTest::newRow( "offset_curve line" ) << "geom_to_wkt(offset_curve(geom_from_wkt('LineString(0 0, 10 0)'),1,segments:=4))" << false << QVariant( "LineString (0 1, 10 1)" ); QTest::newRow( "offset_curve line" ) << "geom_to_wkt(offset_curve(geom_from_wkt('LineString(0 0, 10 0)'),1,segments:=4))" << false << QVariant( "LineString (0 1, 10 1)" );
QTest::newRow( "offset_curve line mitre" ) << "geom_to_wkt(offset_curve(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=-1,join:=2,mitre_limit:=1))" << false << QVariant( "LineString (10 -1, 0 -1)" ); QTest::newRow( "offset_curve line miter" ) << "geom_to_wkt(offset_curve(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=-1,join:=2,miter_limit:=1))" << false << QVariant( "LineString (10 -1, 0 -1)" );
QTest::newRow( "offset_curve line bevel" ) << "geom_to_wkt(offset_curve(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),distance:=1,join:=3))" << false << QVariant( "LineString (0 1, 9 1, 9 10)" ); QTest::newRow( "offset_curve line bevel" ) << "geom_to_wkt(offset_curve(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),distance:=1,join:=3))" << false << QVariant( "LineString (0 1, 9 1, 9 10)" );
QTest::newRow( "single_sided_buffer not geom" ) << "single_sided_buffer('g', 5)" << true << QVariant(); QTest::newRow( "single_sided_buffer not geom" ) << "single_sided_buffer('g', 5)" << true << QVariant();
QTest::newRow( "single_sided_buffer null" ) << "single_sided_buffer(NULL, 5)" << false << QVariant(); QTest::newRow( "single_sided_buffer null" ) << "single_sided_buffer(NULL, 5)" << false << QVariant();
QTest::newRow( "single_sided_buffer point" ) << "single_sided_buffer(geom_from_wkt('POINT(1 2)'),5)" << false << QVariant(); QTest::newRow( "single_sided_buffer point" ) << "single_sided_buffer(geom_from_wkt('POINT(1 2)'),5)" << false << QVariant();
QTest::newRow( "single_sided_buffer line" ) << "geom_to_wkt(single_sided_buffer(geom_from_wkt('LineString(0 0, 10 0)'),1,segments:=4))" << false << QVariant( "Polygon ((10 0, 0 0, 0 1, 10 1, 10 0))" ); QTest::newRow( "single_sided_buffer line" ) << "geom_to_wkt(single_sided_buffer(geom_from_wkt('LineString(0 0, 10 0)'),1,segments:=4))" << false << QVariant( "Polygon ((10 0, 0 0, 0 1, 10 1, 10 0))" );
QTest::newRow( "single_sided_buffer line mitre" ) << "geom_to_wkt(single_sided_buffer(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=-1,join:=2,mitre_limit:=1))" << false << QVariant( "Polygon ((0 0, 10 0, 10 -1, 0 -1, 0 0))" ); QTest::newRow( "single_sided_buffer line miter" ) << "geom_to_wkt(single_sided_buffer(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=-1,join:=2,miter_limit:=1))" << false << QVariant( "Polygon ((0 0, 10 0, 10 -1, 0 -1, 0 0))" );
QTest::newRow( "single_sided_buffer line bevel" ) << "geom_to_wkt(single_sided_buffer(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),distance:=1,join:=3))" << false << QVariant( "Polygon ((10 10, 10 0, 0 0, 0 1, 9 1, 9 10, 10 10))" ); QTest::newRow( "single_sided_buffer line bevel" ) << "geom_to_wkt(single_sided_buffer(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),distance:=1,join:=3))" << false << QVariant( "Polygon ((10 10, 10 0, 0 0, 0 1, 9 1, 9 10, 10 10))" );
QTest::newRow( "extend not geom" ) << "extend('g', 1, 2)" << true << QVariant(); QTest::newRow( "extend not geom" ) << "extend('g', 1, 2)" << true << QVariant();
QTest::newRow( "extend null" ) << "extend(NULL, 1, 2)" << false << QVariant(); QTest::newRow( "extend null" ) << "extend(NULL, 1, 2)" << false << QVariant();

View File

@ -3381,7 +3381,7 @@ class TestQgsGeometry(unittest.TestCase):
wkt = "LineString( 0 0, 10 0, 10 10)" wkt = "LineString( 0 0, 10 0, 10 10)"
geom = QgsGeometry.fromWkt(wkt) geom = QgsGeometry.fromWkt(wkt)
out = geom.singleSidedBuffer(1, 8, QgsGeometry.SideRight, QgsGeometry.JoinStyleMitre) out = geom.singleSidedBuffer(1, 8, QgsGeometry.SideRight, QgsGeometry.JoinStyleMiter)
result = out.exportToWkt() result = out.exportToWkt()
expected_wkt = "Polygon ((0 0, 10 0, 10 10, 11 10, 11 -1, 0 -1, 0 0))" expected_wkt = "Polygon ((0 0, 10 0, 10 10, 11 10, 11 -1, 0 -1, 0 0))"
self.assertTrue(compareWkt(result, expected_wkt, 0.00001), "Merge lines: mismatch Expected:\n{}\nGot:\n{}\n".format(expected_wkt, result)) self.assertTrue(compareWkt(result, expected_wkt, 0.00001), "Merge lines: mismatch Expected:\n{}\nGot:\n{}\n".format(expected_wkt, result))