<?xml version="1.0" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Flyspray::</title>
  <subtitle type="text">
    Feed for all projects
  </subtitle>
  <id>https://qcad.org/bugtracker/</id>
    <updated>2026-08-20T02:17:50Z</updated>
  <link rel="self" type="text/xml" href="feed.php?feed_type=atom"/>
  <link rel="alternate" type="text/html" hreflang="en" href="/bugtracker/feed.php"/>
    <entry>
    <title>FS#2744: Select by handle to find an offending drawing object</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2744" />    
    <updated>2026-08-20T02:17:50Z</updated>    
    <published>2026-08-20T02:10:19Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
As we can read in this forum topic:<br /><a href="https://forum.qcad.org/t/tip-when-dealing-with-an-exception-occurred-entity-not-saved-xxxx-error-on-save/11970" class="urlextern" title="https://forum.qcad.org/t/tip-when-dealing-with-an-exception-occurred-entity-not-saved-xxxx-error-on-save/11970"  rel="nofollow">https://forum.qcad.org/t/tip-when-dealing-with-an-exception-occurred-entity-not-saved-xxxx-error-on-save/11970</a>
</p>

<p>
The tool can report “<strong>Object selected: nnn</strong>” when selecting an offending entity while nothing seems to be selected.<br />The search for the offending entity can be simplified by also reporting its Block name.
</p>
<pre class="code">    if (isEntity(obj)) {
        di.selectEntity(obj.getId());
        EAction.handleUserMessage(qsTr(&quot;Object selected:&quot;) + &quot; &quot; + obj.getId() + &quot; (&quot; + obj.getBlockName() + &quot;)&quot;);
    }</pre>

<p>
The object ID nnn is of no use for a common user.
</p>

<p>
Automatically switching to the Block in question is perhaps even better.
</p>

<p>
In the referred topic the user explains how to find and delete the entity.<br />It won&#039;t be saved thus saving and reopening is then the more simplier solution.
</p>

<p>
Offending is for example an ellipse with a negative ratio.<br />Not automatically fixed by <em>correctMajorMinor()</em>.<br />But easily fixed when selected (in the current Block).
</p>

<p>
Regards,<br />CVH<br />
</p>
</div>
    </content>
    <author><name>CVH</name></author>
    <id>https://qcad.org/bugtracker/:2744</id>
  </entry>
    <entry>
    <title>FS#2743: Performance: slow performance when (un-)collapsing parent layers</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2743" />    
    <updated>2026-08-19T17:53:14Z</updated>    
    <published>2026-08-19T17:52:07Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
See also:<br /><a href="https://forum.qcad.org/t/performance-issue-with-sublayers-any-suggestions/11961" class="urlextern" title="https://forum.qcad.org/t/performance-issue-with-sublayers-any-suggestions/11961"  rel="nofollow">https://forum.qcad.org/t/performance-issue-with-sublayers-any-suggestions/11961</a> 
</p>
</div>
    </content>
    <author><name>Andrew</name></author>
    <id>https://qcad.org/bugtracker/:2743</id>
  </entry>
    <entry>
    <title>FS#2742: Layer list: collapsed layers not remembered correctly if there are layer states</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2742" />    
    <updated>2026-08-19T16:24:36Z</updated>    
    <published>2026-08-19T16:24:01Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
If a drawing has layer states, the collapse state of layers that are also in the layer state is not remembered correctly.<br />
</p>
</div>
    </content>
    <author><name>Andrew</name></author>
    <id>https://qcad.org/bugtracker/:2742</id>
  </entry>
    <entry>
    <title>FS#2741: Comparing values with the squared tolerance (1e-18)</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2741" />    
    <updated>2026-08-16T06:24:12Z</updated>    
    <published>2026-08-15T07:24:07Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
Andrew, 
</p>

<p>
Nicely summarized by an AI:<br />Comparing two floating-point values within a tolerance is NOT<br />the same as comparing their squared values within the squared tolerance.<br />Squaring changes the scale of values and the distance between them.<br />This breaks the linear logic used in standard tolerance checks, especially for values near zero or larger values.
</p>

