I'm new to OOP and trying to use COM objects (arcobjects) in Python. Program is GIS related, but I did not get any answers on GIS.SE, so I am asking here. Below is piece of my code. I am stuck at the end where I receive iFrameElement. ESRI describe it as member/interface of Abstract Class, which can not create objects itself. I need to pass information contained in it to object in its CoClass (MapFrame).
Any suggestions how to do this?
Also where can I find name conventions for objects in Python? There are p, i as prefix and I am not sure where they come from.
from comtypes.client import CreateObject, GetModule import arcpy def CType(obj, interface): """Casts obj to interface and returns comtypes POINTER or None""" try: newobj = obj.QueryInterface(interface) return newobj except: return None def NewObj(MyClass, MyInterface): """Creates a new comtypes POINTER object where\n\ MyClass is the class to be instantiated,\n\ MyInterface is the interface to be assigned""" from comtypes.client import CreateObject try: ptr = CreateObject(MyClass, interface=MyInterface) return ptr except: return None esriCarto = GetModule(r"C:\Program Files (x86)\ArcGIS\Desktop10.0\com\esriCarto.olb") esriCartoUI = GetModule(r"C:\Program Files (x86)\ArcGIS\Desktop10.0\com\esriCartoUI.olb") esriMapUI = GetModule(r"C:\Program Files (x86)\ArcGIS\Desktop10.0\com\esriArcMapUI.olb") esriFrame = GetModule(r"C:\Program Files (x86)\ArcGIS\Desktop10.0\com\esriFramework.olb") arcpy.SetProduct('Arcinfo') pApp = NewObj(esriFrame.AppROT, esriFrame.IAppROT).Item(0) pDoc = pApp.Document pMxDoc = CType(pDoc, esriMapUI.IMxDocument) pLayout = pMxDoc.PageLayout pGraphContLayout = CType(pLayout, esriCarto.IGraphicsContainer) iFrameElement = pGraphContLayout.FindFrame(pMxDoc.ActiveView.FocusMap) As far as I understand, iFrameElement is an interface of an abstract class from which I need to inherit attributes (pointer) to MapFrame object. How do I do that? How do it get to object with IMapGrids interface? Any suggestions?