<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: deep copy at Esri::ArcGISRuntime::Graphic::setSymbol() ? in Qt Maps SDK Questions</title>
    <link>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303093#M1493</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi!&lt;BR /&gt;Waht do you think about this approach?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;bool AbstractGraphicalObject::assignFillStyleToGraphic()&lt;BR /&gt;{&lt;BR /&gt; if (!m_graphic)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return false;&lt;/P&gt;&lt;P&gt;const LineStyle &amp;amp;ls = m_lineStyle.value();&lt;BR /&gt; const FillStyle &amp;amp;fs = m_fillStyle.value();&lt;/P&gt;&lt;P&gt;if (!m_graphic-&amp;gt;symbol())&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Esri::ArcGISRuntime::SimpleFillSymbol *sfs =&amp;nbsp; &amp;nbsp;&amp;nbsp; new Esri::ArcGISRuntime::SimpleFillSymbol(convert(fs.fillPattern()), fs.fillColor(),&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; new Esri::ArcGISRuntime::SimpleLineSymbol(convert(ls.linePattern()), ls.lineColor(), ls.lineWidth() *&amp;nbsp;&amp;nbsp; m_scale.value(), m_graphic), m_graphic);&lt;BR /&gt; m_graphic-&amp;gt;setSymbol(sfs);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;Esri::ArcGISRuntime::SimpleFillSymbol *sfs = static_cast&amp;lt;Esri::ArcGISRuntime::SimpleFillSymbol*&amp;gt;(m_graphic-&amp;gt;symbol());&lt;BR /&gt; sfs-&amp;gt;setStyle(convert(fs.fillPattern()));&lt;BR /&gt; sfs-&amp;gt;setColor(fs.fillColor());&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Esri::ArcGISRuntime::SimpleLineSymbol *sls = static_cast&amp;lt;Esri::ArcGISRuntime::SimpleLineSymbol*&amp;gt;(sfs-&amp;gt;outline());&lt;BR /&gt; if (!sls)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return false;&lt;BR /&gt; sls-&amp;gt;setStyle(convert(ls.linePattern()));&lt;BR /&gt; sls-&amp;gt;setColor(ls.lineColor());&lt;BR /&gt; sls-&amp;gt;setWidth(ls.lineWidth() * m_scale.value());&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;return true;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 18 Oct 2019 11:09:29 GMT</pubDate>
    <dc:creator>NorbertThoden</dc:creator>
    <dc:date>2019-10-18T11:09:29Z</dc:date>
    <item>
      <title>deep copy at Esri::ArcGISRuntime::Graphic::setSymbol() ?</title>
      <link>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303091#M1491</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi!&lt;BR /&gt;We assign the symbol like this:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; ..&lt;/P&gt;&lt;P&gt;&amp;nbsp; QSharedPointer&amp;lt;Esri::ArcGISRuntime::SimpleFillSymbol&amp;gt; simpleFillSym = convert(m_fillStyle.value(), simpleLineSym);&lt;BR /&gt;&amp;nbsp; m_graphic-&amp;gt;setSymbol(simpleFillSym.data());&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;So the simpleFillSym is destroyed directly at setSymbol() at "}".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It this safe, because setSymbol create a deep copy?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thx&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Oct 2019 14:50:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303091#M1491</guid>
      <dc:creator>NorbertThoden</dc:creator>
      <dc:date>2019-10-17T14:50:15Z</dc:date>
    </item>
    <item>
      <title>Re: deep copy at Esri::ArcGISRuntime::Graphic::setSymbol() ?</title>
      <link>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303092#M1492</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;A href="https://community.esri.com/migrated-users/128170"&gt;Norbert Thoden&lt;/A&gt;‌.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In this case it is not a deep copy. What you're doing does work (as you've found), but that's only because we have some internal caching in our pimpl classes that&amp;nbsp;prevent the&amp;nbsp;internal symbol object from being deleted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So yes, that will technically work but I would not rely upon that behavior. It is not a deep copy and I would not write code to assume this can be safely done.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Oct 2019 19:54:56 GMT</pubDate>
      <guid>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303092#M1492</guid>
      <dc:creator>JamesBallard1</dc:creator>
      <dc:date>2019-10-17T19:54:56Z</dc:date>
    </item>
    <item>
      <title>Re: deep copy at Esri::ArcGISRuntime::Graphic::setSymbol() ?</title>
      <link>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303093#M1493</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi!&lt;BR /&gt;Waht do you think about this approach?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;bool AbstractGraphicalObject::assignFillStyleToGraphic()&lt;BR /&gt;{&lt;BR /&gt; if (!m_graphic)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return false;&lt;/P&gt;&lt;P&gt;const LineStyle &amp;amp;ls = m_lineStyle.value();&lt;BR /&gt; const FillStyle &amp;amp;fs = m_fillStyle.value();&lt;/P&gt;&lt;P&gt;if (!m_graphic-&amp;gt;symbol())&lt;BR /&gt; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Esri::ArcGISRuntime::SimpleFillSymbol *sfs =&amp;nbsp; &amp;nbsp;&amp;nbsp; new Esri::ArcGISRuntime::SimpleFillSymbol(convert(fs.fillPattern()), fs.fillColor(),&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; new Esri::ArcGISRuntime::SimpleLineSymbol(convert(ls.linePattern()), ls.lineColor(), ls.lineWidth() *&amp;nbsp;&amp;nbsp; m_scale.value(), m_graphic), m_graphic);&lt;BR /&gt; m_graphic-&amp;gt;setSymbol(sfs);&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;Esri::ArcGISRuntime::SimpleFillSymbol *sfs = static_cast&amp;lt;Esri::ArcGISRuntime::SimpleFillSymbol*&amp;gt;(m_graphic-&amp;gt;symbol());&lt;BR /&gt; sfs-&amp;gt;setStyle(convert(fs.fillPattern()));&lt;BR /&gt; sfs-&amp;gt;setColor(fs.fillColor());&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Esri::ArcGISRuntime::SimpleLineSymbol *sls = static_cast&amp;lt;Esri::ArcGISRuntime::SimpleLineSymbol*&amp;gt;(sfs-&amp;gt;outline());&lt;BR /&gt; if (!sls)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return false;&lt;BR /&gt; sls-&amp;gt;setStyle(convert(ls.linePattern()));&lt;BR /&gt; sls-&amp;gt;setColor(ls.lineColor());&lt;BR /&gt; sls-&amp;gt;setWidth(ls.lineWidth() * m_scale.value());&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;return true;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 18 Oct 2019 11:09:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303093#M1493</guid>
      <dc:creator>NorbertThoden</dc:creator>
      <dc:date>2019-10-18T11:09:29Z</dc:date>
    </item>
    <item>
      <title>Re: deep copy at Esri::ArcGISRuntime::Graphic::setSymbol() ?</title>
      <link>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303094#M1494</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A href="https://community.esri.com/migrated-users/128170"&gt;Norbert Thoden&lt;/A&gt;‌, speaking specifically to&amp;nbsp;object lifetime and when it is safe to delete the graphics and symbols, then yes&amp;nbsp;your code looks good. When the graphic is deleted then its symbol will get deleted along with it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Another technique we use on the team is to have QObject parents that track multiple objects. For example we might add&amp;nbsp;something like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;QObject* m_graphicsParent = nullptr;&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;void resetGraphics()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; m_graphicsOverlay-&amp;gt;clear(); // remove all graphics&lt;/P&gt;&lt;P&gt;&amp;nbsp; delete&amp;nbsp;&lt;SPAN&gt;m_graphicsParent; // force all removed graphics to delete&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;m_graphicsParent = new QObject(this);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (int i = 0; i &amp;lt; 1000; i++) // 1000 is arbitrary for this example&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; // create new graphics/symbols with the special parent&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; auto* graphic = new Graphic(&lt;SPAN&gt;m_graphicsParent);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; // add symbols...&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; m_graphicsOverlay-&amp;gt;append(graphic);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That way we can keep one parent for all related objects to&amp;nbsp;force their deletion all at the same time when we're through with them.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 18 Oct 2019 20:02:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/qt-maps-sdk-questions/deep-copy-at-esri-arcgisruntime-graphic-setsymbol/m-p/303094#M1494</guid>
      <dc:creator>JamesBallard1</dc:creator>
      <dc:date>2019-10-18T20:02:52Z</dc:date>
    </item>
  </channel>
</rss>