<p>
<strong><em>Why These Methods Are Not Equal</em></strong>:<br />- Different scaling near zero: <br />If a = 0.1 and b = 0.2, their absolute difference is <strong>0.10</strong>.<br />Their squared values are 0.01 and 0.04, with a difference of <strong>0.03</strong> (three times smaller).<br />- Different scaling for large values: <br />If a = 1000.1 and b = 1000.2, their difference is <strong>0.10</strong>, <br />but their squared values differ by about <strong>200</strong> (2000 times larger).<br />- Tolerance distortion: <br />A linear tolerance epsilon allows a fixed window <strong>[a-epsilon &lt; b &lt; a+epsilon]</strong>. Squaring maps this to a non-linear, asymmetric range that grows much faster for larger base values.
</p>

<p>
<strong><em>When It Fails</em></strong>:<br />- Small values (&lt;±1): <br />The squared difference becomes much smaller than the linear difference.<br />A tolerance that passes linear values might fail squared values.<br />- Larger values (&gt;±1): <br />The squared difference becomes much larger than the linear difference.<br />A tolerance that passes linear values will likely fail squared values.<br />- Negative values: Squaring loses the sign. <br />If (a = -1.001) and (b = 1.001), they are far apart linearly,<br />but their squared values are nearly identical (1.002 vs 1.002).
</p>
<hr />
<hr />

<p>
 Recently implemented at various places in QCAD.<br />For example to compare a distance in XY with a value within tolerance avoiding the<br /><strong>sqrt()</strong> of the vector magnitude by retrieving the squared magnitude.<br />Where the distance <strong>d = sqrt(dX²+dY²+dZ²)</strong> is compared with a positive value <strong>v</strong> within a small tolerance (e.g. <em>RS.PointTolerance = 1e-9</em>)<br />Including dZ because there is no 2D variant for <em>RVector::getSquaredMagnitude()</em>.<br />Or for example where the squared distance is calculated in direct as <strong>dSqr = dX²+dY²</strong>.
</p>

<p>
Typically worked out as <strong>fabs(d - v) &lt; 1e-9</strong> (analog of <em>RMath.fuzzyCompare</em>).<br />What results in <strong>fabs(sqrt(dX²+dY²) - v) &lt; 1e-9</strong>.
</p>

<p>
And then falsely replaced by <strong>fabs(dX²+dY² - v²) &lt; 1e-9*1e-9</strong> <br />Or comparing a difference to within <em class="u"><strong>1e-18</strong></em>.<br />In the case of larger numbers (&gt;1):<br />Subtracting 2 much larger but near equal values with no more than 17 significant digits.
</p>

<p>
<strong>Also algebraically incorrect !</strong> … <br />Squaring both sides of (<strong>|d - v| &lt; tol</strong>) to exploit <strong>d²</strong> instead of <strong>d</strong> results in: (<strong>(d - v)² &lt; tol²</strong>)<br />And this expands to: (<strong>d² - 2dv + v² &lt; tol²</strong>) where the root <strong>d</strong> is still present.
</p>

<p>
(<strong>fabs(d - v) &lt; tol</strong>) is already a reduction of a window comparison: (<strong>d &gt; v-tol &amp;&amp; d &lt; v+tol</strong>)<br />At best, avoiding the subtraction of a small value in floating point: (<strong>d+tol &gt; v &amp;&amp; d &lt; v+tol</strong>)<br />We then also avoid digit cancellation when subtracting larger values in <strong>fabs(d - v)</strong>.<br />But squaring this also leads to (<strong>(d+tol)² &gt; v²</strong>) or (<strong>d²+<em class="u">2*d*tol</em>+tol² &gt; v²</strong>) for the first test.  
</p>
<hr />
<hr />

<p>
With the initial window comparison:<br />Squaring (<strong>d &gt; v-tol &amp;&amp; d &lt; v+tol</strong>) results in: (<strong>d² &gt; (v-tol)² &amp;&amp; d² &lt; (v+tol)²</strong>)<br />In wich we can replace <strong>d²</strong> and the intended value <strong>v ≈ </strong>sqrt(d²) to compare with: <br />(<strong>dSqr=dX²+dY² &gt; (v-tol)² &amp;&amp; dSqr=dX²+dY² &lt; (v+tol)²</strong>)
</p>

<p>
This may fail when <strong>(d == v)</strong>.<br />And always when <strong>tol</strong> is too small to be added or subtracted in floating-point.<br />When comparing (squared) values within a small tolerance we must thus include equality:
</p>
<pre class="code">if (dSqr &gt;= (v-tol)*(v-tol) &amp;&amp; dSqr &lt;= (v+tol)*(v+tol)) {...}</pre>

