ラベル Illustrator の投稿を表示しています。 すべての投稿を表示
ラベル Illustrator の投稿を表示しています。 すべての投稿を表示

水曜日, 8月 26, 2026

JavaScriptでAI遊び 105 
Illustratorで選択したオブジェクトのタック値を確認(グラデーション対応)


Illustratorで選択したオブジェクトのユーザー指定のタック値を確認します。グラデーションに対応。

JavaScriptでAI遊び 104 <br>Illustratorで選択したオブジェクトのタック値を確認 2026/08/17

// 選択オブジェクトからCMYK合計値(TAC)が指定値以上のものだけを選択

if (app.documents.length == 0) {
alert("ドキュメントを開いてください。");
} else {

var doc = app.activeDocument;

if (doc.documentColorSpace != DocumentColorSpace.CMYK) {
alert("CMYKドキュメントのみ対応です。");
} else {

var limit = Number(prompt("CMYK合計値(%)以上を選択", "300"));

if (!isNaN(limit)) {

var sel = doc.selection;

if (sel.length == 0) {
alert("オブジェクトを選択してください。");
} else {

var keep = [];

for (var i = 0; i < sel.length; i++) {
if (checkItem(sel[i], limit)) {
keep.push(sel[i]);
}
}

doc.selection = null;

for (var i = 0; i < keep.length; i++) {
keep[i].selected = true;
}

alert(keep.length + " 個選択しました。");
}
}
}
}

function checkItem(item, limit) {

switch (item.typename) {

case "GroupItem":
for (var i = 0; i < item.pageItems.length; i++) {
if (checkItem(item.pageItems[i], limit)) return true;
}
return false;

case "CompoundPathItem":
for (var i = 0; i < item.pathItems.length; i++) {
if (checkItem(item.pathItems[i], limit)) return true;
}
return false;

case "PathItem":

if (item.filled && checkColor(item.fillColor, limit))
return true;

if (item.stroked && checkColor(item.strokeColor, limit))
return true;

return false;

default:
return false;
}
}

function checkColor(col, limit) {

// 通常のCMYKカラー
if (col.typename == "CMYKColor") {
return (
col.cyan +
col.magenta +
col.yellow +
col.black
) >= limit;
}

// グラデーション
if (col.typename == "GradientColor") {

var stops = col.gradient.gradientStops;

for (var i = 0; i < stops.length; i++) {

var c = stops[i].color;

if (c.typename == "CMYKColor") {

var total =
c.cyan +
c.magenta +
c.yellow +
c.black;

if (total >= limit)
return true;
}
}
}

return false;
}
チェックしたいオブジェクトを選択して実行すると・・・


CMYKの合計値を求めてくるので適宜入力して実行すれば・・・


 
直ぐに該当データを選出します。

こんな感じです。

※Illustratorのアップデートで不具合が出る場合があります。気がついた時点でデバッグするように心がけていますが、すぐに対応できないのでご容赦ください。

土曜日, 8月 22, 2026

Illustratorでの作図基本 43 
正方形と菱形の関係もルート2

質問がありましたので・・・
正方形と菱形の関係もルート2で解決です。

例えば、こんな作図をしたい時・・・

外側の正方形の50%縮小したものを作成し、両方を選択してブレンドを作成すると75%の中間図形が生成されます。

これを90度回転すると、先端は飛び出てしまいます。

これは正方形とその対角線の関係を理解する必要があります。つまり、100%と5%の正方形の中間的正方形は100%の正方形の1辺の長さにルート2をかけた値になります。

ただしIllustratorでははずうが出る場合に正確さを確保できないので、適当な矩形を作成し・・・

100%のベースとなる正方形の編を[オブジェクト]>[パス]>[アンカーポイントの追加]をしてから、ダイレクト選択ツールで任意s区政した矩形のポイントをスナップさせます。

これでベースの正方形に内接する90度回転した正方形を得ることができます。

ここで全体を選択して、50%の縮小コピーを作成し・・・

重ねます。

さらに全体を選択して、50%の縮小コピーを作成し

重ねれば完成です。

木曜日, 8月 20, 2026

JavaScriptでAI遊び 104 
Illustratorで選択したオブジェクトのタック値を確認

Illustratorで選択したオブジェクトのユーザー指定のタック値を確認します。塗りと線に対応。

// 選択オブジェクトからCMYK合計値(TAC)が指定値以上のものだけを選択

if (app.documents.length == 0) {
alert("ドキュメントを開いてください。");
} else {

var doc = app.activeDocument;

if (doc.documentColorSpace != DocumentColorSpace.CMYK) {
alert("CMYKドキュメントのみ対応です。");
} else {

var limit = Number(prompt("CMYK合計値(%)以上を選択", "300"));

if (!isNaN(limit)) {

var sel = doc.selection;

if (sel.length == 0) {
alert("オブジェクトを選択してください。");
} else {

var keep = [];

for (var i = 0; i < sel.length; i++) {
if (checkItem(sel[i], limit)) {
keep.push(sel[i]);
}
}

doc.selection = null;

for (var i = 0; i < keep.length; i++) {
keep[i].selected = true;
}

alert(keep.length + " 個選択しました。");
}
}
}
}

