<html><head></head><body><div class="ydpfcd7197eyahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px;"><div></div>
        <div><span style="color: rgb(38, 40, 42);">You might want to try generating a random diameter for the points in the symbology. For example using a Graduated symbology set the Value to 'rand(2, 20)' and Method to Size. You could then adjust the color for each of the classes to add even more variability.</span><br></div></div><div id="ydpe1d8d311yahoo_quoted_0575528669" class="ydpe1d8d311yahoo_quoted"><div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;"><div><div id="ydpe1d8d311yiv8993331196"><div class="ydpe1d8d311yiv8993331196ydpd4abf845yahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px;"><div dir="ltr"><br clear="none"></div><div dir="ltr">-Thayer</div><div class="ydpe1d8d311yiv8993331196yqt9403387426" id="ydpe1d8d311yiv8993331196yqtfd43102"><div dir="ltr"><br clear="none"></div><div><br clear="none"></div></div></div><div class="ydpe1d8d311yiv8993331196yqt9403387426" id="ydpe1d8d311yiv8993331196yqtfd28188"><div class="ydpe1d8d311yiv8993331196ydp67cbe5f0yahoo_quoted" id="ydpe1d8d311yiv8993331196ydp67cbe5f0yahoo_quoted_0282854523"><div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;"><div><div dir="ltr">Date: Mon, 18 May 2020 14:02:18 -0500<br clear="none"></div><div dir="ltr">From: David Fawcett <<a shape="rect" href="mailto:david.fawcett@gmail.com" rel="nofollow" target="_blank">david.fawcett@gmail.com</a>><br clear="none"></div><div dir="ltr">To: qgis-user <<a shape="rect" href="mailto:qgis-user@lists.osgeo.org" rel="nofollow" target="_blank">qgis-user@lists.osgeo.org</a>><br clear="none"></div><div dir="ltr">Subject: [Qgis-user] Geometry Generator - Generating buffered points<br clear="none"></div><div dir="ltr">    from    polys<br clear="none"></div><div dir="ltr">Message-ID:<br clear="none"></div><div dir="ltr">    <CAF7K3b_q3S4AAR+ZbpfqhEo3-xCRv-MXBFL7bf6PdVVz+<a shape="rect" href="mailto:RR56g@mail.gmail.com" rel="nofollow" target="_blank">RR56g@mail.gmail.com</a>><br clear="none"></div><div dir="ltr">Content-Type: text/plain; charset="utf-8"<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">Hi,<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">I am working through an exercise to figure out the best way to represent<br clear="none"></div><div dir="ltr">some wooded areas in a map that I am making.<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">The current iteration uses geometry generators to create slightly<br clear="none"></div><div dir="ltr">randomized points to fill the polygons that represent wooded areas. I based<br clear="none"></div><div dir="ltr">it off of the great examples at<br clear="none"></div><div dir="ltr"><a shape="rect" href="https://impermanent.io/2017/05/05/generative-pseudo-random-polygon-fill-patterns-in-qgis/" rel="nofollow" target="_blank">https://impermanent.io/2017/05/05/generative-pseudo-random-polygon-fill-patterns-in-qgis/</a><br clear="none"></div><div dir="ltr">And, it works great!<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">After looking at it a while, I want to introduce some variability in the<br clear="none"></div><div dir="ltr">size of the point symbols too.<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">I have two ideas on how to do that:<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">The first one is to create and populate an attribute for each point<br clear="none"></div><div dir="ltr">feature, and then apply symbology rules based on that value. The challenge<br clear="none"></div><div dir="ltr">is that right now, my custom function is returning multi-point features, so<br clear="none"></div><div dir="ltr">all of the points within a forest poly would have the same attribute.<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">I am currently pursuing the second one. That strategy is to use the same<br clear="none"></div><div dir="ltr">altered grid of points, and then buffer each point. I am having a hard time<br clear="none"></div><div dir="ltr">figuring out how to return a layer with several multi-polygon features<br clear="none"></div><div dir="ltr">created by buffering the points.<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">In this example, "buffer" is not defined, so the expression is invalid.<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">  for xOff in range(countX+1):<br clear="none"></div><div dir="ltr">    for yOff in range(countY+1):<br clear="none"></div><div dir="ltr">      ptX = xMin + xOff*(xInterval) + rand * random.uniform(0,xInterval)<br clear="none"></div><div dir="ltr">      ptY = yMin + yOff*(yInterval) + rand * random.uniform(0,xInterval)<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">      pt = QgsPointXY(ptX,ptY)<br clear="none"></div><div dir="ltr">      point = QgsGeometry.fromPointXY(pt)<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">      if feature.geometry().contains(point):<br clear="none"></div><div dir="ltr">          sym = buffer(point,200.0,10)<br clear="none"></div><div dir="ltr">          #points.append(pt)<br clear="none"></div><div dir="ltr">          bufs.append(sym)<br clear="none"></div><div dir="ltr"><br clear="none"></div><div dir="ltr">  return collect_geometries(bufs)<br clear="none"></div><div dir="ltr"><br clear="none"></div></div>
            </div>
        </div></div></div></div>
            </div>
        </div></body></html>