Skip to main content

getDefinition

Краткая информация

Объект Класс PictureElement обеспечивает доступ к свойствам рисунка, которые разрешают изменение его положения в компоновке страницы, а также получение и задание его источника данных.

Обсуждение

Объект PictureElement - это растр или изображение, вставленное на компоновку страницы. Метод listElements для Layout возвращает список Python объектов элементов компоновки страницы. Затем необходимо пройти по всем элементами списка в цикле или указать номер индекса для ссылки на определенный объект элемента страницы. Чтобы вернуть список только объектов PictureElement, используйте константу PICTURE_ELEMENT для параметра element_type. wildcard также может быть использована для дальнейшей настройки поиска на основе элемента name.

У объекта PictureElement есть свойство sourceImage, которое позволяет вам получить его источник или задать новое местоположение источника рисунка. Если вы планируете заменить рисунок изображениями разных размеров и соотношений сторон, создайте исходный рисунок, указав высоту и ширину, соответствующие всей области, которую будут занимать остальные изображения на компоновке страницы. Если рисунок заменяется через свойство sourceImage и у него отличается соотношение сторон, он будет вписан в площадь исходного изображения по своей длинной стороне. Замененные изображения не будут больше исходного авторского размера. Вам также потребуется установить положение якоря, чтобы все новые изображения располагались относительно этого местоположения. Если вы не хотите, чтобы рисунки растягивались, убедитесь, что для параметра Сохранять пропорции установлено значение True.

Рисунки всегда сохраняются в проекте. Свойство sourceImage отображает исходное местоположение изображения на момент его вставки, но файл можно удалить с диска, а изображение рисунок продолжит отображаться в компоновке.

Метод createPictureElement объекта ArcGISProject позволяет добавлять изображения либо к объекту Layout, используя единицы страницы, либо в графический слой в объекте Map, используя единицы карты. Рисунки можно создавать с помощью геометрии Point и Polygon. Положением якоря по умолчанию для вновь созданного изображения будет левый верхний угол, и именно это место является началом координат X и Y элементов.

Примечание:

Дополнительные свойства рисунка в компоновке можно изменить с помощью Python CIM Access, но это не касается элементов-рисунков графического слоя. Это связано с тем, что все данные рисунков сохраняются в двоичной форме с целью оптимизации производительности работы с ними. У графического слоя также есть жесткое ограничение в 4000 элементов или 10 МБ. То есть вы не можете вставить изображение размером более 10 МБ, а также несколько изображений, размер которых превышает 10 МБ.

Синтаксис

getDefinition()

Свойства

Имя Объяснение Тип данных

anchor

(Только для чтения)

Возвращает одно из следующих строковых значений, которые описывают текущую позицию якоря. Чтобы изменить значение, используйте метод setAnchor.

  • BOTTOM_LEFT_CORNER—В левом нижнем углу

  • BOTTOM_MID_POINT—Снизу по центру

  • BOTTOM_RIGHT_CORNER—В правом нижнем углу

  • CENTER_POINT—В центре

  • LEFT_MID_POINT—Слева по центру

  • RIGHT_MID_POINT—Справа по центру

  • TOP_LEFT_CORNER—В левом верхнем углу

  • TOP_MID_POINT—Сверху по центру

  • TOP_RIGHT_CORNER—В правом верхнем углу

String

elementHeight

(Чтение / Запись)

Высота элемента в единицах страницы. Единицы измерения задаются или считываются в единицах страницы.

Double

elementPositionX

(Чтение / Запись)

x-положение рисунка позиции точки якоря элемента. Единицы измерения задаются или считываются в единицах страницы.

Double

elementPositionY

(Чтение / Запись)

y-положение рисунка позиции точки якоря элемента. Единицы измерения задаются или считываются в единицах страницы.

Double

elementRotation

(Чтение / Запись)

Угол поворота элемента в градусах. Положительные значения поворачивают по часовой стрелке, а отрицательные – против часовой стрелки.

Double

elementWidth

(Чтение / Запись)

Ширина элемента в единицах страницы. Единицы измерения задаются или считываются в единицах страницы.

Double

locked

(Чтение / Запись)

Если установлено значение True, элемент нельзя выбрать графически в виде компоновки.

Boolean

longName

(Только для чтения)

Полное имя элемента, включая информацию о группе, если она существует. Например, элемент с именем 'Picture' в групповом элементе с именем 'Group Element' вернет значение longName, равное 'Group Element\\Picture'. Если элемент не входит в группу, longName будет таким же, как и значение name.

String

name

(Чтение / Запись)

Имя элемента.

String

parentGroupElement

(Только для чтения)

Если элемент находится в группе, возвращаемым значением будет GroupElement, в противном случае будет возвращено NoneType.

GroupElement

sourceImage

(Чтение / Запись)

Текстовая строка, представляющая путь к источнику данных рисунка.

String

type

(Только для чтения)

Возвращает PICTURE_ELEMENT.

String

visible

(Чтение / Запись)

Возвращает True, если элемент является видимым в компоновке. Вместо того, чтобы перемещать ненужные объекты со страницы перед печатью или экспортом, вы можете включать и выключать видимость элемента.

Boolean

Методы

getDefinition(cim_version)

Возвращает определение CIM элемента изображения.

Имя Объяснение Тип данных

cim_version

A string that represents the major version of the CIM that will be used.

  • V2—The 2.x version of the CIM will be used.

  • V3—The 3.x version of the CIM will be used.

