<?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: Convert annotation to polygon features - Python Script... in Geoprocessing Questions</title>
    <link>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220699#M7604</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for converting this script. Any idea why the new polygons are being created in a different location than the original annotation layer?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 05 Aug 2015 23:49:03 GMT</pubDate>
    <dc:creator>WilliamMcInnes</dc:creator>
    <dc:date>2015-08-05T23:49:03Z</dc:date>
    <item>
      <title>Convert annotation to polygon features - Python Script...</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220697#M7602</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there a Python Script for Converting Annotation FeatureClass to Polygon FeatureClass?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;There is VBA Script (&lt;/SPAN&gt;&lt;A href="http://help.arcgis.com/en/sdk/10.0/vba_desktop/conceptualhelp/index.html#//0001000000r4000000"&gt;http://help.arcgis.com/en/sdk/10.0/vba_desktop/conceptualhelp/index.html#//0001000000r4000000&lt;/A&gt;&lt;SPAN&gt;) that seems to be working fine (more or less).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It might have some problems with Multipart Annotations, but I haven't tried that (&lt;/SPAN&gt;&lt;A href="http://forums.esri.com/thread.asp?c=93&amp;amp;f=993&amp;amp;t=292545"&gt;http://forums.esri.com/thread.asp?c=93&amp;amp;f=993&amp;amp;t=292545&lt;/A&gt;&lt;SPAN&gt;).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Br,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Igor Karuza&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GISDATA Croatia&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 08 Jan 2012 21:09:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220697#M7602</guid>
      <dc:creator>IgorKaruza</dc:creator>
      <dc:date>2012-01-08T21:09:10Z</dc:date>
    </item>
    <item>
      <title>Re: Convert annotation to polygon features - Python Script...</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220698#M7603</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Igor,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hopefully someone will come up with a better answer than this but you can use ArcObjects in python so I converted the VBA script you mentioned to python. You will have to install the &lt;/SPAN&gt;&lt;A href="http://sourceforge.net/projects/comtypes/" rel="nofollow noopener noreferrer" target="_blank"&gt;comtype modules for python&lt;/A&gt;&lt;SPAN&gt; and then load the ArcMap Modules. Luckily Mark Cederholm shows you how to do this see &lt;/SPAN&gt;&lt;A _jive_internal="true" href="https://community.esri.com/www.pierssen.com/arcgis10/upload/python/arcmap_and_python.pdf" target="_blank"&gt; ArcMap and Python&lt;/A&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i.e. &lt;/SPAN&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;BR /&gt;In C:\Python27\ArcGIS10.1\Lib\site-packages\comtypes&lt;BR /&gt;Delete automation.pyc, automation.pyo, safearray.pyc, safearray.pyo&lt;BR /&gt;Edit automation.py &lt;BR /&gt;Add the following entry to the _ctype_to_vartype dictionary (line 794): &lt;BR /&gt;POINTER(BSTR): VT_BYREF|VT_BSTR,&lt;BR /&gt;&lt;BR /&gt;At the Python prompt: &lt;BR /&gt;&amp;gt;&amp;gt;&amp;gt; from comtypes.client import GetModule &lt;BR /&gt;&amp;gt;&amp;gt;&amp;gt; GetModule("c:/program files/arcgis/desktop10.1/com/esriArcMapUI.olb")&lt;BR /&gt;TIP: If loading one or modules fails, delete all files in the comtypes/gen folder before trying again.&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt;Then you're set for using ArcObjects in Python. Create a new script with the following in it&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Open a new ArcMap session. Add an annotation layer and polygon layer and you're good to go.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
# ConvertAnnotationToPoygons.py
# Updated for python ArcGIS 10.1 using comtypes
 
# Import Modules
import arcpy
from arcpy import env
import os
import sys
 
