<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Thanks for taking the time to code that.  I originally coded with the featureAdded method.  When I first found it I was pretty happy with the solution, but then since the user does not get informed until after they draw the shape and it
 is already added to the layer and so the feature then needs to be deleted so they can try again.  This can go a few iterations. 
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The previous version of the software I am working on which did not use QGIS but custom developed using R and Leaflet had this dynamic cursor that indicated the size and users miss that, so then I came across the eventFilter and applied
 that to the map canvas  and while still using the shapes from the edit menu basically used the mouse location to handle dynamically updating the cursor the a QLabel calculating the area bases on the shape being drawn.  It added more code, but out trainers
 are excited about this new feature..<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><img width="369" height="249" style="width:3.8416in;height:2.5916in" id="Picture_x0020_2" src="cid:image002.png@01D97C23.A1C08A70"><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><img width="366" height="273" style="width:3.8166in;height:2.8416in" id="Picture_x0020_3" src="cid:image003.png@01D97C24.87ED6810"><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Yoann Quenach de Quivillic <yoann.quenach@gmail.com>
<br>
<b>Sent:</b> Sunday, April 30, 2023 5:48 PM<br>
<b>To:</b> Catania, Luke A ERDC-RDE-GRL-VA CIV <Luke.A.Catania@erdc.dren.mil><br>
<b>Cc:</b> qgis-developer@lists.osgeo.org<br>
<b>Subject:</b> Re: [QGIS-Developer] Digitizing with Edit Menu<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Have you considered listening to the featureAdded signal instead? <o:p></o:p></p>
<div>
<p class="MsoNormal">The digitizing shape (aka rubberband) you see while digitizing is not really accessible. In fact, it isn't guaranteed to be the geometry of the feature being created. It could even not exist at all ; this is all dependent on the current
 QgsMapTool used.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Rather than monitoring clicks, or accessing the rubberband, you could listen to the featureAdded signal. This signal is emitted when a new feature is added to the layer. You can then perform your check (e;g area validation), and delete
 the feature if the check fails. It won't even appear on screen.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Here is a possible implementation. Note that I split the AreaValidator into three classes for genericity, but you could merge these three classes in a single one.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">LayerConnector : this is used to automatically connect all map layers to a function<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">FeatureValidator: Specialization, connects all QgsVectorLayer featureAdded signal to a function that takes the layer and the feature being added as parameters<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">AreaValidator: Contains the actual area computation, and possible deletion of the feature <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:blue">class</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">LayerConnector</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">QObject</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"""Generic class to connect to all QgsMapLayer"""</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">__init__</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">super</span><span style="font-size:11.5pt;font-family:Consolas;color:black">().</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">__init__</span><span style="font-size:11.5pt;font-family:Consolas;color:black">()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">        QgsProject.instance().layerWasAdded.connect(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layers</span><span style="font-size:11.5pt;font-family:Consolas;color:black">()<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">__del__</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">        QgsProject.instance().layerWasAdded.disconnect(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">disconnect_layers</span><span style="font-size:11.5pt;font-family:Consolas;color:black">()<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layers</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">print</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"Connecting"</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">for</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">in</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> QgsProject.instance().mapLayers().values():<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">           
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">disconnect_layers</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">print</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"DisConnecting"</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">for</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">in</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> QgsProject.instance().mapLayers().values():<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">           
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">disconnect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">pass</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">disconnect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">pass</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt;line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:blue">class</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">FeatureValidator</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">LayerConnector</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"""Connect all QgsVectorLayer to a process_feature method when a feature is added"""</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">connect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">if</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">not</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">isinstance</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
 QgsVectorLayer):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">           
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">return</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.featureAdded.connect(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">on_feature_added</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">disconnect_layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">if</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">not</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">isinstance</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
 QgsVectorLayer):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">           
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">return</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.featureAdded.disconnect(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">on_feature_added</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">on_feature_added</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">id</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> =
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.sender()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feat</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> =
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.getFeature(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">id</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">process_feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feat</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">process_feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">print</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">f</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"Feature
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">{</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.id()</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">}</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">
 added to layer </span><span style="font-size:11.5pt;font-family:Consolas;color:blue">{</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.name()</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">}</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt;line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:blue">class</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">AreaValidator</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">FeatureValidator</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">__init__</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">max_area</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">super</span><span style="font-size:11.5pt;font-family:Consolas;color:black">().</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">__init__</span><span style="font-size:11.5pt;font-family:Consolas;color:black">()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">max_area</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
 = </span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">max_area</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">   
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">def</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">process_feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">):<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">geom</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> =
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.geometry()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">if</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">not</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">geom</span><span style="font-size:11.5pt;font-family:Consolas;color:black">:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">           
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">return</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:green"># Here you should handle CRS transformation</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:green"># before computing the feature area</span><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">area</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> =
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">geom</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.area()<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">       
</span><span style="font-size:11.5pt;font-family:Consolas;color:#AF00DB">if</span><span style="font-size:11.5pt;font-family:Consolas;color:black">
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">area</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> >
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">self</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">max_area</span><span style="font-size:11.5pt;font-family:Consolas;color:black">:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">            iface.messageBar().pushWarning(</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"Cannot add feature"</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">f</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"Area too big :
</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">{</span><span style="font-size:11.5pt;font-family:Consolas;color:#795E26">round</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">area</span><span style="font-size:11.5pt;font-family:Consolas;color:black">,
</span><span style="font-size:11.5pt;font-family:Consolas;color:#098658">2</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)</span><span style="font-size:11.5pt;font-family:Consolas;color:blue">}</span><span style="font-size:11.5pt;font-family:Consolas;color:#A31515">"</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black">           
</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">layer</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.deleteFeature(</span><span style="font-size:11.5pt;font-family:Consolas;color:#001080">feature</span><span style="font-size:11.5pt;font-family:Consolas;color:black">.id())<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt;line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:black"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal" style="line-height:15.0pt"><span style="font-size:11.5pt;font-family:Consolas;color:#001080">validator</span><span style="font-size:11.5pt;font-family:Consolas;color:black"> =
</span><span style="font-size:11.5pt;font-family:Consolas;color:#267F99">AreaValidator</span><span style="font-size:11.5pt;font-family:Consolas;color:black">(</span><span style="font-size:11.5pt;font-family:Consolas;color:#098658">500</span><span style="font-size:11.5pt;font-family:Consolas;color:black">)<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">Le dim. 30 avr. 2023 à 18:42, Catania, Luke A ERDC-RDE-GRL-VA CIV via QGIS-Developer <<a href="mailto:qgis-developer@lists.osgeo.org">qgis-developer@lists.osgeo.org</a>> a écrit :<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">When you digitize a shape using the Edit menu in QGIS is the shape accessible?  I am looking to get he area of the shape as it is drawn.  I have added an event filter to my code
 to capture the coordinates and calculate it by creating a QgsGeometry, but my code is getting complicated as there are many shapes that a user can draw from this menu so if I can get access to this shape if it is temporary in memory, then I can just calculate
 the area on the shape and not have to capture all the positions of the mouse when clicked and moved.<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><img border="0" width="296" height="160" style="width:3.0833in;height:1.6666in" id="m_7101726221067993375Picture_x0020_1" src="cid:image001.png@01D97C20.131018C0"><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
QGIS-Developer mailing list<br>
<a href="mailto:QGIS-Developer@lists.osgeo.org" target="_blank">QGIS-Developer@lists.osgeo.org</a><br>
List info: <a href="Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked" target="_blank">
Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked</a><br>
Unsubscribe: <a href="Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked" target="_blank">
Blockedhttps://lists.osgeo.org/mailman/listinfo/qgis-developerBlocked</a><o:p></o:p></p>
</div>
</blockquote>
</div>
</div>
</body>
</html>