【InDesign】【スクリプト】ドキュメント依存の環境設定「キーボード増減値」を、毎回自分仕様で開くstartup
EQUIOSの特色出力が上手くいかず(課長にやって貰ってる)、半ば自暴自棄になりながら更新です。要は暇なだけ
InDesignの環境設定は、アプリケーション依存とドキュメント依存がそれぞれバラバラなのはご周知の通りですが、キーボード増減値は人により好みがあり、デフォルトの0.25mmから0.1mmに直す人が結構います。
同じドキュメントを複数人で作業する場合、誰かが0.1mmにしてると、矢印キーのオブジェクト移動が一向に進まないわけだ!shift 10倍でも我慢限界。場合によっては便利ですが、コイツらよく我慢できるな。それとも矢印で移動する事ないのか。
速攻環境設定開いて戻してますが、毎回やられると徐々にイライラが溜まってくるので、開くとき強制的に0.25mmに戻すスクリプトにしました。
//DESCRIPTION:AFTER_OPEN_doc環境設定「キーボード増減値」を0.25mm(らーでぃ)
#targetengine "ViewPreferences_CursorKeyIncrement_2023"
app.addEventListener("afterOpen", main);
function main(myEvent) {
var myTarget = myEvent.target;
if (myTarget.constructor instanceof LayoutWindow)
{ return; }
if(myTarget != null)
{
myTarget.viewPreferences.cursorKeyIncrement = "0.25mm";
}
}
キモは、
var myDoc = app.activeDocument;
ではドキュメントが開ききる前にもう判定されてしまい、errorになるので
var myTarget = myEvent.target;
のfunctionにする事と、after/before Openに関してはドキュメントとレイアウトウインドウの2回発動するというInDesignの仕様に対応する
(myTarget.constructor instanceof LayoutWindow)
if判定を入れること。
毎度お馴染み、Startup Scriptsフォルダーに入れて下さい。
これで毎回イラッとする事がなくなります、やったー。
好きな時にどちらかへサッと変更したい方は、
app.activeDocument.viewPreferences.cursorKeyIncrement = "0.1mm";
て一行スクリプトを0.1mm, 0.25mmの2種作り、お好きなショートカット設定したらいいだけ。
二度目の、やったーーー。
参考:
まんまじゃないかって、言わないで(ぃゃいいよ)
uske-s.hatenablog.com 結局特色出力の件は、InDesign書き出しのインキ管理で一旦解決させたさ(でも腑に落ちぬ
【InDesign】【スクリプト】プリント・PDF書き出し後、ページ設定&部数&見開き指定&ページ情報を初期値にリセット
2023.12.11 if「Bookがない時」とかアホな書き方してました、しーません←
2023.6.16 17:30更新〈続報〉どうやらハンドラエラーが出るのは、afterExport, beforeExportとテキストコピー(書き出し)に付随する仕様(バグ?)の模様(あるふぁ(仮)様談)
前項の後、「そうかPDF書き出しもあると便利だな」と気付きまして。
ついでに自分が引っ掛かりやすい設定(見開き指定&ページ情報)を追加しました。
「見開き」指定はまあ、アイコンを見れば分かるっちゃ分かるんですが一応。
PDF「ページ情報」は、ダブルトンボ内に出力されるので運用上問題はありませんが、PDF Merge(差分チェック)の際に邪魔なのですよ。
「印刷可能領域を含む」、これはドキュメントに埋め込みたい時とそうでない時とあり微妙なため、先頭に//を付けて一旦保留状態になっています。
プリント版
2023.6.9更新 諸事情によりプリントとPDF書き出しは分けて作成。
ブック書き出し時「このイベントハンドラーを無効にしますか?」メッセージが出たら、「いいえ」でそのまま進んで下さい。但しその際スクリプト内容は実行されません。つまりブックは非対応。
//DESCRIPTION:プリント後に部数・ページ数・見開き・Page情報をリセット(らーで閣下)
#targetengine "EventListener_afterPrint_2023"
(function(){
app.addEventListener("afterPrint", function(){
var myDoc = app.activeDocument;
if(myDoc == null)
{ return; }
else
{
myDoc.printPreferences.copies = 1; //部数 1
myDoc.printPreferences.printSpreads = false; //見開き OFF
//myDoc.printPreferences.pageInformationMarks = false; //ページ情報 OFF
//myDoc.printPreferences.includeSlugToPrint = false; //印刷可能領域を含む OFF
}
if(myDoc !== null)
{
myDoc.printPreferences.pageRange = 1886547553; //出力ページ ALL_PAGES
}
}); // イベントハンドラ終了
})();
PDF書き出し
PDF版には一部問題があるため、プリント版と別にしました
2023.6.26 13:50更新 テキストコピー実行時にafterExport, beforeExportが実行されるInDesign ESTK仕様上の問題?のため、PDF版は運用するとハンドラエラーが出ます
これが出た場合、「いいえ」を選んで取り敢えず進んでも運用上問題はありませんが、スクリプトの内容は実行されません。またページ数多めのブックで実行時は、応答が帰らず固まってしまう場合があります。
//DESCRIPTION:PDF書き出し後に部数・ページ数・見開き・Page情報をリセット(らーで閣下)
#targetengine "EventListener_afterExport_2023"
// PDF書き出し//////////////////////////////////////////////
(function(){
app.addEventListener("afterExport", function(){
if(app.activeDocument == null)
{ return; }
else
{
app.pdfExportPreferences.exportReaderSpreads = false; //見開き OFF
app.pdfExportPreferences.pageInformationMarks = false; //ページ情報 OFF
//app.pdfExportPreferences.includeSlugToPrint = false; //印刷可能領域を含む OFF
app.pdfExportPreferences.pageRange = 1886547553; //出力ページ ALL_PAGES
}
}); // イベントハンドラ終了
})();
/*
ALL_PAGES 1886547553(全ページ)
SELECTED_ITEMS 1886547571(現在のページ)
PageRange,(文字列値)
*/
このハンドラエラーを回避するにはmenuActionからのinvokeに書き換える必要があるそうですが、また後日に。try catchが上手く書けんかった← ブック対応はどう書けばいいんでしょうね。
前項同様、複数バージョン同時起動時に対象が混同するのを防ぐため、#target名後ろの西暦数字(2023)をInDesignバージョン毎に変えてあげて下さい。
他に追加したい設定がある方は、こちらお~まち大先生のMODEL図から「PrintPreference」「PDFExportPreference」で拾っておくんなまし。
お~まち先生に足を向けて寝られません
【InDesign】【スクリプト】プリント後、ページ指定を「全て」に戻すイベント
続編あり。
味ぼん先生の呟きから気付いて作りました、InDesign イベントリスナー。 Adobeソフトは印刷の前回設定が次にも残るのが仕様ですが、プリントページ指定は大体頭から抜けていて毎回臍を噛みます。みんなもそうだよね!(?)
味「ドキュメント開いたときにプリント設定初期化するハンドラ入れる?」
そうだよね。なんで今まで気付かなかったんだろう そういうもんよ
そいでは。
翌日気付いたんですが、これブックを出力する際「ページ数」でエラーが出る(筈)。
後日、エラー設定を追加しておきますね すぐやらんのかい
2023.6.2 14:30 修正版
//DESCRIPTION:プリントページ指定を、プリント後「全ページ」に戻すイベント(らーで閣下)
#targetengine "EventListener_afterPrint_2023"
(function(){
app.addEventListener("afterPrint", function(){
if(app.activeDocument == null)
{ return; }
else
{
app.activeDocument.printPreferences.pageRange = 1886547553;
}
}); // イベントハンドラ終了
})();
/*
ALL_PAGES 1886547553
prna 全ページ
SELECTED_ITEMS 1886547571
prns Export selected items in the document.
*/
「ドキュメントを開いた時」ではなく、プリントウインドウが閉じられた後に発動します。
targetengine名の後ろに「2023」とあるのは、複数バージョン同時起動時に混同するのを防ぐ、#target名を一意にするためです。InDesignバージョン毎にここを変えてあげて下さい。
Startup Scriptsに入れて頂くと、InDesign起動時に常時イベントなります。
そんじゃあね。
あれ、ちょっと待て、動作確認してないぞww ←
2023.6.2 14:30 InDesign起動時に既にドキュメントが開いてないとエラーが出る凡ミスを修正
続編
に続く。
【InDesign】【スクリプト】0.13mm(小数点)罫線を探せない ※解決済み
日本のDTP業界では罫線として引く最細の実線、いわゆる「オモテケイ」は0.1~0.13mm辺りとされています。
まず
alert (app.selection[0].strokeWeight);
呼び出しでは、どの線太も問題なく正しいstrokeWeight(環境設定単位:mm)を返します。
しかし、同じ罫線でこの書き方の場合
if (app.selection[0].strokeWeight == 0.12) //選択オブジェクトの線太が0.12mmであれば
{ alert ("true"); } //0.12mmだよ
else
{ alert ("false"); } //そうじゃない
falseを返します。なんでやねん。
因みに 0.1mm=false 0.12mm=false 0.13mm=true 0.14mm=true など、挙動がまちまちです。
この疑問を、去る2021.2.20のDTPerのスクリプトもくもく会#21に持ち込んだところ、主催Uske_Sさん及びこうちゃんが
JavaScriptの浮動小数点(float)いわゆる「mm→point→mmの丸め問題」であろうと。
そうだ、すっかり忘れていましたよ…mmにはそういう問題があったのだ。暫く遭遇しないとうっかりしてしまいます。というわけで、状況や用途に応じ解決策を3点提示して戴きました。
ExtendScript:等価演算子で小数がtrueにならない
このうち自分の業務に適していたのは、グローバルメソッドparseInt()(一旦100を掛けて整数にする)であろうと思われ、以下の様に作成しました。
//DESCRIPTION:選択中から0.1mmベタk100直線のみ削除(らーで閣下)
app.doScript (main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
function main()
{
var myDoc = app.activeDocument;
var mySel = myDoc.selection;
if(mySel == null)
{ alert("何も選択されていません"); exit(); }
else
{
for(i=mySel.length-1; i>=0; i--)
if((mySel[i].constructor.name === "GraphicLine") && (mySel[i].strokeColor.name === "Black") && (mySel[i].strokeType.name === "ベタ"))
// fillColor.nameは取り敢えず無視
{
if(parseInt(mySel[i].strokeWeight*100, 10) === 10) // 0.10mmなら10
{ mySel[i].remove(); }
else
{ continue; }
}
}
}
TextFrameやRectangle、Imageなど同時に選択していても、指定の罫線のみ削除します。
最後に、せっかくご指南頂いてるのに発表遅くて済みません(涙)運用はずっと前からやってます
秀丸エディタでJedit「複数一括置換」を再現 ※マクロ
秀丸はいいぞ
突然ですみません(
世の中を検索するとエディターは「VS Code! 時代はVS Code!!」「WEB屋ならAtom」「Vim VS Emacs」「漢は黙ってサクラエディタ」辺りしか出てきません。
しかしこちとら、DTP日本語メイン。初期状態では日本語の禁則処理すら覚束無いエディターなんぞに、用はない! 暴言 ※サクラエディタは別です
みんな大好きJeditが身に染みついているMac DTPerな皆様が、Windowsに移行する際に障壁となるのが「複数一括置換(正規表現)」。だが、忘れていないだろうか。「お前の不満など、先人がとうに解決済みだ」。そう、ほぼそのままのマクロがちゃんとある。
変換リストによる連続置換マクロ (ListReplace.mac)
秀丸マクロ随一のプロフェッショナルといっても過言ではない、おなじみ山紫水明さんです。
ただ例によって作者さん説明が初心者向けでない()ため、今回スクショ付きでご説明。
本当は秀丸の必須設定とかモジュールとか先に説明したいところですが、これが膨大な質量でなかなか厳しくて…
マクロのインストール
田楽(でんがく)DLL(マクロ用UIモジュール)必須です!ダウンロード及びインストール・登録は後日出来だら書きます(酷い)←後で思い出した
- 上記リンクからzipをダウンロード、ListReplace.macをできれば親フォルダーごとマクロフォルダーへ。
- (メニュー)マクロ→ マクロ登録→ 対象(エリア)選択・空いている場所を選択しファイルを登録・任意タイトルとグループ(対象)名を付けて完了。※対象1~10はマクロのトップメニュー用
マクロ登録数が80に限られるのが、秀丸最大の弱点だと思う
実行
例題。
置換例。「木曽路は」と「すべて」を入れ替え、前後のスペースを削除
上記を、マクロから実行してみる
- トップ画面→ 変換小リストの作成
- ここで残念仕様、このウィンドウではこれ以上の長文を受け付けません(UIの長さに比例?)。一旦「名前を付けて保存」後、デスクトップ上でテキストデータを編集します。
「パラーメータ」はr(正規表現)のみ推奨(c=大文字小文字を区別 を入れると、何故か日本語置換できなくなりました)
- 名前をつけて*.txt保存。エンコードとBOMは何でも良さそう。
- デスクトップ上からこのリスト.txtを開き、書き足して上書き保存。複数作るには改行で区切り、最終行の改行はあってもなくても可。
- 改めてListReplace上で、編集したリストが選択されていることを確認した上で「置換実行」
- 実行プレビューが見え、confirmメニューが表示→ OKなら「このまま確定する」
2)でリスト数を無限?に増やせますが、モニターからはみ出て触れなくなるので、4)5)の編集で増やす方が楽。※次回利用時は、デフォルト値20に戻ります
因みに置換グルーピングは秀丸固有の\fも可能、7つ以内の制限付き。(丸パーレンは確か10)
これだけ賛美しておいて言うのも何ですが
パラメータ「大文字小文字を区別する」がアカンのって、結構最悪では?← 私は同時に他の関数も入れてマクロを自作する事が殆どなため、実はこれを使う事は殆どありません… 更に何てことを←
秀丸のマクロの良いところは独自文法が激簡単なことですが、サクラエディタも比較的簡単な上無料ですし、さほど多機能を求めないならそちらを選ぶのもアリでしょう(何故最後にそんな事を)
※最近は秀丸もさくらエディタも、Windows素のままでJavaScriptを挿入できるそうです。
テキストを選択順に書き出し【InDesign】EDICOLOR機能を再現(5)
InDesignのテキスト書き出しは、基本ストーリー単位・1つずつしかできません。
一括書き出しはスクリプトで可能ですが、単純に抜き出すとページも順序もバラバラ(※story ID順)、出したくないマスターやレイヤー上も対象、またページを跨ぐストーリーをは分断され、何故か他のストーリーと繋がってしま(った記憶)うなどそのままでは不都合だらけなのです。
以下、確かいき親分作(ネタ元は確かBBS)
flag = confirm("ドキュメント全テキストを順不同でUTF-8書き出し\r\r※欄外の不要テキストフレームは削除しておいて下さい¥r※色々ゴミが付くので、必ずエディタで後処理を。");
if (flag == true){
var myObj = new File ("~/Desktop/_export.txt");
var flagA = myObj.open ("w");
myObj.encoding="UTF-8"; //エンコードは必ず付けよう
if (flagA == true){
var mytext = app.documents[0].stories.everyItem().contents;
myObj.writeln (mytext);
myObj.close();
}else{
alert ("書き込むためのファイルが開けません");
}
alert ("書き出しました");
}else{
alert("処理を中止しました");
}
InDesignサンプルスクリプトExportAllStories.jsxを使えばストーリー切断は解消できますが、非出力レイヤーの制御やストーリー順の問題は解決できず、更にエンコーディングは前回利用時に依存し、コントロールができません。
というわけで、以下。ページ内に沢山のストーリーがある物、例えば漫画フキダシ等の書き出しに便利です。
InDesignCS5から選択順の認識が可能になり、実現できました(つまりCS4以下は不可)。
2013年頃原型を鯵ぼんさんに作って頂き、長らく自分だけで便利に使っていました。しかし検索すると解決できてる所は意外と見つけられず、これは需要があるのか?と考え、世のため多少のブラシュアップを加え公開する事に。こういうの幾つかあるんですよね… 自分で使っているものを公開しようという発想がありませんでした←
選択フレームのContentsをforと+=で変数の後ろに加算していき、新規作成するInDesignドキュメントのテキストフレームに配置。更にInDesignで新規*.txtを作成保存し、それに先のInDesignドキュメントの内容を書き込む。基本的には最初のいき親分の進化系ですね。
それに最低限の記号類の整理(検索と置換)と、テキストフレーム以外を選択した時のエラー処理を追加しました。普段は検索置換をもっと増やして、親フォルダ名を追加したりしています。
改行がバラバラなのは勘弁してね(
確実に選択したか認識するために、こちら選択数を表示パレットを併用下さい。
表組みとインラインは… まず中へ潜りContents取得、行列数やインラインの場所・位置を記録してその位置へペースト…などかなり面倒で← 表テキスト保存はセルID順にひたすらタブで繋げられ、素では行で折り返されないのです。そういうトコが、腕の見せ所だろうに
因みにサンプルスクリプトExportAllStories.jsxは、不要レイヤーの削除とドキュメントの見開き保存、からのPDF Exportなどを書き足し、顧客への納品に使ったりしています。 余談ですが、私は前処理としてグループを解除する場合に、あるふぁ(仮)さんによる「入れ子のないグループ」の下に、改めてグループ解除を付け足して運用しています。
テキストを選択順に書き出し
//DESCRIPTION:テキストフレームを選択順に書き出し(らーで閣下)
//インラインやミッシンググリフ、インデント分割系の処理だけは入れた
var mySel = app.selection;
if (mySel.length < 1)
{ alert ("何も選択されていません"); exit(); }
else {
//activeDocumentのテキストを整形 ////////////////////////////////////////////////////////
//文字列を16進数にエスケープして、「\x{hex}」という形で返す。
function my_escape(str) {
tmp_str = escape(str);
return tmp_str.replace(/\%u([0-9A-F]+)/i, "\\x{$1}")
}
//正規表現検索でカタカナを16進に変換--------------------------------------
function katakana2hex() {
var find_str = app.findGrepPreferences.findWhat;
while (/([ァ-ヴ])/.exec(find_str)) {
find_str = find_str.replace(/([ァ-ヴ])/, my_escape(RegExp.$1));
}
app.findGrepPreferences.findWhat = find_str;//検索文字の設定
}
//実行:その1(Grep)--------------------------------------------------------------
function my_RegexFindChange(my_range, my_find, my_change) {
//検索の初期化
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
//検索オプション
app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
app.findChangeGrepOptions.includeLockedStoriesForFind = true;//ロックされたストーリーを含めるかどうか
app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
app.findChangeGrepOptions.includeMasterPages = true;//マスターページを含めるかどうか
app.findChangeGrepOptions.includeFootnotes = true;//脚注を含めるかどうか
app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
app.findGrepPreferences.properties = my_find;//検索の設定
app.changeGrepPreferences.properties = my_change;//置換の設定
my_range.changeGrep(); //検索置換を実行
}
var my_doc = app.documents[0]; //範囲
var my_find_obj = {findWhat:"[\uFFFC\uFFFD\u001A]"};
//replacmentObject(インライン)・replacmentCharacter(置き換えられた文字)・substitute(ミッシンググリフ等)
var my_change_obj = {changeTo:"〓"};
my_RegexFindChange(my_doc, my_find_obj, my_change_obj);
//実行:その2(Grep)--------------------------------------------------------------
function my_RegexFindChange(my_range, my_find, my_change) {
//検索の初期化
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.properties = my_find;//検索の設定
app.changeGrepPreferences.properties = my_change;//置換の設定
my_range.changeGrep(); //検索置換を実行
}
var my_doc = app.documents[0]; //範囲
var my_find_obj = {findWhat:"[\u2011\u0007\u0008\u000A\u000B\u0003\u200C\u00A0\u202F\u2008\u2007\u2028\u2029\u2001\u200B\u0019\u00A7]"};
//分散禁止ハイフン・ここまでインデント・右インデントタブ・LF・垂直タブ・先頭文字スタイルの終了(EOT)・結合なし・分散禁止スペース・分散禁止スペース固定幅・句読点等の間隔・数字の間隔・行区切り文字・段落区切り文字・フラッシュスペース・任意の改行(強制改行)・セクションマーカー・セクション記号
var my_change_obj = {changeTo:""};
my_RegexFindChange(my_doc, my_find_obj, my_change_obj);
//検索置換の終了 ///////////////////////////////////////////////////////////////////////////////////////////
//main ////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (i=0; i<mySel.length; i++)
if (mySel[i].constructor.name != "TextFrame")
{
alert ("テキストフレーム以外を選択しています(グループも不可)\r\r処理を中断します");
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
var rvt = app.documents[0].revert();
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
exit(); }
else
{
var myContents = "";
for (j=0; j<mySel.length; j++)
{
myContents += mySel[j].parentStory.contents; //(+=)加算
if (j<mySel.length -1)
myContents = myContents + "\r\r"; //フレーム間を改行で区切る
}
}
//New Documentを作成・myContentsを書き込んで*.txt保存---------------------
myFolder = new Folder("~/Desktop" + "/" + "myText" );
myFolder.create();
var newDoc = app.documents.add();
var tf = newDoc.textFrames.add();
tf.contents = myContents;
var fileList = myFolder.getFiles(); //doc名に連番を振る為のList
var myFileList = fileList.length;
var myFile = new File(myFolder + "/" + "0" + (myFileList+1) + ".txt");
myFile.open("w");
myFile.encoding="UTF-16"; //UTF-8
//myFile.lineFeed = "windows"; //macintosh
myFile.write(myContents); //*.txtにmyContentsを書き込む
app.documents[0].close(SaveOptions.no); //用済みnewDocを保存せず閉じる
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//処理前=最後の上書きまで復帰(確認アラートを出さない)
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
var rvt = app.documents[0].revert();
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
alert ("デスクトップの「myText」フォルダーに保存しました");
}
// 入れ子グループをまとめる-------------------------------------------
app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.FAST_ENTIRE_SCRIPT);
function main(){
var myDocu=app.activeDocument;
var Sel=myDocu.selection;
if (Sel.length==1 && Sel[0].constructor.name=="Group"){
IrekoGroupKaijo(Sel[0]);
} else if (Sel.length>1) {
SelGroup=myDocu.groups.add(Sel);
IrekoGroupKaijo(SelGroup);
SelGroup.select();
}
}
function IrekoGroupKaijo(GObj){
while(GObj.groups.length>0){
//グループを破壊するのでダルマ落とし的に次のグループがgroups[0]に
GObj.groups[0].ungroup();
}
}
//-----------------------------------------------------------------------
var myDoc = app.activeDocument;
var mySel = myDoc.selection;
//myDoc.preferences.GeneralPreference. //環境設定→ 一般 → オブジェクトの編集→ロックされたオブジェクトの選択を防ぐ = false
for (i=0; i<mySel.length; i++){
if (mySel[i].constructor.name == "Group")
mySel[i].ungroup();
}
【InDesign】左右向き二等辺三角形を一発で作る
新聞向き小ネタ。
こういう表現って、新聞ではよくありました。※最近は減りました
これ、基本機能だけでは手順が
三角形作成→ (反)時計回り 2ステップあるのと、最初の一発で適正サイズに決められないのがもどかしく。回転させると縦横の概念逆転しちゃうしね。
なので、一発小ネタスクリプトにしました。というか最初に小難しい手順で考えていたのを、Uske_Sさんten_Aさんが「簡単に解釈したらいいんだよ」と教えてくれました ←アホね
任意サイズの新規矩形を作り、選択しておいて下さい。
//DESCRIPTION:選択した矩形サイズで【左右向き】二等辺三角形を作成
// 任意サイズの新規矩形を作り、選択しておいて下さい。
var myDoc = app.activeDocument;
var mySel = myDoc.selection[0];
app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
function Main()
{
var myPath = mySel.paths[0];
// 左向き
var pathA = (mySel.geometricBounds[2] - mySel.geometricBounds[0]) /2;
myPath.pathPoints[1].remove();
myPath.pathPoints[0].anchor = [myPath.pathPoints[0].anchor[0], myPath.pathPoints[1].anchor[1] - pathA];
/* 右向き
var pathA = (mySel.geometricBounds[2] - mySel.geometricBounds[0]) /2; // y2-y1 /2
myPath.pathPoints[3].remove();
myPath.pathPoints[2].anchor = [myPath.pathPoints[2].anchor[0], myPath.pathPoints[2].anchor[1] - pathA];
*/
}
あ、エラー処理入れてないね(まあいいか)
これ、最後の
myPath.pathPoints[].anchor = ~~~
の行がなければ二等辺三角形を作れるわけですが そこはまあ、各自別個に作って下さい(面倒)←