import comtypes.client
import comtypes.gen.esriSystem as esriSystem
import comtypes.gen.esriGeometry as esriGeometry
import comtypes.gen.esriGeoDatabase as esriGeoDatabase
import comtypes.gen.esriGeoprocessing as esriGeoprocessing
import comtypes.gen.esriArcMapUI as esriArcMapUI
import comtypes.gen.esriCarto as esriCarto
import comtypes.gen.esriDisplay as esriDisplay
import comtypes.gen.esriFramework as esriFramework
import comtypes.gen.esriDataSourcesFile as esriDataSourcesGDB
 
def NewObj(MyClass, MyInterface):
&amp;nbsp;&amp;nbsp;&amp;nbsp; from comtypes.client import CreateObject
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ptr = CreateObject(MyClass, interface=MyInterface)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ptr
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return None
 
def CType(obj, interface):
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newobj = obj.QueryInterface(interface)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return newobj
&amp;nbsp;&amp;nbsp;&amp;nbsp; except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return None
&amp;nbsp;&amp;nbsp; 
def GetApp():
&amp;nbsp;&amp;nbsp;&amp;nbsp; """Get a hook into the current session of ArcMap"""
&amp;nbsp;&amp;nbsp;&amp;nbsp; pAppROT = NewObj(esriFramework.AppROT, esriFramework.IAppROT)
&amp;nbsp;&amp;nbsp;&amp;nbsp; if pAppROT is not None:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iCount = pAppROT.Count
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if iCount == 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'No ArcGIS application currently running.&amp;nbsp; Terminating ...'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in range(iCount):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pApp = pAppROT.Item(i)&amp;nbsp; #returns IApplication on AppRef
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print pApp.Name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pApp.Name == 'ArcMap':
&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; print "ArcMap found"
&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; pDoc = pApp.Document
&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; print pDoc.Title
&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; if pDoc.Title == "untitled.mxd" or pDoc.Title == "Untitled":
&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 pApp
&amp;nbsp;&amp;nbsp;&amp;nbsp; print 'No ArcMap session is running at this time.'
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "No AppROT found"
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "Failed"
&amp;nbsp;&amp;nbsp;&amp;nbsp; return None
 
