【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など同時に選択していても、指定の罫線のみ削除します。
最後に、せっかくご指南頂いてるのに発表遅くて済みません(涙)運用はずっと前からやってます