●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

10050901.jpg

ちなみに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形状のデータです)
10042901.jpg


  • スケッチアップのカメラ設定をコミックスタジオに書き出し

  • 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を再起動すれば
プラグインメニューにスクリプトが追加されるかと思います

10032801.jpg
左が元の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日    

827615700_237.jpg
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日    

08012901.jpg
いろいろあって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ソフトでの色分けも自分でやらないといけないし
フォトショプにスクリプト経由で色から選択範囲を作る方法がないようで
そのへんでちと苦労

細かい不具合はまだあるけど
とりあえずこれでだいぶ省力化になるかな!?