def AnnotoPoly():
&amp;nbsp;&amp;nbsp;&amp;nbsp; #USER SETTINGS
&amp;nbsp;&amp;nbsp;&amp;nbsp; #SET these variables for your individual case
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; FDOLayerNum = 0 #Set annotation layer here (zero-based: 0 is first layer in TOC)
&amp;nbsp;&amp;nbsp;&amp;nbsp; FLayerNum = 1 #Set empty feature layer here (zero-based: 1 is second layer in TOC)
&amp;nbsp;&amp;nbsp;&amp;nbsp; OutputDPI = 1200 #Highest DPI of your final output device(s)
&amp;nbsp;&amp;nbsp;&amp;nbsp; ScreenResolution = 96 #Resolution of your monitor
&amp;nbsp;&amp;nbsp;&amp;nbsp; FinalOutputScale = 24000 #Final scale that your map will be printed with&amp;nbsp; 
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pApp = GetApp()
&amp;nbsp;&amp;nbsp;&amp;nbsp; pDoc = pApp.Document
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMxDoc = CType(pDoc, esriArcMapUI.IMxDocument)
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMap = pMxDoc.FocusMap
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pActiveView = CType(pMap, esriCarto.IActiveView)
&amp;nbsp;&amp;nbsp;&amp;nbsp; pActiveView.Refresh()
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pScreenDisplay = pActiveView.ScreenDisplay
&amp;nbsp;&amp;nbsp;&amp;nbsp; pDisplayTransform = pScreenDisplay.DisplayTransformation
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pFLayer = pMap.Layer(FLayerNum)
&amp;nbsp;&amp;nbsp;&amp;nbsp; pFL = CType(pFLayer, esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; pFClass = CType(pFL.FeatureClass, esriGeoDatabase.IFeatureClass)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pClass = pMap.Layer(FDOLayerNum)
&amp;nbsp;&amp;nbsp;&amp;nbsp; pAnnoClass = CType(pClass,esriCarto.IFeatureLayer)
&amp;nbsp;&amp;nbsp;&amp;nbsp; pAnnoClass = pAnnoClass.FeatureClass
&amp;nbsp;&amp;nbsp;&amp;nbsp; pAnnoClass = CType(pAnnoClass.Extension,esriCarto.IAnnoClass)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; ReferenceScale = pMap.ReferenceScale
&amp;nbsp;&amp;nbsp;&amp;nbsp; MapScale = pMap.MapScale
&amp;nbsp;&amp;nbsp;&amp;nbsp; OptimumScale = float(ScreenResolution) / OutputDPI * FinalOutputScale / 2
&amp;nbsp;&amp;nbsp;&amp;nbsp; AnnoScaleFactor = float(pAnnoClass.ReferenceScale / OptimumScale)
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pFDOGraphicsLayer = pMap.Layer(FDOLayerNum)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pFDOGraphicsRead = CType(pFDOGraphicsLayer, esriCarto.IFDOGraphicsLayerRead)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMap.ReferenceScale = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMap.MapScale = OptimumScale
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Generate Annotation Graphics
&amp;nbsp;&amp;nbsp;&amp;nbsp; pFDOGraphicsRead.StartGeneratingGraphics(None, pScreenDisplay, True, True, False)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; pAnnoElement = pFDOGraphicsRead.NextGraphic
&amp;nbsp;&amp;nbsp;&amp;nbsp; while pAnnoElement:
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTextElement = CType(pAnnoElement, esriCarto.ITextElement)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTextSymbol = pTextElement.Symbol
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Temporarily change text symbol's size
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempTextSize = pTextSymbol.Size
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTextSymbol.Size = float(TempTextSize) * AnnoScaleFactor
&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; pTextQuery = CType(pTextSymbol, esriDisplay.IQueryGeometry)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTextPointGeo = CType(pAnnoElement.Geometry, esriGeometry.IGeometry)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pScreenDisplay.StartDrawing(pScreenDisplay.WindowDC, pScreenDisplay.ActiveCache)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pPolygon = CType(pTextQuery.GetGeometry(pScreenDisplay.WindowDC, pDisplayTransform, pTextPointGeo), esriGeometry.IPolygon)
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Ensure geometry is suitable for a feature (sorts inner/outter rings)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTopoOperator2 = CType(pPolygon, esriGeometry.ITopologicalOperator2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTopoOperator2.IsKnowSimple_2 = False
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pPolygon.SimplifyPreserveFromTo()
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pScreenDisplay.FinishDrawing
&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; #Restore textsymbol size
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pTextSymbol.Size = TempTextSize
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pFeature = CType(pFClass.CreateFeature(), esriGeoDatabase.IFeature)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pFeature.Shape = pPolygon
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pFeature.Store()
&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; pAnnoElement = pFDOGraphicsRead.NextGraphic
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Restore dataframe's previous extent
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMap.ReferenceScale = ReferenceScale
&amp;nbsp;&amp;nbsp;&amp;nbsp; pMap.MapScale = MapScale
&amp;nbsp;&amp;nbsp;&amp;nbsp; pActiveView.Refresh
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 
if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; AnnotoPoly()
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:45:59 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220698#M7603</guid>
      <dc:creator>BryanP</dc:creator>
      <dc:date>2021-12-11T10:45:59Z</dc:date>
    </item>
    <item>
      <title>Re: Convert annotation to polygon features - Python Script...</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220699#M7604</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for converting this script. Any idea why the new polygons are being created in a different location than the original annotation layer?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Aug 2015 23:49:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/convert-annotation-to-polygon-features-python/m-p/220699#M7604</guid>
      <dc:creator>WilliamMcInnes</dc:creator>
      <dc:date>2015-08-05T23:49:03Z</dc:date>
    </item>
  </channel>
</rss>

