[ID CS4-CS6] можно ли получить текстовое представление различных свойств

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
что я имею ввиду:
у разных объектов есть свойства (уже глубокая мысль)
и вот чтобы посмотреть эти самые свойства я делаю вот такой вот простой код:
Код:
alert(img.clippingPath.clippingType);
но вместо ожидаемого "ClippingPathType.NONE" я вижу "1852796517"
или
Код:
alert(img.horizontalScale);
вместо "Flip.HORIZONTAL" показывает "13"

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

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
но вместо ожидаемого "ClippingPathType.NONE" я вижу "1852796517"
Можно для разнообразия заглянуть в документацию и ознакомиться с энумераторами:
upload_2017-12-8_19-0-59.png
upload_2017-12-8_19-1-23.png


upload_2017-12-8_18-58-58.png
 
  • Спасибо
Реакции: Flame

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Скорее всего нет, но есть маленький лайфхак:
1852796517=0x6E6F6E65="none"
Бинго!
 
  • Спасибо
Реакции: bossrus

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Можно для разнообразия заглянуть в документацию и ознакомиться с энумераторами:
upload_2017-12-8_19-0-59-png.101486
upload_2017-12-8_19-1-23-png.101487


upload_2017-12-8_18-58-58-png.101485
это-то понятно.
и даже можно сделать процедуру "aalert", которая будет подставлять значения в зависимости от циферки. это всё понятно. а вот встроенного способа такое увидеть нет? чтобы не писать отдельный код для каждого разного вида свойства?

Скорее всего нет, но есть маленький лайфхак:
1852796517=0x6E6F6E65="none"
Бинго!
а функции автоматического перевода десятичного числа в текст через шестнадцатиричное представление есть встроенная? хотя это уже универсальное решение. ща набросаю процедурку :)
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
pspt

написал я процедурку. пользуйтесь, кому ннадо
Код:
function codeToText(txt)
    {
    var dec = Number(txt);
    if (dec==NaN)
        {
        return("нифига это не число!");
        }
    var hexString = dec.toString(16);
    var hex= Array();
    //разбиваем по парам
    for (var i=0;i<hexString.length;i++)
        {
        if ((i+1) % 2 != 0) hex.push(hexString[i])
            else hex[hex.length-1]+=hexString[i];
        }
    //конвертим в "понятную" строку.
    var newTxt="";
    for (var i=0;i<hex.length;i++)
        {
        newTxt+=String.fromCharCode(parseInt(hex[i], 16));
        }
    return newTxt;
    }

тоже то ещё извращение — строку в инт, инт в хекс, хекс разделить побайтово, каждый байт в инт, и оттуда в чар.
мы не ищем лёгких путей :D



ЗЫ. хотя это всё равно не решает главную проблему — получить из кода полную строку типа "ClippingPathType.NONE"
 

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Код:
for (i in ClippingPathType) {
$.writeln('ClippingPathType.' + i)
}
это понятно. но кроме "ClippingPathType." есть ещё и "Flip.", "ContentType.", "CornerOptions.", и ещё куча различных свойств, которые начинаются с названия объекта.
хотелось бы таки универсальности.
 

люди_будущего

Участник
Сообщения
37
Реакции
34
@bossrus, в CS4 ничего толкового не получится, т.к. документация, пренебрежением которой вас попрекали выше, не соответствует действительности (и @Oleg Butrin должен был бы это заметить):
Код:
$.writeln( typeof( app.selection[0].clippingPath.clippingType ));
напишет 'Number'. В то время как в CS5, хотя бы, будет написано "object", что (а) отвечает документации (которая осталась неизменна), и (б) заметно облегчит вам жизнь, т.к. у этого объекта "волшебные" "стрингификация" и "нумификация", попробуйте например так (в CS5+, у меня выбран помещенный имидж с обтравкой "detect edges"):
Код:
$.writeln( app.selection[0].clippingPath.clippingType );
$.writeln( app.selection[0].clippingPath.clippingType === ClippingPathType.DETECT_EDGES );
$.writeln( app.selection[0].clippingPath.clippingType.toString() === 'DETECT_EDGES' );

$.writeln( typeof( ClippingPathType.DETECT_EDGES ));
$.writeln( String( ClippingPathType.DETECT_EDGES ));
$.writeln( Number( ClippingPathType.DETECT_EDGES ));
$.writeln( ClippingPathType.DETECT_EDGES.toString());
$.writeln( + ClippingPathType.DETECT_EDGES );
Собственно, про страшный номер при таком раскладе можно забыть.

тоже то ещё извращение — строку в инт, инт в хекс, хекс разделить побайтово, каждый байт в инт, и оттуда в чар
Попробуйте так, по вкусу (на входе-то всегда номер, вообще-то):
Код:
function foo ( n ) {
    for ( s = ''; n > 0; n = Math.floor( n / 256 )) s = String.fromCharCode( n % 256 ) + s;
    return s;
}

function bar ( n ) {
    s = '';
    do s = String.fromCharCode( n & 255 ) + s while (( n >>>= 8 ) > 0 );
    return s;
}

function baz ( n ) { return decodeURI( n.toString( 16 ).replace( /../g, '%$&' ))}
Второй вариант, вследствие использования битовых операций, ограничен 4-мя байтами, и, в отличие от "foo" и "baz", выдаст неверный ответ для такого, например, аргумента:
Код:
0x10000 * 1852796517 + 0x3132
т.е. 6-ти байт. Дело в том, что у хулиганья из Адоби (а кто же они, с такими "юмористическими" константами) есть небольшой простор, т.к. целые числа хранятся точно, если помещаются в 53 бита мантиссы типа Double. Теоретически они могли использовать в подобных численных константах до 6 букв включительно. Но вряд ли.
 
  • Спасибо
Реакции: bossrus

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
upload_2017-12-11_16-55-25.png

Прикинь?
Код:
var dec = Number(txt);
    if (dec==NaN)
Так что это фу-фу-фу.
Надо через isNaN проверять.
 
  • Спасибо
Реакции: bossrus

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
не знаю что в cs4, но в cc2018 например app.selection[0].flip.toString() возвращает 'HORIZONTAL'


за пару секунд поиска набрел на такой вариант
[JS] A way to get enumeration names? | Adobe Community

Код:
Object.prototype.enumName = function(enumId)
{
for ( var p in this )
  if ( this[p] == enumId ) return(p);
return(FALSE);
}
 
// Displays a SpecialCharacter's name (here "EM_SPACE") :
alert( SpecialCharacters.enumName(0x53456D53) );
 
// Displays the current horiz. measurements unit :
var u = app.viewPreferences.horizontalMeasurementUnits;
alert( MeasurementUnits.enumName(u) );

пока не могу только понять, как получение текстовых значений поможет в отладке )
 
Последнее редактирование:

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Так что это фу-фу-фу.
Надо через isNaN проверять.
век живи, век учись :)

не знаю что в cs4, но в cc2018 например app.selection[0].flip.toString() возвращает 'HORIZONTAL'
там вона @люди_будущего популярно показал почему CS4 это вам не CS2018 :)

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

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Надо через isNaN проверять.
интернет сказал, что функция isNaN работает весьма через оппу.
но! зато есть весьма изящное решение:
Код:
Код:
   var dec = Number(txt);
   if (dec!==dec)
       {
       return("нифига это не число!");
       }
то есть переменная не равна самой себе, только если она NaN. работает волшебно :)
 
  • Спасибо
Реакции: _MBK_