<p>
Programmatically more complex … <br />… and perhaps no longer a faster method than taking the root.<br />The second test is skipped when the first is true.
</p>

<p>
It certainly avoids the absurd comparison with <strong>1e-18</strong>.<br />Because that is mostly true for real near equal distances after squaring.
</p>

<p>
 Regards,<br />CVH<br />
</p>
</div>
    </content>
    <author><name>CVH</name></author>
    <id>https://qcad.org/bugtracker/:2741</id>
  </entry>
    <entry>
    <title>FS#2740: System reverts to &quot;Custom&quot; Printing Page size rather than taking ANSI-A (Letter) or other Named size</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2740" />    
    <updated>2026-08-14T11:15:49Z</updated>    
    <published>2026-08-12T19:50:04Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
I&#039;ve noted that on my (relatively) new Mac Mini (M4), when I open my drawings, it yells at me when I open a block about using a &quot;Custom&quot; paper size.  it should be &quot;A&quot; size (US-Letter).  When I try to set it to ANSI-A (Letter), even after saving, it reverts to &quot;Custom&quot; (though the dimensions remain correct (8.5&quot;x11&quot;)<br />
</p>
</div>
    </content>
    <author><name>Steven Guttag</name></author>
    <id>https://qcad.org/bugtracker/:2740</id>
  </entry>
    <entry>
    <title>FS#2739: High CPU usage under Gnome with Text Size other than 100%</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2739" />    
    <updated>2026-08-08T19:16:34Z</updated>    
    <published>2026-08-08T19:16:21Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
See also:<br /><a href="https://forum.qcad.org/t/high-cpu-when-idle-with-no-diagram-loaded-on-linux-wayland/11895" class="urlextern" title="https://forum.qcad.org/t/high-cpu-when-idle-with-no-diagram-loaded-on-linux-wayland/11895"  rel="nofollow">https://forum.qcad.org/t/high-cpu-when-idle-with-no-diagram-loaded-on-linux-wayland/11895</a> 
</p>
</div>
    </content>
    <author><name>Andrew</name></author>
    <id>https://qcad.org/bugtracker/:2739</id>
  </entry>
    <entry>
    <title>FS#2738: Block &gt; Edit block in place: After editing the block, the block reference has draw order 0</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2738" />    
    <updated>2026-08-03T19:55:23Z</updated>    
    <published>2026-08-03T19:54:10Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
See also:<br /><a href="https://forum.qcad.org/t/after-editing-a-block-in-place-the-block-loses-its-display-order-in-the-main-drawing/11918" class="urlextern" title="https://forum.qcad.org/t/after-editing-a-block-in-place-the-block-loses-its-display-order-in-the-main-drawing/11918"  rel="nofollow">https://forum.qcad.org/t/after-editing-a-block-in-place-the-block-loses-its-display-order-in-the-main-drawing/11918</a> 
</p>
</div>
    </content>
    <author><name>Andrew</name></author>
    <id>https://qcad.org/bugtracker/:2738</id>
  </entry>
    <entry>
    <title>FS#2737: System reverts to &quot;Custom&quot; Printing Page size rather than taking ANSI-A (Letter) or other Named size</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2737" />    
    <updated>2026-08-03T15:53:03Z</updated>    
    <published>2026-08-03T15:49:23Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
This may be unique to the ARM version but I&#039;ve noted that with each drawing I open, it flags that I am using a &quot;Custom&quot; page size.  My default Printing-Page is ANSI-A (US-Letter).  I can save that (Application Preferences)…close the program…open it up and while the page dimensions remain correct, the program still reports it as a &quot;Custom&quot; size.  
</p>

<p>
I see a similar behavior from the Drawing Preferences, with respect to Printing - Page. 
</p>

<p>
I didn&#039;t start noticing this behavior until I changed my computer to an M4 based Mac Mini running Tahoe.  With that change, I started using the ARM based version of QCAD.  So, I&#039;m wondering if the problem is ARM based rather than on other operating systems, including Intel based Macs, like my previous one. 
</p>
</div>
    </content>
    <author><name>Steven Guttag</name></author>
    <id>https://qcad.org/bugtracker/:2737</id>
  </entry>
    <entry>
    <title>FS#2736: REllipse::correctMajorMinor() calls itself one more time, switchMajorMinor() calls it twice</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2736" />    
    <updated>2026-07-30T11:14:34Z</updated>    
    <published>2026-07-30T04:33:50Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
