Daha çox

ArcPy Python Əlavəsinin OnLine metodu üçün bağlama aktivləşdirilsin?

ArcPy Python Əlavəsinin OnLine metodu üçün bağlama aktivləşdirilsin?


İstifadəçinin xətlər çəkə biləcəyi ArcGIS 10.2.2 istifadə edərək Python Əlavəsi üzərində işləyirəm və Əlavə, çəkilən xəttin hər bir seqmenti üçün uzunluğu göstərən ölçü əlavə edəcək. Bu işi çox yaxşı başa düşə bilərəm və mətn düzgün açıdadır, lakin OnLine () metodu xəritədə yapışdırmaqdan istifadə etmir. Əlavə, hər şey üçün xəritədə yapışdırmanı düzgün şəkildə təyin etdi (xəritədə tutma tolerantlığını yoxladım və fərqli tolerantlıqlarla sınadım), lakin alət üçün onLine () metodu.

ArcObjects yardım sənədlərində, bunun ümumiyyətlə ICommand İnterfeysindən OnClick üsulu ilə edildiyini söyləyir. Bunu Python Əlavəsində necə istifadə edəcəyimi bilmirəm. Əlavəmin bağlanmasını istəmək üçün comtypes və bəzi xüsusi modullardan istifadə etmək cəhdim budur. Təəssüf ki, işləmir. Bəlkə bunu .NET -də sınamalıyam?

arcobjects idxal #xüsusi modul arcobjects idxal elementləri #xüsusi modul idxal arcpy idxal pythonaddins riyaziyyat idxal comtypes.gen.esriControls kimi esriControls idxal comtypes.gen.esriArcMapUI kimi esriArcMapUI arcobjects idxal CType, NewObbom, CLO nöqtəsi ( ): x1 = nöqtə_a.X y1 = nöqtə_a.Y x2 = nöqtə_b.X y2 = nöqtə_b.Y # Orta nöqtəni tap x = (x1 + x2) / 2.0 y = (y1 + y2) / 2.0 qaytarılması (x, y) def get_angle (xy1, xy2): "" "Azimut bucağını iki nöqtədən hesablayın. (Sıfır şimaldır.)" "" # ArcPy nöqtəsi x1, y1, x2, y2 = xy1.X, xy1.Y, xy2.X, xy2.Y dx, dy = (x2 - x1, y2 - y1) math.degrees (math.atan2 (dy, dx)) sinif DrawLine (obyekt) qaytar: "" "AddMeasurementAnno_addin.tool (Alət)" "üçün tətbiq def __init __ (self): self.enabled = True self.shape = 'Line' self.cursor = 3 # arcobjects cari tətbiqə malikdir (IApplication interfeysi Pointer) self.pApp = arcobjects.GetCurrentApp () self.pDoc = self.pApp. Sənəd self.pMxDoc = CType (self.pDoc, esriArcMapUI.IM xDocument) m_SnappingEnv = NewObj (esriControls.Snapping, esriControls.ISnappingEnvironment) m_SnappingEnv.Enabled = True m_SnappingEnv.IgnoreIMSLayers = True m_SnappingEnv.ShowSnapTips = True m_SnappingEnv.ShowSnapTipBackground = True m_SnappingEnv.Tolerance = 10 m_SnappingEnv.SnappingType = esriControls.esriSnappingTypeVertex +  esriControls. esriSnappingTypeEndpoint +  esriControls.esriSnappingTypeEdge print m_SnappingEnv.SnappingType m_Snapper = m_SnappingEnv.PointSnapper m_SnappingFeedback = NewObj (esriControls.SnappingFeedback: satır son nöqtəsindəki siçan mövqeyi # m_CurrentMouseCoords = self.pMxDoc.CurrentLocation print m_CurrentMouseCoords.X, m_CurrentMouseCoords.Y # geom vasitəsilə döngə və line_geometry hissəsi üçün ucları tutun: i üçün aralıqda (part.count): əgər i! = (hissə. say - 1): pt1, pt2 = part.getObject (i), part.getObject (i+1) xətti = qövs py.Polyline (arcpy.Array ([pt1, pt2])) length = str (round (line.length, 1)) + "'" x, y = midpoint (pt1, pt2) elements.add_text (self.pApp, mətn = uzunluq, ad = "uzunluq", ölçü = 9, qalın = Doğru, x = x, y = y, bucaq = get_angle (pt1, pt2), görünüş = "məlumat")

ArcMap -da nə edir, amma xətt kəsilmədiyindən məsafələr düzgün deyil. Bu Əlavəni kəsməmək olduqca faydasızdır:

Və çırpma seçimləri pəncərəsi:

Kimsə bu işdə uğur qazandı?


@JasonScheirer tərəfindən şərh edildiyi kimi:

Bəli, .Net inkişafına baxmaq lazım ola bilər. Python eklentiləri həqiqətən bu səviyyəli fərdiləşdirmə üçün nəzərdə tutulmamışdır, son dərəcə sadə funksionallıq üçün nəzərdə tutulmuşdur.


Digər cavabları tərifləmək üçün, Python Addin Toolunun bir şəkil çəkdiyi görünür qrafik və a deyil SKETCH .NET -də istifadə edəcəyiniz şey budur. Bildiyimə görə, xəritədə qrafik çəkərkən bir qrafika ətraf mühitə hörmət etmir (səhv edə bilərəmmi?).

Ekranınıza baxanda sadə düzbucaqlı kimi görünürlər. Alternativ bir yanaşma, kənarın seçilməsi və bu xətt seqmentinin çıxarılmasıdır. Çoxbucaqlarınızın 4 təpədən ibarət olduğunu düşünürəm.