String

Возвращаемое значение

Тип данных Объяснение

Object

Возвращает определение CIM для PictureElement.

setAnchor(anchor)

Метод setAnchor, управляющий положением якоря для PictureElement.

Имя Объяснение Тип данных

anchor

A string that specifies the location of the anchor position.

  • BOTTOM_LEFT_CORNER—The anchor will be set at the bottom left corner position.

  • BOTTOM_MID_POINT—The anchor will be set at the bottom center position.

  • BOTTOM_RIGHT_CORNER—The anchor will be set at the bottom right corner position.

  • CENTER_POINT—The anchor will be set at the center position.

  • LEFT_MID_POINT—The anchor will be set at the left center position.

  • RIGHT_MID_POINT—The anchor will be set at the right center position.

  • TOP_LEFT_CORNER—The anchor will be set at the top left corner position.

  • TOP_MID_POINT—The anchor will be set at the top center position.

  • TOP_RIGHT_CORNER—The anchor will be set at the top right corner position.

String

setDefinition(definition_object)

Задает определение CIM элемента изображения.

Имя Объяснение Тип данных

definition_object

A modified CIM definition object originally retrieved using getDefinition.

Object

Пример кода

PictureElement, пример 1

Следующий скрипт обходит структуру каталогов в поисках файлов проекта. Для каждого найденного проекта скрипт проходит по всем компоновкам в поисках элементов-рисунков. Если будет найден oldSourcePath, он меняется на newSourcePath, а внесенные в проекты и компоновки изменения выводятся на экран.

import arcpy, os

rootFolder = r'C:\Projects'
oldSourcePath = r'C:\Projects\OldLogo.png'
newSourcePath = r'C:\Projects\NewLogo.png'

for (rootFolder, dirs, files) in os.walk(rootFolder):
  for file in files:
    if file.endswith('.aprx'):
      p = arcpy.mp.ArcGISProject(os.path.join(rootFolder,file))
      print(os.path.join(rootFolder,file))
      for lyt in p.listLayouts():
        for pic in lyt.listElements('picture_element'):
          if pic.sourceImage == oldSourcePath:
            pic.sourceImage = newSourcePath
            print(f'Found OldLogo: /n  Project: {file} /n  :Layout: {lyt.name}')
      #p.save()  #Test before permenantly replacing
PictureElement, пример 2

Следующий скрипт добавит в компоновку два новых рисунка с помощью конверта. Функция используется для создания геометрии путем указания положения привязки X, Y, а также ширины и высоты в единицах страницы. После вставки изображений они добавятся в новый GroupElement.

def MakeRec_UL(ulx, uly, w, h):
    xyRecList = [[ulx, uly], [ulx+w, uly], [ulx+w,uly-h], [ulx,uly-h], [ulx,uly]]
    array = arcpy.Array([arcpy.Point(*coords) for coords in xyRecList])
    rec = arcpy.Polygon(array)
    return rec

p = arcpy.mp.ArcGISProject('current')
lyt = p.listLayouts('Layout')[0]

picPath1 = r'C:\Projects\Fenway.jpg'
picPath2 = r'C:\Projects\Chowdah.png'

pic1 = p.createPictureElement(lyt, MakeRec_UL(1,7.5,8.67,6.5), picPath1, 'Fenway')
pic2 = p.createPictureElement(lyt, MakeRec_UL(5.8,7.34,4.2,6.43), picPath2, 'Chowdah')

newGroup = p.createGroupElement(lyt, [pic1, pic2], 'Favorite Pets')
PictureElement, пример 3

Следующий скрипт добавит изображение в местоположение каждого точечного объекта класса объектов, используя точечную геометрию. Скрипт также размещает рисунок так, чтобы его центр находился на точечном объекте в соответствии с его указанными шириной и высотой.

p = arcpy.mp.ArcGISProject('current')
m = p.listMaps('Map')[0]  #USA Contiguous Albers Equal Area Conic USGS_1
ptLyr = m.listLayers('*Point')[0]
graLyr = m.createGraphicsLayer()
m.moveLayer(ptLyr, graLyr, 'AFTER')

picPath = r'C:\Projects\Chowdah.png'

for row in arcpy.da.SearchCursor(ptLyr, ['SHAPE@XY']):
    x, y = row[0]
    centeredPt = arcpy.Point(x-50000, y+75000) #1/2 width and height
    pic = p.createPictureElement(graLyr, centeredPt, picPath, 'Chowdah')
    pic.elementWidth = 100000   #map units meters
    pic.elementHieght = 150000  #map units meters
PictureElement, пример 4

Следующий скрипт использует Python CIM Access для задания строки AltText рисунка.

p = arcpy.mp.ArcGISProject('current')
lyt = p.listLayouts('Layout')[0]

picPath = r'C:\Projects\Fenway.jpg'

picElm = p.createPictureElement(lyt, arcpy.Point(1,5), picPath, 'Fenway')
picElm.elementWidth = 4
picElm.elementHeight = 3

#Create AltText using Python CIM Access
lyt_cim = lyt.getDefinition('V3')
for elm in lyt_cim.elements:
    if elm.name == 'Fenway Pic':
        altTxt = arcpy.cim.CreateCIMObjectFromClassName("CIMStringMap", "V3")
        altTxt.key = "AltText"
        altTxt.value = "Picture of Fenway, a Golden Retriever, staring at sushi."
        elm.customProperties.append(altTxt)
lyt.setDefinition(lyt_cim)