Illustratorでoverflowをコントロールする

最終更新日

Comments: 0

このところフォーラムに張り付いていたものでこちらがとってもお留守になっています。
ネタ探しの一環ですが、いつのまにかネタにされる側になってしまっているような気がします。そんなこんなな状況ですので大したものはありません。ストレートにタイトル通りのものですから日々チェックされている方々には「いまさら…」っていわれかねませんね。
使い古されたネタである事は否めませんが、フォーラム覗いていると定期的に出てくるトピックでありますし、ExcellentとかAmazingとかなんとか言ってたいそう喜ばれるのもこの手の代物です。

前置きが長いと怒られてしまいそうなのでコードから

var counter = 0;
var slct = app.activeDocument.selection[0];
var cntsLength = getChars(slct);
var visibleChar = getVisible(slct);
var hscale = 1.0, vscale = 1.0;
var stepNum = 0.02;

while (cntsLength != visibleChar) {
    scalingWidth(slct, [hscale, vscale]);
    visibleChar = getVisible(slct);
    vscale = vscale-stepNum;
    }

function getVisible(txObj){
    var result=0;
    for (var i=0;i<txObj.lines.length;i++){
        result += txObj.lines[i].characters.length;
        }
    return result;
    }

function getChars(txObj){
    var result=0;
    for (var i=0;i<txObj.paragraphs.length;i++){
        result += txObj.paragraphs[i].characters.length;
        }
    return result;
    }

function scalingWidth(txObj,wscl){
    for (var i=0;i<txObj.paragraphs.length;i++){
        txObj.paragraphs[i].scaling = wscl;
        redraw();
        }
    }

IllustratorのテキストフレームにはIndesignのようにoverflowプロパティがありません。なので自らオーバーフローを検出する必要があります。
幾つかの手法が存在するのですが、今回はテキストフレームに含まれるparagraphとlineの性質の違いを利用しましょう。まずは下図を参照下さい。

lineプロパティには見えている部分のキャラクタが含まれます。一方paragraphプロパティにおいては段落に含まれるcharacterが全て含まれます。これを利用します。
要はparagraphとlineのキャラクタ数を比較すると表示されていないキャラクタの数を把握できるわけです。
あとは長体をかけるなり級数を下げるなり好きにすれば良いわけです。上記の例では長体処理を行っています。

話は変わりますが、マジックマウスとかのワイヤレスマウスってAAAサイズの乾電池×2ですよね。重すぎません?
大量の手作業するのに途中からwiredのマウスに切り替えるとすごく楽になったのです。もっとちっこい電池で動く様にしてもらいたいものです。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

コメントを残す