●Photoshop自動保存スクリプト
|
2010年7月 8日
|
twitterでイラストレーターのCHOCO先生がAutomatorを使って
作業中ファイルの自動保存を作っているとの書き込みをみて
こういうやり方もありますよー的にAppleScriptを書いてメッセージを送ってみた
(Automator:MacOS上でパーツの組み合わせで自動処理をする環境)
(AppleScript:MacOSのソフトを制御できるプログラミング環境Automatorより前からあってより細かい処理が可能)
他の人も使えるでしょうし
少し調整して公開
#保存用フォルダの作成
#あらかじめ保存フォルダを作ってある場合この下4行は必要ありません
tell application "Finder"
if "autsave" is not in name of every folder of desktop then
make folder at desktop with properties {name:"autsave"}
end if
end tel
#自動保存の常駐ループ
on idle try
#保存フォルダの指定 必要に応じて""の中を書き換えてください
set save_dir to "~/Desktop/autsave/"
tell application "Adobe Photoshop CS3"
#作業中のドキュメントのファイル名を取得 set doc_name to name of current document as string
set sevepath to save_dir & doc_name
save current document in file sevepath as Photoshop format with copying #保存
end tell
return 600 #繰り替えす秒数
on error
display dialog "保存に失敗しました"
end try
end idle
Photoshopで最前面の書類の複製を自動保存するようにしてあります
AppleScriptエディッタ(leopard以前ではスクリプトエディッタ)にこちらをコピペしてください
保存時に
フォーマット:アプリケーション
『実行後自動的に終了しない』をチェックすると常駐アプリになります
CS3以外のバーション利用の場合は初回起動時にPhotoshopを指定してださいと ダイアログが出るかもしれません
Photoshop自動保存スクリプトへのコメント (0)
|
●SketchUpのシーンをComicStudioに1.3
|
2010年5月 9日
|
先日公開した SketchUpのシーンをComicStudioに のプラグインですが windows版のComicStudio/iIIustStudioで読み込みに問題があった等 いくつかのバグがあったので修正しました.
加えてコンポーネントの対応を加えたので Google3Dギャラリーの形状も利用できるようになりました
export_csd_1_3
ちなみにGoogle3Dギャラリーに登録されてる形状の権利関係はこういった感じ 日本の国内法でどこまで有効か微妙な部分もあるけど ユーザーの権利の部分を読む限り Google 3D ギャラリーにUPされた時点でアップロード者が派生物の作成を許諾したことになるようです つまり 3Dギャラリーから落としたものを下絵にするのは問題なさそうです
SketchUpのシーンをComicStudioに1.3へのコメント (3)
|
●SketchUpのシーンをComicStudioに
|
2010年4月30日
|
以前の記事で
スケッチアップのカメラ設定のみを書き出すプラグインを公開していましたが
同時に3D形状も書き出すものを作成しました
export_csd1_2.rbs
(いくつかの致命的なバグがあったので修正しましたくわしくはこちら)
ダウンロードしたファイルを
Windows の場合:C:/Program Files/Google/Google SketchUp 7/Plugins
MacOSXの場合:起動ドライブの/ライブラリ/Application Support/Google SketchUp 7/SketchUp/Plugins
にコピーして SketchUpを再起動すれば
『プラグイン』メニューに『ComicStudioデータ書き出し』という項目が追加されます
作成される拡張子.csdのファイルをコミックスタジオ/イラストスタジオで読み込んでください
(同時に生成される拡張子.objのファイルは3D形状のデータです)

