<?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: How to create a new IEnumLayer object? in ArcObjects SDK Questions</title>
    <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417349#M11223</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="text-align: left;"&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;There is no way to create IEnumLauers only to get it from IMap.Layers&lt;/P&gt;&lt;P style="text-align: left;"&gt;If you need only the visible layers run a loop on the layers (from bottom up) and IMap.DeleteLayer all the non-visible layers and then use IMap.Layers.&lt;/P&gt;&lt;P style="text-align: left;"&gt;Then you can exists without save or keep a list of the deleted layers and add them back to the map.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;Have Fun&lt;/P&gt;&lt;P style="text-align: left;"&gt;Mody&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 04 Nov 2014 06:26:51 GMT</pubDate>
    <dc:creator>ModyBuchbinder</dc:creator>
    <dc:date>2014-11-04T06:26:51Z</dc:date>
    <item>
      <title>How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417348#M11222</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I am trying to filter an &lt;EM&gt;IEnumLayer&lt;/EM&gt; to only contain visible layers. I want to pass this to &lt;EM&gt;IFeatureCache2.AddLayers&lt;/EM&gt;(...). I could not find any public implementations of &lt;EM&gt;IEnumLayer&lt;/EM&gt;. Since we are in C# I wrote a couple of extension methods that convert &lt;EM&gt;IEnumLayer&lt;/EM&gt; to &lt;EM&gt;IEnumerable&amp;lt;ILayer&amp;gt;&lt;/EM&gt; and vice-versa. But passing my custom implementation of &lt;EM&gt;IEnumLayer&lt;/EM&gt; did not seem to make &lt;EM&gt;AddLayers&lt;/EM&gt;(...) happy.&lt;/P&gt;&lt;P&gt;Here is my extensions class:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; public static class EnumLayerExtensions
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static IEnumerable&amp;lt;ILayer&amp;gt; AsEnumerable(this IEnumLayer layers)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layers.Reset();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var layer = layers.Next();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (layer != null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield return layer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer = layers.Next();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static IEnumLayer ToEnumLayer(this IEnumerable&amp;lt;ILayer&amp;gt; layers)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new EnumLayerWrapper(layers);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private class EnumLayerWrapper : IEnumLayer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private readonly ILayer[] _layers;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _index;


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public EnumLayerWrapper(IEnumerable&amp;lt;ILayer&amp;gt; layers)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _layers = layers.ToArray();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _index = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ILayer Next()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _index &amp;lt; _layers.Length ? _layers[_index++] : null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Reset()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _index = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }



&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;using this I can then write the following code:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

var visibleLayers = Map.Layers.AsEnumerable().Where(l=&amp;gt;l.Visible);


var cache = new FeatureCacheClass() as IFeatureCache2;


cache.Initialize(point,radius);


cache.AddLayers(visibleLayers.ToEnumLayer(), null);



&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the above code, line 04 will just run for ever as-is. If I use the layers straight from the Map, it comes back fairly fast. I have written a handful of unit tests to validate my implementation of &lt;EM&gt;ToEnumLayer()&lt;/EM&gt; and they all seem to pass. Based on all this, I have a couple of questions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Is there an &lt;STRONG&gt;out of the box implementation of &lt;EM&gt;IEnumLayer&lt;/EM&gt;&lt;/STRONG&gt; that I can use to filter visible layers only to pass to &lt;EM&gt;IFeatureCache2.AddLayers()&lt;/EM&gt;?&lt;/LI&gt;&lt;LI&gt;&lt;EM&gt;What's &lt;STRONG&gt;wrong with my implementation of IEnumLayer&lt;/STRONG&gt;?&lt;/EM&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance for any help,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Eric.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 18:52:31 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417348#M11222</guid>
      <dc:creator>ericliprandi</dc:creator>
      <dc:date>2021-12-11T18:52:31Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417349#M11223</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="text-align: left;"&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;There is no way to create IEnumLauers only to get it from IMap.Layers&lt;/P&gt;&lt;P style="text-align: left;"&gt;If you need only the visible layers run a loop on the layers (from bottom up) and IMap.DeleteLayer all the non-visible layers and then use IMap.Layers.&lt;/P&gt;&lt;P style="text-align: left;"&gt;Then you can exists without save or keep a list of the deleted layers and add them back to the map.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="text-align: left;"&gt;Have Fun&lt;/P&gt;&lt;P style="text-align: left;"&gt;Mody&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Nov 2014 06:26:51 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417349#M11223</guid>
      <dc:creator>ModyBuchbinder</dc:creator>
      <dc:date>2014-11-04T06:26:51Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417350#M11224</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At a glance, your extension methods and wrapper class implementing IEnumLayer look good.&amp;nbsp; The problem may be in the way that the IFeatureCache object is interacting with the structure you've created.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have you instrumented the methods of your wrapper class (e.g. Debug.WriteLine) to see what happens after calling cache.AddLayers?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Nov 2014 18:06:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417350#M11224</guid>
      <dc:creator>ErinBrimhall</dc:creator>
      <dc:date>2014-11-04T18:06:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417351#M11225</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric,&lt;/P&gt;&lt;P&gt;You'll probably find its looping through the ILayer Next implementation.&lt;/P&gt;&lt;P&gt;You'll need to throw an exception there rather than return null.&lt;/P&gt;&lt;PRE __default_attr="c#" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14156676428155869" jivemacro_uid="_14156676428155869"&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ILayer Next()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (index &amp;lt; layers.Count)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return layers[index++];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Exception();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Nov 2014 01:02:04 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417351#M11225</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2014-11-11T01:02:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417352#M11226</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sean,&lt;/P&gt;&lt;P&gt;Thanks for the info. It all sounded too familiar when &lt;A href="https://community.esri.com/migrated-users/44320"&gt;Rich Ruh&lt;/A&gt;‌ contacted me yesterday to see if that would work. It does actually work. Now, my custom IEnumLayer implementation does work.&lt;/P&gt;&lt;P&gt;However, my first experiments are not looking too promising the IFeatureCache2 respecting layers. It seems that it goes straight to the FeatureClass, ignoring the definition query.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Nov 2014 17:00:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417352#M11226</guid>
      <dc:creator>ericliprandi</dc:creator>
      <dc:date>2014-11-11T17:00:10Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417353#M11227</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric,&lt;/P&gt;&lt;P&gt;You're right. I took a look at the source and despite the name, AddLayers is adding the underlying featureclass to the cache rather than the display layer, so it wont respect the definition query. I'll add a CR....&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Nov 2014 18:04:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417353#M11227</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2014-11-11T18:04:35Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a new IEnumLayer object?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417354#M11228</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Giving credit where credit is due, &lt;A href="https://community.esri.com/migrated-users/3324"&gt;Sean Jones&lt;/A&gt;‌ provided the answer to me when I contacted you yesterday. &lt;IMG src="https://community.esri.com/legacyfs/online/emoticons/happy.png" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--Rich&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 Nov 2014 00:02:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-create-a-new-ienumlayer-object/m-p/417354#M11228</guid>
      <dc:creator>RichRuh</dc:creator>
      <dc:date>2014-11-12T00:02:21Z</dc:date>
    </item>
  </channel>
</rss>

