저는 OOP을 처음 사용하고 Python에서 COM 객체 (arcobjects)를 사용하려고합니다. 프로그램은 GIS와 관련되어 있지만 GIS.SE에 대한 답변을 얻지 못했습니다. 그래서 여기에서 묻습니다. 아래 코드는 제 코드입니다. 나는 iFrameElement를받는 끝에 붙어 있습니다. ESRI는이를 추상적 클래스의 멤버/인터페이스로 기술하며 객체 자체는 만들 수 없습니다. CoClass (MapFrame)의 객체에 포함 된 정보를 전달해야합니다.Python의 COM 객체 (arcobjects)
제안 방법
또한 파이썬에서 객체에 대한 이름 규칙을 찾을 수 있습니까? 접두어로 p가 있는데 어디에서 왔는지 모르겠습니다.
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)
는 지금까지 내가 이해, iFrameElement 내가 MapFrame 개체에 대한 특성 (포인터)를 상속 할 필요가있는 추상 클래스의 인터페이스입니다. 어떻게해야합니까? IMapGrids 인터페이스로 어떻게 객체에 접근 할 수 있습니까? 어떤 제안?
위의 내 질문에 따라 모든 것을 동의합니다. 초급자로서 제 질문은이 정보를 어떻게 전달합니까 (마카니즘, 코드 라인을 볼 필요가 있음)입니다. 나는 새로운 MapFrame 객체 (pMapFrame = NewObj (esriCarto.MapFrame, esriCarto.IMapFrame))를 만드는 방법을 알고 있지만 IFrameElement로부터 정보를 상속받는 방법을 알고있다. 대부분의 예제는 VB 나 C# 또는 C++에 있으며, 구체적으로 어떻게하는지 설명하지는 않는다. – Tomek
@Tomek : 원래의 답변을 업데이트했습니다. MapFrame 유형의 객체가 있고 IFrameElement의 메서드를 사용하려면 thisFE = CType (pMapFrame, IFrameElement)을 호출하면됩니다. – Juffy
감사합니다. 그게 전부입니다. 증서에 조금 혼란스러워했습니다. 다시 한번 감사드립니다. – Tomek