function checkItem(item, limit) {

switch (item.typename) {

case "GroupItem":
for (var i = 0; i < item.pageItems.length; i++) {
if (checkItem(item.pageItems[i], limit)) return true;
}
return false;

case "CompoundPathItem":
for (var i = 0; i < item.pathItems.length; i++) {
if (checkItem(item.pathItems[i], limit)) return true;
}
return false;

case "PathItem":

if (item.filled && checkColor(item.fillColor, limit))
return true;

if (item.stroked && checkColor(item.strokeColor, limit))
return true;

return false;

default:
return false;
}
}

function checkColor(col, limit) {

if (col.typename != "CMYKColor")
return false;

var total =
col.cyan +
col.magenta +
col.yellow +
col.black;

return total >= limit;
}
チェックしたいオブジェクトを選択して実行すると・・・

CMYKの合計値を求めてくるので適宜入力して実行すれば・・・

直ぐに該当データを選出します。

こんな感じです。

※Illustratorのアップデートで不具合が出る場合があります。気がついた時点でデバッグするように心がけていますが、すぐに対応できないのでご容赦ください。

日曜日, 8月 16, 2026

Illustratorの整列パレットを改めて整理

Illustratorの整列パレットを改めて整理してみました。解りにくいのは[エリア内文字]or[ポイント文字]の設定ですね。

個人的には整列ツールで[アートボードに整列]は使ったことないです。

文字ツールで適宜改行しながら入力し、最終行に空の行がある状態。
両方を選択し[選択範囲に整列]。

・エリア内文字、ポイント文字共に:OFF
・エリア内文字:ON

・エリア内文字、ポイント文字共に:ON
・ポイント文字:ON

両方を選択し続けて矩形を選択しキーオブジェクトに指定し[キーオブジェクトに整列]。

・エリア内文字、ポイント文字共に:OFF
・エリア内文字:ON

・エリア内文字、ポイント文字共に:ON
・ポイント文字:ON

エリア内文字ツールで任意ボックスを作成・入力し、最終行に空の行がある状態。
両方を選択し[選択範囲に整列]。

・エリア内文字、ポイント文字共に:OFF
・ポイント文字:ON

・エリア内文字、ポイント文字共に:ON
・エリア内文字:ON

両方を選択し続けて矩形を選択しキーオブジェクトに指定し[キーオブジェクトに整列]。

・エリア内文字、ポイント文字共に:OFF
・ポイント文字:ON

・エリア内文字、ポイント文字共に:ON
・エリア内文字:ON

とりあえず[エリア内文字]or[ポイント文字]は両方とも設定しておけばOKでした。いちいち切り替えるのは面倒ですからね。

水曜日, 8月 12, 2026

JavaScriptでAI遊び 103 
Illustratorで選択したオブジェクト線幅を指定範囲でランダム設定

選択したオブジェクトの線幅を指定範囲でランダムに設定します。予め全体を任意の線幅に設定しておきます。

// 選択オブジェクトの線幅をランダムに設定

if (app.documents.length === 0) {
alert("ドキュメントを開いてください。");
} else if (app.activeDocument.selection.length === 0) {
alert("オブジェクトを選択してください。");
} else {

var min = Number(prompt("最小線幅(pt)", "0.5"));
var max = Number(prompt("最大線幅(pt)", "5"));

if (isNaN(min) || isNaN(max) || min > max) {
alert("数値を正しく入力してください。");
} else {

var sel = app.activeDocument.selection;

for (var i = 0; i < sel.length; i++) {
setStrokeRandom(sel[i], min, max);
}

alert("完了しました。");
}
}

function setStrokeRandom(obj, min, max) {

switch (obj.typename) {

case "PathItem":
if (obj.stroked) {
obj.strokeWidth = random(min, max);
}
break;

case "CompoundPathItem":
for (var i = 0; i < obj.pathItems.length; i++) {
if (obj.pathItems[i].stroked) {
obj.pathItems[i].strokeWidth = random(min, max);
}
}
break;

case "GroupItem":
for (var j = 0; j < obj.pageItems.length; j++) {
setStrokeRandom(obj.pageItems[j], min, max);
}
break;
}
}

function random(min, max) {
return min + Math.random() * (max - min);
}

ここでは全体を1ptに設定して実行すると・・・

最小線幅を設定し・・・

続けて最大線幅を設定すれば・・・


直ぐに完了します。

処理結果はこんな感じです。

※Illustratorのアップデートで不具合が出る場合があります。気がついた時点でデバッグするように心がけていますが、すぐに対応できないのでご容赦ください。

日曜日, 8月 09, 2026

FreeCAD Modeling 12 
Illustratorデータを回転体に活用

FreeCADで回転体を作成する場合、利便性の高いIllustratorでベースデータを作成して活用する手順を整理しました。

Illustratorで作図した回転体のパスを太らせてから[オブジェクト]>[パス]>[パスの吾アウトライン]してから、SVG形式で書き出しました。

FreeCADのインポートでIllustratorから書き出したSVGファイルを指定します。

読み込まれた直後の状態。このままでも問題ありませんが、ここではZ軸で回転させることにしたので・・・

選択してから右クリックで[変換]を選び・・・

90度回転させます。

ここで画面上のワークベンチ切り替えを [Draft] に変更し・・・

形状のパス[Path]を選択してから・・・

メニューの [変更]>[アップグレード]をクリックし・・・

ワークベンチを[Part] に切り替え・・・

メニューの [Part]>[回転] をクリックし、回転軸を[1]、角度を360とすれば・・・

完成です。

FreeCAD 1.1.1 arm64