Andrew,
</p>

<p>
Claude included major/minor swapping in <strong>REllipse::getVectorTo()</strong>.<br />This is an existent resource and already used in most cases.<br />I never encountered a major radius less than the minor but it is plausible.
</p>

<p>
For a ratio over 1.0, <strong>correctMajorMinor()</strong> caches the minor point (Line 1205).<br />Sets a corrected ratio (Line 1206).<br />And then it sets the major point using <strong>REllipse::setMajorPoint()</strong> (Line 1207). 
</p>
<blockquote><div class="no">
<blockquote><div class="no">
 <strong>setMajorPoint()</strong> calls <strong>REllipse::correctMajorMinor()</strong> again.<br />This time the ratio is less than 1.0 and nothing is altered.</div></blockquote>
</div></blockquote>

<p>
 Because <strong>correctMajorMinor()</strong> is setting things straight it can simply update<br />the public attributes: &#039;ratio&#039;, &#039;majorPoint&#039;, &#039;startParam&#039; and &#039;endParam&#039; in this order.
</p>

<p>
<strong>correctMajorMinor()</strong> is typically called for:<br />- The valid REllipse constructor.<br />- When setting the REllipse major point, the ratio<br />and thus also when setting the minor point.<br />- When setting the properties of an REllipseEntity. 
</p>
<hr />

<p>
There is a second analog to <strong>REllipse::correctMajorMinor()</strong>.
</p>

<p>
The method <strong>REllipse::switchMajorMinor()</strong> does practically the same but then based on an external test.<br />In open source only used in <strong>RShape::getIntersectionPointsEE</strong> (Line 1275 and 1279).<br />Then called when the major radius is less than the minor radius.
</p>

<p>
The main difference is that it is skipped when the ratio is less than 1e-9.<br />fabs(ratio) in line 314 is odd because a negative ratio is invalid … Not rendered. 
</p>
<blockquote><div class="no">
<blockquote><div class="no">
<strong>switchMajorMinor()</strong> triggers <strong>correctMajorMinor()</strong> twice.</div></blockquote>
</div></blockquote>

<p>
 It first set the major point equal to the minor point based on the former ratio.<br />This triggers <strong>correctMajorMinor()</strong>.<br />Then it sets the reciprocal of the ratio.<br />This also triggers <strong>correctMajorMinor()</strong>.
</p>

<p>
<strong>switchMajorMinor()</strong> can also update the public attributes in direct. 
</p>
<hr />

<p>
For the record: <strong>REllipse::getTangents</strong> also swaps major/minor in direct when the point is on the minor axis. This method handles an ellipse as full and doesn&#039;t correct end parameters.
</p>

<p>
Regards,<br />CVH
</p>
</div>
    </content>
    <author><name>CVH</name></author>
    <id>https://qcad.org/bugtracker/:2736</id>
  </entry>
    <entry>
    <title>FS#2735: File &gt; Open: Frozen layer states from viewports are not loaded for empty layers</title>
    <link href="https://qcad.org/bugtracker/index.php?do=details&amp;task_id=2735" />    
    <updated>2026-07-29T17:11:06Z</updated>    
    <published>2026-07-29T17:10:50Z</published>
    <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
      <div xmlns="http://www.w3.org/1999/xhtml"> 
<p>
1. Freeze an empty layer in a viewport<br />2. Save<br />3. Reopen
</p>

<p>
Layer is not frozen.
</p>

<p>
See also:<br /><a href="https://forum.qcad.org/t/manage-viewport-layers-not-persisting-save-and-reopen/11902" class="urlextern" title="https://forum.qcad.org/t/manage-viewport-layers-not-persisting-save-and-reopen/11902"  rel="nofollow">https://forum.qcad.org/t/manage-viewport-layers-not-persisting-save-and-reopen/11902</a> 
</p>
</div>
    </content>
    <author><name>Andrew</name></author>
    <id>https://qcad.org/bugtracker/:2735</id>
  </entry>
  </feed>
