PictureElement

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

Объект Класс 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 МБ.

Свойства

СвойствоОписаниеТип данных
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
name
(чтение и запись)

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

String
sourceImage
(чтение и запись)

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

String
type
(только чтение)

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

String
visible
(чтение и запись)

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

Boolean

Обзор метода

МетодОписание
getDefinition (cim_version)

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

setAnchor (anchor)

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

setDefinition (definition_object)

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

Методы

getDefinition (cim_version)
ПараметрОписаниеТип данных
cim_version

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

  • V2The 2.x version of the CIM will be used.
  • V3The 3.x version of the CIM will be used.
String
Возвращаемое значение
Тип данныхОписание
Object

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

Более подробно о работе с CIM и примеры см. Доступ к CIM в Python.

setAnchor (anchor)
ПараметрОписаниеТип данных
anchor

A string that specifies the location of the anchor position.

  • BOTTOM_LEFT_CORNERThe anchor will be set at the bottom left corner position.
  • BOTTOM_MID_POINTThe anchor will be set at the bottom center position.
  • BOTTOM_RIGHT_CORNERThe anchor will be set at the bottom right corner position.
  • CENTER_POINTThe anchor will be set at the center position.
  • LEFT_MID_POINTThe anchor will be set at the left center position.
  • RIGHT_MID_POINTThe anchor will be set at the right center position.
  • TOP_LEFT_CORNERThe anchor will be set at the top left corner position.
  • TOP_MID_POINTThe anchor will be set at the top center position.
  • TOP_RIGHT_CORNERThe anchor will be set at the top right corner position.
String

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

setDefinition (definition_object)
ПараметрОписаниеТип данных
definition_object

A modified CIM definition object originally retrieved using getDefinition.

Object

Более подробно о работе с CIM и примеры см. Доступ к CIM в Python.

Пример кода

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)