Условие, основанное на длине строки

#povray

#povray

Вопрос:

Используя POV-Ray для Windows версии 3.7, я написал скрипт для визуализации полупрозрачных кубов, представляющих химические элементы:

 #declare H=difference {
  box {                      
    <-1, -1, 0>, <1, 1, 0.5>
    material {
      M_Glass
    }
  }                          

  text {
    ttf "ariblk.ttf", element,
    0.2, // depth
    0  // spacing
    texture { 
      pigment { color <0,0,0,1> }
    }
    scale 1.3
    translate <-0.8, -0.45, -0.1>  
  }                             
}
  

где element — строка. Теперь обозначения химических элементов могут иметь длину в один символ (H … водород), два символа (At … астатин) или три символа (неназванные новые открытия). Я написал цикл анимации для перебора всех порядковых номеров элементов, и мне уже удалось отобразить 1..118 за один прогон.

Метка должна быть переведена и масштабирована внутри куба в направлении x на основе коэффициента длины строки. Хотя для перевода, выравнивания по центру или измерения фактической ограничивающей рамки сначала может сработать, я все же хотел бы иметь возможность выразить что-то подобное для масштабирования:

 #switch(string_length(element))
#case(1)
    scale 0.9
    #break

#case(2)
    scale 0.72
    #break

#case(3)
    scale 0.62
    #break

#end
  

Но такой функции нет string_length . В документации об этом не упоминается.

Существует ли скалярная функция или макрос длины строки в POV-Ray? Или обходной путь, который не означает писать 118 случаев?

Ответ №1:

Нашел его, strlen(element) :

Источник

Затем я ищу документацию strlen , и она содержит ссылку, которая находится в части документации по общим функциям, а не в главе о строковых функциях:

strlen(S)
Длина S. Возвращает целочисленное значение, представляющее собой количество символов в строке S.