2011年6月8日水曜日
AutoDesk SketchBook Designer 2011
ベクター系ですね。これはちょっと欲しいかも。
いや、その前に液晶タブレットが欲しい。
液晶タブレットの大きい方は、
現在震災の影響で、再販出来ずにいるようです。
まあ、お金ないけどなー
PS.値段調べたら、7万超えてた。
2011年6月5日日曜日
AlignPlane v0.1
選択したコンポーネントを平面にそろえます
※フリーズ前提です
使い方
コンポーネントを選択
PICKセッションになるので、平面を作成
平面化しました。
以前、ツイッターで平面化の話が出たときには???
って感じでしたけど、仕事で必要だったので、作ってみました。
※フリーズ前提です
使い方
コンポーネントを選択
PICKセッションになるので、平面を作成
平面化しました。
JScript
//AlignPlane //2011 05 14 //v0.1 main(); function main(){ if(Selection(0).Count == 0) return var oSel = Selection(0); if(oSel.type == "polymsh"){ //ジオメトリを選択していた場合 oObj = oSel oSub = oSel.ActivePrimitive.Geometry.Points.SubComponent }else if(oSel.Type == "edgeSubComponent" || oSel.Type == "polySubComponent"){ oSub = oSel.SubComponent.ComponentCollection.NeighborVertices( 1 ).SubComponent; oObj = oSub.Parent3DObject; }else if(oSel.Type == "pntSubComponent"){ oSub = oSel.subComponent; oObj = oSub.Parent3DObject; }else{ return false; } FreezeModeling(oObj); Logmessage(oSub) oColl = oSub.ComponentCollection; //そろえるべき平面を作る p0 = XSIMath.CreateVector3(); p1 = XSIMath.CreateVector3(); p2 = XSIMath.CreateVector3(); Pick = pickPosition(); if(!Pick(0))return; p0.set(Pick(1),Pick(2),Pick(3)); Pick = pickPosition(); if(!Pick(0))return; p1.set(Pick(1),Pick(2),Pick(3)); Pick = pickPosition(); if(!Pick(0))return; p2.set(Pick(1),Pick(2),Pick(3)); v1 = XSIMath.CreateVector3(); v2 = XSIMath.CreateVector3(); nv = XSIMath.CreateVector3(); v1.sub(p0,p1); v2.sub(p2,p1); nv.Cross(v1,v2); nv.NormalizeInPlace(); //選択したコンポーネントのインデックスのアレイ IDArray = oColl.IndexArray.toArray(); //Logmessage("IDArray " + IDArray); //オブジェクトの頂点のアレイ Pnts = oObj.ActivePrimitive.Geometry.Points; PosArray = Pnts.PositionArray.toArray(); //ポイント移動用のベクトル mv = XSIMath.CreateVector3(); for(var i = 0; i < Pnts.count; i++){ for(var j = 0; j < IDArray.length; j++){ if(i == IDArray[j]){ //Logmessage("ID " + i + " point is Move") var pPos = L2W(oObj,Pnts(i).Position); var d = nv.Dot( p0 );//ポリ平面は p・n = d var dist = pPos.Dot( nv ) -d; //符号距離は p・n-d mv.Scale( - dist, nv) pPos.addInPlace( mv ); pPos = XSIMath.MapWorldPositionToObjectSpace( oObj.Kinematics.Local.Transform, pPos ); //Logmessage(PosArray[i * 3] + " > " + pPos.x); PosArray[i * 3] = pPos.x; PosArray[i * 3 + 1] = pPos.y; PosArray[i * 3 + 2] = pPos.z; } } } Pnts.PositionArray = PosArray; return true; } //Local to World function L2W(inObj,inVect){ v = inVect; m = XSIMath.CreateMatrix4(); inObj.Kinematics.Global.Transform.getMatrix4(m); v.MulByMatrix4InPlace( m ); return v; }
以前、ツイッターで平面化の話が出たときには???
って感じでしたけど、仕事で必要だったので、作ってみました。
Export2Mari v0.11
選択したオブジェクトを、一気にObj形式で書き出します。
PythonでのPPGも理解できたかな~
※もともと一気に書き出すのはオプションでした orz
修正
Python
PythonでのPPGも理解できたかな~
※もともと一気に書き出すのはオプションでした orz
修正
Python
#Export2Mari v0.11 # 2011 06 08 from win32com.client import constants as c app = Application log = app.Logmessage cp = XSIFactory.CreateObject("CustomProperty") cp.Name = "ExportObjects 2 Mari" cp.AddParameter3('fileDirectory', c.siString) #デフォルトディレクトリ cp.fileDirectory.Value = 'O:\Mari' ly = cp.PPGLayout ly.AddGroup("Export") ly.AddRow() ly.AddItem('fileDirectory','Directory',c.siControlFolder) ly.AddButton("Export") ly.EndRow() ly.EndGroup() app.InspectObj(cp) ly.Language = 'Python' ly.Logic = ''' from win32com.client import constants as c app = Application log = app.Logmessage def Export_OnClicked(): dir = str(PPG.fileDirectory.Value) data = dir + "/" log('Export : ' + data) #log(data) app.ObjExport(data,1, "", "", "", "", "", "", "", "", 0, False, False, "", False) '''
ラベル:
Mari,
SoftimageScript
2011年6月4日土曜日
GetActiveCamera
アクティブなカメラを取得するのに四苦八苦してます。
これはSpaceNaviが対応しないはずだ・・・。
Softimageは基本の4画面をViews "View Maneger"と扱います。
いわゆる、A,B,C,Dですね。
それぞれ、いろいろな表記を持つんですが通常扱われる3Dの画面は、Viewとよばれ、
その名を ViewA, ViewB, ViewC, ViewDとなります。
カメラを取得するなら
GetValue("Views.ViewA.TopCamera")とかになるわけです。
そして、このAは、その中身を入れ替えることが出来ます。
たとえばレンダーツリーとか、テクスチャエディットとかです。
問題はここからなのですが、
'Object View'だとABCDのなかに("Views.View1.UserCamera")になるようです。英字でなくて数字ですね
どうやら、'Object View'を追加していくとこの末尾の数字が加算されていくだけのようです。
そして、フローティングパレットであろうがなかろうが関係ありません。
View1,View2・・・ と続いていきます。 そして、法則は、作った順番、欠番があれば(途中で閉じた)、
そこに生成されます。
そして、目的のビューのアクティブなView Numberが把握できません
GetValue("Views.View" + num + ".UserCamera")
この番号です。
どなたか、ビューからこの番号の取得の仕方が、あればお教えください orz
現在の、付け焼刃の回避策として、
Viewマネージャーにおける 'Object View' の数を数えてから、
フローティングパレットの数を数えてます。
順番どおりなら、フローティングが一番大きな数字になるはずです(汗
これはSpaceNaviが対応しないはずだ・・・。
Softimageは基本の4画面をViews "View Maneger"と扱います。
いわゆる、A,B,C,Dですね。
それぞれ、いろいろな表記を持つんですが通常扱われる3Dの画面は、Viewとよばれ、
その名を ViewA, ViewB, ViewC, ViewDとなります。
カメラを取得するなら
GetValue("Views.ViewA.TopCamera")とかになるわけです。
そして、このAは、その中身を入れ替えることが出来ます。
たとえばレンダーツリーとか、テクスチャエディットとかです。
問題はここからなのですが、
'Object View'だとABCDのなかに("Views.View1.UserCamera")になるようです。英字でなくて数字ですね
どうやら、'Object View'を追加していくとこの末尾の数字が加算されていくだけのようです。
そして、フローティングパレットであろうがなかろうが関係ありません。
View1,View2・・・ と続いていきます。 そして、法則は、作った順番、欠番があれば(途中で閉じた)、
そこに生成されます。
そして、目的のビューのアクティブなView Numberが把握できません
GetValue("Views.View" + num + ".UserCamera")
この番号です。
どなたか、ビューからこの番号の取得の仕方が、あればお教えください orz
現在の、付け焼刃の回避策として、
Viewマネージャーにおける 'Object View' の数を数えてから、
フローティングパレットの数を数えてます。
順番どおりなら、フローティングが一番大きな数字になるはずです(汗
#Python app = Application log = app.Logmessage log("-" * 100) def getActiveCamera(): oL = app.DeskTop.ActiveLayOut #デフォルトビューのチェック oV = oL.views("vm") abcd = oV.GetAttributeValue("viewportundermouse") if oV.Views(abcd).Type == 'Viewer': ActiveView = oV.GetAttributeValue("activecamera:" + abcd) log(ActiveView) if (ActiveView =="User") or (ActiveView =="Top") or (ActiveView =="Front") or (ActiveView =="Right"): cam = app.GetValue("Views.View" + abcd + "." + ActiveView + "Camera") else: cam = app.GetValue(ActiveView) #ビューマネージャーにある、オブジェクトビューのチェック num = 0 for i in range(4): if oV.Views(i).Type == 'Object View': num += 1 log("ObjectViewCount : " + str(num)) if oV.Views(abcd).Type == 'Object View': ActiveView = oV.Views(abcd).GetAttributeValue("Camera") ViewName = oV.Views(abcd).FullName log(ActiveView) log(ViewName) if ActiveView == "default": cam = app.GetValue("Views.View" + str(num) + ".UserCamera") else: cam = app.GetValue(ActiveView) #フローティングのオブジェクトビューの対応 for x in oL.Views: if x.Type == 'Object View': log(x) ActiveView = x.GetAttributeValue("Camera") if ActiveView == "default": cam = app.GetValue("Views.View" + str(num) + ".UserCamera") else: cam = app.GetValue(ActiveView) log(cam) getActiveCamera()
2011年6月3日金曜日
ProgressBar : Model Replace
オブジェクトを入れ替えるスクリプトで、その数が1000近くになると、
フリーズしてるのかわからなくなりました。
動いてるかどうかわからなくなるのは不安です。
そこで、現在の進行状況を出す、ProgressBar を導入。
いろいろなところで使えますねぇ。
JScript
フリーズしてるのかわからなくなりました。
動いてるかどうかわからなくなるのは不安です。
そこで、現在の進行状況を出す、ProgressBar を導入。
いろいろなところで使えますねぇ。
JScript
//ModelReplace v1.3 //20110602 親を一致 プログレスバーを設定 //20110509 名前を一致化 //20110205 _ 親子付けに対応 //20110111_作成 //使い方 //入れ替えたいオブジェクトを選択、実行。 //ピックセッションになるので、コピー元の"親"をPICK function main(){ if(Selection.count ==0){ return 0} var oRoot = ActiveSceneRoot; var oSel = Selection; //ピックセッション var oPick = PickObject("SelectObject"); if(oPick(0)== 0){ Logmessage("Cansel") return 0} var oPObj = oPick(2); var nColl = XSIFactory.CreateObject("XSI.Collection"); var oProgressBar = XSIUIToolkit.ProgressBar ; //プログレスバーの設置 oProgressBar.Maximum = oSel.Count ; oProgressBar.Step = 1; oProgressBar.Caption = "RePlace Now!"; oProgressBar.CancelEnabled = false ; oProgressBar.Visible = true; for(var i = 0; i < oSel.count; i++){ var oName = oSel(i).name var oParent = oSel(i).Parent3DObject; oSel(i).name = "tempname";//一時名前 var oTrans = oSel(i).kinematics.Global.Transform; var newObj = SIDuplicate( "B:" + oPObj); if(oParent.Name != newObj(0).Parent3DObject.Name){ ParentObj( oParent, newObj ) } newObj(0).name = oName; newObj(0).kinematics.Global.Transform =oTrans; nColl.Add(newObj(0)) //プログレスバーの数値加算 oProgressBar.Increment() } //元のオブジェクトを削除 DeleteObj(oSel); //新しいオブジェクトの選択 SelectObj(nColl); //プログレスバーのお片づけ oProgressBar.Visible = false ; } main();
2011年6月1日水曜日
Mari1.3
Mari1.3
出たらしいのでメモ
出たらしいのでメモ
- Ptex - Per-Face Texture Mapping
メンタレがサポートしてないのでとりあえずパス
- Displacement Preview *
たぶんOpenGL3.0が使えないと無理なのでパス
- Snapshots
いまいちうまく訳せない。一時的に保存しておくとかだろうか?
- Environment Mapping
環境マップをライティングとして使える。コレはよさそう
- Tiled textures
テクスチャと、マスクを組み合わせて、タイルテクスチャを作ることが出来る。
最終的なライティングを考慮して進めれるのかも。
とりあえず、最新のビデオカードが必要です(w
登録:
投稿 (Atom)