<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>3ds Max</title><link>http://blogs.wankuma.com/keichan/category/1420.aspx</link><description>3ds Max</description><managingEditor>keichan (keichan@wankuma.com)</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>[3ds max] [script] 前回の続き</title><link>http://blogs.wankuma.com/keichan/archive/2008/05/13/137492.aspx</link><pubDate>Tue, 13 May 2008 15:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2008/05/13/137492.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/137492.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2008/05/13/137492.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/137492.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/137492.aspx</trackback:ping><description>&lt;P&gt;&lt;A id=viewpost.ascx_TitleUrl HREF="/keichan/archive/2008/05/08/136898.aspx"&gt;[3ds max][plugin]外部参照オブジェクトの外部参照コントローラのみをシーン合成する&lt;/A&gt;　の続報です。&lt;/P&gt;
&lt;P&gt;前回、&lt;/P&gt;
&lt;P&gt;&amp;gt; っが正直なところ、これくらいは maxscript で対応してくれてもよさそうです。&lt;/P&gt;
&lt;P&gt;&amp;gt; 手元にある max2008 の maxscriptリファレンスを見ても、対応してませんでした。&lt;/P&gt;
&lt;P&gt;&amp;gt; max2009 はどうなんでしょうね・・&lt;/P&gt;
&lt;P&gt;と書きましたが、トライアル版のmax2009をインストールして調べてみました。&lt;/P&gt;
&lt;P&gt;結果、#mergeControllers は&lt;FONT size=5&gt;ありませんでした&lt;/FONT&gt;。&lt;/P&gt;
&lt;P&gt;残念です。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ついでに、max2009 を起動して気付いたのがビューポートの変化。&lt;/P&gt;
&lt;P&gt;Autodesk DWF Viewerで見たことのあるView Cubeがデフォルトでついていました。これ、社内の人には不評でした。&lt;/P&gt;
&lt;P&gt;おそらく開発ではほぼ「デフォルトでOFF」状態になりそうな機能です。&lt;/P&gt;
&lt;P&gt;ただし、操作が直感的なのでmaxの操作に慣れていないディレクター等の品質チェックのみを行う人なんかにはアリかも、という感じでした。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/137492.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>[3ds max][plugin]外部参照オブジェクトの外部参照コントローラのみをシーン合成する</title><link>http://blogs.wankuma.com/keichan/archive/2008/05/08/136898.aspx</link><pubDate>Thu, 08 May 2008 16:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2008/05/08/136898.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/136898.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2008/05/08/136898.aspx#Feedback</comments><slash:comments>1150</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/136898.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/136898.aspx</trackback:ping><description>&lt;P&gt;max8では正常動作していたスクリプトをmax9で走らせると一部不具合が判明した。&lt;/P&gt;
&lt;P&gt;不具合があった箇所というのは、複数のmaxファイルを外部参照オブジェクトとして読み込み、Offset, Rotation, Scaleを&lt;/P&gt;
&lt;P&gt;予め用意しておいた数値でアニメーションキーを自動的に打つ部分。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;max9では新たなアトリビュートとして「外部参照コントローラ」なるものが用意されていた。&lt;/P&gt;
&lt;P&gt;コントローラも外部参照として扱われているので、シーン内でそのオブジェクトに新規にキーを打つことができない状態になっていた。&lt;/P&gt;
&lt;P&gt;では、外部参照コントローラだけをシーン合成行うにはスクリプトでどうすればいいか調べてみたところ・・・&lt;/P&gt;
&lt;P&gt;・&lt;/P&gt;
&lt;P&gt;・&lt;/P&gt;
&lt;P&gt;・&lt;/P&gt;
&lt;P&gt;結論から言うと、スクリプトのみでは方法が「&lt;FONT size=5&gt;ない&lt;/FONT&gt;」んです。&lt;/P&gt;
&lt;P&gt;maxscriptで外部参照オブジェクトに関して操作する場合、objXRefMgrインタフェースを使用します。&lt;/P&gt;
&lt;P&gt;+ MAXScript 言語リファレンス&lt;BR&gt;　+ 3ds Max オブジェクト&lt;BR&gt;　　+ インタフェース&lt;BR&gt;　　　+ コア インタフェース&lt;BR&gt;　　　　+ コア インタフェースのドキュメント&lt;BR&gt;　　　　　+ インタフェース: objXRefMgr&lt;BR&gt;maxscriptリファレンスの上記ツリーを確認してみると、&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&amp;lt;Interface&amp;gt;AddXRefItemsFromFile &amp;lt;filename&amp;gt;fileName promptObjNames:&amp;lt;bool&amp;gt; objNames:&amp;lt;string array&amp;gt; xrefOptions:&amp;lt;&amp;amp;enum array&amp;gt;&lt;BR&gt;&amp;nbsp;promptObjNames default value:false&lt;BR&gt;&amp;nbsp;objNames default value: #()&lt;BR&gt;&amp;nbsp;xrefOptions enums:{#asProxy|#xrefModifiers|#dropModifiers|#mergeModifiers|#mergeManipulators|#selectNodes|#mergeMaterials}&lt;BR&gt;&amp;nbsp;xrefOptions default value: #()&lt;BR&gt;&amp;nbsp;xrefOptions は In パラメータです&lt;BR&gt;指定されたレコードに名前の配列を追加します。
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;とあります。この xrefOptions で本来であれば存在していなければならない #mergeControllers がありません。&lt;/P&gt;
&lt;P&gt;つまり max9 においてスクリプトレベルでの制御は不可能ということです。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;仕方がないので外部参照オブジェクトを読み込むルーチンのみをプラグインで書き、&lt;/P&gt;
&lt;P&gt;スクリプト側からプラグインの関数を呼び出すようにしました。&lt;/P&gt;
&lt;P&gt;以下はそのソース。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;
&lt;HR id=null&gt;
#include &amp;lt;Maxscrpt/Maxscrpt.h&amp;gt;&lt;BR&gt;#include &amp;lt;maxscrpt/Strings.h&amp;gt;&lt;BR&gt;#include &amp;lt;maxscrpt/arrays.h&amp;gt;&lt;BR&gt;#include &amp;lt;maxscrpt/numbers.h&amp;gt;&lt;BR&gt;#include &amp;lt;maxscrpt/maxobj.h&amp;gt;&lt;BR&gt;#include &amp;lt;maxscrpt/definsfn.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;XRef/iXrefObjMgr8.h&amp;gt;&lt;/P&gt;
&lt;P&gt;def_visible_primitive( MergeXRefControllersFromFile, "MergeXRefControllersFromFile" );&lt;BR&gt;Value* MergeXRefControllersFromFile_cf(Value** arg_list, int count)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;check_arg_count_with_keys(MergeXRefControllersFromFile, 2, count);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;type_check(arg_list[0], String, "第１引数は外部参照オブジェクト先のmaxファイルパスじゃないとダメ");&lt;BR&gt;&amp;nbsp;type_check(arg_list[1], Array , "第２引数は読み込むノード名配列");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;try&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;char* full_path_filename = arg_list[0]-&amp;gt;to_string();&lt;BR&gt;&amp;nbsp;&amp;nbsp;Array* node_names_array = static_cast&amp;lt;Array*&amp;gt;(arg_list[1]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Tab&amp;lt;char*&amp;gt; tab_node;&lt;BR&gt;&amp;nbsp;&amp;nbsp;char** node_names = new char*[node_names_array-&amp;gt;size];&lt;BR&gt;&amp;nbsp;&amp;nbsp;for( int i=0; i&amp;lt;node_names_array-&amp;gt;size; ++i ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;node_names[i] = node_names_array-&amp;gt;data[i]-&amp;gt;to_string();&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;tab_node.Append(node_names_array-&amp;gt;size, node_names);&lt;BR&gt;&amp;nbsp;&amp;nbsp;IObjXRefManager8* xref_manager = IObjXRefManager8::GetInstance();&lt;BR&gt;&amp;nbsp;&amp;nbsp;IObjXRefRecord* ixrRecord = xref_manager-&amp;gt;AddXRefItemsFromFile(full_path_filename, false, &amp;amp;tab_node, XREF_MERGE_CONTROLLERS);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;delete[] node_names;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;catch(...)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;return new Integer(-1);&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;return new Integer(0);&lt;BR&gt;}
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;これで、スクリプト側から&lt;BR&gt;MergeXRefControllersFromFile "C:\\hoge.max" #("node1", "node2")&lt;BR&gt;のような感じで呼び出せます。&lt;/P&gt;
&lt;P&gt;とりあえず、上記対策を行って正常動作することは確認しました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;っが正直なところ、これくらいは maxscript で対応してくれてもよさそうです。&lt;/P&gt;
&lt;P&gt;手元にある max2008 の maxscriptリファレンスを見ても、対応してませんでした。&lt;/P&gt;
&lt;P&gt;max2009 はどうなんでしょうね・・&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/136898.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>[3ds max][plugin] 頂点ペイントモディファイヤのアニメーションキーフレーム取得方法</title><link>http://blogs.wankuma.com/keichan/archive/2008/03/05/126443.aspx</link><pubDate>Wed, 05 Mar 2008 18:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2008/03/05/126443.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/126443.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2008/03/05/126443.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/126443.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/126443.aspx</trackback:ping><description>&lt;P&gt;頂点カラーのアニメーション作成に頂点ペイントモディファイヤを使用し、そいつを export させようと企んでいます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;で。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;以下のコードを書いてみました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;boost::optional&amp;lt;int, int&amp;gt; CheckVertexPaint(INode* in_node)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;Object* max_obj = in_node-&amp;gt;GetObjectRef();&lt;BR&gt;&amp;nbsp;while( max_obj &amp;amp;&amp;amp; max_obj-&amp;gt;SuperClassID() == GEN_DERIVOB_CLASS_ID ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;IDerivedObject* dobj = static_cast(max_obj);&lt;BR&gt;&amp;nbsp;&amp;nbsp;const int num_modifier = dobj-&amp;gt;NumModifiers();&lt;BR&gt;&amp;nbsp;&amp;nbsp;for( int modifier_cnt = 0; modifier_cnt &amp;lt; num_modifier; ++modifier_cnt ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Modifier* mod = dobj-&amp;gt;GetModifier(modifier_cnt);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mod &amp;amp;&amp;amp; mod-&amp;gt;ClassID() == PAINTLAYERMOD_CLASS_ID ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/// キーフレームの取得&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int lc_min_frame = INT_MAX;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int lc_max_frame = INT_MIN;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int num_ref = mod-&amp;gt;NumRefs();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( int ref_cnt = 0; ref_cnt &amp;lt; num_ref; ++ref_cnt ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RefTargetHandle ref = mod-&amp;gt;GetReference(ref_cnt);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// max 9 では頂点ペイントモディファイヤでアニメート可能なパラメータは1つのみ&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Animatable* IAnim = ref-&amp;gt;SubAnim(0);&amp;nbsp;/// レイヤーの不透明度&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tab key_frames;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IAnim-&amp;gt;GetKeyTimes(key_frames, FOREVER, 1);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( key_frames.Count() &amp;gt; 0 ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( key_frames[0] &amp;lt; lc_min_frame ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lc_min_frame = key_frames[0];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( key_frames[key_frames.Count() - 1] &amp;gt; lc_max_frame ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lc_max_frame = key_frames[key_frames.Count() - 1];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( lc_min_frame == INT_MAX ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/// キーフレームの範囲が取得できたので取得した値を返却する&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return boost::optional&amp;lt;int, int&amp;gt;(std::make_pair(lc_min_frame, lc_max_frame));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;// 次の referenced object を検索&lt;BR&gt;&amp;nbsp;&amp;nbsp;max_obj = dobj-&amp;gt;GetObjRef();&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;/// 取得できなかったのでこのノードには Vertex Paint モディファイヤは存在しない&lt;BR&gt;&amp;nbsp;return boost::optional&amp;lt;int, int&amp;gt;();&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;&lt;?xml:namespace prefix = std /&gt;&lt;std::pair&lt;int, int&gt;&lt;std::pair&lt;int, int&gt;&amp;nbsp;&lt;/P&gt;&lt;std::pair&lt;int, int&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;頂点ペイントモディファイヤでレイヤーの不透明度にキーフレームが存在する場合、始点キーフレームと終点キーフレームを&lt;/P&gt;
&lt;P dir=ltr&gt;std::pair&amp;lt;&amp;gt;に詰め込んで返す関数になってます。&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;最初、Modifier クラスから派生していない IVertexPaint クラスからどうやってアニメーションキーフレーム取るのか悩んでこのエントリーで愚痴ろうかとしていました。&lt;/P&gt;
&lt;P dir=ltr&gt;エントリー書いている途中で閃いて無事キーフレーム取得できました。&lt;FONT color=#ee82ee size=1&gt;息抜きって必要ですね。&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;max 9では頂点ペイントモディファイヤで、アニメート可能なパラメータは1つしか存在しないので&lt;/P&gt;
&lt;P dir=ltr&gt;　　Animatable* IAnim = ref-&amp;gt;SubAnim(0);&amp;nbsp; /// レイヤーの不透明度&lt;/P&gt;
&lt;P dir=ltr&gt;とSubAnim の引数を0で決めうちしています。&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;再利用される方はご注意を。&lt;/P&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;&lt;FONT color=#ffc0cb&gt;#あ、こんなネタ再利用するの私くらいかｗ&lt;/FONT&gt;&lt;/P&gt;&lt;/std::pair&lt;int,&gt;&lt;/std::pair&lt;int,&gt;&lt;/std::pair&lt;int,&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/126443.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>[MAXScript] Array と BitArray</title><link>http://blogs.wankuma.com/keichan/archive/2008/02/04/120875.aspx</link><pubDate>Mon, 04 Feb 2008 16:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2008/02/04/120875.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/120875.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2008/02/04/120875.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/120875.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/120875.aspx</trackback:ping><description>&lt;P&gt;私は今まで BitArray を使用したことがなく、今回少しハマったのでメモ。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;
&lt;HR id=null&gt;
Array リテラル&lt;BR&gt;　#( &amp;lt;value&amp;gt;, &amp;lt;value&amp;gt;, ... )&lt;/P&gt;
&lt;P&gt;+ MAXScript言語リファレンス&lt;BR&gt;　　+ コレクション&lt;BR&gt;　　　　+ コレクションのタイプ&lt;BR&gt;　　　　　　+ 配列の値&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
BitArray リテラル&lt;BR&gt;　#{ &amp;lt;selection&amp;gt; }&lt;BR&gt;&amp;nbsp;&lt;BR&gt;　&amp;lt;selection&amp;gt; は、カンマで区切られた次のリスト&lt;BR&gt;　　　&amp;lt;integer&amp;gt;&lt;BR&gt;　　　&amp;lt;integer&amp;gt; .. &amp;lt;integer&amp;gt;&lt;/P&gt;
&lt;P&gt;+ MAXScript言語リファレンス&lt;BR&gt;　　+ コレクション&lt;BR&gt;　　　　+ コレクションのタイプ&lt;BR&gt;　　　　　　+ BitArray値&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;
&lt;HR id=null&gt;
■Array と BitArray の違いは何ですか。&lt;BR&gt;&amp;nbsp;MAXScript の配列には任意の数の要素が格納でき、各要素は、整数、浮動小数点、文字列、Point3 値、カラー、あるいは他の配列のどれでもかまいません。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;一方 BitArray に格納できるのは、1 つのタイプの情報のみです。名は体を表すというように、このタイプとは単一のビット、&lt;BR&gt;&amp;nbsp;すなわちバイナリ ディジットのことです。ビットは(1, true) に設定されるか、(0, false)に設定されないかのどちらかです。&lt;BR&gt;&amp;nbsp;つまり、&lt;STRONG&gt;BitArray に保存できるのは、バイナリ情報、すなわち true または false 値を表す任意の数のビットだけです。&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;bitArray は 1 バイト内に 8 つの値を保存できるので非常にメモリ効率が高いのですが、通常の配列の場合、1 つの要素が&lt;BR&gt;&amp;nbsp;1 つの値を保存するために数バイトが必要になります。 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;選択状態などの面のプロパティを取得および設定する場合には、bitArray が非常に有用です。 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;bitArray を Array に変換したり、true および false 値しか格納していない Array を bitArray に変換することが可能です。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;+ MAXScriptに関する質問と回答&lt;BR&gt;　　+ MAXScriptの構文と用語&lt;BR&gt;　　　　+ Array と BitArray の違いはなんですか。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;つまり、&lt;BR&gt;a = #(5, 10, 15, 20)&lt;BR&gt;b = #{5, 10, 15, 20}&lt;BR&gt;は全く別物であり、インデクサでアクセスした際の返り値も以下のように違う結果が返ってくる&lt;BR&gt;a[1] → 5&lt;BR&gt;b[1] → false&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;# ()と{},小さいフォントだと分かり辛くて小一時間悩みました&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/120875.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>頂点アルファ</title><link>http://blogs.wankuma.com/keichan/archive/2008/01/23/118859.aspx</link><pubDate>Wed, 23 Jan 2008 15:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2008/01/23/118859.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/118859.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2008/01/23/118859.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/118859.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/118859.aspx</trackback:ping><description>&lt;P&gt;3ds maxで製作したシーンデータをエクスポートするプラグインを作っています。&lt;BR&gt;最近頂点アルファを設定したデータに対応させました。&lt;BR&gt;ところが、早速ツッコミが入りました。&lt;BR&gt;「設定した頂点とは違う場所にアルファが入っている」と。&lt;BR&gt;エクスポートされた該当ファイルを確認すると、確かに違う場所にアルファが入っている。&lt;/P&gt;
&lt;P&gt;これは明らかにプログラムのミスと判断し、調査を始めたのが一昨日。&lt;BR&gt;原因究明の為、頂点アルファ・頂点カラーについてのリファレンスを引いてみると以下の説明文がヒットした。(※1)&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&amp;nbsp;A.テクスチャおよびカラー頂点の数はメッシュ頂点の数と、異なる場合がある。&lt;BR&gt;&amp;nbsp;B.メッシュ面の数は、テクスチャおよびカラー面の数と常にまったく同じである。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;以上を踏まえた上で、対応する頂点を検出する方法を次に示す。&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;1.メッシュ頂点のインデックスを取得します。&lt;BR&gt;&amp;nbsp;2.対象とする面のインデックスを参照している面を検出します。&lt;BR&gt;&amp;nbsp;3.各面の内部の頂点の番号(1番目、2番目、3番目 - .x、.y、または.z)を確認します。&lt;BR&gt;&amp;nbsp;4.頂点を参照している各面について、同じインデックスのついたテクスチャ面を取得します。&lt;BR&gt;&amp;nbsp;5.それぞれのテクスチャ頂点のインデックスを面から取得します(1番目、2番目、3番目 / .x、.y、または.z)。&lt;BR&gt;&amp;nbsp;6.取得した頂点は作業開始したメッシュ頂点と対応しています。&lt;BR&gt;&amp;nbsp;7.検出された全ての面について、手順3 ～ 6 を繰り返します。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;なるほど。&lt;BR&gt;つまり、予め Face (面)単位で頂点データを管理しておけばテクスチャ座標でも頂点カラーでも1対1の関係が必ず成り立つ。&lt;BR&gt;(但し Face に関連付けられているのは各々の実データへのインデックス値であることに注意)&lt;/P&gt;
&lt;P&gt;では、上記方法に作り直そうとソースを見ると、既にこの方法で書いてありました。&lt;BR&gt;よく考えるとそりゃそうだよな。と思うところがあります。&lt;BR&gt;以前からテクスチャ座標や頂点カラーはエクスポート対象としてサポートしていました。&lt;BR&gt;そこに「頂点アルファ」を新たにサポートしただけでした。&lt;BR&gt;もしリファレンス通りの方法で管理していないと頂点アルファ以前にテクスチャ座標や頂点カラーのデータも化けるわけで･･･。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;ハマリました。&lt;BR&gt;何故、頂点アルファのデータのみ化けるのか？の原因が不明になりました。&lt;/P&gt;
&lt;P&gt;そこで、ごく簡単なテストシーンデータ（数ポリゴンの平面メッシュに1つの頂点に頂点カラー・頂点アルファを設定）&lt;BR&gt;を作成し、エクスポートすると意図したデータが出力された。&lt;/P&gt;
&lt;P&gt;あれ？意図したデータが出てくれると逆に困るんですが･･･と内心思いつつ、一つの案が浮かびました。&lt;/P&gt;
&lt;P&gt;「この現象は、エクスポータプラグインのプログラムに原因があるのではなく、&lt;BR&gt;　頂点アルファの設定を行うオペレーション手順に問題があるのでは？」と。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;問題のあるシーンデータと、テストシーンデータを比較してもシーン内の最終結果はポリゴン数の差しか違いがありません。&lt;BR&gt;違いがあるとすれば、製作途中のオペレーションの違いしか無いと考えたわけです。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;該当シーンデータを製作された担当者さんにオペレーション内容を伺おうと思いましたが、&lt;BR&gt;本日は別所に行かれている様子で社内にはいませんでした。&lt;/P&gt;
&lt;P&gt;原因究明は後日ということで、とりあえず正常なデータが出力できないものかと色々いじっていたら出来ました。&lt;BR&gt;問題のあるシーンデータのノードに頂点ペイントモディファイヤを追加して、アルファ成分を選択状態にした状態で集約後&lt;BR&gt;エクスポートを実行すると意図するデータが出力されました。&lt;BR&gt;謎です。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;私の環境では問題ないことが確認とれたので、担当者さんのフォルダを覗きに行くと&lt;/P&gt;
&lt;P align=center&gt;&lt;FONT size=6&gt;既に&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;問題のないデータ&lt;/FONT&gt;&lt;/STRONG&gt;がアップロードされていました&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;(;'口')&amp;lt;ェェエエエ工工工&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;(※1) MAXScript リファレンス 9.0 の以下のツリーを参照&lt;BR&gt;MAXScript 言語リファレンス&lt;BR&gt;　+ 3ds Max オブジェクト&lt;BR&gt;　　　+ 編集可能メッシュ、スプライン、パッチ、およびポリゴン&lt;BR&gt;　　　　　+ Editable_Mesh および TriMesh&lt;BR&gt;　　　　　　　+ テクスチャ座標と頂点カラーについて&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/118859.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>3ds Max で .NET ～カレンダーコントロールを貼り付けてみる～</title><link>http://blogs.wankuma.com/keichan/archive/2007/08/27/92151.aspx</link><pubDate>Mon, 27 Aug 2007 18:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2007/08/27/92151.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/92151.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2007/08/27/92151.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/92151.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/92151.aspx</trackback:ping><description>&lt;P&gt;今回は MAXScript リファレンスにのっとってフォームにカレンダーコントロールを貼り付けてみます。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;
&lt;HR id=null&gt;
rollout dotNETsample ".NET Sample" width:200 height:220&lt;BR&gt;(&lt;BR&gt;&amp;nbsp;-- カレンダークラスを作成&lt;BR&gt;&amp;nbsp;dotNetControl calendar "MonthCalendar" width:180 height:200&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;-- カレンダーの MouseDownイベントハンドラ&lt;BR&gt;&amp;nbsp;on calendar MouseDown sender val do&lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;if val.Button == (dotNetClass "MouseButtons").Left do&lt;BR&gt;&amp;nbsp;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;format "in mousedown handler: sender: %\n" sender&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;format "in mousedown handler: arg: %\n" val&lt;BR&gt;&amp;nbsp;&amp;nbsp;)&lt;BR&gt;&amp;nbsp;)&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;-- 起動時に処理する物&lt;BR&gt;&amp;nbsp;on dotNETsample open do&lt;BR&gt;&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;calendar.ForeColor = calendar.ForeColor.Pink&amp;nbsp;-- 前景色をピンク&lt;BR&gt;&amp;nbsp;)&lt;BR&gt;)&lt;BR&gt;createDialog dotNETsample&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;今回のサンプルではダイアログに表示させるので、rollout() と createDialog を使用しています。&lt;/P&gt;
&lt;P&gt;rollout は一画面を構成するクラスであると解釈していただければ問題ありません。&lt;/P&gt;
&lt;P&gt;内部にコントロールインスタンス生成、イベントハンドラ等の処理が記述できます。&lt;/P&gt;
&lt;P&gt;今回は dotNETsample ロールアウトのオープン時にカレンダーコントロールの前景をピンクに、&lt;/P&gt;
&lt;P&gt;calendar コントロールでクリックされた時に引数 sender, val の型情報をリスナーに出力しています。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;
&lt;HR id=null&gt;
&amp;lt;&amp;lt;出力結果&amp;gt;&amp;gt;&lt;BR&gt;in mousedown handler: sender: dotNetControl:calendar:System.Windows.Forms.MonthCalendar&lt;BR&gt;in mousedown handler: arg: dotNetObject:System.Windows.Forms.MouseEventArgs&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;BR&gt;はい。ちゃんと出てます。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;また、イベントハンドラの引数は省略できます。&lt;BR&gt;on calendar MouseDown do ()&amp;nbsp;&amp;nbsp;-- 引数を一切使用しない場合&lt;BR&gt;on calendar MouseDown val do ()&amp;nbsp;-- EventArgsパラメータだけ使用したい場合&lt;BR&gt;on calendar MouseDown sender val do ()&amp;nbsp;-- SenderObjectとEventArgsパラメータを使用したい場合&lt;/P&gt;
&lt;P&gt;上記３パターンで記述することが可能なので、状況に応じて使いわけると判りやすくていいかもしれません。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;つづく...&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/92151.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>3ds max で .NET</title><link>http://blogs.wankuma.com/keichan/archive/2007/08/10/89826.aspx</link><pubDate>Fri, 10 Aug 2007 16:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2007/08/10/89826.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/89826.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2007/08/10/89826.aspx#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/89826.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/89826.aspx</trackback:ping><description>&lt;P&gt;3ds max で .NET&lt;/P&gt;
&lt;P&gt;3ds Max 9 から MAXScript で .NET Framework が利用できるようになりました。&lt;/P&gt;
&lt;P&gt;今まで 8 しか使っていなかったので、Max 9の検証を兼ねていろいろ弄っていきたいと思います。&lt;/P&gt;
&lt;P&gt;参考書はmax9パッケージに付属していた MAXScript リファレンス 9.0 を使用します。&lt;/P&gt;
&lt;P&gt;ということで、System.Stringクラスを利用してメソッドを列挙するスクリプトを書いてみました。&lt;BR&gt;（参考：MAXScript ツールおよび 3ds Max との連携 &amp;gt;&amp;gt; MAXScript における DotNet &amp;gt;&amp;gt; dotNetObject）&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp;o1 = dotNetObject "System.String" "hello,world!"&amp;nbsp;-- System.String オブジェクトの生成&lt;BR&gt;&amp;nbsp;showMethods o1&amp;nbsp;-- リスナーに結果を列挙&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .&amp;lt;System.Object&amp;gt;Clone()&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.String&amp;gt;strB&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Boolean&amp;gt;ignoreCase&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.String&amp;gt;strB &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Boolean&amp;gt;ignoreCase &lt;/P&gt;
&lt;P&gt;&amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.Int32&amp;gt;indexA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Int32&amp;gt;indexB &amp;lt;System.Int32&amp;gt;length&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.Int32&amp;gt;indexA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Int32&amp;gt;indexB &amp;lt;System.Int32&amp;gt;length &lt;/P&gt;
&lt;P&gt;&amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.Int32&amp;gt;indexA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Int32&amp;gt;indexB &amp;lt;System.Int32&amp;gt;length &lt;/P&gt;
&lt;P&gt;&amp;lt;System.Boolean&amp;gt;ignoreCase&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;Compare &amp;lt;System.String&amp;gt;strA &amp;lt;System.Int32&amp;gt;indexA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Int32&amp;gt;indexB &amp;lt;System.Int32&amp;gt;length &lt;/P&gt;
&lt;P&gt;&amp;lt;System.Boolean&amp;gt;ignoreCase &amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;CompareOrdinal &amp;lt;System.String&amp;gt;strA &amp;lt;System.String&amp;gt;strB&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Int32&amp;gt;CompareOrdinal &amp;lt;System.String&amp;gt;strA &amp;lt;System.Int32&amp;gt;indexA &amp;lt;System.String&amp;gt;strB &amp;lt;System.Int32&amp;gt;indexB &lt;/P&gt;
&lt;P&gt;&amp;lt;System.Int32&amp;gt;length&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;CompareTo &amp;lt;System.Object&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;CompareTo &amp;lt;System.String&amp;gt;strB&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.Object&amp;gt;arg0&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.String[]&amp;gt;values&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.Object[]&amp;gt;args&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.Object&amp;gt;arg0 &amp;lt;System.Object&amp;gt;arg1&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.String&amp;gt;str0 &amp;lt;System.String&amp;gt;str1&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.String&amp;gt;str0 &amp;lt;System.String&amp;gt;str1 &amp;lt;System.String&amp;gt;str2&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.Object&amp;gt;arg0 &amp;lt;System.Object&amp;gt;arg1 &amp;lt;System.Object&amp;gt;arg2&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.String&amp;gt;str0 &amp;lt;System.String&amp;gt;str1 &amp;lt;System.String&amp;gt;str2 &amp;lt;System.String&amp;gt;str3&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Concat &amp;lt;System.Object&amp;gt;arg0 &amp;lt;System.Object&amp;gt;arg1 &amp;lt;System.Object&amp;gt;arg2 &amp;lt;System.Object&amp;gt;arg3&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;Contains &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Copy &amp;lt;System.String&amp;gt;str&lt;BR&gt;&amp;nbsp; .CopyTo &amp;lt;System.Int32&amp;gt;sourceIndex &amp;lt;System.Char[]&amp;gt;destination &amp;lt;System.Int32&amp;gt;destinationIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;EndsWith &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;EndsWith &amp;lt;System.String&amp;gt;value &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;EndsWith &amp;lt;System.String&amp;gt;value &amp;lt;System.Boolean&amp;gt;ignoreCase &amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;Equals &amp;lt;System.Object&amp;gt;obj&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;Equals &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Boolean&amp;gt;Equals &amp;lt;System.Object&amp;gt;objA &amp;lt;System.Object&amp;gt;objB&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Boolean&amp;gt;Equals &amp;lt;System.String&amp;gt;a &amp;lt;System.String&amp;gt;b&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;Equals &amp;lt;System.String&amp;gt;value &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Boolean&amp;gt;Equals &amp;lt;System.String&amp;gt;a &amp;lt;System.String&amp;gt;b &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Format &amp;lt;System.String&amp;gt;format &amp;lt;System.Object[]&amp;gt;args&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Format &amp;lt;System.String&amp;gt;format &amp;lt;System.Object&amp;gt;arg0&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Format &amp;lt;System.IFormatProvider&amp;gt;provider &amp;lt;System.String&amp;gt;format &amp;lt;System.Object[]&amp;gt;args&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Format &amp;lt;System.String&amp;gt;format &amp;lt;System.Object&amp;gt;arg0 &amp;lt;System.Object&amp;gt;arg1&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Format &amp;lt;System.String&amp;gt;format &amp;lt;System.Object&amp;gt;arg0 &amp;lt;System.Object&amp;gt;arg1 &amp;lt;System.Object&amp;gt;arg2&lt;BR&gt;&amp;nbsp; .&amp;lt;System.CharEnumerator&amp;gt;GetEnumerator()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;GetHashCode()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Type&amp;gt;GetType()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.TypeCode&amp;gt;GetTypeCode()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.Char&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.Char&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.Char&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOfAny &amp;lt;System.Char[]&amp;gt;anyOf&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOfAny &amp;lt;System.Char[]&amp;gt;anyOf &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;IndexOfAny &amp;lt;System.Char[]&amp;gt;anyOf &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Insert &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Intern &amp;lt;System.String&amp;gt;str&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;IsInterned &amp;lt;System.String&amp;gt;str&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;IsNormalized()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;IsNormalized &amp;lt;System.Text.NormalizationForm&amp;gt;normalizationForm&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Boolean&amp;gt;IsNullOrEmpty &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Join &amp;lt;System.String&amp;gt;separator &amp;lt;System.String[]&amp;gt;value&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.String&amp;gt;Join &amp;lt;System.String&amp;gt;separator &amp;lt;System.String[]&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.Char&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.Char&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.Char&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOf &amp;lt;System.String&amp;gt;value &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOfAny &amp;lt;System.Char[]&amp;gt;anyOf&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOfAny &amp;lt;System.Char[]&amp;gt;anyOf &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Int32&amp;gt;LastIndexOfAny &amp;lt;System.Char[]&amp;gt;anyOf &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Normalize()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Normalize &amp;lt;System.Text.NormalizationForm&amp;gt;normalizationForm&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;PadLeft &amp;lt;System.Int32&amp;gt;totalWidth&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;PadLeft &amp;lt;System.Int32&amp;gt;totalWidth &amp;lt;System.Char&amp;gt;paddingChar&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;PadRight &amp;lt;System.Int32&amp;gt;totalWidth&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;PadRight &amp;lt;System.Int32&amp;gt;totalWidth &amp;lt;System.Char&amp;gt;paddingChar&lt;BR&gt;&amp;nbsp; .[static]&amp;lt;System.Boolean&amp;gt;ReferenceEquals &amp;lt;System.Object&amp;gt;objA &amp;lt;System.Object&amp;gt;objB&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Remove &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Remove &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Replace &amp;lt;System.Char&amp;gt;oldChar &amp;lt;System.Char&amp;gt;newChar&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Replace &amp;lt;System.String&amp;gt;oldValue &amp;lt;System.String&amp;gt;newValue&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.String[]&amp;gt;separator &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator &amp;lt;System.Int32&amp;gt;count &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.String[]&amp;gt;separator &amp;lt;System.Int32&amp;gt;count &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;StartsWith &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;StartsWith &amp;lt;System.String&amp;gt;value &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;StartsWith &amp;lt;System.String&amp;gt;value &amp;lt;System.Boolean&amp;gt;ignoreCase &amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Substring &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Substring &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;length&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Char[]&amp;gt;ToCharArray()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Char[]&amp;gt;ToCharArray &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;length&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToLower()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToLower &amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToLowerInvariant()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToString()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToString &amp;lt;System.IFormatProvider&amp;gt;provider&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToUpper()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToUpper &amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;ToUpperInvariant()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Trim()&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Trim &amp;lt;System.Char[]&amp;gt;trimChars&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;TrimEnd &amp;lt;System.Char[]&amp;gt;trimChars&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;TrimStart &amp;lt;System.Char[]&amp;gt;trimChars&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;はい、System.Stringの全メソッドが列挙されました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;次は、S で始まるメソッドのみを列挙させてみます&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;BR&gt;&amp;nbsp;o1 = dotNetObject "System.String" "hello,world!"&amp;nbsp;-- System.String オブジェクトの生成&lt;BR&gt;&amp;nbsp;showMethods o1 "s*"&amp;nbsp;-- リスナーに結果を列挙&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.String[]&amp;gt;separator &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator &amp;lt;System.Int32&amp;gt;count&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.Char[]&amp;gt;separator &amp;lt;System.Int32&amp;gt;count &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String[]&amp;gt;Split &amp;lt;System.String[]&amp;gt;separator &amp;lt;System.Int32&amp;gt;count &amp;lt;System.StringSplitOptions&amp;gt;options&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;StartsWith &amp;lt;System.String&amp;gt;value&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;StartsWith &amp;lt;System.String&amp;gt;value &amp;lt;System.StringComparison&amp;gt;comparisonType&lt;BR&gt;&amp;nbsp; .&amp;lt;System.Boolean&amp;gt;StartsWith &amp;lt;System.String&amp;gt;value &amp;lt;System.Boolean&amp;gt;ignoreCase &amp;lt;System.Globalization.CultureInfo&amp;gt;culture&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Substring &amp;lt;System.Int32&amp;gt;startIndex&lt;BR&gt;&amp;nbsp; .&amp;lt;System.String&amp;gt;Substring &amp;lt;System.Int32&amp;gt;startIndex &amp;lt;System.Int32&amp;gt;length&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;.NET のオブジェクトを作成するのは非常に簡単ですね。&lt;/P&gt;
&lt;P&gt;dotNetObject のメソッドには以下のものが用意されています&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;getProperty&lt;/LI&gt;
&lt;LI&gt;setProperty&lt;/LI&gt;
&lt;LI&gt;getPropNames&lt;/LI&gt;
&lt;LI&gt;shoProperties&lt;/LI&gt;
&lt;LI&gt;showMethods&lt;/LI&gt;
&lt;LI&gt;showEvents&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;メソッド名を見ればどういう動作をするのかわかりますね。&lt;/P&gt;
&lt;P&gt;クラスのインスタンス方法がわかったので、次はロールアウトに.NETコントロールを配置してみたいと思います。&lt;/P&gt;
&lt;P&gt;つづく...&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/89826.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>keichan (keichan@wankuma.com)</dc:creator><title>オートデスク 3ds Max 2008（英語版）、Maya 2008 を発表</title><link>http://blogs.wankuma.com/keichan/archive/2007/08/08/89413.aspx</link><pubDate>Wed, 08 Aug 2007 13:55:00 GMT</pubDate><guid>http://blogs.wankuma.com/keichan/archive/2007/08/08/89413.aspx</guid><wfw:comment>http://blogs.wankuma.com/keichan/comments/89413.aspx</wfw:comment><comments>http://blogs.wankuma.com/keichan/archive/2007/08/08/89413.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/keichan/comments/commentRss/89413.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/keichan/services/trackbacks/89413.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.autodesk.co.jp/adsk/servlet/item?siteID=1169823&amp;id=9960770&amp;linkID=5965257"&gt;オートデスク、モデリング・アニメーション・レンダリングソフトウェア、3ds Max 2008（英語版）を発表&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.autodesk.co.jp/adsk/servlet/item?siteID=1169823&amp;id=9960634&amp;linkID=5965257"&gt;オートデスク、Autodesk Maya 2008 を発表&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;今お仕事で使っている 3ds Max のバージョンは 8 なんですが、次バージョンから年号表記に変わっちゃいました。&lt;/P&gt;
&lt;P&gt;Maya も年号表記に変わってますね。&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;&lt;B&gt;3ds Max 2008（英語版）新機能ハイライト&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;～大規模で複雑なシーンの表示、操作性を改善～&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;新しいビューポート技術と最適化により、万単位のオブジェクトで構成される大規模で複雑なシーンの操作性が向上しました。アーティストは、数千のオブジェクトを選択し、マテリアルを10倍以上の速さで割当てることができます。また、オブジェクトを60倍以上の速さで変形可能です。 
&lt;LI&gt;3ds Max 2008は、シーンデータの階層的な表示、迅速なシーン分析機能、編集ツールを提供するパワフルな新機能Scene Explorerを搭載します。この機能により、複雑でオブジェクトが重いシーンでの作業が促進されます。さらに、ユーザが設定するフレームレートに合わせて自動的に簡易化してシーンを表示し、ソフトウェアのインタラクティブ性を改善するAdaptive Degradation（アダプティブデグレイデイション）システムも搭載されています。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;～高速で容易なモデリングを実現する新機能～&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;モデリングの新しいユーザインタフェイスでは、メニューへの依存を低減するモデリング環境を選択できます。 
&lt;LI&gt;3ds Max 2008は、コンセプトアーティスト及びモデラーが制作工程に集中できるような効率性の高いモデリングワークフローを提供します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;～新しいReviewツールおよびmental ray&amp;#174;　ワークフローの強化～&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Reviewツールは、シャドウ、3ds Max sun/sky環境、アーキテクチュラル&amp;デザインマテリアル設定をインタラクティブにプレビューできる反復的なレンダリングワークフローを提供します。 
&lt;LI&gt;3ds Max 2008は、外光で室内シーンのライティングを作成する工程を簡素化し、HDRIベースのライティングエフェクトにも対応するmental ray Sky Portalなど、mental rayのワークフローについても強化されています。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;～複雑なワークフロー及びパイプラインを可能にする新ツールおよび強化点～&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;新しいMAXScript ProEditorが、3ds Maxを拡張およびカスタマイズするスクリプトの作成を容易にします。 
&lt;LI&gt;オートデスクの他のデザイン製品とのファイルリンク及び相互運用性の大幅改善により、3ds Maxへのデータインポートが、より高速かつ正確に行えるようになりました。さらに、Select Similarなどの新機能が、3ds Maxへ取り込まれたデータの作業を促進します。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;
&lt;HR id=null&gt;
&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;個人的にはMAXScript ProEditor がどれだけ使いやすくなっているのか超期待しています。&lt;/P&gt;
&lt;P&gt;今の標準で付いているScript Editorがへっこへこなので・・・&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/keichan/aggbug/89413.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>