- スケッチアップのカメラ設定をコミックスタジオに書き出し
- Wavefront Object形式で3D立体形状を書き出し
- スケッチアップで非表示の形状を出力しない
- スケッチアップの線形状を立体化することで書き出し
といった機能を備えています
穴空けやコンポーネントには対応していない等一部不備がありますが
(1.4で対応しました)
線の書き出しは単純ながら作画のアタリには使えるかと思います
どうぞお試しください
SketchUpのシーンをComicStudioにへのコメント (0)
|
●ランダム生成した頂点を結んで三角ポリゴンに
|
2010年4月 7日
|
後々のために計算で生成した頂点座標から
三角ポリゴンで分割した形状を作るためのテストプログラムを書き捨て
#ランダム生成した頂点を結んで三角ポリゴンに
import random #ランダム生成のモジュール
import math
#交差判定
def closs_line(pos_1_1, pos_1_2, pos_2_1, pos_2_2):
#交差を判定するベクトルを求める
vec_0 = [pos_1_2[0] - pos_1_1[0], pos_1_2[1] - pos_1_1[1]]
vec_1 = [pos_2_1[0] - pos_1_1[0], pos_2_1[1] - pos_1_1[1]]
vec_2 = [pos_2_2[0] - pos_1_1[0], pos_2_2[1] - pos_1_1[1]]
#外積計算
normal_1 = vec_0[0]* vec_1[1]-vec_0[1]* vec_1[0]
normal_2 = vec_0[0]* vec_2[1]-vec_0[1]* vec_2[0]
#法線の方向が異なる場合延長線とは交差している
if normal_1* normal_2 < 0:
vec_4 = [pos_2_2[0] - pos_2_1[0], pos_2_2[1] - pos_2_1[1]]
vec_5 = [pos_1_1[0] - pos_2_1[0], pos_1_1[1] - pos_2_1[1]]
vec_6 = [pos_1_2[0] - pos_2_1[0], pos_1_2[1] - pos_2_1[1]]
#外積計算
normal_1 = vec_4[0]* vec_5[1]-vec_4[1]* vec_5[0]
normal_2 = vec_4[0]* vec_6[1]-vec_4[1]* vec_6[0]
if normal_1* normal_2 < 0:return 1
else:return 0
else:return 0
#点の座標を生成
vec2_point_list = []
for i in xrange(50):
pos_x = random.uniform(-100,100)
pos_y = random.uniform(-100,100)
vec2_point_list.append([pos_x, pos_y])
#print vec2_point_list
###稜線情報生成
##点列の頭から頂点同士の接続を調べる
edge_dic = {}#頂点番号:[接続先の頂点番号リスト] の辞書
for i in xrange(len(vec2_point_list)):
edge_i = []
pos_1_1 = vec2_point_list[i]#基準の頂点座標
#for j in xrange(i+1,len(vec2_point_list)):
for j in xrange(len(vec2_point_list)):
if i == j :continue
pos_1_2 = vec2_point_list[j]#接続確認先の頂点座標
#引く線分の長さ
length_1 = math.hypot(pos_1_2[0]- pos_1_1[0],pos_1_2[1]- pos_1_1[1])
closs_flag = 0
for k in xrange(i):
if closs_flag != 0 :continue
closs_list = []
edge_k_list = edge_dic[k]
edge_k_list2 = edge_k_list
pos_2_1 = vec2_point_list[k] #交差する線分の頂点1
for l in edge_k_list:
if l == i or l == j : continue
if l in closs_list: continue
pos_2_2 = vec2_point_list[l]#交差する線分の頂点2
#これまで生成された線分と新しく生成する線分の交差を判定
#交差した線がある場合 短い線を残し長い方の稜線を削除
closs = closs_line(pos_1_1, pos_1_2, pos_2_1, pos_2_2)
if closs == 1:
length_2 = math.hypot(pos_2_2[0]- pos_2_1[0],pos_2_2[1]- pos_2_1[1])
if length_1
closs_list.append(l)
#print "del: %i => %i(closs %i %i)" % (k,l,i,j)
else:closs_flag += 1
if closs_flag == 0:
#交差方向のエッジをリストから取り除く
for m in closs_list:edge_k_list2.remove(m)
edge_dic[k] = edge_k_list2
if closs_flag == 0:
edge_i.append(j)
edge_i = list(set(edge_i))
edge_dic[i] = edge_i
#Shadeのポリゴンメッシュ生成
xshade.scene().begin_creating()
xshade.scene().begin_polygon_mesh(None)
for i in vec2_point_list:
pos = [i[0], 0, i[1]]
xshade.scene().append_polygon_mesh_vertex(pos)
for i in xrange(len(edge_dic)):
if edge_dic[i]:
for j in edge_dic[i]:
xshade.scene().append_polygon_mesh_edge(i, j)
xshade.scene().end_polygon_mesh()
xshade.scene().end_creating()
ランダム生成した頂点を結んで三角ポリゴンにへのコメント (0)
|
●GoogleSketcUpのカメラ設定をComicStudioに
|
2010年3月29日
|
先日の日記で書いていた ComicStudioの3D設定ファイルの解析結果を元に
GoogleSketchUpのカメラ設定を
ComicStudioに読み込ませるためのプラグインを書いてみました
2日で書いた殴り書きの汚いスクリプトですが よろしければお使いください
10032801export_csd.lzh
ダウンロードしたファイルを解凍してできたexport_cs.rbを
Windows の場合:C:/Program Files/Google/Google SketchUp 7/Plugins
MacOSXの場合:起動ドライブの/ライブラリ/Application Support/Google SketchUp 7/SketchUp/Plugins
にコピーして SketchUpを再起動すれば
プラグインメニューにスクリプトが追加されるかと思います

