Как получить значение ширины текстового элемента через плагин в XD?

Я пытаюсь создать плагин для XD, чтобы автоматизировать создание элементов дизайна. Я написал функцию для создания кнопки (первое изображение ниже), используя текстовый элемент и прямоугольник. Единственная проблема заключается в том, что форма прямоугольника не зависит от ширины текста, поэтому, когда текст длиннее, текст перекрывает прямоугольник (см. второе изображение ниже).

Кнопка на основе прямоугольника фиксированного размера Кнопка на основе прямоугольника фиксированного размера с переполненным текстом

Я пытался выяснить, как получить значение ширины текстового элемента, чтобы я мог правильно определить размер прямоугольника. Кто-нибудь может мне с этим помочь?

Я выяснил, что, добавив строку console.log (selection.items);, я могу вывести в журнал полный список свойств, но как мне получить доступ к свойство ширины?

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

[ Text ('Submit Button') {
    width: 113, height: 20
    global X,Y: -3, -74
    parent: Artboard ('iPad – 1')
    fill: ff000000
  },
  Rectangle ('Rectangle 6') {
    width: 100, height: 50
    global X,Y: -3, -58
    parent: Artboard ('iPad – 1')
    stroke: ff2d3494
  } ]

и вот мой полный код...

const {Rectangle, Color, Text, Selection} = require("scenegraph"); 
let commands = require("commands");

function createButton(selection) { 

    // Create the outline of the button
    const newButtonOutline = new Rectangle(); 
    newButtonOutline.width = 100;
    newButtonOutline.height = 50;
    newButtonOutline.stroke = new Color("#2D3494");
    newButtonOutline.strokeWidth = 2;
    newButtonOutline.cornerRadii = { 
        topLeft: 10, 
        topRight: 10, 
        bottomRight: 10, 
        bottomLeft: 10
    };

    // Create the text for the button
    const newButtonLabel = new Text();
    newButtonLabel.text = "Submit Button";
    newButtonLabel.fontSize = 18;
    newButtonLabel.fill = new Color("#000000");


    // Add the text and outline to the artboard
    selection.insertionParent.addChild(newButtonOutline);
    newButtonOutline.moveInParentCoordinates(100, 100);
    selection.insertionParent.addChild(newButtonLabel);
    newButtonLabel.moveInParentCoordinates(100, 100);
    selection.items = [newButtonLabel, newButtonOutline];
    console.log (selection.items);

    //align the button elements and group together 
    commands.alignHorizontalCenter();
    commands.alignVerticalCenter();
    commands.group();

}

Я надеюсь, что кто-то может помочь!


person Haniel    schedule 15.11.2019    source источник
comment
Я понял, что следующее выведет ширину прямоугольника (100), но в тексте написано undefined...? console.log(selection.items[1]['width']);   -  person Haniel    schedule 16.11.2019


Ответы (1)


Вот и получается, что для получения ширины текстового узла нужно получить его из localBounds, что-то вроде...

textNode.localBounds.width

или чтобы получить ширину графического узла, это просто...

graphicNode.width

person Haniel    schedule 18.11.2019