左が元のSketchUp の画面右が書き出したデータを読み込ませたComicStudioの画面です
注意点としてはComicStudioのカメラの『距離』の設定はデフォルトのままなので
必要に応じて調整してください
また、CSDファイルはComicStudioの3D形状の読み込み状態を記録したファイルなので
3Dを読み込んだシーンに設定ファイルを読み込ませると カメラ以外は消えてしまいます
使う場合はCSDファイルを読み込んだ後 個別の3Dファイルを読み込むようにしてください
ちなみに3Dの形状は
こちらのサイトにあるlwo_exportを使って読み込ませました
プラグインの設定もlwo_exportの形状出力に合わせて調整してあります
今のところは 3D形状は別途読み込む必要がありますが
将来的には形状を親子関係を設定して一括して読み込めるようにする予定です
(必要な情報はそろってて半月もあれば作れるのですが
主にお財布的な事情で... ってなわけでカンパ歓迎です
三菱東京UFJ銀行 厚木支店(店番号707) 普通講座 4725509 口座名:ユキミツキ)
GoogleSketcUpのカメラ設定をComicStudioにへのコメント (0)
|
●Photoshop書捨てスクリプト
|
2010年2月13日
|
友人から画像に変更を加えずに解像度を変更して
途中に処理をはさむ方法を聞かれたので Photoshop-javascriptを書捨て
//画像の変更をせずに解像度の変更をするスクリプト
//今の画像の単位を記憶
ref_ruler = app.preferences.rulerUnits;
//画像の単位をピクセルに
app.preferences.rulerUnits =Units.PIXELS
//現在の画像サイズを記憶
ref_width = activeDocument.width;
ref_height = activeDocument.height;
ref_resolution = activeDocument.resolution;
//解像度の変更
activeDocument.resizeImage(ref_width ,ref_height,72);
//スタイルの適応
activeDocument.activeLayer.applyStyle("スタイル 1");
//解像度を戻す
activeDocument.resizeImage(ref_width ,ref_height,ref_resolution);
//画像の単位設定を戻す
app.preferences.rulerUnits = ref_ruler
別の人がtwitterで新規レイヤーを下に作るショートカットないかとつぶやいてたので
スクリプトでつくってみる
//新規レイヤーを現在のレイヤの下に
layer_ref = activeDocument.activeLayer;
//ダイアログの抑制背設定を記録
dialog_ref = displayDialogs;
//JavaScriptExecutionMode.NEVER
if ( layer_ref.isBackgroundLayer == 0){
try {
displayDialogs = DialogModes.ALL;
//レイヤ作成
new_layer = activeDocument.artLayers.add();
//選択されていたレイヤの下に移動
new_layer.move(layer_ref,ElementPlacement.PLACEAFTER );
}finally{
//ダイアログの抑制を戻す
displayDialogs = dialog_ref;
}
}
.jsまたは.jsxの拡張子でテキストファイルに保存して
ファイル>スクリプト>参照で指定すると実行できます
ファイル指定の行程をアクションで記録してファンクションキー割り当てれば
ボタン一発もいけるはず
2/15追記 名前設定する必要があるってことなのでダイアログを出すように変更
また『(Photoshopのあるフォルダ)/プリセット/スクリプト』に
他のプリセットスクリプトといっしょに収めて再起動すれば
標準機能と同じようにキーボードショートカットが割当可能なことが判明
Photoshop書捨てスクリプトへのコメント (0)
|
●LWOエクスポート/インポートスクリプト バージョンアップです
|
2009年12月29日
|
Shadeで.lwo(LightWave3D object file)をインポート/エクスポートするスクリプトをアップデートしました
Shade11への対応とUVの入出力に対応しました
通常Professionalでしか扱うことのできないlwoの形状データを扱うことができるようになります
Shade10/11のWidget形式となります
Shade10とShade11では別バイナリとなっています
ダウンロードしたファイルを解凍してできる
お使いのバージョンに合ったフォルダを開き
中にあるLWO_toolsフォルダごとShadeのWidgetsフォルダにコピーして
Shadeを再起動すれば利用可能になるかと思います
(詳しいインストール方法はShadeのマニュアルを参照してください)
http://artistside.com/?m=pc&a=page_fh_content&target_c_diary_id=15359
インポートは指定した形状のレイヤを一つのポリゴンメッシュとして作成
エクスポートはブラウザ上で選択した形状を選択形状毎に
ポリゴンメッシュに変換後それぞれをlwoとして出力します(複数形状可)
UVの入出力 テクスチャーの出力に対応しました
出力では距離UVのUV値と レイヤ1のテクスチャーデータをLWOに設定した状態で出力します
入力ではパラメタUVと距離UVの両方に同じUV値を設定します
テクスチャ出力の確認には(株)セルシスが販売しているComicStudioを利用しました
UV設定がされたポリゴンメッシュならばテクスチャー込みでコミスタ等に受け渡すことができるかと思います
LWOエクスポート/インポートスクリプト バージョンアップですへのコメント (0)
|
●書き捨てスクリプト メモ
|
|
shadeの自作スクリプトのバグチェックのための書き捨てスクリプトをメモ
ポリゴンメッシュのuv値を(面id,頂点id):uv値 と出力するスクリプト
shd_shape = xshade.scene().active_shape()
for i in range(shd_shape.number_of_faces):
vertex_id_list =shd_shape.face(i) .vertex_indices#面を構成する頂点のid
uv_list = shd_shape.face(i).parameter_uv#パラメターUVの値を距離UVに
for j in xrange(len(uv_list)):
print "(" + str(i) + "," + str(vertex_id_list[j])+ ")" + str(uv_list[j])
書き捨てスクリプト メモへのコメント (0)
|
●ShadeのUVをフォトショップの選択範囲に
|
2009年12月 1日
|
書捨て状態だったスクリプトを公開
MacOSXのShadeとPhotoshop環境以外では使いようがないけれど
何かの参考に
import sys
import commands
##ApleScript部分ここから##
AppleScript_="""
on run argv
set argv_ to item 1 of argv
set point_list to {}
tell application "Adobe Photoshop CS3"
--activate
set width_ to width of current document as pixels
set Height_ to height of current document as pixels
if ((count word of argv_) mod 2) = 1 then
return
else
repeat with i from 1 to (count word of argv_) div 2
set a1 to (word (i * 2 - 1) in argv_ as number) * width_
set a2 to (word (i * 2) in argv_ as number) * Height_
set end of point_list to {a1, a2}
end repeat
end if
--選択範囲を追加
select current document region point_list combination type extended
end tell
end run
"""
##AppleScript部分ここまで##
##選択されている面のUVを取得
shd_shape = xshade.scene().active_shape()
f=commands.getoutput('osascript -e \'tell application \"Adobe Photoshop CS3\" to deselect selection of current document\'')
for i in range(shd_shape.number_of_faces):
if (shd_shape.face(i).active):
UV_list = shd_shape.face(i).distance_uv #距離UV
#UV_list = shd_shape.face(i).parameter_uv #パラメータUV値
argv_ = ""
for j in range(len(UV_list)):
(u,v) = UV_list[j]
argv_ = argv_ + str(u) + " " +str(v) + " "
(u,v) = UV_list[0]
argv_ = argv_ + str(u) + " " +str(v)
#print argv_
f=commands.getoutput('osascript -e \'' + AppleScript_ + '\' \''+ argv_ +'\'')
#print f
f=commands.getoutput('osascript -e \'tell application \"Adobe Photoshop CS3\" to activate\'')
ShadeのUVをフォトショップの選択範囲にへのコメント (0)
|
●LWOエクスポート/インポートスクリプト作りました
|
2009年7月28日
|
Shadeで.lwo(LightWave3D object file)をインポート/エクスポートするスクリプトを作成しました
通常Professionalでしか扱うことのできないlwoの形状データを扱うことができるようになります
Shade10のWidget形式となります
ダウンロードしたファイルを解凍してできるLWO_toolsフォルダごと
WidgetsフォルダにコピーしてShadeを再起動すれば利用可能になるかと思います
(詳しいインストール方法はマニュアルを参照してください)
インポートは指定した形状のレイヤを一つのポリゴンメッシュとして作成
エクスポートはブラウザ上で選択した形状を選択形状毎にポリゴンメッシュに変換後それぞれをlwoとして出力します
現状では形状データ以外のUV等は無視されますが 対応していく予定です
まだまだ未完成ですがご意見ご感想等お待ちしております
http://yukimi.moemoe.gr.jp/etc/LWO_tools.lzh
LWOエクスポート/インポートスクリプト作りましたへのコメント (1)
|
●コントロールポイント座標の記憶/適応
|
2009年7月10日
|
形状操作する時に
コントロールポイントの座標を一時的に退避させておくのに使うスクリプトを書き捨て
スクリプトの実行内容はメモリに保持されるのでそれを利用
shape_ = xshade.scene().active_shape()
dialog1= xshade.create_dialog()
ibutton1 = dialog1.append_radio_button('/記憶/適応')
if dialog1.ask():
ask1 = dialog1.get_value(ibutton1)
if ask1 == 0:
#記憶
position_list = []
for i in xrange(shape_.total_number_of_control_points):
position_list.append(shape_.vertex(i).position)
elif ask1 == 1:
#適応
if ((shape_.total_number_of_control_points) == len(position_list)):
for i in xrange( len(position_list)):
shape_.vertex(i).position = position_list[i]
おまけ
Shadeの2つあるUVの値をもう片方の値へと設定するスクリプト
shd_shape = xshade.scene().active_shape()
for i in range(shd_shape.number_of_faces):
shd_shape.face(i).distance_uv = shd_shape.face(i).parameter_uv#パラメターUVの値を距離UVに
#shd_shape.face(i).parameter_uv = shd_shape.face(i).distance_uv#距離UVの値をパラメターUVに
コントロールポイント座標の記憶/適応へのコメント (0)
|
●Shade-Pythonメモ-日本語コード,パートの開閉について
|
2009年4月10日
|
ShadeでのPythonのデフォルトの文字コードはutf-8のようだけれど
他の文字コードを利用する時につまづいたのでメモ
#coding: utf-8
a = "てすと"
b=unicode(a,'utf-8').encode('shift-jis')
始めa.encode('shift-jis')って具合で変換できるものだと思っていたのだけれど・・・
Pythonの文字関係の処理はどうにも馴染めない
もうひとつ Shadeのパートの開閉に関するテスト
i=1
#全ての形状を調べる
while (scene.get_shape_by_ordinal(i)):
shape = scene.get_shape_by_ordinal(i)
if (shape.type == 2): #パート
if (shape..disclosed):print i #パートが開いている場合,序数を出力
i += 1
これで 閉じたパートの中に開いたパートを入れた場合でも
閉じたパート中の開いたパートも開いたパートとして認識する
ちなみに 空のパート リンクパートも開いたパートとして認識する
Shade-Pythonメモ-日本語コード,パートの開閉についてへのコメント (0)
|
●Shade-Pythonメモ
|
2009年4月 2日
|
パートに含まれるポリゴンメッシュを一つのポリゴンにまとめた時
どうなるか試した時のテストスクリプトをメモ
#ポリゴンメッシュに変換(分割なし)
xshade.scene().convert_to_polygon_mesh()
#
shape =xshade.scene().active_shape()
for i in xrange(shape.number_of_faces):
shape.face(i).active = 1
xshade.scene().update_figure_window()
#1/6秒静止(600=1秒)
xshade.sleep(100)
shape.face(i).active = 0
結合したものは元のOrdianl順に面の番号が再配置されるよう
Shade-Pythonメモへのコメント (0)
|
●プログラムのバグがああああ
|
2008年6月27日
|
前の日記にも出した3D形状変形プログラムに誤作動が発生して
苦戦中...
今週一週間何も進んでいない=□○_
どうしてもバグがとれないので愚痴書き込み
放置してもいいんだけど今後これが使えないとなると
予定が大幅に狂うし・・・
幸か不幸か仕事のデータが来るのが遅れていてよかった
っていうか 誤作動が発生しているのは一行のコードに特定できているし
ダンプさせた中間データも正常なのに なーぜーうごーかーなーい〜〜〜〜
6/29追記
コア中のコアに当たる基本ルーチンの変数名を間違えてた(笑
一回の実行で数万回実行される部分のルーチンが 添字の間違いとはいえ恐ろしい
今迄動いてたのが不思議なくらい
プログラムのバグがああああへのコメント (0)
|
●自動モデリングですよ
|
2008年6月 4日
|

3Dソフト上のカメラ方向から見た形状を
Photoshopで作ったパスの形状に変形するスクリプトです
上の図では球体(赤)を細長い形(青)に変形してます
構想1年 ちまちまと機能を開発/テストすること3ヶ月
やっとこさ動くモノができましたよヽ(゜▽゜≡゜ワ゜)ノ
Photoshop上でのマスク切り抜き作業を
クリッピングマスクでやっているので
条件がよければ Photoshpの作業の後のモデリング作業を自動化できるってわけです
これで作業時間の短縮に・・・ なるといいなぁ
自動モデリングですよへのコメント (0)
|
●ShadeのUVをイメージを作成
|
2008年5月 9日
|
# coding: utf-8
error_string = "Error: no image"
image_object_name = "UV_image"
image_size =(512,512)
paint_color =(1.0, 0.0, 0.0)
def draw_line(image_object,vec2_1,vec2_2,paint_color):
w=vec2_2[0] - vec2_1[0]; h=vec2_2[1] - vec2_1[1]
if w== 0:
for i in xrange(int(abs(h))):
x = int(vec2_1[0] ); y = int(vec2_1[1] + i*cmp(h,0))
image_object.image.set_pixel(x,y,paint_color)
elif abs(w) > abs(h) :
a = h/w
for i in xrange(int(abs(w))):
x = int(vec2_1[0] + i*cmp(w,0)); y = int(vec2_1[1] + i*a*cmp(w,0))
image_object.image.set_pixel(x,y,paint_color)
else:
a = w/h
for i in xrange(int(abs(h))):
x = int(vec2_1[0] + i*a*cmp(h,0)); y = int(vec2_1[1] + i*cmp(h,0))
image_object.image.set_pixel(x,y,paint_color)
scene = xshade.scene()
if scene.rendering.image:
image_object = scene.create_master_image(image_object_name)
image_object.image = xshade.create_image(image_size , 32)
else:
xshade.show_message_box(error_string, False)
for shape_ in xshade.scene().active_shapes:
for i in xrange(shape_.number_of_faces):
uv_list = shape_.face(i).distance_uv
for j in xrange(len(uv_list)):
vec2_1= (uv_list[j-1][0] * image_size[0] , uv_list[j-1][1] * image_size[1])
vec2_2= (uv_list[j][0] * image_size[0] , uv_list[j][1] * image_size[1])
draw_line(image_object,vec2_1,vec2_2,paint_color)
image_object.image.create_window()
ShadeのUVをイメージを作成へのコメント (0)
|
●ShadeWidget 基本テンプレート
|
2008年4月 4日
|
ShadeのWidgetでPythonとjavascriptが混在するのは美しくないので
外部のスクリプトファイルを実行すつように変更
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title></title>
<link href="shade_widget.css" type="text/css" />
<style type="text/css"></style>
<script src="shade_widget.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
<!-- 起動時に呼び出す関数 -->
function initialize(){
//Debug status
document.debug = false;
//window size parameter
windowWidth = 300;
windowHeight = 200;
//Debug switch
if (!document.debug){
document.getElementById('debug').style.display= 'none';
}
//Window size set
if (!document.debug){
window.resizeTo( windowWidth , windowHeight );
}
}
<!-- 絶対パスを取得 -->
function urlParser(path){
var img=new Image();
img.src=path;//相対パスをセット
path=img.src;//絶対パスを保持
img.src='#'; //実行しているhtmlのurlでロードを止める
path = path.match(/file:\/\/(.+)/)[1];
path = decodeURI(path);//URLエンコードされて値が得られるのでデコード
return path;
}
<!-- 引数で与えられたPythonを実行 -->
function do_Python(f_name){
f_path = urlParser("./") + f_name;
py_scr = "execfile('" + f_path + "')";
window.external.setScript(py_scr);
}
<!-- 引数で与えられたAppleScriptを実行 -->
function do_AppleScript(f_name){
f_path = urlParser("./") + f_name;
py_scr ="import commands\n";
py_scr += "f=commands.getoutput('osascript \"" + f_path + "\" ')\n";
py_scr += "print f"; //戻り値をメッセージウィンドウに表示
window.external.setScript(py_scr);
}
</script>
</head>
<!-- body onloadで起動時に実行する関数を呼び出す -->
<!-- body onmouseover でWigetクリック時に関数が呼び出される -->
<body bgcolor="#cccccc" onload="javascript:initialize()">
<!-- Pythonスクリプトを呼び出す -->
<input type="button" value="do Pyrhon" onclick='do_Python("test.py");'><br>
<!-- AppleScriptを呼び出す -->
<input type="button" value="do AS" onclick='do_AppleScript("as_test.scpt");'>
</body>
</html>
ShadeWidget 基本テンプレートへのコメント (0)
|
●shadeに用意されているクラスを調べる
|
2008年3月14日
|
dirコマンドで
用意されているクラスをたどる
def roop_(base,x):
for i in x:
global list_
if (str(i) not in list_):
list_.append(str(i))
base2 = str(base)+'.'+ str(i)
x2=dir(eval(base2))
print base2
roop_(base2,x2)
list_=['xshade']
base_= 'xshade'
x = dir(eval(base_))
text = roop_(base_,x)
800行をこえた....
全部調べるのは大変そうだ
shadeに用意されているクラスを調べるへのコメント (0)
|
●Shade-頂点 稜線に接する面を取得
|
2008年3月 6日
|
Shadeで頂点や稜線に接する面を取得するコマンドがなかったので
shape_ = xshade.scene().active_shape()
#辞書として 初期化
vertex_shered_face={} #頂点と接する面のリスト
edge_shered_face = {} #稜線と接する面のリスト
#頂点番号をキーとする辞書を作る
for i in range(shape_.total_number_of_control_points):vertex_shered_face[i] = []
#頂点に接する面を探す
for i in range(shape_.number_of_faces):
for j in shape_.face(i).vertex_indices: vertex_shered_face[j].append(i)
#稜線番号をキーとする辞書を作る
for i in range(shape_.number_of_edges):
#対象となる頂点に接している面のリストを取得
face_list_v0 = vertex_shered_face[shape_.edge(i).v0]
face_list_v1 = vertex_shered_face[shape_.edge(i).v1]
edge_shered_face[i] = []
for j in face_list_v0:
if j in face_list_v1:edge_shered_face[i].append(j)
print edge_shered_face
Shade-頂点 稜線に接する面を取得へのコメント (0)
|
●Python覚え書き
|
2008年3月 4日
|
クリップボードの中のPythonScriptを実行する
import commands
f=commands.getoutput('osascript -e \'return the clipboard\'')
print f #戻り値をメッセージウィンドウに出力
クリップボード内のスクリプトで commandsをインポートするとエラーになるので注意
Windowsではwin32clipboardモジュールをインポートすることでクリップボードを扱えるらしい
Shadeでムービーを作成して
ムービープレーヤーで開く
import os
import sys , commands,time
f_name = "/test.mov"
##動画を閉じる
CloseMovieAS_="""
tell application "QuickTime Player"
repeat with i from 1 to (count documents)
if name of document i is "test.mov" then close document i
end repeat
end tell
"""
##動画再生ApleScript##
PlayMovieAS_="""
on run argv
tell application "QuickTime Player"
activate
open argv as POSIX file
play document 1
set looping of document 1 to true
end tell
end run
"""
#同名の動画が開かれている場合閉じる
commands.getoutput('osascript -e \'' +CloseMovieAS_ + '\' ')
time.sleep(0.1)
#保存するパスを設定
if shade.active_document:
f_path = os.path.dirname(shade.active_document) + f_name
else: f_path = "/Users/yukimi/Temp_items" + f_name
#シーンを取得
scene_= xshade.scene()
#アニメーションの開始フレームを取得
if scene_.animation_settings.starting_frame == -1: start_frame = 0
else: start_frame = scene_.animation_settings.starting_frame
#アニメーションの終了フレームを取得
if scene_.animation_settings.ending_frame == -1:
end_frame = 300
scene_.animation_settings.ending_frame = end_frame
else:end_frame = scene_.animation_settings.ending_frame
xshade.scene().inhibit_update() #画面の更新を止める
start_time=time.time()
#アニメーションの作成を開始
scene_.rendering.start_animation( f_path )
for flame_ in xrange(start_frame,(end_frame +1)):
scene_.sequence_value = flame_ #シーケンス値(フレーム)
scene_.rendering.render()
scene_.rendering.append_animation()
scene_.rendering.finish_animation()
end_time=time.time()
print str(end_time - start_time) + "sec" #経過時間を表示
#シーケンス値を0位置に
scene_.sequence_value = 0
xshade.scene().allow_update() #画面の更新を再開
#再生スクリプトを実行
commands.getoutput('osascript -e \'' + PlayMovieAS_ + '\' \''+ f_path +'\'')
Python覚え書きへのコメント (0)
|
●javascriptでPhotoShop
|
2008年1月29日
|

いろいろあってjavascriptでのPhotoshopを自動制御を色々試し中
今まではAppleScript(MacOS標準のスクリプト言語、色々なアプリケーションを制御できる)
を使って制御していたのだけれど
javaScriptの方がやれることが多いのと
Windowsでも動くスクリプトを作る必要があったのと
使い勝手のいい開発環境があった ということで
新しいものを色々作って試し中
今日は テキストのある位置から特定の距離だけ離れたところの色を取得するものを作成
このスクリプト自体はなんてことないのだけれど
応用すれば 一括して色を置き換えたり
作画用のベタ塗りしたレイヤを一気に準備することもできるかと
ちなみにスクリプトはこんな感じの短いの
試作と実行は ExtendScript Toolkit 2 ってアプリケーションでやってます
Windows版どこにインストールされるかわからないけれど
MacOSXならApplication/ユーティリティ/Adobeユーティリティ/にあります
#target photoshop
var active_layer = activeDocument.activeLayer
if (active_layer.kind ==LayerKind.TEXT){
var text_contents= active_layer.textItem.contents //テキストレイヤーの内容を取得
var bounds_ =active_layer .bounds //テキストレイヤーの描画位置を取得
var pick_point = Array(bounds_[0]+150,bounds_[1]+15)//テキストレイヤーの左上から(100,20)の位置を設定
var picker_ = activeDocument.colorSamplers.add(pick_point)
var color_ = picker_.color //色を取得
//foregroundColor= color_ //描画色に設定
picker_.remove() //作成したカラーサンプラーを削除
}
さて 次は何を作るかな
javascriptでPhotoShopへのコメント (0)
|
●色分けレイヤースクリプト
|
2006年9月28日
|
3Dソフトで オブジェクト毎に色分けして フォトショップで 色別にレイヤーに分解するスクリプトでけたヽ(´▽`)ノ
3Dソフトでの色分けも自分でやらないといけないし フォトショプにスクリプト経由で色から選択範囲を作る方法がないようで そのへんでちと苦労
細かい不具合はまだあるけど とりあえずこれでだいぶ省力化になるかな!?
|